《電子技術(shù)應用》
您所在的位置:首頁 > 其他 > 設(shè)計應用 > ATS仿真系統(tǒng)數(shù)據(jù)處理與邏輯運算模塊的設(shè)計與實現(xiàn)
ATS仿真系統(tǒng)數(shù)據(jù)處理與邏輯運算模塊的設(shè)計與實現(xiàn)
來源:微型機與應用2013年第22期
胡揚龍, 郭秀清
(同濟大學 控制科學與工程系, 上海201804)
摘要: 在城市軌道交通ATS仿真系統(tǒng)中,,數(shù)據(jù)庫和邏輯運算是整個仿真系統(tǒng)最核心的兩個部分,。以上海地鐵一號線為例,介紹了ATS仿真系統(tǒng)的架構(gòu),,對數(shù)據(jù)庫的設(shè)計以及XML表的存儲和讀取進行了詳細分析,。對建立在數(shù)據(jù)庫信息的基礎(chǔ)上進行了邏輯運算并對列車模擬運行狀態(tài)進行控制和表示。
Abstract:
Key words :

摘  要: 在城市軌道交通ATS仿真系統(tǒng)中,,數(shù)據(jù)庫和邏輯運算是整個仿真系統(tǒng)最核心的兩個部分,。以上海地鐵一號線為例,介紹了ATS仿真系統(tǒng)的架構(gòu),,對數(shù)據(jù)庫的設(shè)計以及XML表的存儲和讀取進行了詳細分析,。對建立在數(shù)據(jù)庫信息的基礎(chǔ)上進行了邏輯運算并對列車模擬運行狀態(tài)進行控制和表示,。
關(guān)鍵詞: 邏輯運算; XML表,; ATS仿真

    近年來,,軌道交通快速進入高速期,成為帶動經(jīng)濟增長的重要因素[1],。城市軌道交通是一個龐大而且復雜的系統(tǒng),。隨著信息技術(shù)和自動化的發(fā)展,出現(xiàn)了以保證列車行車安全,、縮短列車運行時間,、提高列車運行質(zhì)量為代表的列車自動控制系統(tǒng),為復雜環(huán)境下的列車運行提供了有效的保障,。城市軌道交通ATS仿真系統(tǒng)主要完成列車的調(diào)度和跟蹤,、運行時刻表的調(diào)整控制和監(jiān)督、列車進路的控制和表示,、系統(tǒng)狀況與報警信息的顯示和記錄,以及統(tǒng)計匯編,、系統(tǒng)診斷等功能, 對提高行車效率起著重要作用[2]。
    ATS仿真系統(tǒng)主要是通過對數(shù)據(jù)庫的讀取來進行信號元素狀態(tài)操作,,并依據(jù)信號元素的狀態(tài)信息進行相關(guān)的邏輯運算,。其中邏輯運算模塊就是在聯(lián)鎖規(guī)則下對道岔、軌道和信號機等設(shè)備狀態(tài)進行動態(tài)刷新來顯示列車的自動運行,、折返及停車,。
1 ATS仿真系統(tǒng)架構(gòu)
    ATS仿真主要是一個基于站場數(shù)據(jù)、列車數(shù)據(jù),、時刻表數(shù)據(jù)等數(shù)據(jù)信息支持的仿真軟件,。列車模擬運行是通過時刻表來觸發(fā)的。根據(jù)列車運行時刻表來判斷列車的到站時間以及列車的早點和晚點,。系統(tǒng)從數(shù)據(jù)庫中讀取軌道元素的狀態(tài)信息,,接著通過邏輯運算對相關(guān)信號元素進行處理,例如信號機的開放,、道岔的轉(zhuǎn)換等,,然后將處理結(jié)果在終端顯示出來。如圖1所示,,ATS仿真系統(tǒng)分為通信模塊,、人機交互模塊、邏輯運算模塊和數(shù)據(jù)庫模塊,。人與系統(tǒng)之間的通信是通過人機交互模塊來實現(xiàn)的,,例如操作者發(fā)出一個操作指令自動或者手動進行切換等。指令被系統(tǒng)獲取后,系統(tǒng)內(nèi)部程序判斷當前的道岔,、軌道和信號機等信號元素的狀態(tài)信息(信息主要通過XML表讀取),然后通過內(nèi)部的邏輯運算模塊進行相關(guān)處理,。最后調(diào)用相關(guān)處理函數(shù)并把處理結(jié)果顯示在人機交互界面上。這其中涉及到各個模塊之間的通信,,本文就不做重點介紹了,。

2 數(shù)據(jù)庫設(shè)計
2.1站場數(shù)據(jù)存儲

    本系統(tǒng)采用XML表來存儲站場數(shù)據(jù)(包括信號機、道岔,、軌道,、時刻表和進路表)。XML是一種簡單的數(shù)據(jù)存儲語言,,使用一系列簡單的標記描述數(shù)據(jù),,層次結(jié)構(gòu)清晰,易于讀寫與共享[3],。本文選取一條進路來對XML表存儲方式進行詳細說明,。圖2是上海地鐵一號線的運行截圖。    圖2基本上包含了地鐵主要的信息元素,,本文選取信號機和進路表數(shù)據(jù)存儲來進行說明,。首先是信號機,如圖中信號機X8,,下面是X8的數(shù)據(jù)結(jié)構(gòu),,其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的接近區(qū)段(圖中是軌道S11-626G),標記<FirstQD>表示的是信號機X8的離去區(qū)段(為道岔C8),,標記<Direction>表示信號機的方向(0為向右 1為向左),,標記<Territory>表示信號機X8所屬區(qū)段。
    XML表主要是存儲信號設(shè)備之間的連接關(guān)系,,比如信號機X8,其存儲的信息主要是前后信號設(shè)備有哪些所屬軌道及其方向等信息,。道岔和軌道與信號機的類似,,其數(shù)據(jù)結(jié)構(gòu)就不詳細介紹了。接下來分析進路的存儲,。如圖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>表示的道岔的狀態(tài),,其中DW表示定位,F(xiàn)W表示反位,。上述進路表清晰地反映了這個進路的所有信息,。這條編號為0的進路從保護信號機X8開始進入進路,經(jīng)過道岔C8,、C2到達敵對信號機,,其中的兩個道岔均處于定位狀態(tài)。那么這條進路就通過XML表完整地表現(xiàn)出來了,。這為以后進路的管理,、關(guān)聯(lián)處理以及進路的開放和關(guān)閉提供了數(shù)據(jù)庫支持。
2.2 XML表的數(shù)據(jù)讀取
    本文主要通過CMarkup類對XML表的數(shù)據(jù)進行讀寫,。具體代碼在CL1Doc類中:
public:
    voidReadXML();                           //讀取XML表
    void ReadSignal();                         //讀信號燈數(shù)據(jù)
    void ReadRailway();                        //讀區(qū)段數(shù)據(jù)
    void ReadPlatform();                      //讀站臺數(shù)據(jù)
    void ReadSwitch();                        //讀道岔數(shù)據(jù)
    void ReadRoutes();                        //讀進路數(shù)據(jù)
    void InitialTimeTable();                     //初始化時刻表
     將數(shù)據(jù)讀取到全局變量vector容器m_SignalPtrArray中,,這些全局變量在Global.cpp中定義。
    std::vector<Signal*>m_SignalPtrArray;
                          //定義全局變量,,存放封裝類指針
    為了方便設(shè)計,,創(chuàng)建一個封裝類,因為做控件時可能會由于工程的推進而增加一些新的功能,,為了不改動控件,,增建了封裝類,相當于把控件封裝類與界面控件元素綁定在一起,接下來只管操作封裝類即可,,這樣就可以在其中添加新的功能或接口,,便于未來拓展。
3 邏輯運算模塊
    邏輯運算模塊主要是對道岔,、軌道,、信號機、站臺,、進路管理和列車行走等進行邏輯運算操作,。主要實現(xiàn)信號燈的開放關(guān)閉、進路的出清和占用,、道岔轉(zhuǎn)換,、進路搜索和排列,,以及列車的停站、折返,、出入庫等,。
3.1 ATS仿真系統(tǒng)主要信號元素的邏輯運算
    ATS仿真系統(tǒng)中主要信號元素是指道岔、軌道,、信號機,、站臺等。ATS仿真系統(tǒng)主要信號元素的邏輯運算處理流程圖如圖3所示,。

 

 

    如圖3所示,程序開始持續(xù)判斷是否有操作員發(fā)送的指令,,若有,仿真程序在獲得該指令后進行邏輯判斷,,讀取信息判斷站場的狀態(tài)信息,,如果條件滿足則執(zhí)行相關(guān)的邏輯運算,并把處理結(jié)果在人機交互界面上顯示出來,,然后程序等待下一個指令,。如果條件不滿足,程序則提示錯誤信息并繼續(xù)等待下一條指令,。
3.2 建立列車進路的邏輯運算
    自動建立列車進路的原理:當列車到達信號機的接近區(qū)段,,將此區(qū)段稱為運營觸發(fā)點,就會觸發(fā)排列下一條進路,,進路信息可從進路的XML表中獲取,。然后結(jié)合程序中邏輯運算規(guī)則進行進路可行性檢查和進路排列,若不符合聯(lián)鎖條件就鎖閉進路,,開放信號機,。進路的自動排列用到了CRouteCreate類的CreateAutoRoute(CStringQDName)函數(shù)。其中的實現(xiàn)過程用到了Find類,,首先獲取當前列車所在的軌道,,根據(jù)站場圖信號元素的連接關(guān)系,運用函數(shù)BOOLFindSignalBaseOnJJQD()基于接近區(qū)段找到始端信號機,,之后用函數(shù)FindRouteBaseOn
SDXH()基于始端信號機查找進路,。
    圖4是建立進路和進路解鎖的邏輯過程的流程圖。

    當列車到了觸發(fā)區(qū)段以后,,開始判斷這個保護信號機所屬的進路,并從進路表中讀取這條進路的進路信息,。接下來對這條進路進行可行性檢查,,判斷進路是否存在故障或者被占用。如果有故障,,則列車要等候信號機開放并要繼續(xù)檢查進路是否可用,。當進路可用時,,就發(fā)出聯(lián)鎖指令對進路進行鎖閉。接著信號開放,,列車進入此進路,,然后信號關(guān)閉。接下來判斷列車是否離開這條進路,,如果離開則出清進路并對進路進行解鎖,。
3.3 列車模擬運行邏輯運算
    列車的模擬運行是通過設(shè)置運行時刻表和進路文件,然后讀取其中的設(shè)置信息進行初始化,,讀取時刻表開始進行列車的仿真,,同時啟動定時器。通過判斷列車時刻表信息以及定時時間來判斷列車運行的位置,,進而對列車進行速度調(diào)整,。其流程圖如圖5所示。系統(tǒng)通過持續(xù)刷新來獲取列車位置,,然后通過內(nèi)部程序邏輯運算來實現(xiàn)列車的調(diào)整,。

    本文主要研究了ATS仿真系統(tǒng)中數(shù)據(jù)存儲以及數(shù)據(jù)的邏輯運算處理。對進路排列,、數(shù)據(jù)讀取和列車的模擬運行進行了闡述,。其中的數(shù)據(jù)處理尤為重要,是整個ATS仿真系統(tǒng)的關(guān)鍵,。
參考文獻
[1] 吳江,,郭秀清.上海地鐵ATS 仿真系統(tǒng)進路自動排列的設(shè)計與實現(xiàn)[J].微型機與應用,2012,,31(17):7-10.
[2] 趙根苗,,陳永生.ATS 仿真培訓系統(tǒng)的設(shè)計與實現(xiàn)[J].城市軌道交通研究,2004,,7(1):55-57.
[3] 王震江,馬宏. XML基礎(chǔ)與實踐教程[M].北京:清華大學出版社,,2011.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。