劉俊良 楊竟洵
摘要:為了高效繪制適用于現(xiàn)場作業(yè)的股道運(yùn)用技術(shù)作業(yè)表,結(jié)合Excel的較強(qiáng)計算功能和CAD的較強(qiáng)繪圖功能,進(jìn)行Excel數(shù)據(jù)處理和CAD VBA二次開發(fā),實(shí)現(xiàn)在CAD中自動繪制股道運(yùn)用技術(shù)作業(yè)表。實(shí)際應(yīng)用表明,該方法操作簡單,易于掌握,實(shí)用性強(qiáng),推廣至各鐵路車站使用不僅能提升列車運(yùn)行圖的編制質(zhì)量,還能有力保障現(xiàn)場的安全生產(chǎn)。
關(guān)鍵詞:VBA; Microsoft Excel; Auto CAD;股道運(yùn)用技術(shù)作業(yè)表
中圖分類號:TP317 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)11-0225-03
1 背景
鐵路車站股道運(yùn)用技術(shù)作業(yè)表(以下簡稱“股道表”)是運(yùn)輸組織的基本技術(shù)資料之一,包含了該站所有列車的到發(fā)時刻、股道、運(yùn)行方向及上水吸污等信息,是列車調(diào)度員調(diào)度指揮和車站值班員行車組織的必備工具。在車站行車室,因受工作模式限制,車站值班員需要一份非電子版、大小適中的股道表。目前繪制股道表有兩種方法:一是由列車運(yùn)行圖編制軟件自動生成,但存在標(biāo)注信息不全面、打印多頁紙張才能合成一張表等問題,不能滿足生產(chǎn)現(xiàn)場的實(shí)際需要;二是利用Microsoft Excel、Microsoft Word、Auto CAD等進(jìn)行人工繪制,但存在費(fèi)時費(fèi)力、易出差錯、車次與時分豎線對應(yīng)不精確等問題??傊?,一直以來配置于行車室的股道表,不能完全滿足現(xiàn)場實(shí)際需求,工作人員使用時存在一定的安全風(fēng)險。
該文闡述的股道表繪制方法,旨在解決上述問題,結(jié)合了EXCEL較強(qiáng)計算功能和CAD較強(qiáng)繪圖功能兩方面的優(yōu)勢[1]。首先對列車運(yùn)行圖文件中的資料進(jìn)行數(shù)據(jù)整理形成Excel文件,然后利用VBA在CAD中讀取EXCEL文件中的數(shù)據(jù),快速、精確地生成股道表,并在股道表中標(biāo)注必要信息,實(shí)現(xiàn)自動繪制股道表且打印效果較好。經(jīng)過測試,本方法在Excel2003(含)以上和CAD2004、CAD2007中使用有效,目前已用于繪制長沙南站股道表。
2 基本思路和模板文件設(shè)計
2.1 基本思路
股道表的繪制依據(jù)是列車運(yùn)行圖文件中的《列車時刻股道表》,通常以Excel文件發(fā)布。為了使自動繪制方法具備實(shí)用性,需將操作時間和步驟最少化,通過設(shè)置模板可以解決問題。基本思路是:利用VBA在Excel和CAD中的通用性[2],首先創(chuàng)建兩個模板文件(Excel模板文件和CAD模板文件)并編寫相關(guān)的VBA程序,然后以列車運(yùn)行圖文件《列車時刻股道表》為數(shù)據(jù)源,運(yùn)行相關(guān)程序(宏)即可迅速生成股道表。具體流程如圖1所示。模板文件和VBA程序是基礎(chǔ)文件,創(chuàng)建后可以重復(fù)使用,所有相關(guān)文件存于計算機(jī)的一個指定文件夾中。
2.2 Excel模板文件設(shè)計
Excel模板文件用于對列車運(yùn)行圖數(shù)據(jù)進(jìn)行梳理,使CAD能夠利用VBA讀取Excel數(shù)據(jù)。編制列車運(yùn)行圖過程中,先公布列車運(yùn)行時刻和股道,然后公布上水吸污方案,因此Excel模板文件工作簿對應(yīng)設(shè)置兩個工作表:sheet1匯總列車到發(fā)基本信息,即列車坐標(biāo)模板;sheet2匯總上水吸污信息,即上水吸污模板。
2.2.1 列車坐標(biāo)模板設(shè)計
根據(jù)行車室使用需求,股道表應(yīng)包含列車車次、到發(fā)時刻、股道、跨線運(yùn)行等信息。由于列車運(yùn)行圖文件格式與模板格式不完全一致,為提高數(shù)據(jù)轉(zhuǎn)化效率,通過相關(guān)公式(函數(shù))及轉(zhuǎn)置進(jìn)行處理,可快速將運(yùn)行圖文件整理并導(dǎo)入模板中。數(shù)據(jù)轉(zhuǎn)換前后如表1和表2所示。
2.2.2 上水吸污模板設(shè)計
根據(jù)編制列車運(yùn)行圖的工作流程,上水吸污方案公布時間較晚,甚至新運(yùn)行圖實(shí)施后還有變化,因此上水吸污情況單獨(dú)創(chuàng)建上水吸污模板。模板是在列車坐標(biāo)模板基礎(chǔ)上創(chuàng)建的,時刻與股道直接引用列車坐標(biāo)模板中的數(shù)據(jù),確保數(shù)據(jù)的準(zhǔn)確性。通過篩選整理,工作表中只保留上水吸污作業(yè)的車次,且新增一列注明上水吸污情況,分2種類別:只上水不吸污;同時上水吸污。CAD讀取后,在生成的股道表中標(biāo)注特殊符號說明(具體見下文)。
2.3 CAD模板文件設(shè)計
股道表包含兩個基本要素:一是本站的股道設(shè)置情況;二是列車的車次、到發(fā)(通過)股道、到發(fā)(通過)時刻,基本要素以外的信息根據(jù)實(shí)際需要添加。設(shè)計CAD模板文件的首要工作是繪制股道表底圖(即車站的股道設(shè)置情況),然后才能利用VBA程序在底圖上鋪畫完成一張完整的股道表。
2.3.1 繪制股道表底圖
新建CAD,從X、Y坐標(biāo)零點(diǎn)開始,繪制長沙南站股道表底圖。
X軸正向表示時間,跨度為24小時,1440分鐘,因此畫圖時取沿X軸正向的框線長度為1440mm。從X、Y坐標(biāo)零點(diǎn)沿X軸正向依次畫豎線,間距設(shè)置為60mm(表示60分鐘),共25條豎線,劃分為24小時分區(qū)。標(biāo)注第一根和最后一根豎線為18點(diǎn),豎線從左至右分別表示18點(diǎn)~23點(diǎn)、0點(diǎn)、1點(diǎn)~18點(diǎn)。
Y軸正向表示股道號碼,長沙南站共28條股道,其中武廣場15條,滬昆場13條。先畫武廣場,從X、Y坐標(biāo)零點(diǎn)沿Y軸正向依次畫橫線,間距設(shè)置為30mm,共16條橫線,劃分為15個股道分區(qū)。
25條豎線和16條橫線合成的表格以及時間和股道號碼標(biāo)注,共同組成武廣場的股道表底圖,如圖2所示。
長沙南站武廣場和滬昆場在行車室的作業(yè)控制臺分置,由兩組人員操作,因此需在CAD同一個“布局”中分別繪制兩個場的股道表。完成武廣場股道表后,繼續(xù)沿Y軸正向畫橫線完成滬昆場股道表底圖。設(shè)置兩個場邊框的間距為300mm,從而確定滬昆場Y軸第一條橫線,其后其他線條間距設(shè)置與武廣場相同。完成兩個場的表格繪制后,添加表格名稱、備注等信息。
2.3.2 CAD VBA二次開發(fā)
通過CAD VBA二次開發(fā),使CAD能夠讀取Excel模板文件中的數(shù)據(jù)和信息,并在指定位置一一鋪畫列車線條和標(biāo)注相關(guān)信息。開發(fā)的程序除了具備讀取Excel模板文件數(shù)據(jù)并轉(zhuǎn)換成股道表格式的基本功能,還具備標(biāo)注上水吸污、標(biāo)注列車高峰線等功能。主要工作如下:
2.3.2.1 在CAD中,選擇“工具/宏/VBA管理器”菜單項,在彈出的“VBA管理器”對話框中單擊“新建”按鈕,命名為“股道運(yùn)用表.dvb”,將其保存在指定文件夾。
2.3.2.2 在“VBA管理器”對話框中單擊“Visual Basic編輯器”按鈕,進(jìn)入VBA集成開發(fā)環(huán)境[3-4]。
2.3.2.3 部分代碼:
1)打開并讀取Excel文件。
Set xlapp = CreateObject("Excel.application")
Set xlbook = xlapp.Workbooks.Open("D:\鋪畫股道表\鋪畫股道運(yùn)用表.xls") '打開的EXCEL路徑
xlapp.Visible = False
Set xlsheet = xlbook.Worksheets("坐標(biāo)") '打開EXCEL中的工作表
2)初始化相關(guān)設(shè)置。
i = xlsheet.Cells(3, 30) '取列車總數(shù)
TextH = 4 '文字高度
MarkH = 3 '特殊標(biāo)記文字高度
SsxwH = 5 '上水吸污標(biāo)記高度
LineDE = 0 '線長增量。取消(取值為0),改在EXCEL中計算。
CCof = 0.8 '車次位置偏移量
SSof = 4 '上水標(biāo)記偏移量
XWof = 3.5 '吸污標(biāo)記偏移量
MKof = 8.5 '跨線車方向等標(biāo)記偏移量
3)車次線條及標(biāo)注信息18點(diǎn)豎線越界處理。
''車次、上水吸污、特殊標(biāo)記等越界處理
If CCPt(0) > 1440 Then
CCPt(0) = CCPt(0) - 1440
End If
''鋪畫列車線條及線條的越界處理
If PtEnd(0) > 1440 Then ''線條越界處理
PtEnd(0) = PtEnd(0) - 1440
ZZPt(0) = 1440
ZZPt(1) = PtEnd(1)
AAPt(0) = 0
AAPt(1) = PtEnd(1)
CFPt(0) = PtEnd(0)
Set LinePt = ThisDrawing.ModelSpace.AddLine(PtStart, ZZPt)
LinePt.color = ColPrint '線條1顏色
Set LinePt = ThisDrawing.ModelSpace.AddLine(AAPt, PtEnd)
LinePt.color = ColPrint '線條2顏色
Else
Set LinePt = ThisDrawing.ModelSpace.AddLine(PtStart, PtEnd)
End If
4)鋪畫標(biāo)注列車到達(dá)及出發(fā)時刻。
''鋪畫標(biāo)注列車到達(dá)及出發(fā)時刻
Set TrainCC = ThisDrawing.ModelSpace.AddText(CC, CCPt, TextH)
Set TrainDD = ThisDrawing.ModelSpace.AddText(DDTime, DDPt, TextH)
Set TrainCF = ThisDrawing.ModelSpace.AddText(CFTime, CFPt, TextH)
5)上水和吸污車次分別用藍(lán)色三角形和深褐色三角形標(biāo)注。
''上水吸污標(biāo)注
If InStr(zuoye, "污") Then
Set TrainXW = ThisDrawing.ModelSpace.AddText("▲", XWzuoyePt, SsxwH)
TrainXW.color = 15
TrainXW.Alignment = acAlignmentTopCenter
TrainXW.TextAlignmentPoint = XWzuoyePt
'吸污時必然有上水,故須同時加上水標(biāo)記
Set TrainSS = ThisDrawing.ModelSpace.AddText("▼", SSzuoyePt, SsxwH)
TrainSS.color = 150
TrainSS.Alignment = acAlignmentCenter
TrainSS.TextAlignmentPoint = SSzuoyePt
ElseIf InStr(zuoye, "水") Then
Set TrainSS = ThisDrawing.ModelSpace.AddText("▼", SSzuoyePt, SsxwH)
TrainSS.color = 150
TrainSS.Alignment = acAlignmentCenter
TrainSS.TextAlignmentPoint = SSzuoyePt
End If
6)高峰線車次用紅色字體標(biāo)注,周末線車次用藍(lán)色字體標(biāo)注。
Select Case col
Case "藍(lán)"
ColPrint = acBlue
Case "紅"
ColPrint = acRed
Case Else
ColPrint = acByLayer
End Select
為提高程序運(yùn)行速度和效率,充分發(fā)揮CAD和Excel的各自優(yōu)勢,將數(shù)據(jù)的計算和轉(zhuǎn)換功能盡可能放在Excel文件中,CAD主要負(fù)責(zé)讀取Excel中的數(shù)據(jù)后進(jìn)行鋪畫線條和標(biāo)注文字符號[5]。
3 繪制及修正股道表
先整理Excel模板文件的數(shù)據(jù),保存并關(guān)閉,然后打開CAD模板文件,選擇“工具/宏/加載工程”菜單項,加載“股道運(yùn)用表.dvb”,如彈出對話框詢問是否啟用宏,點(diǎn)擊“啟用宏”。再選擇“工具/宏/宏”菜單項,在彈出的對話框中點(diǎn)擊“運(yùn)行”,即可在CAD中迅速完成列車車次、時刻及相關(guān)標(biāo)注的繪制。
因部分時段列車過于密集,生成的股道表中部分車次會出現(xiàn)重疊的情況,影響使用。因此,在股道表中發(fā)現(xiàn)這些車次后,在Excel模板中提供手工修正功能,在列車坐標(biāo)模板J、K列添加人工修正坐標(biāo)。例如:14道10:42/45分的G1155次,若按時間比例鋪畫,則與G1143次部分文字會重疊,為此將G1143次手工修正往前移3個單位。修正以后重新運(yùn)行CAD模板文件,生成修正后的股道表。
4 結(jié)束語
該文介紹的方法將Excel數(shù)據(jù)計算和CAD繪圖功能結(jié)合起來,易于操作,實(shí)用性強(qiáng),大大提高了工作效率和質(zhì)量。以前人工繪制長沙南站股道表,需核對并更新600余趟列車的數(shù)據(jù),兩個人一起至少要兩天才能完成。采用此方法繪制長沙南站股道表后,優(yōu)勢明顯:一是效率高,整個繪制過程一人操作幾分鐘就可以完成,而且生成的股道表既信息全面又樣式美觀;二是精準(zhǔn)度高,由于是直接從列車運(yùn)行圖Excel文件中轉(zhuǎn)換、讀取數(shù)據(jù),避免了人工繪制時易造成的文字輸入和線條鋪畫錯誤的問題;三是圖表占地小,一張股道表僅需1張A3紙正反面打印即可,且能保證清晰度,放置于作業(yè)臺十分便于車站值班員使用,完全符合行車室工作需要。
該方法可以在各鐵路車站特別是客運(yùn)站推廣使用,不同車站Excel文件數(shù)據(jù)處理方法相同,僅需在長沙南站CAD模板基礎(chǔ)上根據(jù)各站實(shí)際修改股道布局即可投入使用。推廣使用后,一方面統(tǒng)一各站股道表樣式,另一方面給行車室人員提供便利,不僅提高了編制列車運(yùn)行圖的工作質(zhì)量,而且給現(xiàn)場作業(yè)提供了一個重要安全保障。
參考文獻(xiàn):
[1] 尤蘇南. 利用Excel表格在CAD中按類別快速展繪勘探點(diǎn)技術(shù)[J]. 計算機(jī)與現(xiàn)代化, 2013(2): 163-168.
[2] 彭四清. 利用Excel VBA實(shí)現(xiàn)在AutoCAD中展繪坐標(biāo)點(diǎn)[J]. 測繪與空間地理信息, 2008, 31(4): 195-199.
[3] 張帆, 鄭立楷, 王華杰. Auto cad VBA 開發(fā)精彩實(shí)例教程[M]. 北京: 清華大學(xué)出版社, 2004 .
[4] 王若慧. 基于VBA的Auto CAD二次開發(fā)及應(yīng)用實(shí)例[J]. 自動化技術(shù)與應(yīng)用, 2007, 26(9): 30-33.
[5] 朱曉亞. 利用VBA實(shí)現(xiàn)CAD與Excel相結(jié)合自動繪制鉆孔采樣圖[J]. 科技風(fēng), 2012(13): 170-171.