張繼燕,歐瑩元
搗固車是一種對鐵路線路進行自動化養(yǎng)護作業(yè)的專用機車,其作用包括起道、抄平、撥道和搗固作業(yè)。
搗固車自動引導(dǎo)系統(tǒng)的主要作用是在搗固車作業(yè)時將預(yù)先輸入并存儲的線路幾何數(shù)據(jù)和修正數(shù)據(jù),根據(jù)公里標(biāo)的位置,計算出搗固車作業(yè)時當(dāng)前位置的作業(yè)系統(tǒng)參數(shù),并作為系統(tǒng)的給定量輸入作業(yè)系統(tǒng)。
本文著重對線路幾何數(shù)據(jù)和修正數(shù)據(jù)如何定義、輸入和顯示進行了研究。
一段鐵路線路整體看來是不規(guī)則的,很難用一個數(shù)學(xué)公式來表示,但是可以把一段長的鐵路線路看成是由多條短的鐵路線路組合而成,每條短的線路可以用數(shù)學(xué)模型表示,這些短的線路首尾相接連在一起就是一段長的鐵路線路。那么要描述這些短的鐵路線路時需要描述的關(guān)鍵參數(shù)就主要有:
1)短的線路在長的鐵路線路中的相對位置;
2)該線路從水平面上看是何種幾何圖形;
3)該線路在縱切面上看是何種幾何圖形;
4)兩條鐵軌之間的相對位置。
把對線路的這些描述數(shù)據(jù)稱為線路幾何數(shù)據(jù)。
在搗固車工作時為了減小誤差的發(fā)生,經(jīng)驗豐富的鐵路維修人員往往在幾何數(shù)據(jù)的基礎(chǔ)上添加一定的補償數(shù)據(jù)來彌補由于路基的材料、機車震動等外界因素引起的工作誤差,這些數(shù)據(jù)被稱為線路補償數(shù)據(jù)。
線路幾何數(shù)據(jù)分為方向數(shù)據(jù),超高數(shù)據(jù),坡道數(shù)據(jù)。方向數(shù)據(jù)是描述鐵路線路在水平面上的數(shù)據(jù),超高數(shù)據(jù)是描述兩鐵軌間相對位置的數(shù)據(jù),坡道數(shù)據(jù)是描述鐵路線路在縱切面上的數(shù)據(jù)。
線路補償數(shù)據(jù)分為撥道前端偏移數(shù)據(jù)和起道前端修正數(shù)據(jù)。撥道前端偏移數(shù)據(jù)是指用來修正水平面上數(shù)據(jù)誤差的數(shù)據(jù);起道前端修正數(shù)據(jù)是指用來修正縱平面上數(shù)據(jù)誤差的數(shù)據(jù)。
方向數(shù)據(jù)包括:位置,方向線型,長度/半徑,方向。
超高數(shù)據(jù)包括:位置,超高線型,超高量/長度,超高軌。
坡道數(shù)據(jù)包括:變坡位置,變坡方式,豎曲線半徑,切線長度,坡道方向,坡度PPT。
撥道前端偏移數(shù)據(jù)包括:位置,偏移是否有效,前端偏移值,偏移方向。
起道前端修正數(shù)據(jù)包括:位置,修正是否有效,起道修正值,修正方向。
其中,方向數(shù)據(jù)和超高數(shù)據(jù)是有直接聯(lián)系的,由于離心率的作用,鐵路轉(zhuǎn)彎處外軌要有一定的超高值,而且外軌超高的開始漸變只能比方向數(shù)據(jù)上圓弧漸變開始的早或者同時發(fā)生漸變,不能晚于圓弧漸變發(fā)生,否則會發(fā)生難以想象的后果。
本系統(tǒng)用Microsoft Visual Studio 2008 c#來完成。所以數(shù)據(jù)定義也是用 C#來實現(xiàn)。根據(jù)以上對線路數(shù)據(jù)的分析,分別對方向數(shù)據(jù)、超高數(shù)據(jù)、坡道數(shù)據(jù)、撥道前端偏移數(shù)據(jù)和起道前端修正數(shù)據(jù)做了定義:
1.由于方向數(shù)據(jù)和超高數(shù)據(jù)的關(guān)系,把這兩個數(shù)據(jù)定義在同一個類里面,如表1所示:
表1 方向和超高數(shù)據(jù)定義
其中LineGeometry為枚舉類型,各枚舉分量的定義,如表2所示:
表2 LineGeometry定義
其中LineCant為枚舉類型,各枚舉分量的定義,如表3所示:
表3 LineCant定義
2.坡道數(shù)據(jù)的定義,如表4所示:
表4 坡道數(shù)據(jù)定義
其中,LevelGeometry為枚舉類型,各枚舉分量的定義,如表5所示:
表5 LevelGeometry定義
3.撥道前端偏移數(shù)據(jù)和起道前端修正數(shù)據(jù)也往往是一起來用,所以也定義在了同一個類中,如表6所示:
表6 撥道前端偏移數(shù)據(jù)和起道前端修正數(shù)據(jù)定義
該系統(tǒng)要實現(xiàn)輸入以上定義的原始數(shù)據(jù)并有形象的圖形顯示,然后計算出參數(shù)傳遞給機車控制系統(tǒng)來控制搗固車工作。在輸入的同時系統(tǒng)要有自動的語法檢查功能,防止工作人員誤輸入造成輸入的線路數(shù)據(jù)不符合鐵路線路規(guī)則,以致使作業(yè)后的鐵路造成損壞。
所以數(shù)據(jù)的顯示我們做了兩個部分:表格顯示和圖形顯示。
1.表格的顯示
要實現(xiàn)一個快捷、方便并帶有語法檢查功能的錄入系統(tǒng),選擇用表格來實現(xiàn)。對于本系統(tǒng)來說,選擇表格有如下好處:
1) 能夠清晰明了的把原始數(shù)據(jù)定義的不同屬性排列到不同列中。
2) 表格的一行數(shù)據(jù)正好存儲線路的一個數(shù)據(jù)段。
3) 能夠?qū)崿F(xiàn)數(shù)據(jù)的快捷、方便的錄入
4) 因為表格的行號正好與原始數(shù)據(jù)的線路路段號
是一一對應(yīng)的,有利于實現(xiàn)語法檢查。
由于C#中DataGridView控件對表格數(shù)據(jù)操作的下列優(yōu)點,選擇用DataGridView控件來容納并編輯線路數(shù)據(jù)的原始數(shù)據(jù)。
顯示效果,如圖1所示:
圖1 表格顯示效果
2.圖形的顯示
從鐵路原始數(shù)據(jù)到數(shù)據(jù)顯示在圖形控件上,需要3個步驟:
1) 原始數(shù)據(jù)轉(zhuǎn)換到計算數(shù)據(jù)
原始數(shù)據(jù)是鐵路線路數(shù)據(jù)的最原始的形式,要最后用圖形畫出來,就要把原始數(shù)據(jù)的值轉(zhuǎn)換到具體的屏幕的坐標(biāo)點,而這個轉(zhuǎn)換不是一下子就能轉(zhuǎn)換來的,需要先把線路分成段,先知道每段線路的起點位置,線路的類型,線路的長度。原始數(shù)據(jù)到計算數(shù)據(jù)的轉(zhuǎn)換過程就是這個把原始線路分段的過程。
2) 計算數(shù)據(jù)轉(zhuǎn)換到圖形數(shù)據(jù)
計算數(shù)據(jù)到圖形數(shù)據(jù)的轉(zhuǎn)換分為兩個步驟:
首先是把每段線的起點位置,長度等轉(zhuǎn)換成坐標(biāo),并把各個坐標(biāo)點連接成線,形成線路數(shù)據(jù)。
第二個步驟是在線路數(shù)據(jù)的基礎(chǔ)上添加配置數(shù)據(jù)來為線路添加顏色、粗細等,為文字添加格式、顏色等。
3) 把圖形數(shù)據(jù)畫到圖形控件上
把前面已經(jīng)準(zhǔn)備好的圖形數(shù)據(jù)按照 C#中繪制二維圖形的各種規(guī)則畫出來就行了。
具體畫圖形需要解決的問題如下:
1)坐標(biāo)系的變換
在C#中繪制二維圖形,首先要了解GDI+坐標(biāo)系。默認情況下,GUI組件(如面板與窗體)左上角的坐標(biāo)為(0,0)。坐標(biāo)對由X坐標(biāo)(水平坐標(biāo))和Y坐標(biāo)(垂直坐標(biāo))。X坐標(biāo)是距左上角的水平距離(向右為正),Y坐標(biāo)是距左上角的垂直距離(向下為正)。但是用戶的習(xí)慣是從屏幕的左下角作為坐標(biāo)原點(0,0)點,Y坐標(biāo)的方向習(xí)慣為向上為正。所以在畫圖之前,首先要調(diào)整坐標(biāo)系的原點。具體實現(xiàn)如下:
Matrix tr = new Matrix(1, 0, 0, -1, 0, 0);
e.Graphics.TranslateTransform(0, Height);//設(shè)置屏幕的原點
Height表示繪圖區(qū)域的垂直長度;
2)圖形比例
圖形的比例要從兩個方面考慮,一方面,線路的實際長度對應(yīng)的計算機上顯示的線路長度之間的比例,也即垂直比例;另一方面,線路的圓弧或者超高的高度與線路水平方向的比例,也即水平比例。
(a)實現(xiàn)垂直比例比較簡單,只要取得所畫區(qū)域的長度與線路實際長度的比值就行。實現(xiàn)代碼如下:
float sc = height / RealLength;
height表示計算機上所畫區(qū)域的長度
RealLength表示圖形能顯示的線路長度,可以在系統(tǒng)中由用戶自己選擇
(b)實現(xiàn)水平比例有點麻煩,因為我們所畫的圖形不是鐵路線路的真實圖,而是鐵路圖形經(jīng)過二階導(dǎo)數(shù)計算以后得出的圖形。圓弧的二階導(dǎo)數(shù)經(jīng)過計算以后就時直線,我們的圖形所畫的就是多條直線段的連接,我們以方向數(shù)據(jù)圖形為主分析,如圖2所示:
圖2 圖形控件示意圖
圖形中圓弧部分的高度與線路中圓弧的實際半徑成反比。圓弧半徑越大,圖形中圓弧部分的高度越小,半徑無窮大時,就是直線,圖形中圓弧部分的高度就為零;圓弧半徑越小,圖形中圓弧部分的高度越大,圓弧半徑不能為零。所以,方向圖形中的水平比例為方向圖形上能畫的圖形的水平寬度與實際半徑的比值。實現(xiàn)代碼如下:
Linescx = (float)((float)(Width / 2)* CD.Scales);
CD.Scales表示圖形能顯示的最小的半徑值。
超高圖形與坡道圖形中的水平比例又不相同,但原理一樣,在此不再多做說明。
3)圖形的起點
圖形的起點是指圖形控件從線路的哪個位置開始畫圖。
圖形起點的選擇關(guān)系到圖形界面上顯示的圖形是不是用戶需要看到的線路部分。所以,根據(jù)實際的工作情況,系統(tǒng)自動選擇合適的圖形起點是至關(guān)重要地。在本系統(tǒng)中,我們希望工作人員所能看到的范圍跟機車實際的工作位置或者編輯時當(dāng)前編輯的線路段的位置有關(guān)。具體實現(xiàn)如下(只例舉線路是單調(diào)遞增時):
StartPost表示開始點的位置;
RealLength表示圖形能顯示的線路長度;
ScreenNum表示把屏幕分成幾部分,可以在參數(shù)中用戶根據(jù)情況自己設(shè)置;
RealPost 表示機車的實際位置;
4)機車工作的實際位置
圖形上顯示的當(dāng)前位置就是機車工作的實際位置,在本系統(tǒng)中我們用“游標(biāo)”來表示圖形的當(dāng)前位置,即圖形中“游標(biāo)”所在的位置就表示機車實際工作的位置。在工作模式下,機車的實際位置是由機車的測量裝置測量出來的實際位置值賦值的,圖形中的游標(biāo)要準(zhǔn)確的定位這個實際位置。具體實現(xiàn)如下:
搗固車是鐵路維修與養(yǎng)護工作中不能缺少的大型養(yǎng)護機車,搗固車自動引導(dǎo)系統(tǒng)是搗固車控制系統(tǒng)的大腦,所有的機車工作參數(shù)都是由引導(dǎo)系統(tǒng)計算得到的。要保證機車的正確工作首先就要保證原始數(shù)據(jù)的正確性。本文詳細分析了鐵路線路數(shù)據(jù)特點,根據(jù)線路數(shù)據(jù)特點在 C#中給出了各數(shù)據(jù)的定義,并在此基礎(chǔ)上實現(xiàn)了數(shù)據(jù)的錄入和顯示。
[1]張繼燕 搗固車自動引導(dǎo)系統(tǒng)的設(shè)計與實現(xiàn)[D].昆明理工大學(xué),2008
[2]張繼燕 王海瑞 李婷.自動稱重系統(tǒng)中PLC與上位機串口通信的實現(xiàn)[J].微型電腦應(yīng)用,2008,24(10 ):48-49
[3]歐瑩元 張繼燕 .搗固車自動引導(dǎo)系統(tǒng)嵌入式平臺研究與設(shè)計[J].畢節(jié)學(xué)院學(xué)報,2010,8(8):123-128