Automatic generation software for interlocking table based on custom entity
-
摘要: 为提高联锁表编制效率和准确性,设计基于自定义实体的联锁表自动生成软件。使用AutoCAD二次开发接口,读取利用ObjectARX创建的信号设备自定义实体的数据信息;根据信号设备平面布置图的结构特点自动生成站场型数据结构;利用深度优先搜索(DFS, Depth First Search)算法搜索进路,并根据联锁表编制原则,处理进路数据和生成联锁数据。现场试用结果表明,该软件能与信号设备平面布置图实时交互,快速访问AutoCAD数据库,直接调用其中实体,生成标准格式的铁路车站联锁表及地铁车辆联锁表,准确率超过99%,且具有较高的通用性。Abstract: To improve the efficiency and accuracy of interlocking table compilation, this paper designed an automatic generation software for interlocking table based on custom entity. The paper used the AutoCAD secondary development interface to read the data information of customized entities of signal equipment created using Object ARX, automatically generated the station type data structure based on the structural characteristics of the signal equipment layout plan, used Deep First Search (DFS) algorithm to search for routes, and according to the principles of interlocking table compilation, processed route data and generated interlocking data. The on-site trial results show that the software can interact with the signal equipment layout plan in real-time and quickly access the AutoCAD database, directly call the entities in it, generate standard format railway station interlocking tables and subway vehicle interlocking tables with an accuracy rate of over 99% and high universality.
-
Keywords:
- custom entity /
- ObjectARX /
- route searching /
- automatic generation /
- interlocking table
-
计算机联锁利用道岔、信号机、轨道区段等设备之间的相互关联和相互制约关系,实现对车站作业的计算机集中控制。国内外学者已经对计算机联锁软件进行了大量的研究,谢保锋对车站计算机联锁系统的现状与发展作出了分析[1];陈志颖等人提出了基于站场型数据结构的进路搜索算法[2];陈晓伟应用分布式控制系统和多Agent系统技术,提出了一种新型的分布式、智能化联锁软件的设计方案[3];Eugenio Roanes-Lozano等人提出一种新的计算机联锁决策机制[4];Yildirim等人利用计算机代数工具箱自动生成铁路联锁工作台[5];杨美娜等人采用二叉树结构的进路搜索算法设计高速铁路的计算机联锁软件[6];彭丽维提出了为各类信号设备建立图元模型的设计思想[7];孙晓光利用 CAD 图块方法提供统一的信号图元,实现了信号平面布置图标准化处理[8]。
以上对计算机联锁软件的研究,主要针对某一具体过程(如进路搜索、站场数据构造),在设计时均需要先设计联锁表,后在软件中配置大量联锁数据来实现,进路搜索以数据配置为基础,消耗了大量时间。未来,便捷式联锁软件表示层的绘制和联锁进路搜索数据结构的自动构建将成为重要发展方向。
本文提出了一种模块化计算机联锁软件(简称:模块化联锁软件)设计方法,将道岔、信号机、轨道区段等设备设计为不同的程序模块,用户利用鼠标拖动不同的程序模块并输入各设备的具体参数,绘制联锁软件表示层,绘制完成后,软件可自动建立二叉树站场联锁数据结构,无需手动配置大量联锁数据,并使用递归算法完成计算机联锁进路搜索。在某车站,分别使用本文提出的设计方法和传统的设计方法设计联锁软件,对比两种方法的设计流程和设计用时,验证了本文所提联锁软件设计方法的优越性。
1 程序模块设计
联锁软件的表示层显示道岔、信号机、轨道区段的图形、状态和位置等信息。为完成联锁软件表示层的设计,需要设计道岔、信号机、轨道区段的程序模块。本文采用面向对象[9]的思想,使用C#语言编程,WinForm作为用户界面框架,分别设计道岔模块、信号机模块、轨道区段模块。
建立Equip类(父类),再继承父类,创建3个设备子类,分别为道岔模块、信号机模块和轨道区段模块。每个设备子类建立各自的属性参数,其中,道岔模块包含道岔类别(单动/双动/交叉渡线/复式交分等)、撇型/捺型、道岔图号等,信号机模块包含信号机类型、显示颜色、信号机方向(向左/向右)等,轨道区段模块包含长度、类型(一体化、25 Hz、高压脉冲等)、占用/空闲等。
1.1 道岔模块设计
道岔模块主要实现道岔的绘制、定反位转换、拖动及缩放功能。
1.1.1 道岔绘制
在软件设计中,道岔以定型组合的形式呈现,除了需要绘制道岔,还要绘制一段各岔尖对应的轨道区段,用DrawLine方法绘制出道岔定型组合中的连接每个两端端点的直线,需要使用画笔Pen实例化一个道岔对象,定义单色画笔来绘制道岔轮廓和基本形状;使用从Brush类派生出的SolidBrush类画刷对象,实现道岔颜色填充。以单动道岔(撇型)为例,道岔图像如图1所示。
由于整个设备在一张画布上,需要实现道岔与画布背景分离,且由于画出的不是一个线性图形,而是多条直线组成的复杂形状,因此,利用GraphicsPath类记录下绘图的过程后将所有直线一起画出。
1.1.2 道岔定反位转换
由于道岔定反位显示中只有岔尖部分的画法与道岔的不同,其他均一致,因此,可用鼠标点击岔尖具体范围的位置后,再用道岔直股或者弯股的画法实现。根据上述单动道岔子类中所设置的鼠标点击事件,以及代码中对单动道岔画法及抠图的不同,利用判断语句实现道岔定反位转换的表示。
1.1.3 道岔拖动及缩放
通过多态性实现道岔拖动及缩放功能。在实现道岔的缩放功能时,要求在鼠标按下时记录原始的鼠标位置,鼠标移动时要计算差值,鼠标抬起时要记录位置,这些是父类具备的功能。子类的鼠标抬起的时候,刷新原来的基准值,而子类的刷新基准不相同,此时,将该事件对应的功能函数设为多态,即同一操作作用于不同的对象可产生不同的执行结果,符合功能实现的要求。此外,由于需要能够同时实现道岔的拖动及缩放功能,在鼠标按下和移动时需要判断是实现哪一种功能,两者可用不同区域、不同鼠标样式进行区分。
1.2 信号机模块设计
信号机模块在道岔模块的基础上完成,由于信号机不存在抠图、转换及缩放的要求,在信号机模块设计时只需完成信号机的绘制、拖动及标签按钮的配置,其中,拖动功能可参考道岔进行设计。
1.2.1 信号机绘制
使用Graphics类DrawEllipse方法绘制信号机。由左上角坐标、指定高度和宽度的正方形边框定义信号机圆形灯位形状;采用DrawLine方法,绘制两端端点坐标确定的信号机直线型基柱形状;采用FillEllipse方法,填充由左上角坐标、高度和宽度指定的正方形边框所定义的信号机灯位的显示颜色。
根据此画法,将信号机整体外形画出并填充好信号机的灯位颜色,以矮柱单灯位信号机为例,信号机图像如图2所示。
1.2.2 信号机标签按钮配置
如图2所示,蓝色灯位左侧为信号机标签位置,上方为其按钮位置,标签及按钮为标准控件,其尺寸、位置及字体等的设计通过构造函数实现。
1.3 轨道区段模块设计
轨道区段模块的设计内容主要包括图形绘制、标签设计和缩放,由于轨道区段在绘制时是一条直线,且不需抠图,缩放只是对轨道区段进行伸缩,因此,可参照道岔模块的设计方法,轨道区段图像如图3所示。
1.4 绘制界面设计
绘制界面包括两部分:(1)左侧为绘制站场按钮工具栏;(2)右侧为当前站场绘制的界面。在使用时,用鼠标点击不同类型设备(信号机,道岔,轨道区段)按钮并输入其具体参数值,输入完成后可对其进行拖动以调整到正确位置,完成对该设备的绘制。对所有设备进行绘制,完成联锁软件表示层设计,为联锁数据结构的生成和进路搜索的实现建立基础。本文联锁软件的绘制界面如图4所示。
2 模块化站场数据结构与进路搜索设计
2.1 二叉链表与站场数据结构
二叉树[10]由一个根节点和两个互不相交的被称为左子树和右子树的节点组成,其中,左子树或右子树可以为空,二叉树的单链表链接如图5所示。
利用站场形状和二叉树形状的相似性[11],站场中各设备分别作为道岔、信号机、轨道区段这3个子类的对象,依据二叉树的单链表结构进行连接,将每个设备对象的指针存放在容器PointVector中,将PointVector设计为存放父类指针的容器。以某车站为例,站场部分数据结构如图6所示。
将道岔、信号机、轨道区段等模块映射为二叉树中的基本节点单元,绘制完成的设备自动进行连接,并添加模块化联锁软件操作按钮和操作表示灯,生成模块化联锁软件人机交互界面。仍以上述某车站为例,在图4所示绘制界面中,将联锁软件表示层绘制完成后,自动生成模块化联锁软件的人机交互界面,如图7所示。
2.2 进路搜索设计
进路是车站内列车或调车车列在两个地点之间运行的路线,由若干控制列车运行的设备(如道岔、信号机、轨道区段)组成。进路搜索根据进路的始端、终端(或始端、终端和变更按钮),将组成进路的所有设备对应的节点搜索出来。
将道岔、信号机、轨道区段这3个模块中每个对象的指针统一存放在PointVector容器中时,由于PointVector被设计为存放父类指针的容器,子类对象的指针将被隐式转换为父类指针(子类对象可转换成父类对象),可能导致进路在搜索完成后,搜索出的各设备的指针不能调用其所属类中的自身的操作(即子类对象不能转换为父类对象)。因此,本文利用面向对象的程序设计中的多态思想,用父类指针指向各设备对象,再将每个设备对应的父类指针存储到PointVector容器中。
采用递归算法实现进路搜索[12],根据递归算法的实现条件,进路搜索函数SearchPoint可分为搜索保存部分和递归出口条件部分。
2.2.1 搜索保存部分
搜索保存部分指在保证节点不为空且未找到目标节点指针的情况下,按根节点、右子树和左子树(或根节点、左子树和右子树)的顺序依次进行搜索并保存节点指针至父类指针容器PointVector中。在搜索左子树之前,从父类指针容器尾部开始删除各模块中设备节点指针至根节点(不包括根节点),剔除进路外的无关节点指针。
2.2.2 递归出口条件部分
递归出口条件分以下两种情况。
(1)当进路中无变更按钮时,进路的始、终端对应的设备节点指针将作为进路搜索函数的参数进行搜索。在搜索到尾节点仍未搜索到目标节点时,保存该尾节点指针至PointVector,并让搜索函数返回;搜索到目标节点时,将搜索标识FindPoint置为true,保证搜索函数在返回过程中不会继续保存或删除容器PointVector中已存在的节点指针,再将搜索函数返回。
(2)当进路中有变更按钮时,可将始端、变更按钮和变更按钮、终端两组设备节点指针依次作为进路搜索函数的参数,逐次进行搜索。
以图7中举例站D1—IIG调车进路的进路搜索过程为例,采用递归算法进行进路搜索的轨迹如图8所示,PointVector中节点指针变化如表1所示。在本次搜索中,共进行了7次递归调用。
表 1 PointVector中节点指针变化递归调用 节点指针变化 第1次 P(D1)、P(1DG)、P(1)、P(5)、P(D3)、P(9DG)、P(9)、P(D9)、P(11DG)、P(11)、P(S3)、P(3G) 第2次 P(D1)、P(1DG)、P(1)、P(5)、P(D3)、P(9DG)、P(9)、P(D9)、P(11DG)、P(11) 第3次 P(D1)、P(1DG)、P(1)、P(5)、P(D3)、P(9DG)、P(9)、P(D9)、P(11DG)、P(11)、P(S1)、P(1G) 第4次 P(D1)、P(1DG)、P(1) 第5次 P(D1)、P(1DG)、P(1)、P(3)、P(3DG)、P(D5)、P(5DG)、P(5)、P(D7)、P(7DG)、P(7)、P(9)、P(D9)、P(11DG)、P(11)、P(SI)、P(IG) 第6次 P(D1)、P(1DG)、P(1)、P(3)、P(3DG)、P(D5)、P(5DG)、P(5)、P(D7)、P(7DG)、P(7) 第7次 P(D1)、P(1DG)、P(1)、P(3)、P(3DG)、P(D5)、P(5DG)、P(5)、P(D7)、P(7DG)、P(7)、P(SII)、P(IIG) 3 软件分析与比较
传统联锁软件设计方法要求先设计联锁表,并对大量联锁数据进行手动配置,联锁表由设计单位设计,联锁数据由设备厂家配置,两项内容的设计和交接消耗了大量时间和人力。本文所提联锁软件设计方法将设备进行模块化处理,使用拖动方式完成联锁软件表示层绘制,软件即可自动生成二叉树数据,建立数据连接,完成进路搜索,得到最终的模块化联锁软件,省去了大量时间。
以图7中举例站为例,使用本文所提方法和传统方法设计联锁软件,所需时间如表2所示。
表 2 联锁软件设计所需时间对比各设计流程所需时间/ h 联锁表设计 联锁软件站场图形生成 联锁数据配置与生成 联锁软件测试及修改 总时间 传统联锁软件方法 12 15 12 24 71 本文模块化联锁软件设计方法 0 18 0.5 28 54.5 由表2可知,本文所提设计方法在联锁表设计及联锁数据配置与生成两项上节省了大量时间,总时间节省了约30%。
4 结束语
本文设计了一种基于递归算法的模块化计算机联锁软件,将不同的设备设计为不同的程序模块,实现在软件里拖动相关模块完成联锁软件表示层的绘制,并利用二叉树和递归算法完成数据结构的建立、进路搜索。该模块化计算机联锁软件设计方法摆脱了传统联锁软件需要手动配置大量联锁数据和设计联锁表的困扰,节省了大量时间,提高了设计效率。
-
表 1 站场信号设备平面布置图提供的数据
自定义实体类型 需要获取的数据 信号机 名称、类型、基点坐标、朝向、旋转角度 道岔 名称、基点坐标、旋转角度 轨道电路 名称、起点坐标、终点坐标 绝缘节 类型、基点坐标、旋转角度 文本 内容、基点坐标 块参照 名称、坐标、旋转角度 表 2 通用性与准确性实验结果
站场名称 站场性质 道岔数量 股道数量 进路数据数量 生成进路数据数量 准确率 北京南站 高铁 36 7 171 171 100% 亦庄站 高铁 8 4 52 52 100% 永乐站 高铁 12 4 32 32 100% 新宫站 地铁车辆段 52 23 609 605 99.30% 句容站 地铁车辆段 54 19 159 159 100% 砀山站 普铁 33 8 198 198 100% 蓟县西站 普铁 41 7 226 226 100% 大同县站 普铁 25 6 166 166 100% 夏邑站 普铁 25 6 156 156 100% 宝鸡站 普铁 97 10 642 642 100% -
[1] 杨 扬. 车站信号控制系统[M]. 成都: 西南交通大学出版社, 2012. [2] 于 磊,骆正新. 地铁正线联锁表自动生成软件的研究与设计 [J]. 铁路通信信号工程技术,2022,19(9):95-100. [3] 高兵德. CAD二次开发在铁路车站信号设计中的应用 [J]. 铁道通信信号,2016,52(8):33-35. [4] 张 帆, 朱文俊. AutoCAD ObjectARX(VC)开发基础与实例教程[M]. 北京: 中国电力出版社, 2014. [5] 汤亚玲, 胡增涛. C++语言程序设计[M]. 北京: 人民邮电出版社, 2016. [6] 杨瑞宇. CAD二次开发及其在铁路信号施工图设计中的应用 [J]. 铁道标准设计,2012(2):115-117. [7] 谢 林,杨 扬. 基于二维坐标信息进路搜索算法研究 [J]. 铁路计算机应用,2015,24(8):16-19. [8] 中国铁路总公司. 计算机联锁车站联锁图表编制原则: Q/CR 654-2018 [S]. 北京: 中国铁道出版社, 2018. [9] 杜 涛. 典型站场信号平面布置图中联锁表的编制原则及分析 [J]. 科技创新导报,2019,16(26):26-27. [10] 谢朝燕,杨 扬. 车辆段信号设备平面布置图辅助设计平台的研究 [J]. 铁路计算机应用,2022,31(10):73-79. -
期刊类型引用(3)
1. 曲涛,景宁,张仁义,洪希仁,常伟,王亚茹. 基于机器学习的辅助逆变器进风滤网堵塞诊断. 铁道车辆. 2024(03): 80-83 . 百度学术
2. 胡平. 铁路机车车辆运行故障监测诊断研究. 粘接. 2021(06): 169-173 . 百度学术
3. 王凯,刘成瑞. 动车组智能化网络控制系统研究. 智慧轨道交通. 2021(05): 13-18 . 百度学术
其他类型引用(0)