梁豆豆, 范多旺,陳光武
(蘭州交通大學(xué) 光電技術(shù)與智能控制教育部重點(diǎn)實(shí)驗(yàn)室,蘭州 730070 )
車站聯(lián)鎖控制系統(tǒng)是鐵路運(yùn)輸領(lǐng)域的重要控制系統(tǒng),目前隨著計(jì)算機(jī)聯(lián)鎖技術(shù)的日趨完善,計(jì)算機(jī)聯(lián)鎖控制成為聯(lián)鎖控制的主要形式,實(shí)現(xiàn)高可靠的通信模塊進(jìn)行聯(lián)鎖系統(tǒng)內(nèi)部的數(shù)據(jù)傳輸,具有很強(qiáng)的實(shí)際意義。目前套接字(Socket)為開發(fā)網(wǎng)絡(luò)應(yīng)用程序非常有效快捷的工具,可以很方便訪問TCP/IP。本設(shè)計(jì)就使用Socket來實(shí)現(xiàn)計(jì)算機(jī)聯(lián)鎖仿真系統(tǒng)的通信模塊。
計(jì)算機(jī)聯(lián)鎖系統(tǒng)結(jié)構(gòu)如圖1,本設(shè)計(jì)中分別由監(jiān)控機(jī)、聯(lián)鎖機(jī)、模擬機(jī)(模擬實(shí)現(xiàn)監(jiān)控層和室外設(shè)備層)實(shí)現(xiàn)。
監(jiān)控機(jī)發(fā)送操作控制命令給聯(lián)鎖機(jī),并接收來自聯(lián)鎖機(jī)的命令執(zhí)行結(jié)果及站場中各信號(hào)設(shè)備的狀態(tài)表示信息,將其顯示到屏幕上。
聯(lián)鎖機(jī)負(fù)責(zé)接收監(jiān)控機(jī)的操作控制命令,根據(jù)來自模擬機(jī)的現(xiàn)場設(shè)備實(shí)時(shí)狀態(tài)進(jìn)行聯(lián)鎖邏輯運(yùn)算,并將運(yùn)算的結(jié)果發(fā)送到監(jiān)控機(jī)和模擬機(jī)。
模擬機(jī)接收來自聯(lián)鎖機(jī)的控制命令,改變信號(hào)設(shè)備狀態(tài),實(shí)時(shí)顯示現(xiàn)場設(shè)備狀態(tài),并且模擬現(xiàn)場信號(hào)設(shè)備的故障狀態(tài)。
在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是C/S模式,即客戶機(jī)向服務(wù)器提出請(qǐng)求,服務(wù)器接收到請(qǐng)求后提供相應(yīng)的服務(wù)。
C/S模式在操作過程中采取主動(dòng)請(qǐng)求的方式。服務(wù)器方要先啟動(dòng)并根據(jù)請(qǐng)求提供相應(yīng)的服務(wù):
(1) 打開一個(gè)通信通道并告知本地主機(jī)在某一地址和端口上接收客戶請(qǐng)求。(2) 等待客戶請(qǐng)求到達(dá)該端口。(3) 接收到服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。服務(wù)完成后關(guān)閉與客戶端的通信鏈路,并終止。(4) 返回第二步,等待另一客戶請(qǐng)求。(5) 關(guān)閉服務(wù)器。
圖1 計(jì)算機(jī)聯(lián)鎖系統(tǒng)結(jié)構(gòu)
客戶端:
(1) 打開一個(gè)通信通道,并連接到服務(wù)器所在的主機(jī)特定端口。(2) 向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求。(3) 請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。
套接字是一個(gè)通訊標(biāo)示,由一個(gè)短整數(shù)表示,實(shí)際上是一個(gè)句柄,代表網(wǎng)絡(luò)協(xié)議中的一組數(shù)據(jù),該數(shù)據(jù)包含了通信雙方的IP地址和當(dāng)前連接狀態(tài)等信息,由協(xié)議、地址、端口來描述并唯一確定。
套接字的類型有流式套接字,數(shù)據(jù)報(bào)式套接字,原始套接字。流式套接字實(shí)際上是基于TCP協(xié)議實(shí)現(xiàn)的,它提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)的發(fā)送,且按發(fā)送順序接收。本設(shè)計(jì)使用流式套接字實(shí)現(xiàn)。
計(jì)算機(jī)聯(lián)鎖系統(tǒng)各組成部分之間的數(shù)據(jù)傳輸內(nèi)容如圖2所示。
圖2 數(shù)據(jù)傳輸示意圖
(1)按鈕控制命令包括:列車按鈕、調(diào)車按鈕、道岔按鈕、閉塞按鈕以及功能按鈕。其中功能按鈕包括上(下)行引導(dǎo)總鎖閉按鈕、總定位按鈕、總反位按鈕、單鎖按鈕、單解按鈕、封鎖按鈕、封解按鈕、進(jìn)路故障解鎖按鈕、區(qū)段故障解鎖按鈕、關(guān)信號(hào)按鈕、總?cè)∠粹o、總?cè)私獍粹o。
(2)信號(hào)設(shè)備狀態(tài)信息包括:信號(hào)機(jī)、道岔、區(qū)段、進(jìn)路的狀態(tài)信息。具體如下:
a.信號(hào)機(jī):信號(hào)顯示、燈絲狀態(tài);b.道岔:定位、反位、四開、擠岔、封鎖、單鎖;c.區(qū)段:占用狀態(tài)。d.進(jìn)路:鎖閉狀態(tài)。
(3)設(shè)備控制命令包括:道岔轉(zhuǎn)換命令、道岔單鎖命令、道岔單解命令、道岔封鎖命令、道岔封解命令、信號(hào)顯示改變命令。
(4)信號(hào)設(shè)備狀態(tài)信息包括:信號(hào)機(jī)、道岔、區(qū)段狀態(tài)信息,與(2)中的相同。
在C/S通信模式中,聯(lián)鎖機(jī)作為聯(lián)鎖系統(tǒng)的核心控制監(jiān)控機(jī)、模擬機(jī)的數(shù)據(jù)傳輸,所以聯(lián)鎖機(jī)為客戶端,監(jiān)控機(jī)和模擬機(jī)為服務(wù)器端。
聯(lián)鎖仿真系統(tǒng)通信要求具體如下:
(1)監(jiān)控機(jī):能即時(shí)發(fā)送按鈕控制命令,同時(shí)能即時(shí)接收聯(lián)鎖機(jī)發(fā)送的現(xiàn)場設(shè)備狀態(tài)信息。
(2)聯(lián)鎖機(jī):能夠即時(shí)接收監(jiān)控機(jī)發(fā)送的按鈕控制命令和模擬機(jī)發(fā)送的現(xiàn)場設(shè)備狀態(tài)信息,定時(shí)向監(jiān)控機(jī)發(fā)送設(shè)備狀態(tài)信息,且定時(shí)向模擬機(jī)發(fā)送設(shè)備控制命令。
(3)模擬機(jī):即時(shí)接收來自聯(lián)鎖機(jī)的設(shè)備控制命令,并定時(shí)向聯(lián)鎖機(jī)發(fā)送設(shè)備狀態(tài)信息。
(4)整個(gè)系統(tǒng)通信周期小于300 ms。
4.2.1 監(jiān)控機(jī)顯示界面
監(jiān)控機(jī)顯示界面用VC++實(shí)現(xiàn),考慮到通信模塊與界面顯示模塊之間的兼容以及監(jiān)控機(jī)的通信要求,用MFC中的CAsyncSocket類來實(shí)現(xiàn),CA-syncSocket類對(duì)Windows Socket API進(jìn)行了簡單的封裝,可以在較深層次上控制通信過程。聯(lián)鎖機(jī)在Win32控制臺(tái)下用C語言實(shí)現(xiàn),所以通信部分用Windows Socket API函數(shù)來實(shí)現(xiàn),為保證聯(lián)鎖程序的實(shí)時(shí)運(yùn)行和數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,使用多線程技術(shù)來實(shí)現(xiàn),其中讀和寫分別為單獨(dú)的線程。編程時(shí)序圖如圖3。
4.2.2 監(jiān)控機(jī)具體的實(shí)現(xiàn)過程
(1)初始化套接字AfxSocketInit()。
(2)調(diào)用Create函數(shù)創(chuàng)建ClisteningSocket內(nèi)嵌的SOCKET句柄,ClisteningSocket.Create(),并開始偵聽端口ClisteningSocket.Listen()。
(3)當(dāng)有聯(lián)鎖機(jī)連接請(qǐng)求時(shí),觸發(fā)CListening-Socket 類OnAccept()函數(shù),在OnAccept()函數(shù)中調(diào)用Accept()函數(shù)接收連接,同時(shí)返回CClient-Socket內(nèi)嵌的SOCKET句柄。
圖3 編程時(shí)序圖
(4)當(dāng)有數(shù)據(jù)被接收時(shí),觸發(fā)CClientSocket類OnReceive()函數(shù),在OnReceive()中調(diào)用Receive()函數(shù)讀取數(shù)據(jù)。
(5) 在按鈕響應(yīng)函數(shù)中用CClientSocket.Send()發(fā)送數(shù)據(jù)。
4.2.3 聯(lián)鎖機(jī)具體的實(shí)現(xiàn)過程
(1) 加載套接字庫。(2) 創(chuàng)建套接字Socket()。(3) 向監(jiān)控機(jī)發(fā)起連接請(qǐng)求 Connect()。(4)發(fā)送數(shù)據(jù)Send(),接收數(shù)據(jù)Receive()。
聯(lián)鎖機(jī)采用多線程來實(shí)現(xiàn),存在多個(gè)線程對(duì)同一資源的讀寫問題,例如對(duì)于設(shè)備狀態(tài)信息,聯(lián)鎖機(jī)進(jìn)行聯(lián)鎖運(yùn)算的過程中會(huì)改變這些狀態(tài),同時(shí)要讀取來自模擬機(jī)的現(xiàn)場信息,還要向監(jiān)控機(jī)發(fā)送狀態(tài)信息,有可能會(huì)出現(xiàn)非同步的結(jié)果。這就涉及到線程同步的問題,線程同步的方法有很多,最常用的有互斥、臨界區(qū)、信號(hào)量、事件等。
4.2.4 線程同步方法
(1)互斥就是一個(gè)線程對(duì)共享資源進(jìn)行訪問時(shí)排斥其他的線程,互斥對(duì)象建立之后,程序運(yùn)行時(shí)只有擁有互斥對(duì)象的線程有訪問共享資源的權(quán)利,如果線程對(duì)共享資源訪問結(jié)束,則釋放互斥對(duì)象,好讓其他線程擁有對(duì)共享資源的訪問權(quán)利。
(2)臨界區(qū)和互斥類似,臨界區(qū)是一段以獨(dú)占方式訪問共享資源的代碼段,只要進(jìn)入臨界區(qū)的線程沒有離開,其他試圖進(jìn)入臨界區(qū)的線程將被掛起而進(jìn)入到等待狀態(tài),并一直持續(xù)到進(jìn)入臨界區(qū)的線程離開。
(3)信號(hào)量允許多個(gè)線程在同一時(shí)刻訪問同一種資源,但是需要限制在同一時(shí)刻訪問此資源的最大線程數(shù)目,超過這個(gè)最大數(shù)的線程將不允許訪問此資源,如果將最大線程數(shù)設(shè)為一,那么跟前面的用法類似。
(4)事件內(nèi)核通過通知操作的方式來保持線程的同步。
(5)聯(lián)鎖機(jī)與模擬機(jī)之間的通信與前者相似。
為保證數(shù)據(jù)傳輸?shù)目煽啃裕捎帽苠e(cuò)和容錯(cuò)相結(jié)合的技術(shù)。避錯(cuò)技術(shù)是采用可靠的器件,抗干擾的通道介質(zhì)以及嚴(yán)格的工藝措施等以減少故障發(fā)生的概率,但不一定能滿足系統(tǒng)的可靠性要求。因此必須結(jié)合容錯(cuò)技術(shù)。容錯(cuò)技術(shù)從傳輸網(wǎng)絡(luò)和傳輸編碼兩方面考慮。傳輸網(wǎng)絡(luò)可采用多路冗余工業(yè)以太網(wǎng)。采用合適的編碼可以達(dá)到一定的檢錯(cuò)和糾錯(cuò)功能,從目前使用的安全系統(tǒng)來看,多采用標(biāo)準(zhǔn)的編碼形式。
在聯(lián)鎖實(shí)時(shí)控制系統(tǒng)中,要求數(shù)據(jù)及時(shí)刷新,因此可利用周期循環(huán)傳輸?shù)奶攸c(diǎn)采取比較或表決方法提高數(shù)據(jù)接收與輸出的安全性。考慮到數(shù)據(jù)信息傳輸與處理的連續(xù)性,聯(lián)鎖數(shù)據(jù)應(yīng)不斷的進(jìn)行存儲(chǔ)與刷新,在存儲(chǔ)的信息中加以時(shí)間標(biāo)志,用新的狀態(tài)碼核心的時(shí)間標(biāo)志覆蓋原存的內(nèi)容. 例如采用2 個(gè)字節(jié)代表一個(gè)數(shù)據(jù)信息,第1字節(jié)為設(shè)備狀態(tài),第2字節(jié)中加入時(shí)間標(biāo)志,在使用時(shí)檢查它的時(shí)間標(biāo)志是否過時(shí),從而提高安全性。
計(jì)算機(jī)聯(lián)鎖仿真系統(tǒng)采用基于Socket的網(wǎng)絡(luò)通信,能達(dá)到系統(tǒng)通信性能指標(biāo)要求,并且計(jì)算機(jī)聯(lián)鎖仿真系統(tǒng)是一個(gè)可靠性要求很高的系統(tǒng), 運(yùn)用相關(guān)的避錯(cuò)容錯(cuò)技術(shù)和其他相關(guān)技術(shù),保障數(shù)據(jù)信息傳輸中的安全性,對(duì)于整個(gè)系統(tǒng)尤為重要。
[1] 趙志熙 . 計(jì)算機(jī)聯(lián)鎖系統(tǒng)技術(shù)[M]. 北京:中國鐵道出版社,1999.
[2] 孫 鑫,余安萍. VC++深入詳解[M]. 北京: 電子工業(yè)出版社,2006.
[3] 明日科技,宋 坤,劉銳寧,李偉明. Visual C++開發(fā)技術(shù)大全[M]. 北京:人民郵電出版社,2007.
[4] 袁藝芳,徐茂生. 計(jì)算機(jī)聯(lián)鎖系統(tǒng)可靠性研究[J]. 北京交通大學(xué)學(xué)報(bào). 2002,26(3):24-35.
[5] 黃翌虹,張 源,段 東. 計(jì)算機(jī)聯(lián)鎖系統(tǒng)的通信可靠性研究[J]. 北京交通大學(xué)學(xué)報(bào),2004,28(2):58-59.