首页>>科技 >>内容

车辆GPS定位监控系统实现车辆位置和状态的监控和调度管理

发布时间:2023-08-29 19:02:09编辑:温柔的背包来源:

很多朋友对车辆GPS定位监控系统实现车辆位置和状态的监控和调度管理不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

车辆GPS定位监控系统实现车辆位置和状态的监控和调度管理

介绍

随着汽车在日常生产生活中发挥的作用日益凸显,如何实现对各类车辆的有效指挥、协调控制和管理已成为交通运输和安全管理部门面临的重要问题。为了满足提高运输效率和安全保障的需要,对车辆位置监控系统的研究变得越来越紧迫。

车载GPS定位监控系统是融合GSM全球数字蜂窝移动通信技术、GIS地理信息技术、GPS全球卫星定位技术和计算机网络技术而开发的软件技术。它通过安装在车辆(即车载机)上的GPS接收器接收卫星信号,监控中心的通信控制器从GPS接收器输出的信号中提取所需的位置、速度和时间信息,并结合车辆身份等信息形成数据报,然后通过无线通道发送到控制中心;控制中心主站接收分站发送的数据,处理接收信息并通过短信依次直接发送给各车载机。最后,车辆的具体数据和状态显示在监控中心的电子地图上。

本文讨论从接收器输出的信号中提取所需位置、速度和时间信息的方法,以及中心处理信息后发送命令集的实现过程。

GPS车辆通信协议

车载机与监控中心的通信采用中心发送命令、车载机响应的方式进行。因此,我们对车载机GPS信号的分析和处理必须按照车载GPS接收机与监控中心之间的通信协议进行。以下是GPS车辆通信协议的一部分。

车机返回信息

一般信息:

*XX、YYYYYYYYYY、V1、HHMMSS、S、纬度、D、经度、G、速度、方向、DDMMYY、车辆状态#

确认信息:

*XX, YYYYYYYYYY, V4, CMD, hhmmss, HHMMSS, S, 纬度, D, 经度, G, 速度, 方向, DDM MYY, 车辆状态#

区分一般信息和确认信息的方法是看车载设备返回的信息中是否包含“V4”,判断返回信息是否有效的方法是看返回的信息中是否包含“HQ” (生产商名称)”。

其中:‘*’表示命令头; “XX”表示制造商名称; ','表示分隔符; ‘YYYYYYYYYY’表示机载机器的序列号; ‘CMD’表示确认的中央命令; 'hhmmss'表示确认命令中的时间值; “HHMMSS”是指车辆的时间; 's'表示数据的有效位; “纬度”是指纬度; “D”表示纬度标记; “经度”是指经度; “G”表示经度标记; 'speed' 表示速度; ‘direction’表示方位角; 'D D M M Y Y' 表示日/月/年; “vehicle_status”表示车辆状态。

车机返回GPS信息有两种方式,一种是返回最新的有效GPS信息;另一种是返回最新的有效GPS信息。二是返回最新的GPS信息。

中心发送命令结构及命令集

通信软件的设计与实现

GPS信号与监控中心的通信大致分为两个步骤:一是GPS接收器(即车载机)接收卫星信号,监控中心的通信控制器提取所需的位置和信息。速度来自GPS 接收器输出的信号。以及时间和其他数据信息;二是监控中心将分析后的数据信息通过短信发送给各车载机。具体步骤如下:

函数IsValidMsg (Str: String): Boolean; {判断消息是否有效}

函数IsConfgMsg(str: String): 布尔值; {区分一般信息和确认信息}

过程ResoleGprsV(RecvGprs: String); {处理接受的消息}

过程ResoleGprsV1(RecvGprs: String); {处理一般信息(V1)}

过程ResoleGprsV4(RecvGprs:字符串); {处理确认信息(V4)}

函数Direc(sr: String): String; {车辆行驶方向}

函数HexCng(Rhex: String): String; {十六进制数转换为二进制数}

函数HandleCarStatus(ArrBin: 字符串数组): 字符串; {处理车辆状态}

函数ChangeTel(sTel: String): String; {} 函数StrToHex(sStr: String): String;

procedure SendSms(Tel, Other: String; iCmdID, iSendType: Integer;

CarID: String=") {中央发送命令集}

根据车载机接收到的GPS信号判断返回的信息是否有效,如果无效则直接丢弃,如果有效则确认是一般信息还是确定信息,然后一般信息或明确信息将被接收和处理。

一般信息和确认信息的区别是根据参数串中是否包含“V4”来区分的。

结果:=假; {初始返回结果}

结果:=pos('V4', Str)》0; {如果str 包含“V4”则返回true,否则返回false}

判断是否返回有效信息的依据是参数字符串中是否包含“*HQ”。

结果:=假; {初始返回结果}

结果:=pos('*HQ', Str)》0; {如果str 包含“*HQ”则返回true,否则返回false}

一般信息的标志是V1。车辆返回的一般信息中包含的参数包括车辆序列号、手机号码、车牌号、时间、纬度、速度、方位、日期。

获取车辆序列号(同样方法可以获取手机号、车牌号、时间)

sCarNo:=复制(RecvGprs,iPos+4,10);

获取纬度(同样的方法可以获取经度)

sLatitude:=copy(RecvGprs,iPos+3,9);

sLatitude:=FloatToStr(StrToFloat(复制(sLatitude,1,2))+StrToFloat(复制(sLatitude,3,7))/60);

获取南纬和北纬(同样的方法可以获取东经和西经)

iPos:=pos(',S,',RecvGprs); {找到RecvGprs中“,S,”的位置}

若iPos》0 则; (如果RecvGprs包含',S',则执行以下语句}

sNS :='南纬'

否则开始

iPos:=pos(',N,',RecvGprs); {找到RecvGprs中“,N,”的位置}

sNS :='北纬';

结尾;

获取速度、方位、日期

sSpeed:=复制(RecvGprs, iPos+3, 6); {获取速度}

sDirection:=copy(RecvGprs,iPos+10,3);(获取方向}

sDate:=复制(RecvGprs,iPos+14,6); {获取日期}

if Pos('.', sSpeed)"=0 then {判断sSpeed是否包含'.',如果包含则执行下面语句}

开始

sSpeed:=复制(RecvGprs, iPos+3, 3); {获取速度}

sDirection:=复制(RecvGprs, iPos+7, 3); { 得到

采取方位}

sDate:=复制(RecvGprs,iPos+11,6); {获取日期}

结尾;

数据转换

sSpeed:=FormatFloat('0.00', StrToFloat(sSpeed)*1.852); {行驶速度换算}

sSecond :=复制(sTime, 5, 2); {时间换算}

if StrToInt(sSceond)"60 then {时间转换('YYYY-MM-DD HH:MM:SS'表示为:年、月、日、时、分、秒)

sDate:=FormatDateTime('YYYY-MM-DDHH:MM:SS', IncHour(StrToDateTime('20'+copy(sDate,5,2)+'-'+copy(sDate,3,2)+'-' +复制(sDate,1,2)+' '+复制(sTime,1,2)+':'+复制(sTime,3,2)+':'+复制(sTime,5,2)),8 ))

否则开始

sDate:=FormatDateTime('YYYY-MM-DDHH:MM:SS', IncHour(StrToDateTime('20'+copy(sDate,5,2)+'-'+copy(sDate,3,2)+'-' +copy(sDate,1,2)+' ' +copy(sTime,1,2)+':'+copy(sTime,3,2)+':'+'00'),8));

sDate:=FormatDateTime('YYYY-MM-DD HH:MM:SS',

IncMinute(StrToDateTime(sDate), +1));

结尾;

确认消息的符号为V4。车辆返回的确认信息包括车辆的行驶位置和车辆状态。

对通用信息中获得的方位信息进行处理,将字符类型转换为整数数据,根据数据的范围确定车辆的行驶方位。如果小于22.5或大于337.5,则为正北,如果大于22.5且小于67.5,则为东北,如果大于67.5且小于112.5,则为正东,以此类推确认车辆的行驶方向。

对通用信息中获取的车辆状态进行处理,将字符类型转换为二进制数字串,将二进制数据的每一位存储到数组中,每一位对应表1中的车辆状态。

获取车辆状态

iPos:=Pos('#', RecvGprs);

sCarStatus:=复制(RecvGprs,iPos-8,8)

转换为二进制字符串

sBin:=“;

forI:=1 到8 做

sBin:=sBin+HexCng(复制(sCarStatus,I,1));

将二进制数据的每一位存储到数组中

forI:=0 到3l 做

ArrBin[i]:=copy(sBin, i+1, 1);

sCarStatuText :=HandleCarStatus(ArrBin); {车辆状态}

监控中心根据各车载机返回的信息内容发送不同的命令。发送命令程序必须严格按照中心发送命令集规定的格式编写,下面列出其中的几个命令:

该指令要求车载设备以sInterval 为时间间隔返回sCount 次定位信息。

sRightStr:='*HQ,0000000000,D1,'+sTime+','+sInterval+','+sCount+'#'

车载机收到该命令后将清除所有报警信息。

sRightStr:='*HQ,0000000000,R7,'+sTime+'#';

if Application.MessageBox(PChar('是否确实要解除车辆['十个CarID+']上的警报?'), '提示', MB_YESNO+MB_DEFBUTTON2)=IDNO then Exit;

这里的CarID是指车辆的序列号。

车载机收到此命令后将开始切断燃油和电源。

sRightStr:='*HQ,0000000000,S20,'+sTime+',1,3,10,3,5,5#';

if Application.MessageBox(PChar('您真的要切断车辆的燃油和电源吗['+CarID+']?'), '提醒', MB_YESNO+MB_DEFBUTTON2)=IDNO then Exit;

结语

目前,车载GPS定位监控系统已被各运输公司应用在出租车、公交车和大型车队中。该软件技术实现了对车辆位置和状态的监控和调度管理。

随着GPS应用领域的扩大,车载GPS导航定位监控软件系统的功能也将随着导航、通信的需要而不断增加和完善。 GPS车载通信协议将根据GPS车载产品的功能升级而不断升级。会增加新的命令,新的命令会添加到相应的软件系统中。该系统的设计将方便这些升级和维护工作。

以上知识分享希望能够帮助到大家!