摘 要: 提出了一種基于定時(shí)器的模擬列車運(yùn)行模塊的設(shè)計(jì)和實(shí)現(xiàn)。重點(diǎn)介紹了模擬列車運(yùn)行模塊的列車狀態(tài)判斷、列車速度調(diào)整、列車位置刷新各個(gè)組成部分。
關(guān)鍵詞: ATS;仿真系統(tǒng);模擬列車運(yùn)行模塊;列車狀態(tài)判斷;列車速度調(diào)整;列車位置刷新
隨著城市軌道交通迅猛發(fā)展,城軌交通ATS仿真系統(tǒng)成為解決軌道交通運(yùn)營(yíng)企業(yè)運(yùn)營(yíng)人員培養(yǎng)滯后的有效途徑[1]。目前整個(gè)ATS仿真系統(tǒng)主要包括終端顯示模塊、模擬列車運(yùn)行模塊、ATP模塊、ATS操作模塊、故障設(shè)置及處理模塊、教學(xué)考評(píng)模塊、數(shù)據(jù)存儲(chǔ)和管理模塊等,而模擬列車運(yùn)行模塊在整個(gè)系統(tǒng)中占據(jù)核心地位。以往的ATS模擬列車運(yùn)行模塊大多是基于多線程,而多線程必須處理好數(shù)據(jù)同步的問(wèn)題,實(shí)現(xiàn)起來(lái)存在一定的難度,并且占用系統(tǒng)資源較多。定時(shí)器具有實(shí)現(xiàn)容易、占用資源小的特點(diǎn),在一定程度上可以替代多線程。因此,本文提出一種基于定時(shí)器的ATS模擬列車運(yùn)行模塊的設(shè)計(jì)。
1 模擬列車運(yùn)行模塊設(shè)計(jì)
該模塊主要包括三個(gè)部分:判斷列車運(yùn)行狀態(tài)以確定列車是否可以繼續(xù)運(yùn)行、根據(jù)列車具體運(yùn)行情況改變列車速度、負(fù)責(zé)每個(gè)微小的時(shí)間段按軌道上列車運(yùn)行的方向刷新列車的位置以模擬列車的行駛過(guò)程。以往該模塊都置于一個(gè)獨(dú)立的線程之中,這樣實(shí)現(xiàn)數(shù)據(jù)同步存在一定的難度,并且占用較多的系統(tǒng)資源。本文考慮將此模塊移到定時(shí)器函數(shù)中,以降低實(shí)現(xiàn)難度并節(jié)省系統(tǒng)資源。該設(shè)計(jì)以定時(shí)時(shí)間為單位,每次定時(shí)時(shí)間到,就判斷此刻列車是否可以繼續(xù)行駛。如果不可以,就等待下一次定時(shí)時(shí)間的到來(lái),并將當(dāng)前時(shí)間增加1 s;如果可以,接下來(lái)就開始調(diào)整列車的速度,最后根據(jù)最新的速度計(jì)算1 s之內(nèi)列車需要移動(dòng)的距離,并在界面上刷新列車的位置,同時(shí)將當(dāng)前時(shí)間增加1 s。模塊設(shè)計(jì)流程如圖1所示。
1.1 列車狀態(tài)判斷
列車運(yùn)行狀態(tài)標(biāo)志著列車運(yùn)行過(guò)程中的各個(gè)階段以及進(jìn)路選擇情況,在一般情況下可以正常行駛,正常行駛過(guò)程中需要判斷列車是準(zhǔn)點(diǎn)、早點(diǎn)還是晚點(diǎn);而在停站中、進(jìn)路未選好、到站后等情況下,列車則不可以繼續(xù)行駛。列車運(yùn)行狀態(tài)判斷部分主要用于下一步確定列車運(yùn)行速度以及通知模擬列車運(yùn)行模塊是否需要刷新列車的位置。
1.2 列車速度調(diào)整
列車速度調(diào)整主要包括3個(gè)因素:與先行列車的間隔距離;列車運(yùn)行的進(jìn)路情況,包括前方進(jìn)路是否存在彎道及道岔狀態(tài)等;當(dāng)前列車運(yùn)行的準(zhǔn)點(diǎn)情況[2]。圖2是一條速度命令控制線[3]。當(dāng)先行列車在0T區(qū)段,1T必須空閑,后續(xù)列車如果在2T,它收到的限速命令應(yīng)該為0,即后續(xù)列車在2T的出口端必須停車,并有1T閉塞分區(qū)作為保護(hù)距離;若1T、2T空閑,后續(xù)列車在3T,則后續(xù)列車收到的是20 km/h的速度命令。同理,當(dāng)1T、2T、3T、4T、5T、6T、7T都空閑,運(yùn)行于8T的后續(xù)列車收到的速度命令為80 km/h??梢?jiàn)要使列車運(yùn)行于80 km/h,前方必須有7個(gè)閉塞分區(qū)。
根據(jù)線路情況、車輛性能、軌道電路特性等,應(yīng)進(jìn)行閉塞設(shè)計(jì),劃分合理的閉塞分區(qū),從而產(chǎn)生速度命令控制線,作為速度命令選擇的邏輯依據(jù)。
1.3 列車位置刷新
在上述兩部分都完成的基礎(chǔ)上需要對(duì)列車的位置進(jìn)行刷新,根據(jù)列車的當(dāng)前速度計(jì)算出列車運(yùn)行的實(shí)際運(yùn)行的距離,以便在界面上能夠反映出模擬列車實(shí)際運(yùn)行的效果。列車位移-速度-時(shí)間表達(dá)式如下[4]:
S=V×Δt+S′
式中,S表示列車當(dāng)前位移,V表示列車速度,Δt表示刷新時(shí)間間隔,S′表示列車上一次刷新時(shí)的位移。另外,列車運(yùn)行一段距離以后車頭可能會(huì)進(jìn)入一條新的進(jìn)路,而車尾也可能會(huì)出清一個(gè)軌道進(jìn)路,因此,列車位置刷新部分需要在適當(dāng)?shù)臅r(shí)候設(shè)置列車占用以及清除列車占用。
2 模擬列車運(yùn)行模塊的實(shí)現(xiàn)
模擬列車運(yùn)行模塊的實(shí)現(xiàn)主要包括以下4個(gè)部分:(1)定義列車類。除了一些基本列車屬性以外,需要定義3個(gè)主要的函數(shù)分別為:TrainCanMove()、ChangeSpeed()以及Move()。(2)分別實(shí)現(xiàn)TrainCanMove()、ChangeSpeed()以及Move()。(3)在OnTimer()中實(shí)現(xiàn)圖1所示的模擬列車運(yùn)行模塊流程。(4)模塊功能的測(cè)試和擴(kuò)展。
2.1 列車類的實(shí)現(xiàn)
列車類定義代碼如下:
class Train
{
public:
Train();
~Train();
private:
CString m_TrainName; //列車名字
CString m_TrainNumber; //車次號(hào)
CString m_HeadOccupied; //車頭占用區(qū)段或道岔
CString m_TailOccupied; //車尾占用區(qū)段或道岔
CString m_CurrentPlatform; //當(dāng)前站臺(tái)
CString m_LastPlatform; //上一個(gè)站臺(tái)
CString m_NextPlatform; //下一個(gè)站臺(tái)
bool m_IsRunning; //列車是否運(yùn)行
double m_TrainLength; //列車長(zhǎng)度
double m_TrainSpeed; //列車速度
double m_TrainLimitSpeed; //列車速度限制
short m_Direction; //方向:0-向右,1-向左
public:
bool TrainCanMove();
void Move(bool CanMoveNext);
bool ChangeSpeed();
}
Train類中,成員函數(shù)TrainCanMove()用于判斷當(dāng)前時(shí)刻列車是否可以繼續(xù)運(yùn)行,ChangeSpeed()用于調(diào)整列車速度,Move()用于刷新列車的當(dāng)前位置。
2.2 OnTimer函數(shù)的實(shí)現(xiàn)
OnTimer實(shí)現(xiàn)代碼如下:
void CMainFram::OnTimer(UINT_PTR n_IDEvent)
{
switch(n_IDEvent)
{
Case 100:
{
KillTimer(100);
SetTimer(100,1000/allTableList.TimeRate,
NULL);
for(int i=0;i<allTrainMax;i++)
{
if(allTrain[i].TrainCanMove())
allTrain[i].Move(allTrain[i].
ChangeSpeed());
}
allTableList.NowTime=allTableList.NowTime+1;
}
default:
break;
}
CFrameWnd(n_IDEvent);
}
定時(shí)器參數(shù)的單位為ms,也就是說(shuō)OnTimer每1000/allTableList.TimeRate ms被調(diào)用一次,相當(dāng)于現(xiàn)實(shí)中的1 s,這樣就可以通過(guò)改變allTableList.TimeRate的值來(lái)調(diào)整仿真的速度。allTableList.TimeRate的值越大仿真的速度越快;反之仿真的速度越慢。當(dāng)allTableList.TimeRate等于1時(shí),仿真時(shí)間和現(xiàn)實(shí)中的時(shí)間相等。
2.3 開發(fā)實(shí)例
該設(shè)計(jì)具有普遍的適用性,并且成功運(yùn)用在上海地鐵5號(hào)線ATS仿真系統(tǒng)以及上海地鐵8號(hào)線ATS仿真系統(tǒng)中。圖3和圖4分別為5號(hào)線、8號(hào)線ATS仿真系統(tǒng)運(yùn)行界面。
本文提出了一種基于定時(shí)器的模擬列車運(yùn)行模塊的設(shè)計(jì)和實(shí)現(xiàn),同時(shí)將該模塊成功應(yīng)用于上海地鐵5號(hào)線、8號(hào)線的ATS仿真系統(tǒng)中。與以往基于多線程的設(shè)計(jì)相比,本設(shè)計(jì)實(shí)現(xiàn)容易,且占用較少的系統(tǒng)資源。
參考文獻(xiàn)
[1] 趙根苗,陳永生.ATS仿真培訓(xùn)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].城市軌道交通研究,2004,7(1):55-57.
[2] 姜軍紅,李一凡,黃沙白.輕軌交通調(diào)度監(jiān)控系統(tǒng)的仿真[J].計(jì)算機(jī)仿真,2001,18(6):49-52.
[3] 李曉月.上海地鐵一號(hào)線的車載信號(hào)系統(tǒng).鐵道運(yùn)營(yíng)技術(shù),1998,4(4):172-177.
[4] 惠天舒.分布式交互仿真技術(shù)綜述[J].系統(tǒng)仿真學(xué)報(bào),1998,10(1):1-7.
[5] 上海地鐵一號(hào)線的車載信號(hào)系統(tǒng)[J].鐵道運(yùn)營(yíng)技術(shù),1998,4(4):172-177.