車(chē)載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。車(chē)載回傳的一般信息中包含的參數有車(chē)載序列號、移動(dòng)電話(huà)號碼、車(chē)牌號、時(shí)間、絳緯度、速度、方位、日期。
∥獲取車(chē)載序列號(同樣的方法可以獲取移動(dòng)電話(huà)號碼、車(chē)牌號、時(shí)間)
sCarNo:=copy(RecvGprs,iPos+4,10);
∥獲取緯度(同樣的方法可以獲得經(jīng)度)
sLatitude:=copy(RecvGprs,iPos+3,9);
sLatitude:=FloatToStr(StrToFloat(copy(sLatitude,1,2))+StrToFloat(copy(sLatitude,3,7))/60);
∥獲取南緯和北緯(同樣的方法可以獲得東西經(jīng))
iPos:=pos(‘,S,’,RecvGprs);{查找“,S,”在RecvGprs的位置}
if iPos>0 then;(如果RecvGprs包含‘,S,’就執行下面語(yǔ)句}
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是否包含‘.’,如果包含就執行下面語(yǔ)句}
begin
sSpeed:=copy(RecvGprs,iPos+3,3);{獲取速度}
sDirection:=copy(RecvGprs,iPos+7,3);{獲
取方位}
sDate:=copy(RecvGprs,iPos+11,6);{獲取日期}
end;
∥數據轉換
sSpeed:=FormatFloat(‘0.00,StrToFloat(sSpeed)*1.852);{行駛速度轉換}
sSceond:=copy(sTime,5,2);{時(shí)間轉換}
if StrToInt(sSceond)<60 then{時(shí)間轉換(‘YYYY-MM-DD HH:MM:SS’表示為:年月日時(shí)分秒)
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)+‘:’+copy(sTime,5,2)),8))
else begin
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));
end;
確認信息的標志是V4。車(chē)載回傳的確認信息中包含車(chē)輛行駛方位和車(chē)輛狀態(tài)。
處理一般信息中獲取的方位信息,由字符類(lèi)型轉換為整型數據,根據數據所在范圍確定車(chē)輛的行駛方位,小于22.5或大于337.5為正北方向,大于22.5小于67.5為東北方向,大于67.5小于112.5為正東方向,依此類(lèi)推確認車(chē)輛的行駛方向。
處理一般信息中獲取的車(chē)輛狀態(tài),由字符類(lèi)型轉換為二進(jìn)制數字符串,把二進(jìn)制數據的每一位存進(jìn)數組,每一位對應表一中的一個(gè)車(chē)輛狀態(tài)。
∥獲取車(chē)輛狀態(tài)
iPos:=Pos(‘#’,RecvGprs);
sCarStatus:=copy(RecvGprs,iPos-8,8)
∥轉換為二進(jìn)制數字符串
sBin:=″;
forI:=1 to 8 do
sBin:=sBin+HexCng(copy(sCarStatus,I,1));
∥把二進(jìn)制數據的每一位存進(jìn)數組
forI:=0to 3l do
ArrBin[I]:=copy(sBin,I+1,1);
sCarStatuText:=HandleCarStatus(ArrBin);{車(chē)輛狀態(tài)}
監控中心根據每一臺車(chē)載機傳回的信息內容發(fā)送不同的命令。發(fā)送命令程序需嚴格按照中心發(fā)送命令集規定的的格式來(lái)寫(xiě),下面列舉其中的幾條命令:
∥該指令要求車(chē)載機以sInterval為時(shí)間間隔,回傳sCount次定位信息。
sRightStr:=‘*HQ,0000000000,D1,’+sTime+‘,’+sInterval+‘,’+sCount+‘#’
∥車(chē)載機接到這條指令后將清除掉 所有報警信息。
sRightStr:=‘*HQ,0000000000,R7,’+sTime+‘#’;
if Application.MessageBox(PChar(‘真的要解除對車(chē)輛【‘十CarID+’】報警嗎?’),‘提示’,MB_YESNO+MB_DEFBUTTON2)=IDNO then Exit;
這里的CarID指車(chē)載機序列號。
∥車(chē)載機收到這條命令將會(huì )啟動(dòng)斷油斷電。
sRightStr:=‘*HQ,0000000000,S20,’+sTime+‘,1,3,10,3,5,5#’;
if Application.MessageBox(PChar(‘真的要對車(chē)輛【‘+CarID+’】斷油斷電嗎?’),‘提示’,MB_YESNO+MB_DEFBUTTON2)=IDNO then Exit;
結語(yǔ)
目前,車(chē)載GPS定位監控系統已經(jīng)被各運輸公司使用在出租車(chē)、客車(chē)以及大型車(chē)隊上,該軟件技術(shù)很好的實(shí)現了對車(chē)輛位置、狀態(tài)的監控和調度管理。
隨著(zhù)GPS應用領(lǐng)域的擴大,車(chē)載GPS導航定位監控軟什的系統的功能也將隨著(zhù)導航、通信等需求而不斷的增多和完善。GPS車(chē)載機通信協(xié)議會(huì )根據GPS車(chē)載機產(chǎn)品的功能升級而不斷升級,增加新的命令,相應的軟件系統也要增加新的指令,本系統的設計將易于這些升級維護工作的進(jìn)行。
評論