摘 要: 通過VC++中ActiveX控件制作方法設計出上海地鐵8號線ATS仿真培訓系統中列車模型,并通過列車時刻表數據存放列車運行時所需的一些數據信息,此時刻表數據以XML格式存儲,在對時刻表數據進行解析時采用目前比較流行的TinyXml。最后還給出此仿真培訓系統的列車正常模擬運行的結果。
關鍵詞: 列車運行仿真; XML; VC++
中國近年來,基于通信的列車控制系統CBTC(Communication Based Train Control)已逐漸被信號界所認可,成為當今世界范圍內鐵路信號技術的發展趨勢,隨著CBTC系統在國內城市軌道交通工程中的廣泛應用,使得城市軌道交通運營企業急需大量具備CBTC系統背景的運營管理、通信信號等專業知識和操作技能的綜合性運營人才。這些綜合性運營專業人員不僅需要熟悉CBTC系統的工作原理,同時還需要具備實際操作能力。考慮到現場行車安全,無法在目前已經投入運營的系統上進行教學培訓。所以開發仿真培訓系統就成為解決這一問題的途徑。
列車自動運行ATS(Automatic Train Supervision)是CBTC系統中負責監視和控制整個地鐵線路中列車的運行狀態的一個組成部分[1]。本文中的列車模擬運行就是此ATS仿真培訓系統中的一子模塊。
1 列車模型
1.1 列車模型的設計
對于8號線列車控件,它的屬性分為:靜態屬性和動態屬性。靜態屬性是指設計控件時可修改,但當列車控件繪制完成時就不可修改的一類屬性;動態屬性主要指設計控件時無需設置,在站場圖的仿真運行過程中可不斷改變的屬性[2]。其屬性可按如下設置:
(1) 靜態屬性:列車長度,列車車廂數,列車重量。
(2) 動態屬性:列車標簽,列車行車方向,列車標簽的方向,列車車門狀態等。
1.2 列車模型的實現
開發列車控件使用的是VC++,它是開發ActiveX控件的常用工具之一。VC++集成開發環境,使用了微軟自己的類庫MFC,MFC對開發ActiveX控件提供了全面的支持[3-4]。
其主要定義代碼如下:
Class Train:public COleControl{…} //列車控件定義
其主要屬性定義如下:
//靜態屬性
Short TrainDetails; //列車長度
Short TrainMass; //列車重量
Short TrainCarriages; //列車車廂
//動態屬性
BSTR TrainLabel; //列車標簽
Short LabelPosition; //標簽位置
Short Direction; //列車行車方向
Short DoorState; //車門狀態
…
在VS2005編譯環境中,列車控件顯示如圖1所示。
2 列車時刻表
2.1 時刻表數據存儲
可擴展標記語言(XML)是用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。作為一種數據格式,它具有以下特點:
(1) 規范性:XML是W3C制定的,XML的標準化工作由W3C的XML工作組負責,它遵循嚴格的語法要求,便于不同開發人員的理解。
(2) 簡單性:XML文檔只是純文本,這樣XML文檔就可以自由地在兩個不同的系統之間交換數據,因為基本上任何系統都提供了對文本格式的支持。
(3) 自我描述:XML可以明確地表示數據模型中各個部分的意義,只要查看XML文檔就能確定該數據的意義。每個數字的意義是清楚的,且不會錯誤地與數字本身相聯系。當讀取文檔時,開發人員了解<Arrival>05:00:00</Arrival>中的05:00:00指的是列車到站時間而不是列車離站的時間。
(4) 結構和內容分離:在XML中數據和顯示格式是分離的,XML元數據文件就是純數據文件,可以作為數據源提供數據。
(5) 可擴展性:XML允許使用者創建和使用他們自己的標記,而不像HTML那樣使用有限的詞匯。
基于以上XML語言的特點,再加上列車時刻表數據比較簡單,它包括列車發車站點,列車到達站點時間以及列車離開站點時間。為了使數據結構清晰,便于不同開發人員的理解,所以列車時刻表數據的存儲方式則采用XML。
列車時刻表XML數據主要由4個標簽組成:列車運行的線路、列車停靠的站臺、列車到達站臺的時間和列車離開站臺的時間。
(1) 列車運行線路:規定列車運行的線路。
(2) 列車停靠站點:站點以名字首字母命名,如SGR1為勝光路,其后1表示停在站點的哪一站臺,而每個站點都有兩個站臺。
(3) 列車到達/離開站臺時間: 此兩時間為列車控件出現或離開站臺的時間,它們的差為列車停站時間。
以下就是采用XML方式存儲的列車時刻表的一小部分:
<?xml version="1.0" encoding="UTF-8"?>
<TimeTableLists>
<Name>時刻表1</Name>
<TimeTable>
<ID>801</ID>
<Record>
<Line>1</Line>
<Platform>SGR1</Platform>
<Arrival>05:02:00</Arrival>
<Departure>05:03:00</Departure>
</Record>
……
</TimeTable>
</TimeTableLists>
<TimeTableLists>
<Name>時刻表2</Name>
<TimeTable>
<ID>801</ID>
<Record>
<Line>1</Line>
<Platform>SGR1</Platform>
<Arrival>05:02:00</Arrival>
<Departure>05:03:00</Departure>
</Record>
……
</TimeTable>
</TimeTableLists>
XML文件除了可以用記事本編寫外,還可以使用多種可視化XML開發工具完成,本文采用XmlSpy2005進行數據編寫。
2.2 時刻表數據解析
XML文檔的解析方法有很多種,如Libxml++、微軟的MSXML等。本文所采用的是TinyXml,它是目前非常流行的一款基于DOM模型的開源XML解析器,使用起來很方便且容易上手,能夠用于C++,并能在Windows或Linux中編譯。這個解析庫的模型通過解析XML文件,在內存中生成DOM模型,從而很方便地遍歷整棵XML樹。
TinyXml中的類與XML文件的對應關系如圖2所示。TiXmlBase是所有類的基類,TiXmlAttribute為XML中元素的屬性TiXmlNode為DOM結構中的節點,如<Record>;TiXmlComment為XML文件中的注釋;TiXmlDeclaration 為XML文件中的聲明,如<?xml version="1.0" encoding="UTF-8"?>;TiXmlDocument為XML文件的整個文檔;TiXmlElement為XML文件中的元素,如<Line>、<Platform>;TiXmlText為XML文件中的元素的文本,如<Line></Line>之間的值1;TiXmlUnknown為XML中的未知部分。
如果XML文檔元素屬性值是中文,用TinyXml解析出來的值會出現亂碼。亂碼是由于GB2312與UTF8之間轉換不當造成的,通過MultiByteToWideChar函數可以進行轉換,解決亂碼問題。
解析的主要代碼如下:
TiXmlDocument* myDocument=new TiXmlDocument();
const TiXmlElement* rootElement=myDocument->RootEle-
ment();
for(const TiXmlElement* timelablelist=rootElement->
FirstChildElement();timelablelist;
timelablelist=timelablelist->NextSiblingElement())
//循環遍歷兩套時刻表
{
const TiXmlElement* name=timelabellist->FirstChild
Element();
……
for(const TiXmlElement*Timetable=name->NextSibling
Element();Timetable;
Timetable=Timetable-> NextSiblingElement())
//循環遍歷TimeTable節點
{
const TiXmlElement* Id=Timetable->First Child
Element();
……
for(const TiXmlElement* Record=Id->NextSibling
Element();Record;
Record=Record->NextSiblingElement())
//循環遍歷Record節點
{
……
}
}
}
3 列車模擬運行
列車的模擬運行主要是根據時刻表發車,選擇運行的線路,根據移動閉塞原理計算列車的行駛速度,按照一定的信號邏輯動態地改變線路上的控件狀態。
時刻表中存有列車的線路信息,線路信息表中則有列車的運行方向以及軌道數據,通過軌道數據可以查詢所需的站場數據,包括:信號機、區段、道岔以及站臺,它們按照一定關系連接形成站場圖,列車在當前的區段或者通過某個信號機時可以推算出下次要經過的區段或信號機。
列車模擬運行在8號線ATS仿真系統上,此系統采用VC2005開發,在Win7系統上列車運行的結果如圖3所示。
本文針對上海地鐵8號線ATS培訓系統中的列車模擬運行進行設計,構建了列車模型控件,并使用XML格式對列車時刻表數據進行存儲并通過TinyXml對其解析,達到以列車正常運行的目的。隨著國內城市軌道交通的迅猛發展,人才培訓的需求也勢必增加,同時本文對于以后設計其他線路仿真系統有鋪墊的作用。
參考文獻
[1] 曾小清, 王長林, 張樹京. 基于通信的軌道交通運行控制[M]. 上海:同濟大學出版社,2007.
[2] 王野,郭秀清.基于組件技術的列車自動監控仿真系統開發平臺[J]. 計算機應用, 2007,27(z2):285-288.
[3] 魯也傳,陳永生,郭玉臣. 基于通信的列車自動監控系統平臺設計與實現[J]. 計算機應用, 2009,29(S2):152-154.
[4] 宇鵬,王曉峰,李云飛.Visual C++實踐與提高——ActiveX 篇[M]. 北京:中國鐵道出版社,2001:161-211.