張繼燕,歐瑩元
搗固車是一種對鐵路線路進行自動化養護作業的專用機車,其作用包括起道、抄平、撥道和搗固作業。
搗固車自動引導系統的主要作用是在搗固車作業時將預先輸入并存儲的線路幾何數據和修正數據,根據公里標的位置,計算出搗固車作業時當前位置的作業系統參數,并作為系統的給定量輸入作業系統。
本文著重對線路幾何數據和修正數據如何定義、輸入和顯示進行了研究。
一段鐵路線路整體看來是不規則的,很難用一個數學公式來表示,但是可以把一段長的鐵路線路看成是由多條短的鐵路線路組合而成,每條短的線路可以用數學模型表示,這些短的線路首尾相接連在一起就是一段長的鐵路線路。那么要描述這些短的鐵路線路時需要描述的關鍵參數就主要有:
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