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

类别:最新资讯 时间:2018-03-21 点击:68 次

根据目前主流的动态称重硬件结构,结合国内汽车称重的应用实际,采用面向对象的程序设计思想设计并实现 了汽车动态称重系统软件,对系统测量误差进行了分析,并介绍了相应的处理方法,重点讨论并解决了系统模块化设计的关 键技术,使系统复用性高,易扩展、易使用。
0.引言
随着我国经济的发展,作为国家经济命脉的公路运 输量也急剧增加,而超重车辆所占的比例也与日倶增, 这已对交通安全和公路寿命造成了严重威胁。在此情 况下,由于传统的静态称重存在效率低,占地面积大,移 动不方便等缺点⑴,已不能满足发展的需要。于是车辆 行驶称重技术(Weigh in Motion,WIM)作为一种智 能称重技术已得到了广泛研究和迅速发展。动态称重 系统研发面临的主要问题是怎样在保持高精度的情况 下,提高车辆通过的速度并降低成本。解决方法有两 个,一是引进国外成套设备;二是自主研发。其中,引进 国夕卜设备,因价格昂贵,维护不便等诸多因素,不能广泛 应用;国内对于动态称重系统的研究和生产较国外稍 晚,但发展迅速并日趋成熟。目前,国内较为流行的是 轴重测量,即分别测出车辆各轴的轴重,再由称重系统 计算出整车重量。整个系统由传感器、数据采集卡、 应用软件、数据库系统以及微处理器、CD和打印机等 组成。本文针对动态称重系统中数据采集、分析、处理、 显示、保存等环节的特点,采用面向对象的设计思想,在VC+ +平台下研发动态称重系统应用软件,该软件具有 实用性、可复用性、易扩充及易维护等特点。
1.误差分析及处理
动态称重系统的误差来源包括动态因素和静态因 素。动态因素主要有汽车自身的振动、称重区路面的不 平整,汽车经过此区的速度及加速度。静态因素主要体 现在客观环境的变化和硬件自身问题,如:当时系统所 处温度、传感器是否运行良好,模/数转换的分辨率等。
误差的来源决定误差的处理方式。一方面通过对 检测硬件条件和检测方式的设定避免产生不必要的误 差,另一方面通过良好的数据处理方法提高软件处理数 据的精度,目前主要有以下几种方法:ADV法、DV法、 V法、位移积分法、补偿法、专家系统、参数估计法、神 经网络。在动态称重系统中滤波方法主要有:有限幅滤 波、中值滤波、算术平均值、滑动平均、加权平均滤波、复 合滤波等方法。本软件采用滑动加权平均滤波,即设 一个数据缓冲区依顺序存放N次采样数据,每采进 一个新数据,就将最先采集的数据丢掉,而后求包括新 数据在内的N个数据的加权平均值,便得到该次采样 的有效数据。



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

通过此类图完整显示本汽车动态称重系统软件的 内部静态结构,如图3所示。其中,CDatabase , CDis- pose ,CDisplay ,CTransport ,CPrint ,CQuery ,CMotion- Line ,CStaticLine分别表示数据库连接类、数据处理 类、数据显示类、通信类、报表打印类、查询类、动态曲线 和静态曲线类。数据处理类对数据传输类具有依赖性。
3.软件实现
3.1传输实现
工控系统的数据通信一般以串口为主,但由于串口 通信只能用于短距离通信,网络通信也得到了一定的应 用。本系统在通用性的前提下实现串口和网络通信两 种方式。考虑到汽车动态称重系统对数据的实时性、可 靠性要求,通过对通信类采用多线程封装,实现主动发 送串口和网络监听的实时数据采集,提高实时数据传输 效率。用到的线程函数有两个,一个是监听线程函数 UINT ListenThread (LPVOID pParam),另一个是读 数据线程 UINT Read Tread (LPVOID pParam)。由于 本系统对同一串口的不同时读写,所以不存在同步操 作,监听线程在后台通过对WaitCommEvent事件的监 听调用,读取线程完成下位机数据的接收。

3.2数据处理实现
由于动态称重过程中存在大量的动态干扰因素,易 造成传输模块所传数据存在较大误差,所以首先选择算 法对接收数据滤波进行预处理,然后进行标度转换。数 值计算求出轴重,而滤波是这部分的核心,下面给出加 权滑动平均滤波的主要实现代码:
float averagefitter(int a[] ,int b[] ,int size)
{int sum = 0 ;float x = 0 ;int i = 1 ; for( ;i < size ; + +i)
{
if(a[i- 1] >a[i]) //判断加权系数是否满足条件 { sum + = a[i ]; return sum ;el se
{AfxMessageBox("Error"); break ; }
if(sum= = 1) / /加权系数的和是否为1
x + = 1/i *a[i] *b[i];
II size个数据的加权平均值,得到该次采样的有效数据
}
return x;
}
3.3 数据显示
显示模块主要完成三方面内容:采集所得实时数据 的动态曲线显示,经过处理后数据的静态曲线显示及整 个软件的界面显示。动态曲线和静态曲线分别继承类 CDisplay,该类以虚函数的形式只提供接口,并未具体 实现;子类在继承后根据自己的实际情况分别实现。显 示类的设计如下:
class CDi splay :public CWnd{
Private:
CDC m MemDC ; 11 创建兼容 DC
CBitmap m Bitmap; 11 位图对象
Public :
virtual void Set Range (U IN T nLower,UINT nUpper);
ii设置矩形区域
virtual void DrawGrid(CRect * rcIn = NULL) ; 11 绘制网格 virtual void DrawCurve() ; 11 绘制曲线
}
通过对CDrawItem类的封装使软件界面的显示以 Windows系统为标准,坚持置用户与控制之下,减少用 户记忆负担,保持界面一致的原则。
3.4数据库类的设计
完成数据传输、处理以后,要对所得数据进行存储, 以便查询、统计。通过对数据库访问技术的比较发现, ADO数据库访问技术具有易于使用,速度快,内存支出 少等优点。本系统选择以MFC为基础,对其三个主要 对象 Connection,Command,Recordset 的属性和方法 进行封装,并命名为CWimDataBase类。在任何要用 到数据库操作之处只需加入其头文件“ CWimData- Base. h”并声明对象,则调用其公共属性和方法即可进 行数据库操作。
如:利用m WimDb对象调用函数ConnectDb连 接数据库。
CWimDataBase m WimDb; 11声明对象
If (m WimDb. ConnectDb()) {
II调用函数ConnectDb连接数据库
m Conn = m WimDb. GetConn();
}
el se{
CString strComError;
strComError. Format("错误编号:%08lx\ n 错误信息:%s\ n 错误源:%s\ n 错误描述:%s〃,e. Error (),e. ErrorMessage (), (LPCSTR)e. Source(),(LPCSTR)e. Description());
AfxMessageBox (NULL,strComError,"错误",MB ICON EXCLA MA T ION); return false;
}
4.结语
针对目前主流动态称重系统硬件结构以及数据处 理过程的特征,本应用软件采用面向对象的程序设计方 法进行设计并予以实现,充分利用了面向对象中的继 承、封装及多态等特点,实现了软件的模块化,达到了模 块之间高内聚、低耦合。应用测试表明,该软件具有实 用性、可复用性、易扩充、易维护且界面友好,符合实际 的应用需要。
 
 

中国领先的称重软件技术提供商

The Leading Provider of Geomatic Solutions in China

展开收起网站地图