张继燕,欧莹元
捣固车是一种对铁路线路进行自动化养护作业的专用机车,其作用包括起道、抄平、拨道和捣固作业。
捣固车自动引导系统的主要作用是在捣固车作业时将预先输入并存储的线路几何数据和修正数据,根据公里标的位置,计算出捣固车作业时当前位置的作业系统参数,并作为系统的给定量输入作业系统。
本文着重对线路几何数据和修正数据如何定义、输入和显示进行了研究。
一段铁路线路整体看来是不规则的,很难用一个数学公式来表示,但是可以把一段长的铁路线路看成是由多条短的铁路线路组合而成,每条短的线路可以用数学模型表示,这些短的线路首尾相接连在一起就是一段长的铁路线路。那么要描述这些短的铁路线路时需要描述的关键参数就主要有:
1)短的线路在长的铁路线路中的相对位置;
2)该线路从水平面上看是何种几何图形;
3)该线路在纵切面上看是何种几何图形;
4)两条铁轨之间的相对位置。
把对线路的这些描述数据称为线路几何数据。
在捣固车工作时为了减小误差的发生,经验丰富的铁路维修人员往往在几何数据的基础上添加一定的补偿数据来弥补由于路基的材料、机车震动等外界因素引起的工作误差,这些数据被称为线路补偿数据。
线路几何数据分为方向数据,超高数据,坡道数据。方向数据是描述铁路线路在水平面上的数据,超高数据是描述两铁轨间相对位置的数据,坡道数据是描述铁路线路在纵切面上的数据。
线路补偿数据分为拨道前端偏移数据和起道前端修正数据。拨道前端偏移数据是指用来修正水平面上数据误差的数据;起道前端修正数据是指用来修正纵平面上数据误差的数据。
方向数据包括:位置,方向线型,长度/半径,方向。
超高数据包括:位置,超高线型,超高量/长度,超高轨。
坡道数据包括:变坡位置,变坡方式,竖曲线半径,切线长度,坡道方向,坡度PPT。
拨道前端偏移数据包括:位置,偏移是否有效,前端偏移值,偏移方向。
起道前端修正数据包括:位置,修正是否有效,起道修正值,修正方向。
其中,方向数据和超高数据是有直接联系的,由于离心率的作用,铁路转弯处外轨要有一定的超高值,而且外轨超高的开始渐变只能比方向数据上圆弧渐变开始的早或者同时发生渐变,不能晚于圆弧渐变发生,否则会发生难以想象的后果。
本系统用Microsoft Visual Studio 2008 c#来完成。所以数据定义也是用 C#来实现。根据以上对线路数据的分析,分别对方向数据、超高数据、坡道数据、拨道前端偏移数据和起道前端修正数据做了定义:
1.由于方向数据和超高数据的关系,把这两个数据定义在同一个类里面,如表1所示:
表1 方向和超高数据定义
其中LineGeometry为枚举类型,各枚举分量的定义,如表2所示:
表2 LineGeometry定义
其中LineCant为枚举类型,各枚举分量的定义,如表3所示:
表3 LineCant定义
2.坡道数据的定义,如表4所示:
表4 坡道数据定义
其中,LevelGeometry为枚举类型,各枚举分量的定义,如表5所示:
表5 LevelGeometry定义
3.拨道前端偏移数据和起道前端修正数据也往往是一起来用,所以也定义在了同一个类中,如表6所示:
表6 拨道前端偏移数据和起道前端修正数据定义
该系统要实现输入以上定义的原始数据并有形象的图形显示,然后计算出参数传递给机车控制系统来控制捣固车工作。在输入的同时系统要有自动的语法检查功能,防止工作人员误输入造成输入的线路数据不符合铁路线路规则,以致使作业后的铁路造成损坏。
所以数据的显示我们做了两个部分:表格显示和图形显示。
1.表格的显示
要实现一个快捷、方便并带有语法检查功能的录入系统,选择用表格来实现。对于本系统来说,选择表格有如下好处:
1) 能够清晰明了的把原始数据定义的不同属性排列到不同列中。
2) 表格的一行数据正好存储线路的一个数据段。
3) 能够实现数据的快捷、方便的录入
4) 因为表格的行号正好与原始数据的线路路段号
是一一对应的,有利于实现语法检查。
由于C#中DataGridView控件对表格数据操作的下列优点,选择用DataGridView控件来容纳并编辑线路数据的原始数据。
显示效果,如图1所示:
图1 表格显示效果
2.图形的显示
从铁路原始数据到数据显示在图形控件上,需要3个步骤:
1) 原始数据转换到计算数据
原始数据是铁路线路数据的最原始的形式,要最后用图形画出来,就要把原始数据的值转换到具体的屏幕的坐标点,而这个转换不是一下子就能转换来的,需要先把线路分成段,先知道每段线路的起点位置,线路的类型,线路的长度。原始数据到计算数据的转换过程就是这个把原始线路分段的过程。
2) 计算数据转换到图形数据
计算数据到图形数据的转换分为两个步骤:
首先是把每段线的起点位置,长度等转换成坐标,并把各个坐标点连接成线,形成线路数据。
第二个步骤是在线路数据的基础上添加配置数据来为线路添加颜色、粗细等,为文字添加格式、颜色等。
3) 把图形数据画到图形控件上
把前面已经准备好的图形数据按照 C#中绘制二维图形的各种规则画出来就行了。
具体画图形需要解决的问题如下:
1)坐标系的变换
在C#中绘制二维图形,首先要了解GDI+坐标系。默认情况下,GUI组件(如面板与窗体)左上角的坐标为(0,0)。坐标对由X坐标(水平坐标)和Y坐标(垂直坐标)。X坐标是距左上角的水平距离(向右为正),Y坐标是距左上角的垂直距离(向下为正)。但是用户的习惯是从屏幕的左下角作为坐标原点(0,0)点,Y坐标的方向习惯为向上为正。所以在画图之前,首先要调整坐标系的原点。具体实现如下:
Matrix tr = new Matrix(1, 0, 0, -1, 0, 0);
e.Graphics.TranslateTransform(0, Height);//设置屏幕的原点
Height表示绘图区域的垂直长度;
2)图形比例
图形的比例要从两个方面考虑,一方面,线路的实际长度对应的计算机上显示的线路长度之间的比例,也即垂直比例;另一方面,线路的圆弧或者超高的高度与线路水平方向的比例,也即水平比例。
(a)实现垂直比例比较简单,只要取得所画区域的长度与线路实际长度的比值就行。实现代码如下:
float sc = height / RealLength;
height表示计算机上所画区域的长度
RealLength表示图形能显示的线路长度,可以在系统中由用户自己选择
(b)实现水平比例有点麻烦,因为我们所画的图形不是铁路线路的真实图,而是铁路图形经过二阶导数计算以后得出的图形。圆弧的二阶导数经过计算以后就时直线,我们的图形所画的就是多条直线段的连接,我们以方向数据图形为主分析,如图2所示:
图2 图形控件示意图
图形中圆弧部分的高度与线路中圆弧的实际半径成反比。圆弧半径越大,图形中圆弧部分的高度越小,半径无穷大时,就是直线,图形中圆弧部分的高度就为零;圆弧半径越小,图形中圆弧部分的高度越大,圆弧半径不能为零。所以,方向图形中的水平比例为方向图形上能画的图形的水平宽度与实际半径的比值。实现代码如下:
Linescx = (float)((float)(Width / 2)* CD.Scales);
CD.Scales表示图形能显示的最小的半径值。
超高图形与坡道图形中的水平比例又不相同,但原理一样,在此不再多做说明。
3)图形的起点
图形的起点是指图形控件从线路的哪个位置开始画图。
图形起点的选择关系到图形界面上显示的图形是不是用户需要看到的线路部分。所以,根据实际的工作情况,系统自动选择合适的图形起点是至关重要地。在本系统中,我们希望工作人员所能看到的范围跟机车实际的工作位置或者编辑时当前编辑的线路段的位置有关。具体实现如下(只例举线路是单调递增时):
StartPost表示开始点的位置;
RealLength表示图形能显示的线路长度;
ScreenNum表示把屏幕分成几部分,可以在参数中用户根据情况自己设置;
RealPost 表示机车的实际位置;
4)机车工作的实际位置
图形上显示的当前位置就是机车工作的实际位置,在本系统中我们用“游标”来表示图形的当前位置,即图形中“游标”所在的位置就表示机车实际工作的位置。在工作模式下,机车的实际位置是由机车的测量装置测量出来的实际位置值赋值的,图形中的游标要准确的定位这个实际位置。具体实现如下:
捣固车是铁路维修与养护工作中不能缺少的大型养护机车,捣固车自动引导系统是捣固车控制系统的大脑,所有的机车工作参数都是由引导系统计算得到的。要保证机车的正确工作首先就要保证原始数据的正确性。本文详细分析了铁路线路数据特点,根据线路数据特点在 C#中给出了各数据的定义,并在此基础上实现了数据的录入和显示。
[1]张继燕 捣固车自动引导系统的设计与实现[D].昆明理工大学,2008
[2]张继燕 王海瑞 李婷.自动称重系统中PLC与上位机串口通信的实现[J].微型电脑应用,2008,24(10 ):48-49
[3]欧莹元 张继燕 .捣固车自动引导系统嵌入式平台研究与设计[J].毕节学院学报,2010,8(8):123-128