黃 龍
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 610031)
計算機聯(lián)鎖系統(tǒng)是信號系統(tǒng)中關(guān)鍵的安全防護系統(tǒng)。其核心功能就是對車站內(nèi)的道岔、信號機以及軌道電路屏蔽門、防淹門進行實時檢查及控制,保證車站作業(yè)順利執(zhí)行[1-2]。主要涉及采集設(shè)備狀態(tài)信息、人員的操作信息,在進行聯(lián)鎖邏輯運算后,輸出控制命令對設(shè)備進行驅(qū)動[9]。
根據(jù)實際線路,參考VPI型雙機熱備型計算機聯(lián)鎖系統(tǒng),本文考慮通用性城軌計算機聯(lián)鎖仿真系統(tǒng)設(shè)計開發(fā),對一些關(guān)鍵技術(shù)進行了探討,提出解決方案。主要內(nèi)容包括:
利用SQL sever2014具有大容量數(shù)據(jù)存儲的特點,存儲信號機、軌道電路、道岔以及進路等線路靜態(tài)數(shù)據(jù),在一定程度上提高了線路設(shè)備存儲的規(guī)范性和通用性;基于VS2013軟件開發(fā)平臺,采用C#語言設(shè)計系統(tǒng)底層軟件,實現(xiàn)對計算機聯(lián)鎖線路的建模和邏輯運算,闡述了建模的方法和步驟;采用傳輸控制協(xié)議(TCP)構(gòu)建通信系統(tǒng)。
城軌計算機聯(lián)鎖和傳統(tǒng)計算機聯(lián)鎖一樣,按照系統(tǒng)層次結(jié)構(gòu)分類,可以分為3個層次,即聯(lián)鎖上位機 (人機會話層)、聯(lián)鎖邏輯運算層和采集驅(qū)動層[3]。
仿真平臺能根據(jù)線路設(shè)備靜態(tài)數(shù)據(jù)編制數(shù)據(jù)庫,繪制平面布置圖,并生成進路表。點擊上位機設(shè)備生成操作命令,傳輸至聯(lián)鎖邏輯層進行聯(lián)鎖邏輯判斷,并生成驅(qū)動信息傳至驅(qū)動板驅(qū)動設(shè)備,并使對應(yīng)設(shè)備驅(qū)動表示燈閃爍3 s。采集驅(qū)動仿真平臺中采集板時刻采集上位機的設(shè)備狀態(tài),點亮對應(yīng)設(shè)備表示燈,并將設(shè)備狀態(tài)信息回傳給聯(lián)鎖運算層。軟件實現(xiàn)中通過TCP通信接口實現(xiàn)上位機操作命令、驅(qū)動命令以及采集信息的互聯(lián)互通。系統(tǒng)整體框架如圖1所示。
圖1 計算機聯(lián)鎖系統(tǒng)結(jié)構(gòu)
TCP/UDP協(xié)議由數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層4層結(jié)構(gòu)組成。
其中TCP是面向連接的協(xié)議,在收發(fā)數(shù)據(jù)之前需要進行3次握手,成功后才能建立可靠連接。確保了通信數(shù)據(jù)可靠、順序到達目的地。針對不同的鏈接分配獨立緩沖區(qū),進一步減少可能的丟包問題[4-5]。
UDP協(xié)議面向無連接通信,可能出現(xiàn)丟失、亂序到達的問題,同樣由于沒有流控制,如果開發(fā)控制不當,可能導(dǎo)致數(shù)據(jù)風暴問題[4-5]。
本文采用TCP通信,以保證計算機聯(lián)鎖系統(tǒng)數(shù)據(jù)傳輸?shù)膶崟r性、有效性、可靠性。
在本設(shè)計中,需要將聯(lián)鎖上位機,聯(lián)鎖邏輯層和采集驅(qū)動系統(tǒng)建立通信。采用同一IP地址綁定多個端口的方法,實現(xiàn)不同設(shè)備操作命令和驅(qū)動信息的獨立傳輸,使信息傳輸高效可靠。在本系統(tǒng)中,IP地址統(tǒng)一設(shè)置為127.0.0.1,采用4個端口分別傳輸信息。聯(lián)鎖上位機與采集驅(qū)動系統(tǒng)TCP通信設(shè)計與實現(xiàn)原理圖如圖2所示。(1)端口號8888,以該端口實現(xiàn)聯(lián)鎖上位機的設(shè)備狀態(tài)信息傳輸和進路辦理;(2)端口號8889,以該端口實現(xiàn)信號機操作命令和驅(qū)動信息的傳輸;(3)端口號8890,以該端口實現(xiàn)軌道電路操作命令和驅(qū)動信息的傳輸;(4)端口號8891,以該端口實現(xiàn)道岔操作命令和驅(qū)動信息的傳輸。
圖2 TCP通信設(shè)計與實現(xiàn)原理圖
聯(lián)鎖數(shù)據(jù)由靜態(tài)數(shù)據(jù)和動態(tài)數(shù)據(jù)兩部分共同組成,兩種數(shù)據(jù)相互關(guān)聯(lián)、缺一不可[6]。
計算機聯(lián)鎖線路中需要存儲道岔、信號機、軌道區(qū)段、進路等大量數(shù)據(jù),采用數(shù)據(jù)庫存儲有利于數(shù)據(jù)的規(guī)范、擴展和增強配置數(shù)據(jù)通用性。若要對不同的聯(lián)鎖區(qū)進行相關(guān)設(shè)計,只需要按照實際線路的設(shè)備數(shù)據(jù)在數(shù)據(jù)庫中重新配置即可。
“進路表”和“站場形”是聯(lián)鎖軟件兩種不同形式的靜態(tài)數(shù)據(jù)結(jié)構(gòu)。進路表方式較站場形數(shù)據(jù)結(jié)構(gòu)方式而言,實現(xiàn)起來較為簡易且搜索過程簡單。站場形方式一旦指針發(fā)生錯誤,則會產(chǎn)生一些程序搜索問題,很難發(fā)現(xiàn)和找到問題所在。故本文采用進路表方式靜態(tài)數(shù)據(jù)結(jié)構(gòu)。把信號機、道岔、軌道電路、絕緣節(jié)、進路的靜態(tài)數(shù)據(jù)分類存放到數(shù)據(jù)庫中[6]。
聯(lián)鎖數(shù)據(jù)中的靜態(tài)數(shù)據(jù)指不發(fā)生變化的數(shù)據(jù)。信號機靜態(tài)數(shù)據(jù)包括編號、名稱、類型、方向、內(nèi)方第一區(qū)段、防護方向,橫坐標以及縱坐標;軌道電路靜態(tài)數(shù)據(jù)包括編號、名稱,始端橫坐標和縱坐標、終端橫坐標與縱坐標、軌道類型、名稱位置等靜態(tài)數(shù)據(jù);道岔靜態(tài)數(shù)據(jù)包括編號、名稱、岔心橫縱坐標,道岔類型,名稱位置等數(shù)據(jù)。
在軟件實現(xiàn)中,每個靜態(tài)數(shù)據(jù)都定義一個變量來存儲數(shù)據(jù)庫中對應(yīng)的信息,形成設(shè)備靜態(tài)數(shù)據(jù)模塊。以信號機為例,其數(shù)據(jù)模塊如表1所示。
表1 信號機靜態(tài)數(shù)據(jù)模塊
仿真系統(tǒng)動態(tài)數(shù)據(jù)包括操作變量、狀態(tài)變量、控制變量。
操作變量為操作人員點擊按鈕需要的變量,操作人員在聯(lián)鎖上位機完成點擊操作之后,上位機程序?qū)Σ僮髦噶钚畔⑦M行處理,形成一條合法的操作命令,傳送至聯(lián)鎖邏輯運算模塊進行處理。
仿真系統(tǒng)控制變量,用于存儲經(jīng)邏輯處理后的設(shè)備驅(qū)動命令,控制信號機的開放、關(guān)閉和道岔的定位、反位動作以及軌道的占用出清。
狀態(tài)變量用于存儲上位機設(shè)備狀態(tài)信息,反映信號機、道岔、軌道電路目前工作狀態(tài)。狀態(tài)信息的傳輸刷新周期設(shè)置為1.5 s。設(shè)置timer將上位機狀態(tài)信息發(fā)送至采集驅(qū)動系統(tǒng)和聯(lián)鎖邏輯層,以便實時檢測設(shè)備狀態(tài)信息及下一次對操作命令的處理。
以道岔動態(tài)數(shù)據(jù)結(jié)構(gòu)為例,定義布爾變量包反映道岔定操、反操、擠岔、單鎖以及單解等。其動態(tài)數(shù)據(jù)結(jié)構(gòu)為:
SQL Server 是由 Microsoft 開發(fā)和推廣的,具有開放、操作簡單、安全性高,可伸縮性和可擴展性好以及與相關(guān)軟件集成程度高等優(yōu)點,為關(guān)系型數(shù)據(jù)和結(jié)構(gòu)化數(shù)據(jù)提供了更安全可靠的存儲功能[7]。
本文數(shù)據(jù)庫共包含8個數(shù)據(jù)表,每一個數(shù)據(jù)表均可供程序調(diào)用。數(shù)據(jù)表對象的設(shè)計視圖與靜態(tài)數(shù)據(jù)模塊設(shè)計結(jié)構(gòu)相一致。
以信號機為例,信號機表:用于存放信號機的名稱、編號、類型、坐標、信號機方向、信號機防護方向和內(nèi)方第一區(qū)段信息。數(shù)據(jù)庫的實現(xiàn)如圖3所示。
圖3 數(shù)據(jù)庫的實現(xiàn)實例
聯(lián)鎖上位機界面主要包括界面顯示模塊和功能實現(xiàn)模塊。
界面顯示主要包括界面初始化顯示以及驅(qū)動顯示,顯示設(shè)備主要包括信號機、軌道電路、道岔、絕緣節(jié)以及聯(lián)鎖區(qū)特殊設(shè)備及按鈕。為了系統(tǒng)的通用性及可擴展性,界面布置中利用hScrollBar1_Scroll和vScrollBar1_Scroll控件自定義滾動條,通過滾動滾動條實現(xiàn)整條線路的布置。
對于界面初始化顯示,這里主要介紹信號機、軌道電路、道岔以及絕緣節(jié)的繪制過程。界面初始化流程圖和初始化界面如圖4和圖5所示。
對于界面驅(qū)動顯示,根據(jù)經(jīng)聯(lián)鎖邏輯回傳的驅(qū)動命令,改變站場設(shè)備的動態(tài)數(shù)據(jù)(布爾值),在界面中設(shè)置timer定時器,采用GDI+技術(shù)根據(jù)設(shè)備最新布爾值對設(shè)備進行刷新重繪。
圖4 界面初始化流程圖
圖5 初始化界面
聯(lián)鎖系統(tǒng)的功能主要包括軌道電路信息處理、進路控制、道岔控制、信號顯示以及跟其他系統(tǒng)接口交換信息等[8]。
本文的聯(lián)鎖功能全部使用對應(yīng)功能按鈕實現(xiàn),操作人員必須首先點擊相關(guān)功能按鈕,功能操作變量存儲功能按鈕類別,根據(jù)功能操作變量類別再采用坐標位置匹配的方式查找到對應(yīng)設(shè)備鼠標右擊,這一過程都在Form1_MouseClick(object sender, MouseEvent-Args e)函數(shù)中執(zhí)行。部分功能按鈕如圖6所示。
圖6 計算機聯(lián)鎖功能按鈕
坐標位置匹配是指利用鼠標左鍵點擊時的坐標位置,去循環(huán)匹配線路中設(shè)備的坐標位置,找到對應(yīng)功能操作的設(shè)備,并發(fā)送對應(yīng)的操作命令。操作命令基本格式:功能標識(包頭)+設(shè)備標識+設(shè)備編號+設(shè)備名稱,設(shè)備標識分為4類,如表2所示。
信號機:作為進路始、終端,發(fā)送數(shù)據(jù)包頭部“0x00”。對其單獨操作,包括信號重開,燈斷絲,信號封鎖操作,發(fā)送數(shù)據(jù)包頭部“0x01”。
表2 操作命令分類
軌道區(qū)段:對其單獨操作,包括軌道電路“占用”“出清”操作,發(fā)送數(shù)據(jù)包頭部“0x02”。
道岔:對其單獨操作,包括道岔定位操作,反位操作,單鎖,單解等操作,發(fā)送數(shù)據(jù)包頭部“0x03”。
點擊設(shè)備功能按鈕,將帶有標識的數(shù)據(jù)包發(fā)送至聯(lián)鎖邏輯運算層,聯(lián)鎖邏輯運算模塊根據(jù)數(shù)據(jù)包頭類型,分別進行布爾表達式運算,并將驅(qū)動信息經(jīng)采集驅(qū)動層回傳至聯(lián)鎖上位機驅(qū)動設(shè)備。
以進路和道岔控制為例,功能實現(xiàn)結(jié)構(gòu)如圖7所示。
采集驅(qū)動仿真系統(tǒng)采用A機和B機雙機熱備,正常情況下由A機參與,故障時切換至B機。系統(tǒng)由采集模塊,驅(qū)動模塊以及數(shù)據(jù)傳輸模塊組成。采集模塊實時采集設(shè)備狀態(tài)信息,并將對應(yīng)的表示燈點亮。驅(qū)動模塊接收進邏輯運算后的驅(qū)動命令,并開放驅(qū)動通道,表現(xiàn)為驅(qū)動設(shè)備對應(yīng)的表示燈閃爍3 s后停止。數(shù)據(jù)傳輸模塊由3部分組成:設(shè)備動態(tài)數(shù)據(jù)布爾表達式顯示;操作命令顯示;驅(qū)動命令顯示。以采集板為例,組成如圖8所示。
系統(tǒng)測試過程在實驗室中進行,系統(tǒng)采用從數(shù)據(jù)庫中獲取靜態(tài)數(shù)據(jù),初始化界面。然后通過點擊設(shè)備發(fā)送操作命令,經(jīng)由邏輯判斷后驅(qū)動設(shè)備。最后將驅(qū)動數(shù)據(jù)和設(shè)備狀態(tài)信息反映道采集驅(qū)動仿真系統(tǒng)中。以辦理基本進路為例,對系統(tǒng)進行功能測試。
圖7 進路和道岔控制結(jié)構(gòu)圖
圖8 采集板組成實例
點擊辦理進路按鈕,然后點擊始端信號機按鈕,使能以此信號機為始端辦理進路的終端信號機閃爍。系統(tǒng)顯示如圖9所示。
圖9 預(yù)辦理進路顯示
點擊上位機終端信號機按鈕,成功辦理側(cè)線進路并鎖閉,始端信號機顯示黃色。此時采集驅(qū)動仿真系統(tǒng)中采集板采集到設(shè)備狀態(tài)信息,驅(qū)動板顯示驅(qū)動設(shè)備,數(shù)據(jù)傳輸記錄過程數(shù)據(jù)。如圖10、圖11和圖12所示。
圖10 上位機顯示
圖11 采集板顯示
圖12 數(shù)據(jù)傳輸記錄
本文通過數(shù)據(jù)庫存儲線路信息,繪制站場圖,利用功能按鈕和鼠標點擊坐標匹配方式,判斷操作人員進行的操作。根據(jù)操作設(shè)備的不同,經(jīng)由不同的傳輸端口,發(fā)送不同的操作命令給聯(lián)鎖邏輯層。邏輯層進行對應(yīng)的邏輯處理并回傳驅(qū)動信息,以達到驅(qū)動設(shè)備目的。整個系統(tǒng)只需要設(shè)計人員在數(shù)據(jù)庫中正確輸入線路的設(shè)備信息,利用底層軟件就可以實現(xiàn)不同線路計算機聯(lián)鎖系統(tǒng)設(shè)計。本文聯(lián)鎖系統(tǒng)設(shè)計的通用性研究主要通過數(shù)據(jù)庫實現(xiàn),還未得到應(yīng)用,有一定局限性和缺陷,有待改善。