日期:2008年8月6日 

 


一、引言

  车辆监控调度系统是ITS的一个重要应用,是集GPS技术、GIS技术和无线通信技术于一体的综合车辆管理系统。其原理是监控中心根据移动车辆的发送接收到的GPS定位信息,进行处理,利用GIS技术显示受监控车辆的位置,并能根据需要,对受控车辆进行调度,从而实现双向通信,车辆调度系统的合理利用可以在一定程度上缓解交通的压力,提高道路的利用率。

车辆监控调度系统可广泛应用于城市出租车、公交车、货运车、及其它特种车辆的定位、监控与运营调度,能极大提高车辆运输管理的效率和安全、本文详细地介绍了车辆监控调度系统的体系结构,主要功能和相关的软件开发技术。

  二、车辆监控调度系统组成与功能

  车辆监控调度系统由三部分组成,它们是车载终端、GSM通信网和监控中心,其中,车载终端由一台GPS接收机、一张SIM卡和一台LED显示屏构成,GPS接收机通过定位卫星,解算出车辆的三维坐标,速度等参数,GPS接收机中的通信模块通过SIM卡可以以短消息的方式将数据传回控制中心,同时GPS接收机中的通信模块也可以接收车辆监控系统中心发来的指令,车载终端将GPS定位信息通过无线网络上传到监控中心,监控中心通过无线网络将调度指令传送到车载终端,从而实现车辆的监控和调度。

由于GSM网支持数字语音兼容功能更适合与车辆监控调度系统,无须基本投资,车辆商可以通过商务谈判与电信商,采取包月付费等方式进行合作。在我国,GSM公用数字移动通信网是覆盖面最大,系统可靠性高,话机保有量大数字通信系统,利用GSM传输车辆定位数据及其它信息是一种经济、合理、有效地通信方式,它的使用,可充分发挥各系统业务服务的特点和资源优势,以最小投资和运营费用实现移动目标的定位、监控与调度。

  (一)本车辆监控调度系统具有以下功能

  1.地图显示功能。如全屏显示、多窗口监控、无极缩放、漫游。

  2.车辆定位动态显示及轨迹回放。实时接收移动车辆的定位数据,并将其通过坐标转换,由地理坐标变为屏幕坐标,在电子地图上以一定的符号显示出来,还可以选择某辆车台进行车辆历史轨迹回放。

  3.信息查询,可随时查询驾驶员的信息、车辆信息等。

  4.车辆监控。在了解各车辆位置的同时,如果必要,可启动侦听功能、断锁、断油动能。

  5.遇险报警。驾驶员在遇到险情后,可触动隐藏按钮,向控制中心报警。监控调度系统能以屏幕显示和声音提示管理人员。同时可以自动触发110。

  6.车辆调度。遇有报警车辆时,调度人员可以寻找目标附近指定距离内的车辆,并指挥营救,正常情况下,调度人员还可根据驾驶员的要求和交通拥挤程度,交通限制情况,指导机动车选择最佳路径。

  图1 车辆监控调度系统示意图

  (二)车载与监控调度中心的协议设计

  车载终端(以下简称车台)与监控调度控制中心(以下简称中心)之间的通信协议是不定长格式,车台发给中心叫上发,中心向车台发送信息叫下发。中心下发的信息需要车台进行确认。

  本系统采用PDU模式,一条发出的短信息必须包括以下字段:服务中心地址和类别、PDU类别、发送者和接收者代码和类别、协议识别码,数据编码方式、短消息保存期、数据长度、原始数据等。为了提高传输准确性,还需要对上述数据进行特殊格式处理,同时为加大一条短信息的有效数据传送量,可对原始数据进行压缩处理。

  采用pdu格式传送,帧头为@@GG(下称GPS包),一条信息包括帧头、保留位、帧序列号、用户ID、协议号、信息内容长度、信息内容、校验字、结束符。除了信息内容可以为空以外,其它各部分均不能省略,且前后位置也不可改变。

  此系统中所有的传输,不论传送数据还是命令,均通过GPS包来传送,这是唯一合法的可识别的信息传送格式。命令和数据以及是何种命令或数据通过协议号加以区别。它们的前后位次和占用字节长度见图2:

图2 基于短消息的通信协议

  1.帧头。占用四个字节,表明信息的开始。以@@GG表示。只有正确接收到帧头以后,才开始接受后续数据,否则,不予理睬。

  2.保留位。占用2个字节,留作系统以后升级使用,等于0时表示未定义。

  3.帧序列号。占用2个字节,这是发送信息的序列号,用于接收方检测是否有信息的丢失。中心和车台各自按自己发送GPS包的个数计数,互不影响。车台在上电后此数复位等于零,如果不断电此数不复位为零,发送第一帧数据时便开始计数,所有数据帧和命令帧统一计数。

  4.协议号。占用1个字节,用于区分命令和数据以及命令和数据的种类。协议号在0x00~0x0F区间内保留,0x10~0x2F之间用于车台上发数据,0x30~0x7F区间用于中心下发命令,0x80~0xFF用于透明传输。协议号的具体定义如下,未定义的数值为保留数值,为后续开发留有扩展空间。图3为协议号的区间分配。

图3 协议号划分及定义

  5.信息内容长度。占用1个字节,定义为信息内容的长度,从信息内容的第一个字节开始,到信息内容的最后一个字节结束。

  6.信息内容。占用0至120之间的任意长度字节,不定长。待传送的信息内容长度可以等于零,即发送一个空帧,最长不得超过120个字节。

  7.校验字。占用2个字节,采用和校验的方式,从帧头开始逐个字节相加,到校验字的前一个字节结束。校验和的计算方法:

(1)把校验和的值初始化为零;

  (2)加GPS包的第一个字节,加GPS包的第二个字节……加到校验字的前一个字节;

  (3)这个累加和就是所需要的校验字,将高位放到前一个字节,地位放到后一个字节;

  (4)校验字本身和结束符不计入校验。

  8.结束符。占用2个字节,表示一帧信息的结束,定义为0x0D,0x0A。

  三、车辆监控调度系统开发

  在控制中心,显示车辆位置所需的空间数据及其相关属性数据由GIS进行组织管理,GIS 是存储、管理、分析地理信息的有效技术,可以认为车辆监控系统是GIS的二次开发成果,因此选择合适的GIS基础平台,也是开发的关键,本监控系统采用delphi 7+MapX 组件作为GIS平台,并使用Mi?鄄crosoft Access 2000数据库组织和管理属性数据, 通信组件和GPS接收,调度等相关组件用visual c++ 6.0开发,生成基于COM的动态连接库供delphi调用,由于本系统要求有较高的处理计算能力,因此采用Visual c++开发通信模块,基于COM模式,开发出通信动态连接库。而用户界面用borland Delphi 7 开发。如图4所示:

图4:车辆监控调度系统软件开发平台架构

  (一)无线通信动态连接库的开发

  本系统采用串口通信机制,用Visual C++ 6.0开发相应的接口,如初始化串口,呼叫车辆接口,发送命令接口、短消息发送等接口。当计算机收到车载传来的数据或发出的指令时,都会触发相应的事件。车载移动单元发出的短信息原始数据有以下信息:车辆定位编号、车辆状态、及时间、经纬度、速度、航向、校验码等信息。

  该动态链接库用Visual C++开发出各种监控调度系统软件的接口,它可充分利用COM组件的面向对象特性, 该动态连接库基于多线程机制和消息队列实现。从而提高系统的响应速度。当监控调度软件在串口收到数据后,会触发事件,如处理接收到的GPS数据包,或者下达调度指令。 各流程如图5所示:

下面为利用COM进行设计的一个接口函数的示范性代码,它的功能是实现车辆调度,采用标准的组件技术开发。

STDMETHODIMP BJTU::CallMobil(long nDevNo, BSTR bsSim, long CallTime, long CallNum, long CallLong, long *ret)
{ 
struct ShortMsg sms;
memset(&sms,0,sizeof(sms));
sms。nCmd=CMD_CALL; //车辆监控
sms。nCoding =0;
*ret=0;
_bstr_t temp=bsSim;
char * strSim=temp;
if(strlen(strSim)!=11 ){
SetErrorInfo("手机号长度必须为11位"); return false;
}
sprintf(sms。sim,"%s",strSim); 
if(CallTime==0 && CallNum==0 && CallLong==0){
sprintf(sms。msg,"&#CALL 0");
sms。nType=TYPE_STOP; //取消
} else if(CallTime==0 && CallNum>0){ //呼叫失败
SetErrorInfo("时间或次数参数错误");
return false;
} else if(CallTime>0 && CallNum>0){ //定次
sms。nType=TYPE_ORDER; //定次
CallTime=CallTime/10;
if (CallTime<=0 )
CallTime=1;
sprintf(sms。msg,"&#CALL 3 %d %d",CallNum,Call?鄄Time);
} 
// 省略部分代码
sms。len=strlen(sms。msg);
if(SubmitSm(nDevNo,sms)){
*ret=1; return S_OK;
} else {
SetErrorInfo("该串口上的通讯设备还没有初始化"); return false;
} return S_OK;
  }

(二)应用系统的开发

  由于Borland Delphi 7 具有很强的界面设计能力,我们采用它作为用户界面的开发工具,利用第三方提供的GIS组件和上面用Visual c++ 6.0开发的动态连接库,从而加速了程序的开发。

以下是部分Delphi的代码,演示Delphi 调用Visual c++ 生成的Com组件中CallMobil和更新Access数据库的如表Cars等一段代码:

//呼叫车辆
  procedure TFrmCall。btnOkClick(Sender: TObject);
  var
nNum,nTime,i,ret,nLong:integer;
pInfo:PCarInfo;
strSql:string;{0 : 初始状态 1:命令发送中 2:呼叫成功 3:位置查询成功}
  begin
nNum:=0; nTime:=0; nLong:=0;
if mCallType=1 then //车辆跟踪
begin
//获取界面参数 , 省略部分代码
for i:=0 to (listCar。Count-1) do
begin
if listCar。Checked[i] then
begin
pInfo:=CarList。Items[i];
  if mCallType=1 then
  //调用动态连接库接口CallMobil
ret:=MainForm。xtGps。CallMobil(pInfo。nComNum,pInfo。strSim,nTime,nNum,nLong)
else
ret:=MainForm。xtGps。CallMobil(pInfo。nComNum,pInfo。strSim,0,0,0); //取消呼叫
if ret=0 then
begin Application。MessageBox(MainForm。xtGps。Get?鄄LastErrorInfo(),PAnsiChar(pInfo。strLicense),MB_OK);
exit;
  end else
  begin 
try {更新数据库,将车辆状态该为命令发送中}
// 获得相关参数,省略部分代码
strSql:='insert into log_Call (car_id,cmd_id,cmd_type,para_time,para_number) values (';
if mCallType=1 then
begin strSql:=strSql+IntToStr(pInfo。nCarId)+',4,1,'+IntToStr(nTime)+','+IntToStr(nNum)+')'
//异常处理 省略部分代码
end 
db。Execute;
except 
Application。MessageBox('fail update data car ',PAn?鄄siChar(pInfo。strLicense),MB_OK);
exit;
//一序列end语句,省略部分代码
self。Close; end;

图6是车辆监控调度系统的运行主界面

  四、结语

  通过实验和测试,该系统运行稳定,该软件通过基于短信息进行监控,各项功能都取得较好的效果, 并且性能价格比较高,适合中下企业运输和物流公司采用。当然,系统还有一些需要进一步研究的问题,如新功能的增加,丰富的地理信息系统的属性数据,最好能与各厂商大型GIS软件服务器集成。 我们有理由相信,车辆监控调度系统具有广阔的应用前景,随着ITS技术的逐渐应用与推广,道路通信等基础设施的日益完善,车辆监控调度系统的作用将日益显著。