公路运输车辆动态称重检测
管理系统的软件实现
王 宁 江苏省镇江市公路管理处 江苏镇江 212028
刘 健 南京苏河电子科技有限责任公司 江苏南京 210019
【文章摘要】
本文提出了一种对快速行驶的车辆的重量信息及车牌信息进行采集并匹配,上传,存储,超限判别,报警的软件实现方案。
【关键词】
动态称重检测;超限;通讯协议; XML ;SQL
0 引言
车辆超限运输对公路破坏严重,为了快速有效判别超限车辆,可以在公路上安装动态称重检测管理系统,对运输车辆在行驶过程中进行检测及超限判别。系统对车辆数据进行采集,并对超限车辆报警, 提示执法人员拦截处理;系统可以将车辆数据完整保存供查询汇总统计。本文描述了动态称重检测管理系统的软件实现。
1 系统功能需求描述
(1)重量数据的采集
(2)车辆图片及车牌号的采集
(3)重量与图片的匹配
(4)车辆完整数据的保存及上传(上传到服务器数据库)
(5)判别超限车辆并实时报警
(6)车辆数据的查看及汇总统计
2 超限车辆判别标准
先算出标准重量(单位取公斤),标准重量算法为min( 轴数*10000,55000), min 表示两个值中取较小值,如果车货总重大于标准重量,认为车辆超限,否则认为不超限。
2 软件架构设计(图1)
4 软件主要接口、算法、流程、存储的设计及关键代码
4.1 重量采集控制器与匹配软件之间的接口设计
用C++ 开发的通用的侦听代码为:
UINT ThreadListen(LPVOID pv)
{
S O C K E T g _ s o c k e t = s o c k e t ( A F _ INET,SOCK_STREAM,0);
if(g_socket!=INVALID_SOCKET)
{
SOCKADDR_IN addr={0};
addr.sin_family=AF_INET;
addr.sin_port=htons(6601);
addr.sin_addr.S_un.S_addr=0;
if(0==bind(g_socket,(LPSOCKADDR)& addr,sizeof(addr))){
if(0==listen(g_socket,5)){
while(1){
SOCKADDR_IN clientSockAddr;
SOCKET clientSocket;
int addrLen=sizeof(SOCKADDR_IN);
clientSocket=accept(g_socket,(LPSOCK ADDR)&clientSockAddr,&addrLen);
if(clientSocket!=INVALID_SOCKET){
AfxBeginThread(ThreadTalk,(LPVO ID)clientSocket,THREAD_PRIORITY_ NORMAL,0,0,0);
}}}}}
return 0;
}
当发送端有数据发送时,服务端启动一个新线程ThreadTalk,在新线程中进行会话。
4.2 车牌识别摄相机与匹配软件之间的接口设计
4.3 匹配算法设计
将重量信息和车图信息各以一个队列保存,创建一个定时器,定时遍历重量队列,匹配重量信息及车图信息,将匹配好的信息保存。
int iTime1=GetPrivateProfileInt("set"," Time1",1000,gGetAppConfig().c_str());
if(iTime1<1000) iTime1=1000;
int iTime2=GetPrivateProfileInt("set"," Time2",1000,gGetAppConfig().c_str());
if(iTime2<1000) iTime2=1000;
TDateTime dtNow=Now();
图1
表1055