計算機聯(lián)鎖系統(tǒng)具有實時性、經(jīng)濟性、功能可擴展性的特點,成為車站進路自動化控制所使用的主要技術(shù)手段。該系統(tǒng)通過計算機程序?qū)φ緢鲈O(shè)備的工作狀態(tài)和操作人員操作指令進行邏輯運算,完成對信號機、道岔和進路的聯(lián)鎖及控制,保障列車在車站按照既定計劃安全通過或???。
隨著站場規(guī)模的擴大,車站作業(yè)情況更加繁雜,在這種情況下進行模塊化站場通信結(jié)構(gòu)、數(shù)字化建模對象、簡潔化計算機程序等方面的研究,對計算機聯(lián)鎖系統(tǒng)降本增效具有重要的意義。
謝保峰提出計算機聯(lián)鎖系統(tǒng)應(yīng)具有可編程進路控制功能,以提高列車通過能力、快速運算更大容量信息的能力、信息響應(yīng)更快速實時的控制能力。王峰采用Java語言編寫了聯(lián)鎖控制軟件,提出在控制進路時使用進路搜索算法實現(xiàn)進路選擇。Fatih Mecito?lu基于面向?qū)ο蟮木幊碳夹g(shù),通過創(chuàng)建軟件庫來開發(fā)具有仿真、控制和監(jiān)視功能的車站信號控制系統(tǒng)。
采用標準建模語言(unified modeling language, UML)用例圖、類圖、順序圖、狀態(tài)圖等建模圖形來描述系統(tǒng)的動靜態(tài)元素及模型,以期客觀展現(xiàn)系統(tǒng)邏輯控制層的進路控制業(yè)務(wù),提高系統(tǒng)設(shè)計模型的可讀性;嘗試使用Python語言來實現(xiàn)計算機聯(lián)鎖系統(tǒng)進路控制的功能,并使用wxPython進行系統(tǒng)界面設(shè)計。
根據(jù)《鐵路車站計算機聯(lián)鎖技術(shù)條件》等規(guī)范,進行進路控制作業(yè)機理與規(guī)則分析,利用UML用例圖描述鐵路車站計算機聯(lián)鎖系統(tǒng)的功能,構(gòu)建鐵路車站聯(lián)鎖系統(tǒng)模型以及聯(lián)鎖設(shè)備對象屬性數(shù)據(jù)庫,設(shè)計信號機、道岔和軌道電路等聯(lián)鎖設(shè)備與絕緣節(jié)之間的關(guān)聯(lián)關(guān)系表,使用UML狀態(tài)圖描述進路建立和進路解鎖階段的動態(tài)模型,給出基于絕緣節(jié)坐標邏輯的聯(lián)鎖設(shè)備位置推斷算法。
1.1鐵路車站聯(lián)鎖系統(tǒng)的結(jié)構(gòu)
監(jiān)視和控制進路上相關(guān)設(shè)備按照一定約束和程序動作進而自動完成進路控制業(yè)務(wù)的設(shè)備分為室內(nèi)設(shè)備和室外設(shè)備。信號機、道岔、軌道電路為主要室外設(shè)備,室內(nèi)設(shè)備主要為人機交互層、聯(lián)鎖控制層以及I/O接口層,如圖1所示。進路控制依靠信號機、道岔和軌道電路之間的聯(lián)鎖關(guān)系完成。
圖1 車站聯(lián)鎖系統(tǒng)結(jié)構(gòu)
人機交互層接收操作人員下達聯(lián)鎖命令,并實時顯示站場設(shè)備的位置和狀態(tài)。聯(lián)鎖控制層接收人機交互層的指令和來自I/O接口層所傳遞的關(guān)于室外設(shè)備的狀態(tài)信息,通過聯(lián)鎖機進行邏輯運算和發(fā)送控制指令。I/O接口層將電路板采集的繼電器電路工作狀態(tài)發(fā)送給聯(lián)鎖機,接收聯(lián)鎖機操作指令來驅(qū)動繼電器,進而控制電路的工作狀態(tài)。
1.2 進路控制作業(yè)機理與規(guī)則
進路控制分為進路建立和進路解鎖。進路建立是系統(tǒng)根據(jù)操作人員所下達的指令,邏輯推斷進路的類型(調(diào)車或列車進路)以及列車或車列行進方向(上行或下行、到達或出發(fā)),由進路選擇得到進路上相關(guān)信號機、道岔和軌道電路區(qū)段等信息。轉(zhuǎn)轍機將相關(guān)道岔轉(zhuǎn)換到進路所約束的狀態(tài),確認道岔的位置無誤后將其鎖閉,使進路始端信號機開放允許燈光,保持指示列車或車列的運轉(zhuǎn)。
可將進路解鎖階段分為多種情形:①列車或車列未進入進路階段,可以取消進路或人工解鎖;②列車或車列進入進路階段,有正常解鎖和故障解鎖。其中,正常解鎖,即隨著列車或車列的向前并出清后方的軌道區(qū)段后,后方區(qū)段將自動分段解鎖至整條進路全部自動解鎖完畢。車站聯(lián)鎖的進路控制過程如圖2所示。
圖2 車站聯(lián)鎖的進路控制過程
1.3 系統(tǒng)功能
鐵路車站計算機聯(lián)鎖系統(tǒng)應(yīng)具有顯示并記錄站場設(shè)備實時狀態(tài)和邏輯運算并控制站場設(shè)備狀態(tài)的功能。使用UML用例圖描述的聯(lián)鎖系統(tǒng)功能如圖3所示。
圖3 UML系統(tǒng)功能用例圖
計算機聯(lián)鎖系統(tǒng)的人機交互界面由元素圖標標識的鐵路站場設(shè)備圖、輸入/輸出文本框及進路控制業(yè)務(wù)功能等部分組成。選擇建立進路時,系統(tǒng)的聯(lián)鎖控制層將接收到該指令,然后進行進路選擇等邏輯運算,并給I/O接口層發(fā)送相應(yīng)的操作指令。
若是需要進路解鎖,則選擇相應(yīng)功能按鈕,聯(lián)鎖控制層將會先根據(jù)站場設(shè)備狀態(tài)進行邏輯判斷再去指令解鎖。而且,在人機交互界面的鐵路站場設(shè)備圖中,可以顯示站場設(shè)備實時狀態(tài),輸入/輸出文本框可以顯示當前操作結(jié)果。
1.4 鐵路車站面向?qū)ο蠼?/strong>
車站聯(lián)鎖系統(tǒng)是依靠正確地執(zhí)行進路控制來實現(xiàn)的,而進路控制又是依靠信號機、道岔和軌道電路之間的聯(lián)鎖關(guān)系來完成的。因此,將面向鐵路車站聯(lián)鎖系統(tǒng)的聯(lián)鎖控制層及三大關(guān)鍵聯(lián)鎖設(shè)備對象分別命名為interlocking system(聯(lián)鎖系統(tǒng))、signal(信號機)、point(道岔)、track circuit(軌道電路),并分別命名進路控制中的邏輯元素為joint(絕緣節(jié))、route(進路)、subroute(子進路)。
signal指揮列車或車列在車站進路上運行,被設(shè)置在每段軌道區(qū)段始端,防護該段子進路。車站內(nèi)signal分為列車signal和調(diào)車signal,具有開放、關(guān)閉和滅燈3種狀態(tài)。在開放狀態(tài)時,允許列車或車列進入signal內(nèi)區(qū)段;在關(guān)閉狀態(tài)時,禁止列車或車列進入;在故障狀態(tài)時,signal必須滅燈。
signal處于開放狀態(tài)時有多種情形,進站signal的開放狀態(tài)為綠燈(列車通過)、黃燈(正線到達)、雙黃燈(側(cè)線到達)。出站兼調(diào)車signal的開放狀態(tài)為綠燈(允許列車出站)和月白燈(允許調(diào)車作業(yè))。站內(nèi)signal關(guān)閉為定位狀態(tài)即默認工作狀態(tài),如出站signal定位狀態(tài)顯示紅燈,調(diào)車signal則顯示藍燈。
point確保列車或車列能夠進入不同進路狀態(tài),包括正常工作和非正常工作狀態(tài)。正常狀態(tài)中經(jīng)常開通的位置是定位,其他情況則為反位。非正常工作狀態(tài)是既不在定位也不在反位的四開狀態(tài)。
track circuit包括不含point的無岔區(qū)段track circuit和包含point的道岔區(qū)段track circuit,其狀態(tài)包括調(diào)整狀態(tài)、分路狀態(tài)和斷軌狀態(tài)。調(diào)整狀態(tài)即為無車占用,而有列車或車列占用時則為分路狀態(tài)。對象的命名及其對應(yīng)屬性見表1。
表1 對象命名及其對應(yīng)屬性
joint位于track circuit兩端,起絕緣作用。一般在出站信號機處設(shè)置joint,而joint之間是無岔區(qū)段或是含有point的道岔區(qū)段。為使聯(lián)鎖設(shè)備繼承絕緣節(jié)的坐標屬性,定義Joint作為基類。
基于進路控制作業(yè)機理,系統(tǒng)的聯(lián)鎖控制層能夠?qū)崟r獲取三大設(shè)備對象的工作狀態(tài)、指令鎖閉和解鎖,由此設(shè)計了設(shè)備對象的功能和方法。UML類圖如圖4所示。
圖4 UML類圖
其中,currentState(id)表示可獲取對象當前工作狀態(tài),setState(newstate,list)為進路建立階段根據(jù)指令將對象狀態(tài)屬性鎖定到newstate,在進路解鎖階段可使用unsetState(list)將設(shè)備對象恢復(fù)至默認工作狀態(tài)。利用設(shè)備聯(lián)鎖關(guān)系UML序列圖描述進路控制過程中有關(guān)設(shè)備對象的行為,如圖5所示。
在interlocking system的聯(lián)鎖控制層中,基于始終端signal與其父類joint之間的繼承關(guān)系,邏輯判斷signal所防護的route類型,即droute(調(diào)車進路)還是lroute(列車進路),若是lroute再作進一步類型判斷,結(jié)果包含ddroute(到達)、cfroute(出發(fā))或tgroute(通過)。
在進路建立階段,使用currentState()方法對有關(guān)設(shè)備對象的工作狀態(tài)進行判斷,若該route同時滿足point未被鎖閉、track circuit空閑和signal conflicted(敵對信號機)當前未開放,則選擇該條route。當所排進路被確定時,利用方法setState(),將point轉(zhuǎn)換到規(guī)定的位置并鎖閉、切換track circuit的工作狀態(tài)并將敵對進路鎖閉,最后開放signal并顯示相應(yīng)的顏色和數(shù)目,以實現(xiàn)route setting。
進路解鎖階段,在列車或車列前進方向上,在其出清后方track circuit后,使用方法unsetState()關(guān)閉signal、解鎖track circuit即route,并將point恢復(fù)至定位,以完成route release。
圖5 UML進路控制序列圖
基于面向?qū)ο蟮慕_^程,將室外設(shè)備對象signal、point、track circuit、joint、route的屬性和關(guān)系分別進行數(shù)字化建庫,以此為接下來的車站業(yè)務(wù)實例化提供數(shù)據(jù)庫,進而實現(xiàn)聯(lián)鎖關(guān)系。
2.1 設(shè)備對象屬性數(shù)據(jù)表
對象signal、point、track circuit、joint都有對應(yīng)的ID及name屬性。根據(jù)signal的顯示類別,設(shè)計狀態(tài)字段stateS。設(shè)定signal在開放綠燈時stateS為1、開放黃燈時為2、開放雙黃燈時為3、顯示白燈時為4、滅燈時為5。由于不同性質(zhì)的signal顯示的燈光顏色和數(shù)目不同,所以需設(shè)計性質(zhì)字段property。又由于信號燈所防護的進路分方向,所以需設(shè)計字段direction。
signal數(shù)字化建庫見表2。point的位置狀態(tài)用stateP標識,設(shè)定其處于定位狀態(tài)時,stateP取0;反位狀態(tài)時,取1;四開狀態(tài)時,取2。point數(shù)字化建庫見表3。stateTC代表track circuit的工作狀態(tài),設(shè)定其調(diào)整狀態(tài)時,取值0;分路狀態(tài)時,取值1;斷軌狀態(tài)時,取2。track circuit數(shù)字化建庫見表4。為了在三大聯(lián)鎖設(shè)備之間建立位置上的關(guān)聯(lián),數(shù)字化基類即設(shè)定PositionJx表示joint的坐標,以作為進路分析過程中邏輯推斷的依據(jù)。joint數(shù)字化建庫見表5。
表2 對象屬性表signallist
表3 對象屬性表pointlist
表4 對象屬性表trackcircuitlist
表5 對象屬性表jointlist
2.2 設(shè)備對象關(guān)系數(shù)據(jù)表
為避免列車或車列在敵對進路中發(fā)生正面或尾部撞車,signal、point、track circuit必須按照相關(guān)的程序以及制約條件進行聯(lián)鎖。joint的坐標對聯(lián)鎖設(shè)備構(gòu)成了位置上的約束,因此首先分別數(shù)字化joint與signal、point、track circuit聯(lián)鎖設(shè)備間的關(guān)系。
根據(jù)signal與joint的對應(yīng)關(guān)系(表6)表jslist,若選排進路上包含某joint,則通過jslist可找到該進路上相關(guān)的signal。當point處于定位時,道岔區(qū)段始末端對應(yīng)兩個joint,分別是jIDStart和jIDEnd;而point處于反位時,對應(yīng)另一對jIDStart和jIDEnd,由此建立jplist關(guān)系表(表7)。
若作業(yè)所選排進路上包含道岔區(qū)段的jIDStart、jIDEnd,則通過jplist可推斷該道岔區(qū)段的point處于定位還是反位。由各個track circuit始末端對應(yīng)兩個joint,建立jtclist關(guān)系表(表8),通過jtclist可找到該進路上相關(guān)的track circuit。
表6 joint與signal的位置約束關(guān)系表
表7 joint與point的位置約束關(guān)系表
表8 joint與track circuit的位置約束關(guān)系表
route為列車走行的路徑,包括lroute(列車進路)和droute(調(diào)車進路)。每條route的始端有一架signal防護進路;route由至少一段的track circuit組成,且包括含有point的track circuit。lroute數(shù)字化庫見表9,記錄了車站作業(yè)所排每一條列車進路上相關(guān)設(shè)備的ID及其聯(lián)鎖關(guān)系。
表9 對象屬性表lrlist
3.1 鐵路車站示例
一個單線雙向半自動閉塞的小型鐵路車站的信號設(shè)備平面布置示意圖如圖6所示,圖中圓圈序號代表signal的ID,三角序號代表track circuit的ID,序號代表point的ID。
圖6 鐵路車站信號設(shè)備平面布置示意圖
依據(jù)此示例,將鐵路車站對計算機聯(lián)鎖系統(tǒng)中聯(lián)鎖控制層的進路業(yè)務(wù)程序?qū)嵗?/p>
3.2 進路業(yè)務(wù)實例化
構(gòu)建進路建立和進路解鎖業(yè)務(wù)的動態(tài)模型,使用UML狀態(tài)圖描述,依此模型編寫Python程序。
1)進路業(yè)務(wù)的動態(tài)建模
進路建立階段的動態(tài)模型如圖7所示。首先記錄起止端signal的ID即myslist,查詢數(shù)據(jù)庫中jslist表所對應(yīng)joint的ID,根據(jù)對應(yīng)的jID推斷route的xors(上下行方向)及其類型0(到達)、1(出發(fā))或2(通過)。
圖7 UML進路建立狀態(tài)圖
由于joint對point和track circuit有位置約束,方法
panduanjinluxiangguanshebei(slist)獲得與該route相關(guān)的設(shè)備ID,即pID和tcID。方法panduanzhuangtai(id)將route中相關(guān)設(shè)備ID的列表放在數(shù)據(jù)庫中,以檢驗設(shè)備的實時狀態(tài)是否滿足進路建立的條件。
若滿足,則在方法startSet(routename,target1,target2,target3)中實現(xiàn)進路鎖閉并完成進路建立。方法panduanjinlumingcheng(jid,sid,pid,tcid,xors)推斷routeName,并在表9中將所有routeName行數(shù)字化激活。
進路解鎖階段的動態(tài)模型如圖8所示。記錄需要解鎖的進路得到routenamelist,先判斷該進路是否處于激活狀態(tài),連接數(shù)據(jù)庫的表9找到對應(yīng)的routeName行,獲取stateRoute值,若該值為1,則記錄相關(guān)設(shè)備的ID列表,即listSet,分別在表2—表4中對應(yīng)設(shè)備對象ID,利用方法unsetRoute()將設(shè)備狀態(tài)恢復(fù)至其定位狀態(tài),同時恢復(fù)該route至未激活狀態(tài),即stateRoute值取0,完成解鎖工作。
圖8 UML進路解鎖狀態(tài)圖
2)基于面向?qū)ο蟮臉I(yè)務(wù)實現(xiàn)
基于絕緣節(jié)的坐標positionJx,可以查詢與route相關(guān)的三大聯(lián)鎖設(shè)備的ID,即sid、pid、tcid,從而在Signal類、Point類、TrackCircuit類中進行對象狀態(tài)設(shè)置,也可以在表2—表4中進行對象狀態(tài)獲取。因此,關(guān)于由絕緣節(jié)的坐標邏輯推斷三大聯(lián)鎖設(shè)備位置的算法是核心內(nèi)容,程序偽碼如圖9所示。
圖9 判斷進路相關(guān)設(shè)備的算法
變量start-signal和end-signal代表著起始信號機和終止信號機的ID。查詢jslist關(guān)系表可得到對應(yīng)位置的jid[0]和jid[-1]。由于track circuit兩端對應(yīng)兩個joint,每處joint有一架signal,所以基于joint的坐標查找和記錄start-signal與end-signal之間所有與進路相關(guān)的joint及其對應(yīng)的signal、track circuit的ID,得到j(luò)id、sid和tcid列表。
4.1 系統(tǒng)運行測試
車站計算機聯(lián)鎖系統(tǒng)的人機交互界面如圖10所示,共有5項業(yè)務(wù)功能選項:①排列車進路;②排調(diào)車進路;③解鎖列車進路;④取消列車進路;⑤車站狀態(tài)查詢。
圖10 人機交互界面
以排下行接車至1股道為例,說明聯(lián)鎖控制層執(zhí)行建立列車進路業(yè)務(wù)流程:當前處于待排進路狀態(tài),收到起始信號機sid為1、終止信號機sid為3的進路請求,連接jslist關(guān)系列表查詢對應(yīng)位置的jStartID=2和jEndID=3,對應(yīng)的position(坐標)分別為100和300,通過邏輯判斷出列車運行方向為下行,進路上相關(guān)的設(shè)備ID是,tcID為1和5、pID為1以及signalID為1,所以根據(jù)聯(lián)鎖程序。
先在表3中將ID為1的stateP轉(zhuǎn)換至1(反位)并鎖定,再在表4中將ID為1和5的stateTC更新至1(分路狀態(tài))并鎖閉,最后在表2中將ID為1的stateS開放且顯示3(雙黃燈);同時根據(jù)表2判斷終端信號機X1的類型是出站信號機,推出進路名稱為1xdd(下行1股道到達),再在表9中數(shù)字化激活該stateRoute以作標識。進路建立如圖11所示。
圖11 系統(tǒng)建立1xdd列車進路的測試結(jié)果
以解鎖1股道下行接車進路為例,說明聯(lián)鎖控制層解鎖列車進路業(yè)務(wù)流程:系統(tǒng)當前處于待解鎖進路狀態(tài),收到交互層解鎖指令,連接表9,由routeName判斷該進路處于激活狀態(tài),然后根據(jù)查詢到的相關(guān)設(shè)備ID:tcID為1和5、pID為1以及signalID為1,同樣根據(jù)聯(lián)鎖程序,先在表2中將ID為1的stateS關(guān)閉且顯示0(紅燈),再在表4中將ID為1、5的stateTC更新至0(調(diào)整狀態(tài)),最后在表3中將ID為1的stateP轉(zhuǎn)換至0(定位);同時在表9中恢復(fù)該route至未激活,完成解鎖動作。進路解鎖如圖12所示。
圖12 系統(tǒng)解鎖1xdd列車進路的測試結(jié)果
4.2 結(jié)果分析
判斷鐵路車站計算機聯(lián)鎖系統(tǒng)是否安全可靠,就要確保其他列車或車列不會從正面、尾部或側(cè)面闖入該進路而發(fā)生撞車事故。因此,需要根據(jù)該鐵路車站模型繪制聯(lián)鎖表,并在系統(tǒng)中進行逐一測驗。表10所示是本文鐵路車站模型的列車進路聯(lián)鎖表。
表10 列車進路聯(lián)鎖表
為了敘述方便,假設(shè)車站下行方向是指北京方向至天津方向。
當兩條進路存在共用道岔或是共用股道時,會存在敵對或是抵觸關(guān)系,在同一咽喉區(qū)中,對向重疊的列車進路、順向或是對向重疊的列車和調(diào)車進路、對向重疊的調(diào)車進路之間存在敵對關(guān)系;迎面咽喉區(qū)中,同一到發(fā)線上對向的列車與列車進路、同一到發(fā)線上對向的列車與調(diào)車進路、信號機設(shè)在侵限絕緣處時禁止同時開放的進路構(gòu)成敵對進路。
以“當同一到發(fā)線上對向的列車進路與調(diào)車進路構(gòu)成敵對關(guān)系”為例。鍵入編號1、3排下行接車至1股道的列車進路,再鍵入編號2、8排停車至1股道的調(diào)車進路,得到系統(tǒng)提示:“No.1股道正被占用,請稍后再排!”如圖13所示,說明該系統(tǒng)能夠準確可靠地判斷敵對進路。
圖13 當列車進路與調(diào)車進路構(gòu)成敵對時的系統(tǒng)測試結(jié)果
基于UML描述鐵路車站面向?qū)ο髷?shù)字化建模過程;定義絕緣節(jié)作為基類,使三大聯(lián)鎖設(shè)備對象能夠繼承其坐標屬性;利用Python程序?qū)嵗?lián)鎖控制層中進路控制業(yè)務(wù)模型;使用數(shù)據(jù)庫模擬I/O接口層信息的輸入輸出;基于wxPython設(shè)計人機交互層可視化界面。
其中,在進路建立階段,系統(tǒng)能夠根據(jù)操作人員的指令,準確快速地查詢對應(yīng)絕緣節(jié)的坐標,進一步邏輯推斷出進路的類型、進路的方向及進路的相關(guān)設(shè)備等信息;在進路解鎖階段,同樣基于父類絕緣節(jié)的坐標屬性,最終成功實現(xiàn)解鎖業(yè)務(wù)。
在系統(tǒng)測驗時,是通過聯(lián)鎖表仿真部分重要的進路作業(yè)進行結(jié)果測評的,缺少說服力。因此,在今后的學(xué)習(xí)研究中,將繼續(xù)改進該系統(tǒng),使其能夠被放入模型檢驗工具當中,以證明它所建立的每條進路都是安全可靠的。