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