車載GPS定位監控系統實現了對車輛位置、狀態的監控和調度
2021-03-31 16:43:46
隨著汽車在日常生產和生活中起的作用越來越突出,如何實現各類車輛的有效指揮、協調控制和管理已經成為交通運輸和安全管理部門面臨的一個重要問題。為了滿足提高運輸效率和安全保障的需要,對車輛定位監控系統的研究也日趨迫切。
車載GPS定位監控系統是GSM全球數字蜂窩移動通信技術和GIS地理信息技術、GPS全球衛星定位技術以及計算機網絡技術相融合研制開發出來的軟件技術。它是通過安裝在車輛上的GPS接收機(即車載機)接收衛星信號,監控中心的通信控制器從GPS接收機輸出的信號中提取所需要的位置、速度和時間信息,結合車輛身份等信息形成數據報,然后通過無線信道發往控制中心;控制中心的主站接收子站發送的數據,處理接收信息通過短消息的方式逐次直接發送給每一臺車載機。最后,將車輛的具體數據和狀態在監控中心的電子地圖上顯示出來。
本文討論的就是從接收機輸出的信號中提取所需要的位置、速度和時間信息的方法,以及中心處理信息后發送命令集的實現過程。
GPS車載機的通信協議
車載機與監控中心之間的通信方式均以中心發送命令,車載機應答的方式進行,所以我們對車載機GPS信號的分析與處理必須完全依據車載GPS接收機與監控中心的通信協議來進行,下而是GPS車載機通信協議的部分內容。
車載機返回信息
一般信息:
*XX,YYYYYYYYYY,V1,HHMMSS,S,latitude,D,longitu de,G,speed,direction,DDMMYY,vehicle_status#
確認信息:
*XX,YYYYYYYYYY,V4,CMD,hhmmss,HHMMSS,S,latitu de,D,longitude,G,speed,direction,DDM MYY,vehicle_status#
區分一般信息和確認信息的方法是看車載機傳回來的信息中是否包含“V4”,判斷返回信息是否有效的方法是看回傳信息中是否包含“HQ(制造商名稱)”。
其中:‘*’表示命令頭;‘XX’表示制造商名稱;‘,’表示分隔符;‘YYYYYYYYYY’表示車載機序列號;‘CMD’表示被確認的中心命令;‘hhmmss’表示被確認命令中的時間值;‘HHMMSS’表示車載機時間;‘s’表示數據有效位;‘latitude’表示緯度;‘D’表示緯度標志;‘longitude’表示經度;‘G’表示經度標志;‘speed’表示速度;‘direction’表示方位角;‘D D M M Y Y’表示日/月/年;‘vehicle_status’表示車輛狀態。
車載機返回GPS信息模式有兩種,一是返回最近的有效的GPS信息;二是返回最新的GPS信息。
中心發送命令結構和命令集
車載GPS定位監控系實現了對車輛位置、狀態的監控和調度管理
車載GPS定位監控系實現了對車輛位置、狀態的監控和調度管理
通信軟件的設計與實現
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;
∥數據轉換
sSpeed:=FormatFloat(‘0.00‘,StrToFloat(sSpeed)*1.852);{行駛速度轉換}
sSceond:=copy(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)+‘-’+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。車載回傳的確認信息中包含車輛行駛方位和車輛狀態。
處理一般信息中獲取的方位信息,由字符類型轉換為整型數據,根據數據所在范圍確定車輛的行駛方位,小于22.5或大于337.5為正北方向,大于22.5小于67.5為東北方向,大于67.5小于112.5為正東方向,依此類推確認車輛的行駛方向。
處理一般信息中獲取的車輛狀態,由字符類型轉換為二進制數字符串,把二進制數據的每一位存進數組,每一位對應表一中的一個車輛狀態。
∥獲取車輛狀態
iPos:=Pos(‘#’,RecvGprs);
sCarStatus:=copy(RecvGprs,iPos-8,8)
∥轉換為二進制數字符串
sBin:=″;
forI:=1 to 8 do
sBin:=sBin+HexCng(copy(sCarStatus,I,1));
∥把二進制數據的每一位存進數組
forI:=0to 3l do
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車載機產品的功能升級而不斷升級,增加新的命令,相應的軟件系統也要增加新的指令,本系統的設計將易于這些升級維護工作的進行。