劉新霞 劉國(guó)錦
1南京財(cái)經(jīng)大學(xué) 江蘇 210046
2南京師范大學(xué)分析測(cè)試中心 江蘇 210097
隨著我國(guó)經(jīng)濟(jì)的不斷發(fā)展,人們的生活水平逐漸提高,車輛日益增多,相對(duì)也帶來(lái)了車輛堵塞、安全等問(wèn)題。在現(xiàn)代信息技術(shù)的不斷發(fā)展的同時(shí),通信、導(dǎo)航、控制和計(jì)算機(jī)等相關(guān)技術(shù)越來(lái)越被應(yīng)用到交通運(yùn)輸領(lǐng)域,從而逐步形成了一種實(shí)時(shí)、準(zhǔn)確、高效的綜合運(yùn)輸系統(tǒng)。通過(guò)車輛點(diǎn)名,直接對(duì)車輛進(jìn)行實(shí)時(shí)監(jiān)控是目前社會(huì)急需的一門技術(shù)。
監(jiān)控管理中心主要是由數(shù)據(jù)庫(kù)模塊、通信模塊、后臺(tái)服務(wù)器、前端控制臺(tái)組成。監(jiān)控管理中心總體的軟件框圖,如圖1所示。
后臺(tái)服務(wù)器是整個(gè)監(jiān)控中心的通信樞紐,主要負(fù)責(zé)前端控制臺(tái)和車載終端數(shù)據(jù)交互的處理,負(fù)責(zé)將前端控制臺(tái)的控制、詢問(wèn)等數(shù)據(jù)發(fā)送給對(duì)應(yīng)的車載終端,然后將車載終端的回復(fù)數(shù)據(jù)匯報(bào)給發(fā)出控制的前端控制臺(tái),并且將所有的操作及通信數(shù)據(jù)都存入到中心數(shù)據(jù)庫(kù)中。
圖1 監(jiān)控中心結(jié)構(gòu)圖
數(shù)據(jù)庫(kù)模塊是監(jiān)控管理軟件的重要部分,采用SQL Server數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)數(shù)據(jù)的處理。它主要用于存放系統(tǒng)中各車輛的基本屬性和行駛的歷史數(shù)據(jù)。該數(shù)據(jù)庫(kù)主要存放實(shí)時(shí)車輛信息數(shù)據(jù)、車輛歷史信息數(shù)據(jù)、車輛信息管理數(shù)據(jù)等。
通信模塊負(fù)責(zé)中心與終端的通信交互通道,可以通過(guò)4種方式與終端進(jìn)行通信,包括SMS(MODEM方式或者SMG短信網(wǎng)關(guān)方式)和GPRS(TCP或者UDP)。終端可通過(guò)其中任意一種方式向中心發(fā)送數(shù)據(jù),通信模塊在收到終端數(shù)據(jù)后,將數(shù)據(jù)添加到一個(gè)鏈表中,后臺(tái)服務(wù)器程序就從該鏈表中提取數(shù)據(jù)處理,后臺(tái)發(fā)送的控制信息也將都通過(guò)通信模塊發(fā)送出去。通信模塊不與數(shù)據(jù)庫(kù)打交道。
前端控制臺(tái)從數(shù)據(jù)庫(kù)服務(wù)器中讀取相應(yīng)的位置信息,然后在界面上顯示出來(lái);通過(guò)后臺(tái)服務(wù)的控制通道,對(duì)終端進(jìn)行控制。實(shí)現(xiàn)車輛點(diǎn)名、定時(shí)跟蹤、超速報(bào)警等常規(guī)監(jiān)控功能,以及實(shí)現(xiàn)電子地圖的顯示管理的相關(guān)功能。
后臺(tái)服務(wù)器是管理和調(diào)度車輛的重心,需實(shí)現(xiàn)后臺(tái)服務(wù)器分別與車載終端和前臺(tái)控制臺(tái)的雙向通信。其總體結(jié)構(gòu)圖如圖2所示。
圖2 后臺(tái)服務(wù)器結(jié)構(gòu)框圖
2.2.1 后臺(tái)與車載終端的通信
后臺(tái)與車載終端的數(shù)據(jù)通信由GpsData控件控制。GpsData控件負(fù)責(zé)接收車載終端發(fā)送的數(shù)據(jù)并向車載終端發(fā)送控制請(qǐng)求命令數(shù)據(jù),中心上層只要調(diào)用GpsData控件的接口,即可實(shí)現(xiàn)與車載終端之間的通信。
2.2.2 后臺(tái)與前端控制臺(tái)進(jìn)行通信
后臺(tái)與前端控制臺(tái)直接通過(guò)TCP/IP協(xié)議進(jìn)行通信,用Winsock實(shí)現(xiàn),后臺(tái)保存著一個(gè)連接上的前端控制臺(tái)的鏈表,每個(gè)連接上的前端控制臺(tái)對(duì)應(yīng)到后臺(tái)服務(wù)器上的一個(gè)CClientSock類,其中保存了該前端控制臺(tái)操作者在數(shù)據(jù)庫(kù)中的操作ID,并統(tǒng)一管理連接上的前端控制臺(tái),進(jìn)而實(shí)現(xiàn)了多用戶的操作。
2.2.3 后臺(tái)與數(shù)據(jù)庫(kù)的通信
數(shù)據(jù)庫(kù)采用MSSQLSever,后臺(tái)服務(wù)與數(shù)據(jù)庫(kù)的通信直接通過(guò)VC的ADO類來(lái)實(shí)現(xiàn)。后臺(tái)收到前端控制臺(tái)發(fā)送來(lái)的指令后,由后臺(tái)處理成發(fā)送給車載終端GPRS的數(shù)據(jù)格式并發(fā)送,將收到的GPS數(shù)據(jù)保存至數(shù)據(jù)庫(kù),以便調(diào)用。
2.3.1 后臺(tái)服務(wù)器的總體流程
后臺(tái)服務(wù)器啟動(dòng)后等待數(shù)據(jù),然后解析數(shù)據(jù),并根據(jù)數(shù)據(jù)中命令字段做相應(yīng)的操作處理,直到停止服務(wù)(圖3)。
圖3 后臺(tái)服務(wù)器的總體流程
2.3.2 后臺(tái)程序與前端控制臺(tái)的交互
利用Winsock實(shí)現(xiàn)后臺(tái)服務(wù)器與前端控制臺(tái)基于TCP/IP的數(shù)據(jù)通信。首先在后臺(tái)中心開啟一個(gè)偵聽Socket偵聽前端控制臺(tái)的連接,當(dāng)有連接請(qǐng)求時(shí)就動(dòng)態(tài)創(chuàng)建一個(gè)CClientSocket類并加入到后臺(tái)的鏈表中并等待前臺(tái)發(fā)送登錄請(qǐng)求,如果在超時(shí)時(shí)間的時(shí)間內(nèi)沒(méi)有收到登錄請(qǐng)求,后臺(tái)就會(huì)將該客戶連接從對(duì)應(yīng)的鏈表中刪除。如果收到登錄請(qǐng)求,就根據(jù)數(shù)據(jù)庫(kù)中存儲(chǔ)的用戶名密碼來(lái)驗(yàn)證前臺(tái)客戶端是否為有效用戶,如果不是,則給前臺(tái)發(fā)送登錄失敗和失敗原因的回復(fù)數(shù)據(jù)并將該客戶連接從鏈表中刪除。如果登錄成功,就將該客戶連接前臺(tái)并顯示到后臺(tái)的顯示界面上。然后等待前端控制臺(tái)發(fā)送別的控制命令,并對(duì)控制命令作出相應(yīng)的操作和回應(yīng)。
2.3.3 后臺(tái)程序與車載終端的交互
后臺(tái)在收到GpsData發(fā)送的收到數(shù)據(jù)事件之后,就去讀取數(shù)據(jù),并驗(yàn)證數(shù)據(jù)的有效性,根據(jù)用戶的手機(jī)號(hào)來(lái)驗(yàn)證是否為有效用戶數(shù)據(jù),如果不是有效用戶,則丟棄該數(shù)據(jù)。否則解析數(shù)據(jù)的頭部分,獲取該數(shù)據(jù)對(duì)應(yīng)的操作類型,在對(duì)應(yīng)的操作類型中解析數(shù)據(jù),更新數(shù)據(jù)庫(kù),并處理隨數(shù)據(jù)一同發(fā)送上來(lái)的GPS數(shù)據(jù),并通知給對(duì)應(yīng)的操作臺(tái)以更新信息。
前端控制臺(tái)即前臺(tái)客戶端,主要提供清晰的人機(jī)界面,將用戶的請(qǐng)求發(fā)送至后臺(tái)服務(wù)器進(jìn)行處理,并將后臺(tái)服務(wù)器送回的數(shù)據(jù)解析后形象的展現(xiàn)給用戶。
3.1.1 MapX模塊
該模塊使用封裝好的MapX庫(kù),實(shí)現(xiàn)對(duì)地圖進(jìn)行創(chuàng)建、載入、描點(diǎn)、計(jì)算等一些基本的操作。
MapX是MapInfo公司開發(fā)的能向用戶提供強(qiáng)大地圖分析功能的ActiveX控件產(chǎn)品。MapX能支持絕大多數(shù)標(biāo)準(zhǔn)的可視化開發(fā)環(huán)境,如:Visual Basic、Visual C++、Delphi和PowerBuilder等。利用MapX,用戶能夠簡(jiǎn)單而快速地在自己的企業(yè)應(yīng)用中嵌入地圖化功能,增強(qiáng)企業(yè)應(yīng)用的空間分析能力,實(shí)現(xiàn)企業(yè)應(yīng)用的增值。由于采用的是控件技術(shù),因此應(yīng)用程序可以脫離MapInfo的軟件平臺(tái)運(yùn)行。
用戶可以連接大型數(shù)據(jù)庫(kù),通過(guò)Spatial等空間數(shù)據(jù)服務(wù)技術(shù),MapX可以動(dòng)態(tài)操作數(shù)據(jù)庫(kù)中存儲(chǔ)的地理空間數(shù)據(jù),并在空間服務(wù)器的支持下,完成高級(jí)的地理信息查詢和復(fù)雜的空間分析功能,從而大大拓寬了MapX本身的功能限制。此外,利用大型數(shù)據(jù)庫(kù)進(jìn)行空間數(shù)據(jù)的管理,使得海量數(shù)據(jù)的處理可行。
3.1.2 CClientSocket模塊
該模塊封裝了與后臺(tái)程序的通信功能函數(shù),底層使用socket編程,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸(圖4)。
圖4 CclientSocket模塊
界面通過(guò)接口向后臺(tái)服務(wù)程序發(fā)送請(qǐng)求,并得到回復(fù)。監(jiān)控用戶獲得歷史軌跡和點(diǎn)名命令的車載數(shù)據(jù)通過(guò)異步方式傳遞,當(dāng)收到有GPRS的數(shù)據(jù)之后,后臺(tái)程序?qū)?shù)據(jù)保存至數(shù)據(jù)庫(kù),再發(fā)送消息通知前臺(tái)的CclientSocket,由CclientSocket發(fā)送刷新界面的請(qǐng)求。
當(dāng)需要對(duì)某一車輛進(jìn)行監(jiān)控時(shí),只需對(duì)該車輛點(diǎn)名一次,就可以對(duì)其開始監(jiān)控。當(dāng)對(duì)車輛進(jìn)行點(diǎn)名時(shí),前臺(tái)程序調(diào)用ClientSocket中的SendDM方法,向后臺(tái)程序發(fā)送命令。
整個(gè)發(fā)送過(guò)程圖5所示。
圖5 點(diǎn)名發(fā)送指令流程圖
當(dāng)車載終端收到GPS數(shù)據(jù)之后,首先會(huì)判斷定位的次數(shù)和間隔是否滿足發(fā)送條件,如果滿足,則會(huì)將點(diǎn)名返回信息發(fā)送給后臺(tái),后臺(tái)程序?qū)⒂涗洿鎯?chǔ)至數(shù)據(jù)庫(kù),然后再發(fā)送消息通知前臺(tái)程序返回?cái)?shù)據(jù)已經(jīng)收到。前臺(tái)程序就會(huì)去數(shù)據(jù)庫(kù)中將數(shù)據(jù)讀出并顯示。當(dāng)每次接收數(shù)據(jù)后,用戶可以在地圖上清晰地看到車輛的位置動(dòng)態(tài)刷新,以及具體的經(jīng)緯度數(shù)據(jù)。
本文基于TCP/IP協(xié)議的socket編程和SQL Server數(shù)據(jù)庫(kù)的原理,以及對(duì)MAPX控件的接口函數(shù)的應(yīng)用,實(shí)現(xiàn)了在任何地點(diǎn)進(jìn)行網(wǎng)上實(shí)時(shí)監(jiān)控、調(diào)度車輛,給人們生活帶來(lái)極大的方便。
[1] 劉國(guó)錦,劉新霞.基于S3C2410嵌入式車載定位系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息.2010.
[2] 劉新霞,劉國(guó)錦.GPS車輛監(jiān)控管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息化研究.2009.
[3] 劉國(guó)錦,劉新霞.GPRS無(wú)線數(shù)據(jù)傳輸技術(shù)的應(yīng)用[J].信息化研究.2010.
[4] 丁有和.Visual C++圖形圖像編程技巧[M].青島:青島出版社.2000.
[5] 王志偉,沈杰峰,郭啟峰.基于Socket的GPRS遠(yuǎn)程數(shù)據(jù)采集方法[J].西華大學(xué)學(xué)報(bào)自然科學(xué)版.2006.
[6] 何玉潔.數(shù)據(jù)庫(kù)管理與編程技術(shù)[M].北京:清華大學(xué)出版社.2007.
[7] 劉光.地理信息系統(tǒng)二次開發(fā)教程-語(yǔ)言篇[M].北京:清華大學(xué)出版社.2003.