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