《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > ATS仿真系统模拟列车运行模块的设计与实现
ATS仿真系统模拟列车运行模块的设计与实现
来源:微型机与应用2012年第19期
陈 超,郭秀清
(同济大学 控制理论与控制工程系,上海 200331)
摘要: 提出了一种基于定时器的模拟列车运行模块的设计和实现。重点介绍了模拟列车运行模块的列车状态判断、列车速度调整、列车位置刷新各个组成部分。
Abstract:
Key words :

摘  要: 提出了一种基于定时器的模拟列车运行模块的设计和实现。重点介绍了模拟列车运行模块的列车状态判断列车速度调整列车位置刷新各个组成部分。
关键词: ATS仿真系统;模拟列车运行模块;列车状态判断;列车速度调整;列车位置刷新

 随着城市轨道交通迅猛发展,城轨交通ATS仿真系统成为解决轨道交通运营企业运营人员培养滞后的有效途径[1]。目前整个ATS仿真系统主要包括终端显示模块、模拟列车运行模块、ATP模块、ATS操作模块、故障设置及处理模块、教学考评模块、数据存储和管理模块等,而模拟列车运行模块在整个系统中占据核心地位。以往的ATS模拟列车运行模块大多是基于多线程,而多线程必须处理好数据同步的问题,实现起来存在一定的难度,并且占用系统资源较多。定时器具有实现容易、占用资源小的特点,在一定程度上可以替代多线程。因此,本文提出一种基于定时器的ATS模拟列车运行模块的设计。
1 模拟列车运行模块设计
 该模块主要包括三个部分:判断列车运行状态以确定列车是否可以继续运行、根据列车具体运行情况改变列车速度、负责每个微小的时间段按轨道上列车运行的方向刷新列车的位置以模拟列车的行驶过程。以往该模块都置于一个独立的线程之中,这样实现数据同步存在一定的难度,并且占用较多的系统资源。本文考虑将此模块移到定时器函数中,以降低实现难度并节省系统资源。该设计以定时时间为单位,每次定时时间到,就判断此刻列车是否可以继续行驶。如果不可以,就等待下一次定时时间的到来,并将当前时间增加1 s;如果可以,接下来就开始调整列车的速度,最后根据最新的速度计算1 s之内列车需要移动的距离,并在界面上刷新列车的位置,同时将当前时间增加1 s。模块设计流程如图1所示。


1.1 列车状态判断
 列车运行状态标志着列车运行过程中的各个阶段以及进路选择情况,在一般情况下可以正常行驶,正常行驶过程中需要判断列车是准点、早点还是晚点;而在停站中、进路未选好、到站后等情况下,列车则不可以继续行驶。列车运行状态判断部分主要用于下一步确定列车运行速度以及通知模拟列车运行模块是否需要刷新列车的位置。
1.2 列车速度调整
 列车速度调整主要包括3个因素:与先行列车的间隔距离;列车运行的进路情况,包括前方进路是否存在弯道及道岔状态等;当前列车运行的准点情况[2]。图2是一条速度命令控制线[3]。当先行列车在0T区段,1T必须空闲,后续列车如果在2T,它收到的限速命令应该为0,即后续列车在2T的出口端必须停车,并有1T闭塞分区作为保护距离;若1T、2T空闲,后续列车在3T,则后续列车收到的是20 km/h的速度命令。同理,当1T、2T、3T、4T、5T、6T、7T都空闲,运行于8T的后续列车收到的速度命令为80 km/h。可见要使列车运行于80 km/h,前方必须有7个闭塞分区。

    根据线路情况、车辆性能、轨道电路特性等,应进行闭塞设计,划分合理的闭塞分区,从而产生速度命令控制线,作为速度命令选择的逻辑依据。
1.3 列车位置刷新
 在上述两部分都完成的基础上需要对列车的位置进行刷新,根据列车的当前速度计算出列车运行的实际运行的距离,以便在界面上能够反映出模拟列车实际运行的效果。列车位移-速度-时间表达式如下[4]:
 S=V×Δt+S′
式中,S表示列车当前位移,V表示列车速度,Δt表示刷新时间间隔,S′表示列车上一次刷新时的位移。另外,列车运行一段距离以后车头可能会进入一条新的进路,而车尾也可能会出清一个轨道进路,因此,列车位置刷新部分需要在适当的时候设置列车占用以及清除列车占用。
2 模拟列车运行模块的实现
 模拟列车运行模块的实现主要包括以下4个部分:(1)定义列车类。除了一些基本列车属性以外,需要定义3个主要的函数分别为:TrainCanMove()、ChangeSpeed()以及Move()。(2)分别实现TrainCanMove()、ChangeSpeed()以及Move()。(3)在OnTimer()中实现图1所示的模拟列车运行模块流程。(4)模块功能的测试和扩展。
2.1 列车类的实现
 列车类定义代码如下:
class Train
{
public:
    Train();
    ~Train();
private:
    CString         m_TrainName;          //列车名字
    CString        m_TrainNumber;          //车次号
    CString        m_HeadOccupied;  //车头占用区段或道岔
    CString        m_TailOccupied;  //车尾占用区段或道岔
    CString        m_CurrentPlatform;      //当前站台
    CString        m_LastPlatform;          //上一个站台
    CString        m_NextPlatform;          //下一个站台
    bool        m_IsRunning;            //列车是否运行
    double        m_TrainLength;           //列车长度
    double        m_TrainSpeed;           //列车速度
    double        m_TrainLimitSpeed;     //列车速度限制
    short         m_Direction;     //方向:0-向右,1-向左
public:
    bool          TrainCanMove();
    void          Move(bool CanMoveNext);
    bool               ChangeSpeed();

}
 Train类中,成员函数TrainCanMove()用于判断当前时刻列车是否可以继续运行,ChangeSpeed()用于调整列车速度,Move()用于刷新列车的当前位置。
2.2 OnTimer函数的实现
 OnTimer实现代码如下:
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);    
}
    定时器参数的单位为ms,也就是说OnTimer每1000/allTableList.TimeRate ms被调用一次,相当于现实中的1 s,这样就可以通过改变allTableList.TimeRate的值来调整仿真的速度。allTableList.TimeRate的值越大仿真的速度越快;反之仿真的速度越慢。当allTableList.TimeRate等于1时,仿真时间和现实中的时间相等。
2.3 开发实例
 该设计具有普遍的适用性,并且成功运用在上海地铁5号线ATS仿真系统以及上海地铁8号线ATS仿真系统中。图3和图4分别为5号线、8号线ATS仿真系统运行界面。

 

 

 本文提出了一种基于定时器的模拟列车运行模块的设计和实现,同时将该模块成功应用于上海地铁5号线、8号线的ATS仿真系统中。与以往基于多线程的设计相比,本设计实现容易,且占用较少的系统资源。
参考文献
[1] 赵根苗,陈永生.ATS仿真培训系统的设计与实现[J].城市轨道交通研究,2004,7(1):55-57.
[2] 姜军红,李一凡,黄沙白.轻轨交通调度监控系统的仿真[J].计算机仿真,2001,18(6):49-52.
[3] 李晓月.上海地铁一号线的车载信号系统.铁道运营技术,1998,4(4):172-177.
[4] 惠天舒.分布式交互仿真技术综述[J].系统仿真学报,1998,10(1):1-7.
[5] 上海地铁一号线的车载信号系统[J].铁道运营技术,1998,4(4):172-177.

此内容为AET网站原创,未经授权禁止转载。