摘 要: 在城市軌道交通ATS仿真系統(tǒng)中,數(shù)據(jù)庫(kù)和邏輯運(yùn)算是整個(gè)仿真系統(tǒng)最核心的兩個(gè)部分。以上海地鐵一號(hào)線為例,介紹了ATS仿真系統(tǒng)的架構(gòu),對(duì)數(shù)據(jù)庫(kù)的設(shè)計(jì)以及XML表的存儲(chǔ)和讀取進(jìn)行了詳細(xì)分析。對(duì)建立在數(shù)據(jù)庫(kù)信息的基礎(chǔ)上進(jìn)行了邏輯運(yùn)算并對(duì)列車模擬運(yùn)行狀態(tài)進(jìn)行控制和表示。
關(guān)鍵詞: 邏輯運(yùn)算; XML表; ATS仿真
近年來(lái),軌道交通快速進(jìn)入高速期,成為帶動(dòng)經(jīng)濟(jì)增長(zhǎng)的重要因素[1]。城市軌道交通是一個(gè)龐大而且復(fù)雜的系統(tǒng)。隨著信息技術(shù)和自動(dòng)化的發(fā)展,出現(xiàn)了以保證列車行車安全、縮短列車運(yùn)行時(shí)間、提高列車運(yùn)行質(zhì)量為代表的列車自動(dòng)控制系統(tǒng),為復(fù)雜環(huán)境下的列車運(yùn)行提供了有效的保障。城市軌道交通ATS仿真系統(tǒng)主要完成列車的調(diào)度和跟蹤、運(yùn)行時(shí)刻表的調(diào)整控制和監(jiān)督、列車進(jìn)路的控制和表示、系統(tǒng)狀況與報(bào)警信息的顯示和記錄,以及統(tǒng)計(jì)匯編、系統(tǒng)診斷等功能, 對(duì)提高行車效率起著重要作用[2]。
ATS仿真系統(tǒng)主要是通過(guò)對(duì)數(shù)據(jù)庫(kù)的讀取來(lái)進(jìn)行信號(hào)元素狀態(tài)操作,并依據(jù)信號(hào)元素的狀態(tài)信息進(jìn)行相關(guān)的邏輯運(yùn)算。其中邏輯運(yùn)算模塊就是在聯(lián)鎖規(guī)則下對(duì)道岔、軌道和信號(hào)機(jī)等設(shè)備狀態(tài)進(jìn)行動(dòng)態(tài)刷新來(lái)顯示列車的自動(dòng)運(yùn)行、折返及停車。
1 ATS仿真系統(tǒng)架構(gòu)
ATS仿真主要是一個(gè)基于站場(chǎng)數(shù)據(jù)、列車數(shù)據(jù)、時(shí)刻表數(shù)據(jù)等數(shù)據(jù)信息支持的仿真軟件。列車模擬運(yùn)行是通過(guò)時(shí)刻表來(lái)觸發(fā)的。根據(jù)列車運(yùn)行時(shí)刻表來(lái)判斷列車的到站時(shí)間以及列車的早點(diǎn)和晚點(diǎn)。系統(tǒng)從數(shù)據(jù)庫(kù)中讀取軌道元素的狀態(tài)信息,接著通過(guò)邏輯運(yùn)算對(duì)相關(guān)信號(hào)元素進(jìn)行處理,例如信號(hào)機(jī)的開(kāi)放、道岔的轉(zhuǎn)換等,然后將處理結(jié)果在終端顯示出來(lái)。如圖1所示,ATS仿真系統(tǒng)分為通信模塊、人機(jī)交互模塊、邏輯運(yùn)算模塊和數(shù)據(jù)庫(kù)模塊。人與系統(tǒng)之間的通信是通過(guò)人機(jī)交互模塊來(lái)實(shí)現(xiàn)的,例如操作者發(fā)出一個(gè)操作指令自動(dòng)或者手動(dòng)進(jìn)行切換等。指令被系統(tǒng)獲取后,系統(tǒng)內(nèi)部程序判斷當(dāng)前的道岔、軌道和信號(hào)機(jī)等信號(hào)元素的狀態(tài)信息(信息主要通過(guò)XML表讀取),然后通過(guò)內(nèi)部的邏輯運(yùn)算模塊進(jìn)行相關(guān)處理。最后調(diào)用相關(guān)處理函數(shù)并把處理結(jié)果顯示在人機(jī)交互界面上。這其中涉及到各個(gè)模塊之間的通信,本文就不做重點(diǎn)介紹了。
2 數(shù)據(jù)庫(kù)設(shè)計(jì)
2.1站場(chǎng)數(shù)據(jù)存儲(chǔ)
本系統(tǒng)采用XML表來(lái)存儲(chǔ)站場(chǎng)數(shù)據(jù)(包括信號(hào)機(jī)、道岔、軌道、時(shí)刻表和進(jìn)路表)。XML是一種簡(jiǎn)單的數(shù)據(jù)存儲(chǔ)語(yǔ)言,使用一系列簡(jiǎn)單的標(biāo)記描述數(shù)據(jù),層次結(jié)構(gòu)清晰,易于讀寫(xiě)與共享[3]。本文選取一條進(jìn)路來(lái)對(duì)XML表存儲(chǔ)方式進(jìn)行詳細(xì)說(shuō)明。圖2是上海地鐵一號(hào)線的運(yùn)行截圖。 圖2基本上包含了地鐵主要的信息元素,本文選取信號(hào)機(jī)和進(jìn)路表數(shù)據(jù)存儲(chǔ)來(lái)進(jìn)行說(shuō)明。首先是信號(hào)機(jī),如圖中信號(hào)機(jī)X8,下面是X8的數(shù)據(jù)結(jié)構(gòu),其XML表的存儲(chǔ)信息如下:
<Signal>
<ID>7</ID>
<Name>X8</Name>
<JJQD>S11-626G</JJQD>
<FirstQD>C8</FirstQD>
<Direction>0</Direction>
<Territory>S11-626G</Territory>
</Signal>
其中標(biāo)記<JJQD>是信號(hào)機(jī)X8的接近區(qū)段(圖中是軌道S11-626G),標(biāo)記<FirstQD>表示的是信號(hào)機(jī)X8的離去區(qū)段(為道岔C8),標(biāo)記<Direction>表示信號(hào)機(jī)的方向(0為向右 1為向左),標(biāo)記<Territory>表示信號(hào)機(jī)X8所屬區(qū)段。
XML表主要是存儲(chǔ)信號(hào)設(shè)備之間的連接關(guān)系,比如信號(hào)機(jī)X8,其存儲(chǔ)的信息主要是前后信號(hào)設(shè)備有哪些所屬軌道及其方向等信息。道岔和軌道與信號(hào)機(jī)的類似,其數(shù)據(jù)結(jié)構(gòu)就不詳細(xì)介紹了。接下來(lái)分析進(jìn)路的存儲(chǔ)。如圖2所示,上面一共有8條進(jìn)路:X8→X2,X2→X8; X8→X6, X6→X8;X4→X2,X2→X4;X4→X6,X6→X4。本文選取其中的一條進(jìn)路X8→X2,其進(jìn)路的XML表存儲(chǔ)信息如下:
<Route>
<ID>0</ID>
<Name>X8-X2</Name>
<ProtectSignal>X8</ProtectSignal>
<EnemySignal>X2</ EnemySignal >
<SwitchList>
<Switch>
<Name>C8</Name>
<State>DW</State>
</Switch>
<Switch>
<Name>C2</Name>
<State>DW</State>
</Switch>
</SwitchList>
</Route>
其中標(biāo)記<ID>是進(jìn)路的編號(hào),把X8→X2這條進(jìn)路編號(hào)定為0。標(biāo)記<Name>表示X8→X2的進(jìn)路名稱。標(biāo)記<ProtectSignal>表示這條進(jìn)路的保護(hù)信號(hào)機(jī)為X8,標(biāo)記<EnemySignal>表示這條進(jìn)路的敵對(duì)信號(hào)機(jī)為X2。<SwitchList>表示這條進(jìn)路中的道岔。<State>表示的道岔的狀態(tài),其中DW表示定位,F(xiàn)W表示反位。上述進(jìn)路表清晰地反映了這個(gè)進(jìn)路的所有信息。這條編號(hào)為0的進(jìn)路從保護(hù)信號(hào)機(jī)X8開(kāi)始進(jìn)入進(jìn)路,經(jīng)過(guò)道岔C8、C2到達(dá)敵對(duì)信號(hào)機(jī),其中的兩個(gè)道岔均處于定位狀態(tài)。那么這條進(jìn)路就通過(guò)XML表完整地表現(xiàn)出來(lái)了。這為以后進(jìn)路的管理、關(guān)聯(lián)處理以及進(jìn)路的開(kāi)放和關(guān)閉提供了數(shù)據(jù)庫(kù)支持。
2.2 XML表的數(shù)據(jù)讀取
本文主要通過(guò)CMarkup類對(duì)XML表的數(shù)據(jù)進(jìn)行讀寫(xiě)。具體代碼在CL1Doc類中:
public:
voidReadXML(); //讀取XML表
void ReadSignal(); //讀信號(hào)燈數(shù)據(jù)
void ReadRailway(); //讀區(qū)段數(shù)據(jù)
void ReadPlatform(); //讀站臺(tái)數(shù)據(jù)
void ReadSwitch(); //讀道岔數(shù)據(jù)
void ReadRoutes(); //讀進(jìn)路數(shù)據(jù)
void InitialTimeTable(); //初始化時(shí)刻表
將數(shù)據(jù)讀取到全局變量vector容器m_SignalPtrArray中,這些全局變量在Global.cpp中定義。
std::vector<Signal*>m_SignalPtrArray;
//定義全局變量,存放封裝類指針
為了方便設(shè)計(jì),創(chuàng)建一個(gè)封裝類,因?yàn)樽隹丶r(shí)可能會(huì)由于工程的推進(jìn)而增加一些新的功能,為了不改動(dòng)控件,增建了封裝類,相當(dāng)于把控件封裝類與界面控件元素綁定在一起,接下來(lái)只管操作封裝類即可,這樣就可以在其中添加新的功能或接口,便于未來(lái)拓展。
3 邏輯運(yùn)算模塊
邏輯運(yùn)算模塊主要是對(duì)道岔、軌道、信號(hào)機(jī)、站臺(tái)、進(jìn)路管理和列車行走等進(jìn)行邏輯運(yùn)算操作。主要實(shí)現(xiàn)信號(hào)燈的開(kāi)放關(guān)閉、進(jìn)路的出清和占用、道岔轉(zhuǎn)換、進(jìn)路搜索和排列,以及列車的停站、折返、出入庫(kù)等。
3.1 ATS仿真系統(tǒng)主要信號(hào)元素的邏輯運(yùn)算
ATS仿真系統(tǒng)中主要信號(hào)元素是指道岔、軌道、信號(hào)機(jī)、站臺(tái)等。ATS仿真系統(tǒng)主要信號(hào)元素的邏輯運(yùn)算處理流程圖如圖3所示。
如圖3所示,程序開(kāi)始持續(xù)判斷是否有操作員發(fā)送的指令,若有,仿真程序在獲得該指令后進(jìn)行邏輯判斷,讀取信息判斷站場(chǎng)的狀態(tài)信息,如果條件滿足則執(zhí)行相關(guān)的邏輯運(yùn)算,并把處理結(jié)果在人機(jī)交互界面上顯示出來(lái),然后程序等待下一個(gè)指令。如果條件不滿足,程序則提示錯(cuò)誤信息并繼續(xù)等待下一條指令。
3.2 建立列車進(jìn)路的邏輯運(yùn)算
自動(dòng)建立列車進(jìn)路的原理:當(dāng)列車到達(dá)信號(hào)機(jī)的接近區(qū)段,將此區(qū)段稱為運(yùn)營(yíng)觸發(fā)點(diǎn),就會(huì)觸發(fā)排列下一條進(jìn)路,進(jìn)路信息可從進(jìn)路的XML表中獲取。然后結(jié)合程序中邏輯運(yùn)算規(guī)則進(jìn)行進(jìn)路可行性檢查和進(jìn)路排列,若不符合聯(lián)鎖條件就鎖閉進(jìn)路,開(kāi)放信號(hào)機(jī)。進(jìn)路的自動(dòng)排列用到了CRouteCreate類的CreateAutoRoute(CStringQDName)函數(shù)。其中的實(shí)現(xiàn)過(guò)程用到了Find類,首先獲取當(dāng)前列車所在的軌道,根據(jù)站場(chǎng)圖信號(hào)元素的連接關(guān)系,運(yùn)用函數(shù)BOOLFindSignalBaseOnJJQD()基于接近區(qū)段找到始端信號(hào)機(jī),之后用函數(shù)FindRouteBaseOn
SDXH()基于始端信號(hào)機(jī)查找進(jìn)路。
圖4是建立進(jìn)路和進(jìn)路解鎖的邏輯過(guò)程的流程圖。
當(dāng)列車到了觸發(fā)區(qū)段以后,開(kāi)始判斷這個(gè)保護(hù)信號(hào)機(jī)所屬的進(jìn)路,并從進(jìn)路表中讀取這條進(jìn)路的進(jìn)路信息。接下來(lái)對(duì)這條進(jìn)路進(jìn)行可行性檢查,判斷進(jìn)路是否存在故障或者被占用。如果有故障,則列車要等候信號(hào)機(jī)開(kāi)放并要繼續(xù)檢查進(jìn)路是否可用。當(dāng)進(jìn)路可用時(shí),就發(fā)出聯(lián)鎖指令對(duì)進(jìn)路進(jìn)行鎖閉。接著信號(hào)開(kāi)放,列車進(jìn)入此進(jìn)路,然后信號(hào)關(guān)閉。接下來(lái)判斷列車是否離開(kāi)這條進(jìn)路,如果離開(kāi)則出清進(jìn)路并對(duì)進(jìn)路進(jìn)行解鎖。
3.3 列車模擬運(yùn)行邏輯運(yùn)算
列車的模擬運(yùn)行是通過(guò)設(shè)置運(yùn)行時(shí)刻表和進(jìn)路文件,然后讀取其中的設(shè)置信息進(jìn)行初始化,讀取時(shí)刻表開(kāi)始進(jìn)行列車的仿真,同時(shí)啟動(dòng)定時(shí)器。通過(guò)判斷列車時(shí)刻表信息以及定時(shí)時(shí)間來(lái)判斷列車運(yùn)行的位置,進(jìn)而對(duì)列車進(jìn)行速度調(diào)整。其流程圖如圖5所示。系統(tǒng)通過(guò)持續(xù)刷新來(lái)獲取列車位置,然后通過(guò)內(nèi)部程序邏輯運(yùn)算來(lái)實(shí)現(xiàn)列車的調(diào)整。
本文主要研究了ATS仿真系統(tǒng)中數(shù)據(jù)存儲(chǔ)以及數(shù)據(jù)的邏輯運(yùn)算處理。對(duì)進(jìn)路排列、數(shù)據(jù)讀取和列車的模擬運(yùn)行進(jìn)行了闡述。其中的數(shù)據(jù)處理尤為重要,是整個(gè)ATS仿真系統(tǒng)的關(guān)鍵。
參考文獻(xiàn)
[1] 吳江,郭秀清.上海地鐵ATS 仿真系統(tǒng)進(jìn)路自動(dòng)排列的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012,31(17):7-10.
[2] 趙根苗,陳永生.ATS 仿真培訓(xùn)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].城市軌道交通研究,2004,7(1):55-57.
[3] 王震江,馬宏. XML基礎(chǔ)與實(shí)踐教程[M].北京:清華大學(xué)出版社,2011.