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