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