城市轨道交通列车运行图编制模拟系统
2013-12-06许王燕
许王燕
(同济大学电信学院,上海 201800)
近年来随着城市规模的扩大和地面交通的日益拥堵,发展轨道交通成为了解决城市交通问题的重要途径。而列车运行图是轨道交通中指挥列车运行的依据,它作为城市轨道交通系统运输组织的工作计划与调整基础,意义重大[1][2]。因此,一个能够清晰展示列车运行计划的运行图对于轨道交通的正常运行具有重要的意义。
城市轨道交通在运行过程中受到众多因素的影响,比如,轨道上的列车会经常出现列车晚点,甚至多趟列车连带晚点等意外情况,所以在实际运行过程中不可避免的会发生偏离原定计划的现象。因此,调整修改运行图的功能是一个设计良好的运行图铺画编制系统的必备模块。
本文详细阐述了一个基于MFC的文档编码结构,使用面向对象的编程方式,实现了城市轨道交通列车运行图的铺画和调整的程序。最后给出了本程序在上海轨道交通八号线上的仿真实现结果。
1 列车运行图编制模拟系统体系结构
总体结构采用模块化设计,便于系统的维护,也有利于系统以后的功能扩展。在系统中,车站计划员和工作站操作员要实时了解列车的运行情况,并在需要的时候对运行进行调整操作,因此运行图部分关键技术包括列车运行图编制、列车运行图调整、列车运行图输出及数据管理四部分[3]。整体结构如图1所示。
软件采用MVC三层架构,分为数据层、控制层和视图层。其中数据层和数据库、XML文件的交互,为控制层提供数据。控制层负责接受用户的控制信息并对数据层提供的数据进行整合。视图层负责运行图的铺画和展示工作。
其中视图层是整个系统的核心,列车运行图涉及许多方面的编图数据(列车信息、车站信息、线路信息、车库信息、列车时刻表信息和图形显示信息等)的处理和结果输出的处理(编调图数据库管理、运行图人工调整、运行图输出、列车时刻表输出以及指标统计),这些都在控制层中完成[5][8]。
2 系统框架和数据结构设计
(1)系统框架设计。本系统采用了MFC的文档/视图结构为框架进行开发。主要图形数据放在CGraphDoc类(从CDocument派生的文档类)中;在CDisplayView视图(运行图显示与调图视图)中用图形数据对象提供的接口对图形数据进行显示输出,即显示/打印运行图,并在调图操作时对数据对象进行修改;在CGraphView视图(站名与区间信息视图)中,同样调用图形数据对象接口显示车站和区间信息。由于车站信息也是运行图的一部分,两视图显示的位置必须一致,二者就依赖于文档类中的图形数据进行统一。
(2)运行图调整子系统的模块设计。一般来说调整系统包含这样一些功能:运行图图形显示和操作,运行线的调整,周转关系的调整,调整约束检测,和其他一些辅助功能[4]。
图2描述了运行图调整子系统的模块框架以及各个子模块之间的相互关系,图中细箭头标示控制流,粗箭头表示数据流。该调图子系统与主系统之间只有数据信息的关联,是松耦合结构,因此只要数据通讯接口统一,该调图子系统完全可以整合到任何编图系统框架之下。在调整系统内部,分为显示和调整两大模块,显示模块完成运行图图形显示和操作,调整模块完成运行线的调整,周转关系的调整,这两个个模块均以运行图对象为数据基础,而数据对象则根据TimeTable生成。显示与调整模块两者互不干涉的完成显示和人工干预的功能,但两者常常需要通信,因为调整常基于运行图显示。
图2 运行图调整子系统的模块图
(3)运行图数据结构。由运行图的组成元素可以将运行图作为一个大的对象(TrainGraph),其内部包含了运行图网格(Grid)、运行线(Train Line)、周转线(Circulation)、到发时刻点等对象。运行图的所有相关操作都要通过运行图对象来完成。因此可设计各对象的关系如下图3。
图3 运行图内部对象关系
这个结构是符合一般运行图编制软件的普遍要求的,运行图中的元素是可增加的,而且具有较好的可扩展性,不论是用面向对象或非面向对象的语言都可以很容易实现。
实际实现时,运行图在接收参数TimeTable后,就由TimeTable产生了运行线集合并保存在链表中。其内部到发时刻保存在数组中,周转线没有独立成为一个对象,而是作为运行线的一个属性。
所以设计时所有显示及调图操作基本上都围绕这两个类:
CtrainGraph类:负责整幅运行图的操作,包括建立运行图对象、格式设置、显示比例设置、绘制整幅图、车站及区间信息显示等操作。
CtrainLine类:其对象表示运行图中各段线路。该类负责线路的绘制、擦除,提供调图操作所需的必要接口。
(4)运行图的输出与调整。①运行图信息。本设计利用XML文件保存运行图显示和运行图调整的内容,在主系统与子系统交互的数据和信息是由参数 TimeTable来关联的,TimeTable是从XML读取的一种保存了运行图显示和运行图调整内容的数据结构。XML文件存储的数据如下所示:
<TimeTableLists>
<Name>时刻表 1</Name> //时刻表名称
<TimeTable>
<ID>801</ID> //列车 ID
<Record>
<Line>39</Line> //运行线路
<Platform>HTM-PS23</Platform> //停靠站台名
<Arrival>05∶14∶00</Arrival> //到站时间
<Departure>05∶14∶00</Departure> //离站时间
</Record>
……
</TimeTable>
<TimeTable>
……
</TimeTable>
</TimeTableLists>②运行图显示。图3描述了运行图数据结构的从属关系,运行图的显示模块是建立在运行图对象结构的基础之上的,首先对各对象实现各自的OnDraw()函数,运行图显示则通过运行图对象的OnDraw()函数调用其内部各对象的OnDraw()来完成。
实现时,在运行图对象(CTrainGraph)中实现运行图显示的方法。通过运行图坐标原点在设备坐标系中的坐标(CTrainGraph的属性m_OrgPoint)就可以完成设备坐标系与运行图坐标系的映射。Time2Point()与Point2Time()函数完成了时间到运行图横坐标的映射。
③运行图调整。运行图的调整模块是运行图系统另一重要的模块。目前,人机交互方式在图形界面下仍然以鼠标+键盘为主[11]。虽然很多新人机交互技术层出不穷,像手写笔或触摸屏的发展,然而鼠标+键盘+图形界面元素(菜单、按钮等)完全可以对运行图精确调整[9][10]。所以每个调整图行的操作,包括运行图的缩放,添加、删除和移动运行线,增加和删减停站,变更区间运行时分等等,都可以分解为一系列连续或独立键盘或鼠标的操作。拿平移运行线举例来说,它可以是下面一系列鼠标操作:按下左键选定运行线->拖动运行线->放开完成拖动,也可以是键盘操作:选择运行线->输入平移位移量->确定完成修改。运行图调整模块的设计如下图4所示:
图4 运行图调整模块设计
其中GraphCommand类提供了鼠标按下、移动,键盘等操作的通用接口,子类继承、实现这些接口。
另一个重要的类是Memory,它记录了操作之前的运行图状态,是为了完成撤销及恢复的操作。
实现时,调整操作对象均从GraphCommand对象继承,子操作具体实现 GraphCommand的接口,调用时只需通过GraphCommand指针完成,例如鼠标移动消息响应函数OnMouseMove():
void CmyView ∶∶ OnMouseMove ( UINT nFlags, CPoint point){
……
if(m_pGraphCommand != NULL){
BOOL bRet = m_pGraphCommand ->OnMouseMove( nFlags, ScrollPos, point,… );
}
……
}
调用前只需确定 m_pGraphCommand的具体操作,如m_pGraphCommand = &DeleteLine;则调用平移运行线操作的OnMouseDelete()。
3 实现结果
为了证实上述程序的有效性,我们选择上海轨道交通 8号线2008年列车运行时刻表的计划数据,并将其保存为结构如表1、表2、表3所示的TimeTable。使用前述程序对其进行处理,得到图5所示的列车运行图。
图5所显示的列车运行图中,横坐标代表时间,纵坐标代表列车所经过的具体车站,红色代表上行计划线,蓝色代表下行计划线,粉红色表示实际上行线,浅绿色表示实际下行线。在时间轴上的水平线是周转线。从图中可以看出,通过自动调整模块调整后实际运行线与计划运行线之间还是有一定偏差,这时可以运用调整模块进行适当的手动调整包括跳停、扣车、调整运行时分等方法。
从图中可以看出,此种方式能够绘制出表达清晰的列车运行图。
表1 时刻表信息
表2 时刻表信息 (续)
上海地铁8号线用于以上系统后所显示的部分运行图如图8所示。
图5 上海地铁8号线模拟运行图
[1] 吴洋.晚点情况下地铁列车实时运行调整及速度控制模式研究[D].西南交通大学,2004.1-2.
[2] 徐炜.计算机编制列车运行图的方法研究[D].大连交通大学,2005.1-2.
[3] 张其亮,陈永生,杜磊.基于编织算法的复线高速磁浮列车运行图铺画方法[J].计算机应用,2011,12(31) 3434~3437.
[4] 倪少权,吕红霞,刘继勇.计算机编制列车运行图系统调整系统设计及实现[J].西南交通大学学报,2001:36(3):240~244
[5] 高强周.城市轨道交通列车运行图设计实现与评价[D].北京交通大学,2008.11.
[6] 江志彬,徐瑞华,吴强,吕杰.计算机编制城市轨道交通共线交路列车运行图[J].同济大学学报(自然科学版),2010,38(5) 692~696.
[7] 徐瑞华,江志彬,朱效洁,吴强.城市轨道交通列车运行图计算机编制的关键问题研究[J].城市轨道交通研究,2005.(05).31-36.
[8] Kroon Leo,Marofi Gabor,Helmrich Mathiin Retel,et a1.Stochastic improvement of cyclic railway timetables[J].Transportation Research Part B: Methodological, 2008,42(6):553.
[9] 马建军,胡思继,许红,等.京沪高速铁路列车运行图编制基本理论的研究[J].北京交通大学学报,2002,26(2):47-50.
[10] Dai Baoqian, Wang Tong, Qin Yueping. “Subway Station Evacuation Simulation System”, International Conference on Measuring Technology and Mechatronics Automation,vol 2, 2009, pp. 396-399.
[11] 汪现雨,陈永生.可复用的列车运行图调整系统的设计[J].西南交通大学学报,2001,36(3) 240~244.