APP下载

模块化计算机联锁软件设计

2022-03-31贺云鹏

铁路计算机应用 2022年3期
关键词:信号机区段道岔

贺云鹏

(中铁第四勘察设计院集团有限公司 国际事业部,武汉 430063)

计算机联锁利用道岔、信号机、轨道区段等设备之间的相互关联和相互制约关系,实现对车站作业的计算机集中控制。国内外学者已经对计算机联锁软件进行了大量的研究,谢保锋对车站计算机联锁系统的现状与发展作出了分析[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所示。

图1 单动道岔(撇型)图像示意

由于整个设备在一张画布上,需要实现道岔与画布背景分离,且由于画出的不是一个线性图形,而是多条直线组成的复杂形状,因此,利用GraphicsPath类记录下绘图的过程后将所有直线一起画出。

1.1.2 道岔定反位转换

由于道岔定反位显示中只有岔尖部分的画法与道岔的不同,其他均一致,因此,可用鼠标点击岔尖具体范围的位置后,再用道岔直股或者弯股的画法实现。根据上述单动道岔子类中所设置的鼠标点击事件,以及代码中对单动道岔画法及抠图的不同,利用判断语句实现道岔定反位转换的表示。

1.1.3 道岔拖动及缩放

通过多态性实现道岔拖动及缩放功能。在实现道岔的缩放功能时,要求在鼠标按下时记录原始的鼠标位置,鼠标移动时要计算差值,鼠标抬起时要记录位置,这些是父类具备的功能。子类的鼠标抬起的时候,刷新原来的基准值,而子类的刷新基准不相同,此时,将该事件对应的功能函数设为多态,即同一操作作用于不同的对象可产生不同的执行结果,符合功能实现的要求。此外,由于需要能够同时实现道岔的拖动及缩放功能,在鼠标按下和移动时需要判断是实现哪一种功能,两者可用不同区域、不同鼠标样式进行区分。

1.2 信号机模块设计

信号机模块在道岔模块的基础上完成,由于信号机不存在抠图、转换及缩放的要求,在信号机模块设计时只需完成信号机的绘制、拖动及标签按钮的配置,其中,拖动功能可参考道岔进行设计。

1.2.1 信号机绘制

使用Graphics类DrawEllipse方法绘制信号机。由左上角坐标、指定高度和宽度的正方形边框定义信号机圆形灯位形状;采用DrawLine方法,绘制两端端点坐标确定的信号机直线型基柱形状;采用FillEllipse方法,填充由左上角坐标、高度和宽度指定的正方形边框所定义的信号机灯位的显示颜色。

根据此画法,将信号机整体外形画出并填充好信号机的灯位颜色,以矮柱单灯位信号机为例,信号机图像如图2所示。

图2 矮柱单灯位信号机图像示意

1.2.2 信号机标签按钮配置

如图2所示,蓝色灯位左侧为信号机标签位置,上方为其按钮位置,标签及按钮为标准控件,其尺寸、位置及字体等的设计通过构造函数实现。

1.3 轨道区段模块设计

轨道区段模块的设计内容主要包括图形绘制、标签设计和缩放,由于轨道区段在绘制时是一条直线,且不需抠图,缩放只是对轨道区段进行伸缩,因此,可参照道岔模块的设计方法,轨道区段图像如图3所示。

图3 轨道区段图像示意

1.4 绘制界面设计

绘制界面包括两部分:(1)左侧为绘制站场按钮工具栏;(2)右侧为当前站场绘制的界面。在使用时,用鼠标点击不同类型设备(信号机,道岔,轨道区段)按钮并输入其具体参数值,输入完成后可对其进行拖动以调整到正确位置,完成对该设备的绘制。对所有设备进行绘制,完成联锁软件表示层设计,为联锁数据结构的生成和进路搜索的实现建立基础。本文联锁软件的绘制界面如图4所示。

2 模块化站场数据结构与进路搜索设计

2.1 二叉链表与站场数据结构

二叉树[10]由一个根节点和两个互不相交的被称为左子树和右子树的节点组成,其中,左子树或右子树可以为空,二叉树的单链表链接如图5所示。

图5 二叉树的单链表链接

利用站场形状和二叉树形状的相似性[11],站场中各设备分别作为道岔、信号机、轨道区段这3个子类的对象,依据二叉树的单链表结构进行连接,将每个设备对象的指针存放在容器PointVector中,将PointVector设计为存放父类指针的容器。以某车站为例,站场部分数据结构如图6所示。

图6 站场部分数据结构示意

将道岔、信号机、轨道区段等模块映射为二叉树中的基本节点单元,绘制完成的设备自动进行连接,并添加模块化联锁软件操作按钮和操作表示灯,生成模块化联锁软件人机交互界面。仍以上述某车站为例,在图4所示绘制界面中,将联锁软件表示层绘制完成后,自动生成模块化联锁软件的人机交互界面,如图7所示。

图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次递归调用。

图8 举例站D1—IIG调车进路搜索轨迹

表1 PointVector中节点指针变化

3 软件分析与比较

传统联锁软件设计方法要求先设计联锁表,并对大量联锁数据进行手动配置,联锁表由设计单位设计,联锁数据由设备厂家配置,两项内容的设计和交接消耗了大量时间和人力。本文所提联锁软件设计方法将设备进行模块化处理,使用拖动方式完成联锁软件表示层绘制,软件即可自动生成二叉树数据,建立数据连接,完成进路搜索,得到最终的模块化联锁软件,省去了大量时间。

以图7中举例站为例,使用本文所提方法和传统方法设计联锁软件,所需时间如表2所示。

由表2可知,本文所提设计方法在联锁表设计及联锁数据配置与生成两项上节省了大量时间,总时间节省了约30%。

表2 联锁软件设计所需时间对比

4 结束语

本文设计了一种基于递归算法的模块化计算机联锁软件,将不同的设备设计为不同的程序模块,实现在软件里拖动相关模块完成联锁软件表示层的绘制,并利用二叉树和递归算法完成数据结构的建立、进路搜索。该模块化计算机联锁软件设计方法摆脱了传统联锁软件需要手动配置大量联锁数据和设计联锁表的困扰,节省了大量时间,提高了设计效率。

猜你喜欢

信号机区段道岔
跨座式单轨交通折线型道岔平面线形设计与研究
一种改进的列车进路接近锁闭区段延长方法
有砟线路道岔运输及铺换一体化施工技术与方法
高速铁路设施管理单元区段动态划分方法
中老铁路双线区段送电成功
跨座式单轨整体平转式道岔系统研究
信号机在城市轨道交通信号系统中的应用研究
黎塘一场三渡五交组合道岔无缝化大修设计
铀浓缩厂区段堵塞特征的试验研究
地铁正线信号机断丝误报警故障的处理探讨