通信软件的设计与实现
GPS信号与监控中心之间的通信大致分成两个步骤:一是GPS接收机(即车载机)接收卫星信号,监控中心的通信控制器从GPS接收机输出的信号中提取所需要的位置、速度和时间等数据信息;二是监控中心将分析出的数据信息通过短消息的方式发送命令给每一台车载机。具体步骤如下:
function IsValidMsg(Str: String): Boolean;{判断消息是否有效}
function IsConfgMsg(Str: String): Boolean; {区分一般信息和确认信息}
procedure ResoleGprsV(RecvGprs: String);{处理接受信息}
procedure ResoleGprsV1(RecvGprs: String);{处理一般信息 (V1)}
procedure ResoleGprsV4(RecvGprs: String);{处理确认信息(V4)}
function Direc(sr: String): String;{车辆行驶方向}
function HexCng(Rhex: String): String;{十六进制数转换为二进制数}
function HandleCarStatus(ArrBin: array of String): String;{处理车辆状态}
function ChangeTel(sTel: String): String;{}
function StrToHex(sStr: String): String;
procedure SendSms(Tel, Other: String; iCmdID, iSendType: Integer;
CarID: String = ''){中心发送命令集}
从车载机接收的GPS信号中判断返回的信息是否有效,如果无效则直接丢弃,如果有效,则确认是一般信息还是确定信息,再接收处理一般信息或确定信息。
区分一般信息和确认信息的依据是参数字符串是否包含“V4”。
Result := False;{初始返回结果}
Result := pos(‘V4’, Str) > 0;{如果str包含“V4”,就返回true,否则false}
判断是否返回有效的信息的依据是参数字符串是否包含"*HQ"。
Result := False; {初始返回结果}
Result := pos('*HQ',Str) > 0;{如果str包含“ *HQ”,就返回true,否则false}
一般信息的标志是V1。车载回传的一般信息中包含的参数有车载序列号、移动电话号码、车牌号、时间、经纬度、速度、方位 、日期。
//获取车载序列号(同样的方法可以获取移动电话号码、车牌号、时间)
sCarNo := copy(RecvGprs, iPos + 4, 10);
//获取纬度(同样的方法可以获得经度)
sLatitude := copy(RecvGprs, iPos + 3, 9);
sLatitude := FloatToStr( StrToFloat(copy(sLatitude, 1, 2)) +StrToFloat(copy(sLatitude, 3, 7)) / 60 );
//获取南纬和北纬(同样的方法可以获得东西经)
iPos := pos(',S,', RecvGprs); {查找",S,"在RecvGprs 的位置}
if iPos > 0 then; {如果RecvGprs 包含',S ,' 就执行下面语句}
sNS := ‘南纬’
else begin
iPos := pos(‘,N,’, RecvGprs); {查找“,N,”
在RecvGprs 的位置}
sNS :=‘北纬’;
end;
//获取速度、方位 、日期
sSpeed := copy(RecvGprs, iPos + 3, 6);{获取速度}
sDirection := copy(RecvGprs, iPos + 10, 3);{获取方位}
sDate := copy(RecvGprs, iPos + 14, 6); {获取日期}
if Pos('.', sSpeed) <= 0 then{判断sSpeed 是否包含'.',如果包含就执行下面语句}
begin
sSpeed := copy(RecvGprs, iPos + 3, 3); {获取
速度}
sDirection := copy(RecvGprs, iPos + 7, 3); {获
取方位}
sDate := copy(RecvGprs, iPos + 11, 6); {获取
日期}
end;