車聯(lián)網(wǎng)監(jiān)控中心的研究與設(shè)計
摘要:為了解決由汽車而引起的能源、環(huán)境和安全問題,進行了車聯(lián)網(wǎng)的PC機監(jiān)控中心以及Android手機客戶端的研究與設(shè)計。完成了PC機的Socket通信、電子地圖的加載與糾偏、后臺數(shù)據(jù)庫的設(shè)計。同時也完成了在Android操作系統(tǒng)下Socket通信和地圖的加載與糾偏問題。與硬件平臺進行聯(lián)合測試,驗證了監(jiān)控中心和手機客戶端設(shè)計的有效性,且具有良好的魯棒性。
引言
隨著汽車行業(yè)的快速發(fā)展,全球能源問題、環(huán)境問題和安全問題日益嚴重,解決問題的方式之一是建立汽車移動物聯(lián)網(wǎng)通信平臺。汽車移動物聯(lián)網(wǎng)分為感知層、網(wǎng)絡(luò)層和應(yīng)用層三層。由感知層獲取采集車輛內(nèi)部和外部的各種信息。網(wǎng)絡(luò)層主要是GPRS/3G無線網(wǎng)絡(luò),將感知層得到的信息通過GPRS/3G無線網(wǎng)絡(luò)發(fā)送到上位機,應(yīng)用層主要是接收網(wǎng)絡(luò)層傳輸過來的數(shù)據(jù)并進行處理[1],圖1為車聯(lián)網(wǎng)三層架構(gòu)圖。
系統(tǒng)的應(yīng)用層包括上位機監(jiān)控中心和Android手機版本的客戶端,具備六大功能模塊:車輛基本信息、遠程監(jiān)控、遠程控制、遠程故障診斷、尋車輔助、駕駛員疲勞狀態(tài)等。
上位機監(jiān)控中心作為Socket服務(wù)器,要求具備公網(wǎng)IP和端口,可以被外網(wǎng)訪問。車載終端模塊作為Socket客戶端,當Socket連接建立之后,由車載終端將車輛的信息通過GPRS無線網(wǎng)絡(luò)傳給PC機,同時上位機監(jiān)控中心也可以主動下發(fā)一些指令,查詢車載終端的狀態(tài),要求車載終端上傳相關(guān)信息。
1 PC機監(jiān)控中心設(shè)計
1.1 Socket通信設(shè)計
Socket分為服務(wù)器和客戶端兩部分,上位機作為服務(wù)器,使用VB中的Winsock控件,通過Socket實現(xiàn)與車載終端和手機客戶端的通信。
服務(wù)器端Winsock在接收客戶端連接之后,會檢測Winsock1.State的值,如果Winsock1沒有關(guān)閉的話則會將Winsock1關(guān)閉。當服務(wù)器與客戶端連接成功之后,服務(wù)器便開始接收客戶端的數(shù)據(jù)并且進行處理,同時還可以向客戶端發(fā)送數(shù)據(jù)和命令。
當打開了主窗體時,在Private Sub Form_Load()事件中自動加載Socket的監(jiān)聽和連接,并且當點擊了各個功能模塊的按鈕時,上位機會通過Socket向車載終端下發(fā)查詢或者控制指令。
在PC機上位機程序中,需要設(shè)計兩個Socket連接,一個是用來與車載終端建立連接,另外一個是用來與Android手機建立連接。上位機Winsock1收到車載終端發(fā)送的數(shù)據(jù)之后,會進行處理并且存入到后臺數(shù)據(jù)庫。Android手機通過Winsock2從上位機獲取數(shù)據(jù)。當多個車載終端同時連接監(jiān)控中心時,可以采用動態(tài)加載和卸載Winsock的方式,同一個端口監(jiān)聽不同的連接請求,根據(jù)客戶端的IP地址來區(qū)分車載終端,端口號相同但連接的Index不同。
1.2 電子地圖的加載與糾偏
為了能夠在電腦上直觀地看到車輛的位置,在上位機設(shè)計了一個地圖加載界面,通過GPRS傳送的經(jīng)度和緯度信息,顯示出車輛的當前位置。由于傳統(tǒng)的地理信息系統(tǒng)(GIS)技術(shù)復雜,建設(shè)和維護的成本高,本次設(shè)計采用調(diào)用在線地圖API(應(yīng)用程序接口)的方式來實現(xiàn)地圖的加載,這樣一方面省去了繁瑣的測繪和地圖編制工作,另一方面也保證了地圖更新的實時性,地圖提供商會定期更新地圖,提高定位的有效性和精度[2]。
通過VB中的webbrowser控件,來加載一個后綴名為.htm的靜態(tài)網(wǎng)頁文件,可以實現(xiàn)電子地圖的加載。在靜態(tài)網(wǎng)頁中,編寫一個JavaScript函數(shù),就可以在百度地圖上通過經(jīng)度和緯度進行定位,并且可以實現(xiàn)電子地圖的放大、縮小和移動。
由于GPS的坐標與百度地圖加載的坐標是不匹配的。國際上采用的是WGS-84標準的地心坐標,國內(nèi)發(fā)行的地圖必須要使用國家測繪局規(guī)定的GCJ-02進行加密,而百度地圖在此基礎(chǔ)上還使用百度公司的BD-09進行二次加密,因此GPS采集的經(jīng)緯度和百度地圖并不匹配,需要進行坐標接口轉(zhuǎn)換,百度地圖也提供了進行坐標轉(zhuǎn)換的API接口函數(shù)。
在VB中利用webbrowser控件調(diào)用電子地圖并且實現(xiàn)坐標轉(zhuǎn)換的語句如下:
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"
在上面的語句中,使用WebBrowser1.Navigate App.Path & "BaiduMap.htm"這個語句來加載已經(jīng)編寫好的“BaiduMap.htm”地圖文件。調(diào)用坐標轉(zhuǎn)換函數(shù)時使用了new BMap.Point函數(shù)來新建坐標點,translateCallback為在靜態(tài)網(wǎng)頁文件中編寫的函數(shù),該函數(shù)可以實現(xiàn)將指定點移到地圖中心、清除標注以及在指定坐標位置添加地標[3]。
1.3 后臺數(shù)據(jù)庫的設(shè)計
在VB中可以直接嵌入開發(fā)Access數(shù)據(jù)庫,通過“外接程序”中的“可視化數(shù)據(jù)管理器”可以直接創(chuàng)建Access數(shù)據(jù)庫,也可以加載或?qū)肫渌愋偷臄?shù)據(jù)庫。在VB中與數(shù)據(jù)庫的連接通常是使用ADO來實現(xiàn)的,在VB中操作后臺數(shù)據(jù)庫的步驟如下[4]:
(1)創(chuàng)建或?qū)霐?shù)據(jù)庫,與數(shù)據(jù)庫建立連接。
(2)根據(jù)相應(yīng)的命令讀取數(shù)據(jù)庫中的數(shù)據(jù),并且在數(shù)據(jù)綁定控件中顯示。
(3)對獲取的對象進行增刪改查操作,并且將更新后的數(shù)據(jù)重新存入數(shù)據(jù)庫。
評論