《电子技术应用》
您所在的位置:首页 > 其他 > 设计应用 > ATS仿真系统数据处理与逻辑运算模块的设计与实现
ATS仿真系统数据处理与逻辑运算模块的设计与实现
来源:微型机与应用2013年第22期
胡扬龙, 郭秀清
(同济大学 控制科学与工程系, 上海201804)
摘要: 在城市轨道交通ATS仿真系统中,数据库和逻辑运算是整个仿真系统最核心的两个部分。以上海地铁一号线为例,介绍了ATS仿真系统的架构,对数据库的设计以及XML表的存储和读取进行了详细分析。对建立在数据库信息的基础上进行了逻辑运算并对列车模拟运行状态进行控制和表示。
Abstract:
Key words :

摘  要: 在城市轨道交通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.

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