基于GPRS的車輛監(jiān)控系統(tǒng)技術研究
摘要:為了對危險品運輸,客運、貨運、工程車輛等特殊行業(yè)的車輛定位跟蹤,采用了GPS定位系統(tǒng)和GPRS通信技術實現(xiàn)了車輛實時監(jiān)控系統(tǒng);實現(xiàn)了以GPRS通信技術作為信息傳輸載體在車載終端,監(jiān)控中心進行數(shù)據(jù)通信,GPS定位和WebGIS技術實時展示車輛信息;該系統(tǒng)具有通信速度快、通信格式擴展性強、通信可靠性高,客戶端對車輛的控制性強,前端使用Web頁面展示車輛狀態(tài)和位置,系統(tǒng)無需安裝,用戶使用便捷等特點。
關鍵詞:車輛監(jiān)控系統(tǒng);GPS;GPRS;UDP
0 引言
隨著我國經(jīng)濟的發(fā)展,車輛日益增多,交通運輸?shù)慕?jīng)營管理,貨運、客運的安全管理等,已成為公安、交通系統(tǒng)中的一個重要問題。車輛監(jiān)控系統(tǒng)以全球定位系統(tǒng)(Global Posit ion System,GPS)和GPRS(General Packet Radio service)通信技術基礎,它可以將車載單元上接受到的實時定位數(shù)據(jù)通過無線網(wǎng)絡傳送至監(jiān)控中心服務器上,監(jiān)控中心計算機再利用地理信息系統(tǒng)的地圖顯示功能,以及信號指令的發(fā)送功能,實現(xiàn)對動態(tài)車輛的跟蹤與調(diào)度控制,從而建立起的一種大范圍、全方位發(fā)揮作用的、實時、準確、高效的綜合車輛調(diào)度和管理系統(tǒng)。系統(tǒng)基于Internet網(wǎng)絡,將監(jiān)控中心、遠程監(jiān)控終端、數(shù)據(jù)服務器、無線移動通信網(wǎng)、GPS車載終端有機地結合在一起,以Internet服務器為核心實現(xiàn)分布式監(jiān)控。
1 系統(tǒng)結構
基于GPRS的車輛監(jiān)控信息系統(tǒng)由4個主要部分構成,即監(jiān)控服務中心、車載終端、監(jiān)控終端及無線通信網(wǎng)絡構成;監(jiān)控服務中心是系統(tǒng)的核心部分,它連接車載終端和客戶端。監(jiān)控服務中心由Web服務器,通信服務器,數(shù)據(jù)庫服務器構成。通信服務器接受車載終端的數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)發(fā)給Web服務器和數(shù)據(jù)庫服務器。該系統(tǒng)結構圖如圖1所示。
2 系統(tǒng)關鍵技術
2.1 GPRS通信技術及UDP數(shù)據(jù)傳輸協(xié)議
在車輛和監(jiān)控中心之間需要通信設備來發(fā)送或接收信息。通信手段的選擇是監(jiān)控系統(tǒng)的難點和技術關鍵。合理的通信方式的選擇可以為監(jiān)控系統(tǒng)的指揮調(diào)度、報警處理提供一個穩(wěn)定、快速的平臺。
車輛監(jiān)控系統(tǒng)使用GPRS網(wǎng)絡作為傳輸載體。GPRS是一種采用分組交換和傳輸技術的高效率數(shù)據(jù)傳輸方式。它克服了電路交換速率低、資源利用率差等缺點,最大限度地利用了現(xiàn)有的GSM網(wǎng)絡資源,提高了傳輸速率。相對于短消息方式來說,GPRS服務既提高了質(zhì)量又降低了使用費用。移動車載終端與監(jiān)控調(diào)度中心之間的通信突發(fā)性較強,而每次數(shù)據(jù)量較小,使用GPRS網(wǎng)絡作為其傳輸載體是目前比較理想的解決方案,GPRS通信主要分為TCP和UDP協(xié)議。
CP和UDP協(xié)議同在傳輸層,由于本系統(tǒng)每次傳輸?shù)臄?shù)據(jù)量小而且突發(fā)性強,所以采用UDP協(xié)議傳輸數(shù)據(jù)。UDP協(xié)議的主要作用是將網(wǎng)絡數(shù)據(jù)流壓縮成數(shù)據(jù)報的形式。一個典型的數(shù)據(jù)報就是一個二進制數(shù)據(jù)的傳輸單位。UDP協(xié)議為不可靠的傳輸協(xié)議,不提供數(shù)據(jù)傳送的保障機制。如果在從發(fā)送方到接收方的傳遞過程中出現(xiàn)數(shù)據(jù)報的丟失,協(xié)議本身并不能做出任何檢測或提示。因此,必須在應用層的協(xié)議中添加保障信息傳輸可靠性的確認機制。監(jiān)控中心向終端下傳數(shù)據(jù)時,要求終端返回接收正確或錯誤的確認信息,監(jiān)控中心收到正確的確認信息后數(shù)據(jù)下傳進程才完畢。否則,監(jiān)控中心將在規(guī)定的時間內(nèi)重發(fā),直到收到正確的確認信息或發(fā)送次數(shù)標志溢出才終止。
GPRS網(wǎng)絡UDP端口資源十分緊缺,變化很快;UDP由于自身特點,以及GPRS網(wǎng)絡UDP端口資源的有限性,在一段時間沒有數(shù)據(jù)流量后,端口容易改變,產(chǎn)生的影響就是從服務器中心端向GPRS終端發(fā)送數(shù)據(jù),GPRS終端接收不到。原因是移動網(wǎng)關從中做了中轉(zhuǎn),需要隔一定時間給主機發(fā)UDP包來維持該IP和端口號,這樣主機就能主動給GPRS發(fā)UDP包,筆者在測試中發(fā)現(xiàn),這個間隔時間很短,約1 min發(fā)一次UDP包才能夠維持,再長時間移動網(wǎng)關那邊就要丟失這個端口了,逾期主機想主動發(fā)數(shù)據(jù)給終端,將無法送達。只有GPRS終端設備重新發(fā)一個UDP包過去,移動再分配一個中轉(zhuǎn)IP和端口,才能夠進行雙向通信。為保證端口有效性和數(shù)據(jù)實時性,終端設備每5 s發(fā)送一條包含定位和狀態(tài)的數(shù)據(jù)給服務器。
2.2 基于C#發(fā)送、接收UDP數(shù)據(jù)包使用的主要方法
(1)UDP數(shù)據(jù)類。用Visual C#實現(xiàn)UDP協(xié)議,最為常用,也是最為關鍵的類就是UdpClient,UdpClient位于命名空間System.Net.Sock ets中,Visual C#發(fā)送、接收UDP數(shù)據(jù)包都是通過UdpClient類的。UdpClient類主要有以下幾個方法,見表1。
(2)接受終端UDP數(shù)據(jù)。接收UDP數(shù)據(jù)包使用的是UdpClient中的“Receive”方法。此方法的調(diào)用語法如下:public byte[]Receive(ref IPEndPoint remoteEP);參數(shù)remoteEP是一個IPEndPoint類的實例,它表示網(wǎng)絡中發(fā)送此數(shù)據(jù)包的節(jié)點。下面就是通過偵聽本地端口號“8 080”來獲取信息代碼:
UdpClient server=new UdpClient(8080);
IPEndPoint receivePoint=new IPEndPoint(IPAddress.Any,0);
byte[]recData=server.Receive(ref receivePoint);
recData就是接受到的UDP報文,其中UDP包頭結構如下:源端口16位,目的端口16位,長度16位,校驗和16位;上文中闡述了GPRS的UDP端口非常緊缺,隨時會變化,在每次接受到UDP報文后,必須記錄源端口、IP地址。receivePoint參數(shù)是引用類型,receive到新的UDP后,receivePoint對象的address和port屬性值就是發(fā)送源的IP地址和端口。這個IP和端口未必是真的終端的IP和端口。因為終端上的應用程序綁定本地一個端口(比如是9002),通過這個端口發(fā)送請求給路由器,路由器由此記錄下終端的內(nèi)網(wǎng)IP和端口(9002),然后路由器分配自己的一個空閑端口(比如是7000),通過這個端口(7000)發(fā)送請求給監(jiān)控中心。而對于監(jiān)控中心,它沒有任何關于終端的信息,它要做的只是回信息到路由器的外網(wǎng)IP的7000這個端口。路由器收到發(fā)送到其7000端口的數(shù)據(jù)后會再轉(zhuǎn)發(fā)給終端。
(3)發(fā)送UDP數(shù)據(jù)報。發(fā)送UDP數(shù)據(jù)報使用“Send”方法。“Send”方法的調(diào)用語法如下:public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);參數(shù)說明:dgram要發(fā)送的UDP數(shù)據(jù)文報(以字節(jié)數(shù)組表示)。bytes數(shù)據(jù)文報中的字節(jié)數(shù)。endPoint一個IPEndPoint,它表示要將數(shù)據(jù)文報發(fā)送到的主機和端口。返回值是已發(fā)送的字節(jié)數(shù)。下面使用UDPClient發(fā)送UDP數(shù)據(jù)包的具體的調(diào)用例子:
該代碼實現(xiàn)了對某終端發(fā)送UDP報文后的回復。如果需要主動向終端發(fā)送報文則需要從數(shù)據(jù)庫中提取該終端最近一次的IP和端口號,調(diào)用該方法發(fā)送內(nèi)容。
2.3 數(shù)據(jù)封裝和轉(zhuǎn)存
監(jiān)控中心與客戶端的數(shù)據(jù)通信包含2種:一種是上行數(shù)據(jù),一種是下行數(shù)據(jù)。上行數(shù)據(jù)包含終端匯報車輛的狀態(tài)信息,車輛實時信息,車輛語音信息,視頻信息等。下行信息包含對終端的回應,車輛的實時控制等信息。數(shù)據(jù)種類大約一百多種,可分為20多種格式。針對每種格式定義一個結構進行數(shù)據(jù)接受和轉(zhuǎn)存到數(shù)據(jù)庫,進行數(shù)據(jù)顯示和分析。終端返回數(shù)據(jù)一般是結構類型,為保證數(shù)據(jù)轉(zhuǎn)換準確和便捷,C#也使用同樣的結構對數(shù)據(jù)進行接受。上文中UDP報文接受到的正文是byte類型,該byte內(nèi)容有報文頭和報文類型、校驗部分和正文構成。根據(jù)報文類型找到對應的C#結構體structType。利用Marshal.SizeOf(structType);獲取結構體大小,并進行分配空間:IntPtrstructPtr=Marsh al.AllocHGlobal(size);然后將byte數(shù)組拷到分配好的內(nèi)存空間:Marshal.Copy(recData,0,structPtr,size);將內(nèi)存空間轉(zhuǎn)換為目標結構體objectobj=Marshal.PtrToStructure(structPtr. struct Type)。為提高系統(tǒng)的實時響應速度,這些數(shù)據(jù)分為2種處理方式,如非緊急數(shù)據(jù)直接保存到數(shù)據(jù)庫,而如果是緊急數(shù)據(jù),比如車輛報警數(shù)據(jù),車輛控制數(shù)據(jù)則直接通過Socket連接發(fā)送到Web服務器,由Web服務器推送到瀏覽器監(jiān)控端。
3 結語
本文主要分析了監(jiān)控系統(tǒng)的GPRS通信技術,詳細介紹了基于GPRS的UDP數(shù)據(jù)通信流程和方法,實現(xiàn)了C#環(huán)境下接受,發(fā)送UDP數(shù)據(jù)報文,協(xié)議的定制,數(shù)據(jù)轉(zhuǎn)存等關鍵技術。本文解決的問題是監(jiān)控系統(tǒng)的核心內(nèi)容,但并不是全部,一個完整的系統(tǒng)還應包括終端硬件設計以及后臺監(jiān)控軟件、GIS地圖顯示等許多方面。今后,應通過進一步的研究。解決系統(tǒng)其他相關技術。