引言
在解決一個監控系統的信息傳輸問題時,遇到了一些困難,主要的原因是該系統中的數據類型多,發送的方向雜,控制起來比較繁瑣。而引入XML文件后使得這個問題變得簡單化。
1 監控系統的數據通信
數據通信是依照一定的通信協議,利用數據傳輸技術在兩個終端之間傳遞數據信息。它可實現計算機和計算機、計算機和終端以及終端與終端之間的數據信息傳遞。在分布式監控系統中,數據通信是最基本的問題。如圖1所示是一個比較典型的站點式遠程監控系統的模型。
在這個系統中,監控中心和站點之間要相互發送數據,基本上有三種情況:
(1) 站點→監控中心
如站點采集到的現場數據、抓拍的圖片信息、報警信息、站點收到監控中心發來的數據后回發的確認應答信息等。
(2) 監控中心→站點
如監控中心發往站點的基礎數據與系統運行參數、監控中心收到站點發來的數據后回發的確認應答信息、監控中心給站點的遠程控制指令等。
(3) 站點→站點
有些事務可能需要兩個站點共同完成(如在站點A稱得皮重,在站點B稱得毛重,兩個站點要相互交換數據才能得到凈重值),因此在站點之間也會發送數據,而這些數據監控中心是不關心地。
由此可見,在這個站點式監控系統中有多種數據要互相發送,并且數據的發送是隨機的、雜亂的、動態的,內容相異,格式不同,種類繁多。另外,監控中心通過局域網連接Internet,可以有固定的IP地址,而站點使用ADSL連接,通常其IP地址是不固定的,用Socket通信機制作為系統的數據通道時,把監控中心做為Socket Server,啟動偵聽,站點只能做Socket Client,主動連接Server。站點之間若要相互傳送數據,則只能通過監控中心來轉發,更增加了監控中心和站點之間收發數據的復雜性。
2 XML及其特點
XML(EXtensible Markup Language)是可擴展標記語言,類似于HTML,但和HTML不同的是XML的標記不是預先定義好的,用戶可以且必須自己定義標記。XML是用來描述數據和保存數據的一種靈活而有效的方式,能夠清楚地表示出:什么是數據,有什么數據及如何組織數據。XML是Web上表示結構化信息的一種標準文本格式,廣泛用于網絡數據交換,具有“易于生成數據”的優點。
XML支持世界上幾乎所有的主要語言,并且不同語言的文本可以在同一文檔中混合使用,應用XML的軟件能處理這些語言的任何組合。所有這一切將使XML成為數據表示的一個開放標準,這種數據表示獨立于機器平臺、供應商以及編程語言。
XML被引入許多網絡協議,以便于為二個軟件提供相互通信的標準方法,如簡單對象訪問協議(SOAP)和XML-RPC規范。
XML數據是以純文本格式存儲的,提供了一種與軟件和硬件無關的共享數據方法,所以XML數據文件可以被更多的用戶、更多的設備所利用,而不僅僅是基于HTML標準的瀏覽器。
XML是不同系統之間的橋梁。
3 系統模型的建立
根據監控系統的功能要求和XML的特點,將系統的數據通信問題轉化為如何實現網絡文件傳輸和如何使用XML文件表示數據這兩個子問題。同時,為了便于實現,提高系統的可靠性、穩定性及可維護性,采用層次結構,將系統的功能劃分為七層模型,如圖2所示:
(1) 物理鏈路層
是指網絡通訊的線路,本系統采用電信的ADSL有線方式,其它也可以是局域網(雙絞線、同軸電纜、光纖等)或者無線通訊方式(GPRS、GSM、CDMA等);物理鏈路層是系統數據通信的基礎,但與上層的實現方式基本無關。
(2) 標準網絡協議層
是指TCP/IP(TransmissionControl Protocol/InternetProtocol)協議族,網絡中TCP/IP協議叫做傳輸控制/網際協議,又叫網絡通訊協議,是Internet國際互聯網絡的基礎,其中的TCP協議和UDP(User Datagram Protocol)協議是兩種最常用的數據通信協議。
(3) 文件傳輸層
使用Socket(套接字)技術實現文件的傳輸。Socket是Windows與網絡的接口。Windows通過Socket把數據格式轉換成網絡傳輸格式,也把網絡數據格式轉換成Windows格式。Socket可以使用面向連接的協議(如TCP),也可以使用無連接的協議(如UDP)。Socket一般用來描述IP地址和端口,是一個通信鏈接的句柄。應用程序通常通過Socket向網絡發出請求或者應答網絡請求,可以通過Socket傳送數據,進一步封裝成傳送任何文件(字節流)的功能。
(4) XML文件控制層
在XML中的數據可能是接收到的數據,也可能是要發送的數據,監控中心和站點必須準確控制XML文件的接收和發送。特別是對于監控中心,可能同時接收到多個站點發送來的XML文件,發送XML文件時也要準確控制發送的目標站點。
(5) XML文件封裝/解析層
這是兩個相逆的過程,也是兩種相對應的操作。XML文件封裝是指將要發送的數據按照一定的協議打包組裝成一個特定格式的XML文件,解析是指對一個XML文件按照特定的協議進行分析解讀,還原出其中所描述的數據。
(6) 數據表示層
將采集到的數據、處理中的數據或者在數據庫中存儲的數據等各種數據格式轉換為能夠用XML文件描述的格式。這一層在本地操作的數據和遠程傳輸的數據之間建立了一個通道,使兩者之間互不影響,從而不會降低系統的執行效率。
(7) 業務邏輯層
實際上就是整個系統的用戶接口,或者說是系統功能的實現層,包括打印單據、防作弊、報警處理、用戶管理、查詢統計、費用計算、實時監控、基礎數據錄入、系統管理等。
4 系統實現
4.1 網絡文件傳輸
4.1.1 動態鏈接庫
本系統使用VC++開發專門用于網絡文件傳輸的動態鏈接庫(DLL),基于對字節流的處理可以傳輸任何文件,因此對于XML文件的傳輸來說是透明的。該動態鏈接庫的主要接口及其功能如下:
(1) 初始化
服務器端要先啟動監聽,客戶端主動聯接。
DWORD DT_Net_InitServer(BOOL bIsServer = TRUE);
參數:bIsServer表示是否將此Socket端用作服務返回:0或者錯誤代碼
(2) 設置回調函數接口
DWORD DT_Net_SetCallBack(LPVOID pParam,LPNET_ACCEPT_CALLBACK pAccept,LPNET_RECV_CALLBACK pRevc,LPNET_DISCONN_CALLBACK pDisConnect,LPNET_LOG_CALLBACK pLogInfo);
包括請求連接、接收到數據、斷開連接和日志回調。
(3) 設置文件操作的回調函數接口
DWORD DT_Net_SetFileCallBack(LPCTSTR pSavePath,LPNET_SENDFILE_CALLBACK pSendFile,LPNET_RECVFILE_CALLBACK pRecvFile,LPNET_ABORTFILE_CALLBACKpAbortFile);
包括文件發送完畢、接收到文件、文件發送中斷的回調。
(4) 服務器啟動監聽
DWORD DT_Net_StartListen(LPCTSTR pszLocalIP,unsigned long nSvrPort);
參數:pszLocalIP-服務器IP地址nSvrPort-服務器端口號返回:0或者錯誤代碼
(5) 服務器停止監聽
DWORD DT_Net_StopListen();
(6) 發送文件
DWORD DT_Net_SendFile(unsigned int nIDSocket,LPCTSTR pstrFileName, LPCTSTR pszReName=NULL);
參數:nIDSocket-Client端套接字句柄pstrFileName-文件名稱(全部路徑)pszReName-文件重命名
(7) 中止文件發送
DWORD DT_Net_AbortFile(unsigned int nIDSocket);
參數:nIDSocket-Client端套接字句柄
(8) 斷開連接
DWORD DT_Net_DisConnect(unsigned int nIDSocket);
參數:nIDSocket-套接字句柄
(9) 連接服務器
D W O R D D T _ N e t _ C o n n e c t R e m o t e ( L P C T S T RpstrRemoteIP, unsigned long nRemotePort);
參數:pstrRemoteIp-服務器IP地址;nRemotePort-服務器端口號
4.1.2 實現文件傳輸
將監控中心作為Socket Server,啟動監聽:DT_Net_InitServer(TRUE);DT_Net_StartListen(ServerIP,ServerPort);
然后設置回調函數:
DT_Net_SetCallBack(self,LPNET_ACCEPT_CALLBACK,LPNET_RECV_CALLBACK,LPNET_DISCONN_CALLBACK,LPNET_LOG_CALLBACK);
DT_Net_SetFileCallBack(PChar('d:\temps'),LPNET_SENDFILE_CALLBACK,LPNET_RECVFILE_CALLBACK,LPNET_ABORTFILE_CALLBACK);
各站點作為Socket Client,也設置回調函數,并主動去連接Server:
DT_Net_InitServer(FALSE);
DT_Net_SetCallBack(self,LPNET_ACCEPT_CALLBACK,LPNET_RECV_CALLBACK,LPNET_DISCONN_CALLBACK,LPNET_LOG_CALLBACK);
DT_Net_SetFileCallBack(PChar('c:\tempc'),LPNET_SENDFILE_CALLBACK,LPNET_RECVFILE_CALLBACK,LPNET_ABORTFILE_CALLBACK);
DT_Net_ConnectRemote(ServerIP,ServerPort);
每個站點和監控中心之間建立唯一的獨立通道,當連接建立成功后,就可以利用該套接字在該站點與監控中心之間收發文件:
DT_Net_SendFile(theSocket,FileName);
4.2 XML文件封裝協議
不同的數據最終封裝成的XML文件是不同的,但是為了便于處理,把每一個XML文件分成兩個主要的部分(Head和Data),如圖3所示:
(1) Head部分系統中的任何一個X M L數據文件都有相同的H e a d (數據包頭), 表明該X M L文件的優先級( p r i o r i t y )、數據種類(FrameType)、來自何處(FromStationNo,站點編號,如果是服務器則為“0”)以及封裝時間(DateTime)。
(2) Data部分這一部分是XML文件所要封裝的數據內容,基本按字段格式排列即可。要注意數據類型轉換的問題,任何數據都必須想方設法轉換成字符串類型的表示形式。
4.3 XML文件控制
在實現了文件傳輸的基礎上,對XML文件的封裝、解析、接收和發送等操作使用多線程方式并行處理,并且引入隊列(Queue)的機制。監控中心的基本處理機制與流程如圖4所示:
文件接收線程接收到XML文件后,先不管文件的具體內容,只負責將文件入隊。然后由專門負責從隊列中提取文件的線程將文件取出,由處理線程進行解析、處理,并將數據保存至數據庫,同時還要生成確認應答的XML文件放如發送隊列中。另外有專門負責發送文件的線程將文件發送出去。監控中心要往各站點發送的數據有一個獨立的線程負責從數據庫中讀取相應數據封裝成XML文件放入發送隊列,等待發送。數據處理線程負責對數據庫中的數據做進一步的業務處理,而系統監管線程主要的任務就是監視其它各個線程的狀態,及時進行調整、修復或者發出報警,以保證系統正常運行。
站點的處理與監控中心的處理比較相似,但更為簡單,因為監控中心面對多個站點,而站點只面對一個監控中心。
要保證監控中西文件處理的速度和系統運行的效率還要考慮以下幾個問題:
(1) 優先級
(2) 區分文件是哪個站點發送來的或者要發送給哪個站點
(3) 文件隊列的管理
雖然XML文件的
部分有優先級和站點編號信息,但是需要解析XML文件才能得到,為此要把文件名定為“優先級_站點編號_流水號。xml”的格式,可在一定程度上方便處理的過程。另外,文件隊列可能存在積壓現象,即入隊快而出隊慢,并且會造成惡性循環使系統性能持續降低,針對這種情況制定一個限度,當隊列中的文件數達到此限度,則停止入隊,即把新生成的XML文件丟棄。
5 結語
利用上述方法解決了一個站點式遠程監控系統的數據傳輸問題,使原本錯綜復雜地、多種格式數據相互收發控制變得邏輯簡單、層次分明、實現方便、安全可靠、穩定高效。經實際應用和測試,該方法是完全可行的,效果很好。
-
數據傳輸
+關注
關注
9文章
1848瀏覽量
64484 -
監控系統
+關注
關注
21文章
3863瀏覽量
173504 -
局域網
+關注
關注
5文章
747瀏覽量
46244
發布評論請先 登錄
相關推薦
評論