DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1253|回复: 0
打印 上一主题 下一主题

[待整理] 基于VC++的汽车动态称重系统软件设计与实现

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 21:18:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
0 引 言

随着我国经济的发展,作为国家经济命脉的公路运输量也急剧增加,而超重车辆所占的比例也与日俱增,这已对交通安全和公路寿命造成了严重威胁。在此情况下,由于传统的静态称重存在效率低,占地面积大,移动不方便等缺点,已不能满足发展的需要。于是车辆行驶称重技术(Weigh in Motion,WIM)作为一种智能称重技术已得到了广泛研究和迅速发展。动态称重系统研发面临的主要问题是怎样在保持高精度的情况下,提高车辆通过的速度并降低成本。解决方法有两个,一是引进国外成套设备;二是自主研发。其中,引进国外设备,因价格昂贵,维护不便等诸多因素,不能广泛应用;国内对于动态称重系统的研究和生产较国外稍晚,但发展迅速并日趋成熟。目前,国内较为流行的是轴重测量,即分别测出车辆各轴的轴重,再由称重系统计算出整车重量。整个系统由传感器、数据采集卡、应用软件、数据库系统以及微处理器、LCD和打印机等组成。本文针对动态称重系统中数据采集、分析、处理、显示、保存等环节的特点,采用面向对象的设计思想,在VC++平台下研发动态称重系统应用软件,该软件具有实用性、可复用性、易扩充及易维护等特点。

1 误差分析及处理

 动态称重系统的误差来源包括动态因素和静态因素。动态因素主要有汽车自身的振动、称重区路面的不平整,汽车经过此区的速度及加速度。静态因素主要体现在客观环境的变化和硬件自身问题,如:当时系统所处温度、传感器是否运行良好,模/数转换的分辨率等。误差的来源决定误差的处理方式。一方面通过对检测硬件条件和检测方式的设定避免产生不必要的误差,另一方面通过良好的数据处理方法提高软件处理数据的精度,目前主要有以下几种方法:ADV法、DV法、V法、位移积分法、补偿法、专家系统、参数估计法、神经网络。在动态称重系统中滤波方法主要有:有限幅滤波、中值滤波、算术平均值、滑动平均、加权平均滤波、复合滤波等方法。本软件采用滑动加权平均滤波,即设一个数据缓冲区依顺序存放N次采样数据,每采进一个新数据,就将最先采集的数据丢掉,而后求包括新数据在内的 N个数据的加权平均值,便得到该次采样的有效数据。

其中:

式中:Xn为第n次采样经滤波后的输出;Xn-i为未经滤波的第n-i次采样值;N为滑动平均项数;Ci为加权。

2 应用软件的整体设计

2.1 系统结构与主要模块


本系统基于C/S三层架构,用户接口层采用友好的GUI界面,主要是用户相关操作的实现以及数据显示;业务逻辑层进行模块化的设计,包括参数设置、数据采集、传输和处理;数据库服务器层对数据库的操作进行封装,主要完成数据的保存与维护。整个软件功能模块图如图1所示,包含了数据传输、数据处理、输入/输出、数据显示等四大模块。以信号的处理与显示为核心,信号的流向如图2所示,首先在称重区不断得到重力传感器所采集的电压信号,进行滤波、放大、A/D转换,并将所采集的数据根据上位机系统初始化形式,以串口或者网络通信的方式传输,上位机对所接收的数据进行判断后,予以滤波、运算、存储、显示,并将所得出的结果以委决书或发票回馈于车主。

2.2 类图

通过此类图完整显示本汽车动态称重系统软件的内部静态结构,如图3所示。其中,CDatabase,CDis- pose,CDisplay,CTransport,CPrint,CQuery,CMotion-Line,CStaticLine分别表示数据库连接类、数据处理类、数据显示类、通信类、报表打印类、查询类、动态曲线和静态曲线类。数据处理类对数据传输类具有依赖性。



3 软件实现

3.1 传输实现


工控系统的数据通信一般以串口为主,但由于串口通信只能用于短距离通信,网络通信也得到了一定的应用。本系统在通用性的前提下实现串口和网络通信两种方式。考虑到汽车动态称重系统对数据的实时性、可靠性要求,通过对通信类采用多线程封装,实现主动发送串口和网络监听的实时数据采集,提高实时数据传输效率。用到的线程函数有两个,一个是监听线程函数UINT ListenThread(LPVOID pParam),另一个是读数据线程UINT ReadTread(LPVOID pParam)。由于本系统对同一串口的不同时读写,所以不存在同步操作,监听线程在后台通过对WaitCommEvent事件的监听调用,读取线程完成下位机数据的接收。

3.2 数据处理实现

由于动态称重过程中存在大量的动态干扰因素,易造成传输模块所传数据存在较大误差,所以首先选择算法对接收数据滤波进行预处理,然后进行标度转换。数值计算求出轴重,而滤波是这部分的核心,下面给出加权滑动平均滤波的主要实现代码:

3.3 数据显示

显示模块主要完成三方面内容:采集所得实时数据的动态曲线显示,经过处理后数据的静态曲线显示及整个软件的界面显示。动态曲线和静态曲线分别继承类 CDisplay,该类以虚函数的形式只提供接口,并未具体实现;子类在继承后根据自己的实际情况分别实现。显示类的设计如下:

通过对CDrawItem类的封装使软件界面的显示以Windows系统为标准,坚持置用户与控制之下,减少用户记忆负担,保持界面一致的原则。

3.4 数据库类的设计

完成数据传输、处理以后,要对所得数据进行存储,以便查询、统计。通过对数据库访问技术的比较发现,ADO数据库访问技术具有易于使用,速度快,内存支出少等优点。本系统选择以MFC为基础,对其三个主要对象Connection,Command,Recordset的属性和方法进行封装,并命名为 CWIMDataBase类。在任何要用到数据库操作之处只需加入其头文件“CWimData-Base.h”并声明对象,则调用其公共属性和方法即可进行数据库操作。

如:利用m_WimDb对象调用函数ConnectDb连接数据库。

4 结 语

针对目前主流动态称重系统硬件结构以及数据处理过程的特征,本应用软件采用面向对象的程序设计方法进行设计并予以实现,充分利用了面向对象中的继承、封装及多态等特点,实现了软件的模块化,达到了模块之间高内聚、低耦合。应用测试表明,该软件具有实用性、可复用性、易扩充、易维护且界面友好,符合实际的应用需要。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-26 10:08 , 耗时 0.084854 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表