車(chē)聯(lián)網(wǎng)監控中心的研究與設計
摘要:為了解決由汽車(chē)而引起的能源、環(huán)境和安全問(wèn)題,進(jìn)行了車(chē)聯(lián)網(wǎng)的PC機監控中心以及Android手機客戶(hù)端的研究與設計。完成了PC機的Socket通信、電子地圖的加載與糾偏、后臺數據庫的設計。同時(shí)也完成了在A(yíng)ndroid操作系統下Socket通信和地圖的加載與糾偏問(wèn)題。與硬件平臺進(jìn)行聯(lián)合測試,驗證了監控中心和手機客戶(hù)端設計的有效性,且具有良好的魯棒性。
引言
隨著(zhù)汽車(chē)行業(yè)的快速發(fā)展,全球能源問(wèn)題、環(huán)境問(wèn)題和安全問(wèn)題日益嚴重,解決問(wèn)題的方式之一是建立汽車(chē)移動(dòng)物聯(lián)網(wǎng)通信平臺。汽車(chē)移動(dòng)物聯(lián)網(wǎng)分為感知層、網(wǎng)絡(luò )層和應用層三層。由感知層獲取采集車(chē)輛內部和外部的各種信息。網(wǎng)絡(luò )層主要是GPRS/3G無(wú)線(xiàn)網(wǎng)絡(luò ),將感知層得到的信息通過(guò)GPRS/3G無(wú)線(xiàn)網(wǎng)絡(luò )發(fā)送到上位機,應用層主要是接收網(wǎng)絡(luò )層傳輸過(guò)來(lái)的數據并進(jìn)行處理[1],圖1為車(chē)聯(lián)網(wǎng)三層架構圖。

系統的應用層包括上位機監控中心和Android手機版本的客戶(hù)端,具備六大功能模塊:車(chē)輛基本信息、遠程監控、遠程控制、遠程故障診斷、尋車(chē)輔助、駕駛員疲勞狀態(tài)等。
上位機監控中心作為Socket服務(wù)器,要求具備公網(wǎng)IP和端口,可以被外網(wǎng)訪(fǎng)問(wèn)。車(chē)載終端模塊作為Socket客戶(hù)端,當Socket連接建立之后,由車(chē)載終端將車(chē)輛的信息通過(guò)GPRS無(wú)線(xiàn)網(wǎng)絡(luò )傳給PC機,同時(shí)上位機監控中心也可以主動(dòng)下發(fā)一些指令,查詢(xún)車(chē)載終端的狀態(tài),要求車(chē)載終端上傳相關(guān)信息。
1 PC機監控中心設計
1.1 Socket通信設計
Socket分為服務(wù)器和客戶(hù)端兩部分,上位機作為服務(wù)器,使用VB中的Winsock控件,通過(guò)Socket實(shí)現與車(chē)載終端和手機客戶(hù)端的通信。
服務(wù)器端Winsock在接收客戶(hù)端連接之后,會(huì )檢測Winsock1.State的值,如果Winsock1沒(méi)有關(guān)閉的話(huà)則會(huì )將Winsock1關(guān)閉。當服務(wù)器與客戶(hù)端連接成功之后,服務(wù)器便開(kāi)始接收客戶(hù)端的數據并且進(jìn)行處理,同時(shí)還可以向客戶(hù)端發(fā)送數據和命令。
當打開(kāi)了主窗體時(shí),在Private Sub Form_Load()事件中自動(dòng)加載Socket的監聽(tīng)和連接,并且當點(diǎn)擊了各個(gè)功能模塊的按鈕時(shí),上位機會(huì )通過(guò)Socket向車(chē)載終端下發(fā)查詢(xún)或者控制指令。

在PC機上位機程序中,需要設計兩個(gè)Socket連接,一個(gè)是用來(lái)與車(chē)載終端建立連接,另外一個(gè)是用來(lái)與Android手機建立連接。上位機Winsock1收到車(chē)載終端發(fā)送的數據之后,會(huì )進(jìn)行處理并且存入到后臺數據庫。Android手機通過(guò)Winsock2從上位機獲取數據。當多個(gè)車(chē)載終端同時(shí)連接監控中心時(shí),可以采用動(dòng)態(tài)加載和卸載Winsock的方式,同一個(gè)端口監聽(tīng)不同的連接請求,根據客戶(hù)端的IP地址來(lái)區分車(chē)載終端,端口號相同但連接的Index不同。
1.2 電子地圖的加載與糾偏
為了能夠在電腦上直觀(guān)地看到車(chē)輛的位置,在上位機設計了一個(gè)地圖加載界面,通過(guò)GPRS傳送的經(jīng)度和緯度信息,顯示出車(chē)輛的當前位置。由于傳統的地理信息系統(GIS)技術(shù)復雜,建設和維護的成本高,本次設計采用調用在線(xiàn)地圖API(應用程序接口)的方式來(lái)實(shí)現地圖的加載,這樣一方面省去了繁瑣的測繪和地圖編制工作,另一方面也保證了地圖更新的實(shí)時(shí)性,地圖提供商會(huì )定期更新地圖,提高定位的有效性和精度[2]。
通過(guò)VB中的webbrowser控件,來(lái)加載一個(gè)后綴名為.htm的靜態(tài)網(wǎng)頁(yè)文件,可以實(shí)現電子地圖的加載。在靜態(tài)網(wǎng)頁(yè)中,編寫(xiě)一個(gè)JavaScript函數,就可以在百度地圖上通過(guò)經(jīng)度和緯度進(jìn)行定位,并且可以實(shí)現電子地圖的放大、縮小和移動(dòng)。

由于GPS的坐標與百度地圖加載的坐標是不匹配的。國際上采用的是WGS-84標準的地心坐標,國內發(fā)行的地圖必須要使用國家測繪局規定的GCJ-02進(jìn)行加密,而百度地圖在此基礎上還使用百度公司的BD-09進(jìn)行二次加密,因此GPS采集的經(jīng)緯度和百度地圖并不匹配,需要進(jìn)行坐標接口轉換,百度地圖也提供了進(jìn)行坐標轉換的API接口函數。
在VB中利用webbrowser控件調用電子地圖并且實(shí)現坐標轉換的語(yǔ)句如下:
WebBrowser1.Document.parentWindow.execScript "map.panTo(new BMap.Point( " & jingdu & "," & weidu & "))", "javascript"
WebBrowser1.Document.parentWindow.execScript"map.addOverlay(new BMap.Marker(new BMap.Point( " & jingdu & "," & weidu & ")))", "javascript"
WebBrowser1.Document.parentWindow.execScript "BMap.Convertor.translate(new BMap.Point( " & jingdu & "," & weidu & "),0,translateCallback)", "javascript"
在上面的語(yǔ)句中,使用WebBrowser1.Navigate App.Path & "BaiduMap.htm"這個(gè)語(yǔ)句來(lái)加載已經(jīng)編寫(xiě)好的“BaiduMap.htm”地圖文件。調用坐標轉換函數時(shí)使用了new BMap.Point函數來(lái)新建坐標點(diǎn),translateCallback為在靜態(tài)網(wǎng)頁(yè)文件中編寫(xiě)的函數,該函數可以實(shí)現將指定點(diǎn)移到地圖中心、清除標注以及在指定坐標位置添加地標[3]。
1.3 后臺數據庫的設計
在VB中可以直接嵌入開(kāi)發(fā)Access數據庫,通過(guò)“外接程序”中的“可視化數據管理器”可以直接創(chuàng )建Access數據庫,也可以加載或導入其他類(lèi)型的數據庫。在VB中與數據庫的連接通常是使用ADO來(lái)實(shí)現的,在VB中操作后臺數據庫的步驟如下[4]:
(1)創(chuàng )建或導入數據庫,與數據庫建立連接。
(2)根據相應的命令讀取數據庫中的數據,并且在數據綁定控件中顯示。
(3)對獲取的對象進(jìn)行增刪改查操作,并且將更新后的數據重新存入數據庫。

評論