利用CAD VBA与Excel相结合自动绘制股道运用技术作业表
2018-07-28刘俊良杨竟洵
刘俊良 杨竟洵
摘要:为了高效绘制适用于现场作业的股道运用技术作业表,结合Excel的较强计算功能和CAD的较强绘图功能,进行Excel数据处理和CAD VBA二次开发,实现在CAD中自动绘制股道运用技术作业表。实际应用表明,该方法操作简单,易于掌握,实用性强,推广至各铁路车站使用不仅能提升列车运行图的编制质量,还能有力保障现场的安全生产。
关键词:VBA; Microsoft Excel; Auto CAD;股道运用技术作业表
中图分类号:TP317 文献标识码:A 文章编号:1009-3044(2018)11-0225-03
1 背景
铁路车站股道运用技术作业表(以下简称“股道表”)是运输组织的基本技术资料之一,包含了该站所有列车的到发时刻、股道、运行方向及上水吸污等信息,是列车调度员调度指挥和车站值班员行车组织的必备工具。在车站行车室,因受工作模式限制,车站值班员需要一份非电子版、大小适中的股道表。目前绘制股道表有两种方法:一是由列车运行图编制软件自动生成,但存在标注信息不全面、打印多页纸张才能合成一张表等问题,不能满足生产现场的实际需要;二是利用Microsoft Excel、Microsoft Word、Auto CAD等进行人工绘制,但存在费时费力、易出差错、车次与时分竖线对应不精确等问题。总之,一直以来配置于行车室的股道表,不能完全满足现场实际需求,工作人员使用时存在一定的安全风险。
该文阐述的股道表绘制方法,旨在解决上述问题,结合了EXCEL较强计算功能和CAD较强绘图功能两方面的优势[1]。首先对列车运行图文件中的资料进行数据整理形成Excel文件,然后利用VBA在CAD中读取EXCEL文件中的数据,快速、精确地生成股道表,并在股道表中标注必要信息,实现自动绘制股道表且打印效果较好。经过测试,本方法在Excel2003(含)以上和CAD2004、CAD2007中使用有效,目前已用于绘制长沙南站股道表。
2 基本思路和模板文件设计
2.1 基本思路
股道表的绘制依据是列车运行图文件中的《列车时刻股道表》,通常以Excel文件发布。为了使自动绘制方法具备实用性,需将操作时间和步骤最少化,通过设置模板可以解决问题。基本思路是:利用VBA在Excel和CAD中的通用性[2],首先创建两个模板文件(Excel模板文件和CAD模板文件)并编写相关的VBA程序,然后以列车运行图文件《列车时刻股道表》为数据源,运行相关程序(宏)即可迅速生成股道表。具体流程如图1所示。模板文件和VBA程序是基础文件,创建后可以重复使用,所有相关文件存于计算机的一个指定文件夹中。
2.2 Excel模板文件设计
Excel模板文件用于对列车运行图数据进行梳理,使CAD能够利用VBA读取Excel数据。编制列车运行图过程中,先公布列车运行时刻和股道,然后公布上水吸污方案,因此Excel模板文件工作簿对应设置两个工作表:sheet1汇总列车到发基本信息,即列车坐标模板;sheet2汇总上水吸污信息,即上水吸污模板。
2.2.1 列车坐标模板设计
根据行车室使用需求,股道表应包含列车车次、到发时刻、股道、跨線运行等信息。由于列车运行图文件格式与模板格式不完全一致,为提高数据转化效率,通过相关公式(函数)及转置进行处理,可快速将运行图文件整理并导入模板中。数据转换前后如表1和表2所示。
2.2.2 上水吸污模板设计
根据编制列车运行图的工作流程,上水吸污方案公布时间较晚,甚至新运行图实施后还有变化,因此上水吸污情况单独创建上水吸污模板。模板是在列车坐标模板基础上创建的,时刻与股道直接引用列车坐标模板中的数据,确保数据的准确性。通过筛选整理,工作表中只保留上水吸污作业的车次,且新增一列注明上水吸污情况,分2种类别:只上水不吸污;同时上水吸污。CAD读取后,在生成的股道表中标注特殊符号说明(具体见下文)。
2.3 CAD模板文件设计
股道表包含两个基本要素:一是本站的股道设置情况;二是列车的车次、到发(通过)股道、到发(通过)时刻,基本要素以外的信息根据实际需要添加。设计CAD模板文件的首要工作是绘制股道表底图(即车站的股道设置情况),然后才能利用VBA程序在底图上铺画完成一张完整的股道表。
2.3.1 绘制股道表底图
新建CAD,从X、Y坐标零点开始,绘制长沙南站股道表底图。
X轴正向表示时间,跨度为24小时,1440分钟,因此画图时取沿X轴正向的框线长度为1440mm。从X、Y坐标零点沿X轴正向依次画竖线,间距设置为60mm(表示60分钟),共25条竖线,划分为24小时分区。标注第一根和最后一根竖线为18点,竖线从左至右分别表示18点~23点、0点、1点~18点。
Y轴正向表示股道号码,长沙南站共28条股道,其中武广场15条,沪昆场13条。先画武广场,从X、Y坐标零点沿Y轴正向依次画横线,间距设置为30mm,共16条横线,划分为15个股道分区。
25条竖线和16条横线合成的表格以及时间和股道号码标注,共同组成武广场的股道表底图,如图2所示。
长沙南站武广场和沪昆场在行车室的作业控制台分置,由两组人员操作,因此需在CAD同一个“布局”中分别绘制两个场的股道表。完成武广场股道表后,继续沿Y轴正向画横线完成沪昆场股道表底图。设置两个场边框的间距为300mm,从而确定沪昆场Y轴第一条横线,其后其他线条间距设置与武广场相同。完成两个场的表格绘制后,添加表格名称、备注等信息。
2.3.2 CAD VBA二次开发
通过CAD VBA二次开发,使CAD能够读取Excel模板文件中的数据和信息,并在指定位置一一铺画列车线条和标注相关信息。开发的程序除了具备读取Excel模板文件数据并转换成股道表格式的基本功能,还具备标注上水吸污、标注列车高峰线等功能。主要工作如下:
2.3.2.1 在CAD中,选择“工具/宏/VBA管理器”菜单项,在弹出的“VBA管理器”对话框中单击“新建”按钮,命名为“股道运用表.dvb”,将其保存在指定文件夹。
2.3.2.2 在“VBA管理器”对话框中单击“Visual Basic编辑器”按钮,进入VBA集成开发环境[3-4]。
2.3.2.3 部分代码:
1)打开并读取Excel文件。
Set xlapp = CreateObject("Excel.application")
Set xlbook = xlapp.Workbooks.Open("D:\铺画股道表\铺画股道运用表.xls") '打开的EXCEL路径
xlapp.Visible = False
Set xlsheet = xlbook.Worksheets("坐标") '打开EXCEL中的工作表
2)初始化相关设置。
i = xlsheet.Cells(3, 30) '取列车总数
TextH = 4 '文字高度
MarkH = 3 '特殊标记文字高度
SsxwH = 5 '上水吸污标记高度
LineDE = 0 '线长增量。取消(取值为0),改在EXCEL中计算。
CCof = 0.8 '车次位置偏移量
SSof = 4 '上水标记偏移量
XWof = 3.5 '吸污标记偏移量
MKof = 8.5 '跨线车方向等标记偏移量
3)车次线条及标注信息18点竖线越界处理。
''车次、上水吸污、特殊标记等越界处理
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)铺画标注列车到达及出发时刻。
''铺画标注列车到达及出发时刻
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)上水和吸污车次分别用蓝色三角形和深褐色三角形标注。
''上水吸污标注
If InStr(zuoye, "污") Then
Set TrainXW = ThisDrawing.ModelSpace.AddText("▲", XWzuoyePt, SsxwH)
TrainXW.color = 15
TrainXW.Alignment = acAlignmentTopCenter
TrainXW.TextAlignmentPoint = XWzuoyePt
'吸污时必然有上水,故须同时加上水标记
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)高峰線车次用红色字体标注,周末线车次用蓝色字体标注。
Select Case col
Case "蓝"
ColPrint = acBlue
Case "红"
ColPrint = acRed
Case Else
ColPrint = acByLayer
End Select
为提高程序运行速度和效率,充分发挥CAD和Excel的各自优势,将数据的计算和转换功能尽可能放在Excel文件中,CAD主要负责读取Excel中的数据后进行铺画线条和标注文字符号[5]。
3 绘制及修正股道表
先整理Excel模板文件的数据,保存并关闭,然后打开CAD模板文件,选择“工具/宏/加载工程”菜单项,加载“股道运用表.dvb”,如弹出对话框询问是否启用宏,点击“启用宏”。再选择“工具/宏/宏”菜单项,在弹出的对话框中点击“运行”,即可在CAD中迅速完成列车车次、时刻及相关标注的绘制。
因部分时段列车过于密集,生成的股道表中部分车次会出现重叠的情况,影响使用。因此,在股道表中发现这些车次后,在Excel模板中提供手工修正功能,在列车坐标模板J、K列添加人工修正坐标。例如:14道10:42/45分的G1155次,若按时间比例铺画,则与G1143次部分文字会重叠,为此将G1143次手工修正往前移3个单位。修正以后重新运行CAD模板文件,生成修正后的股道表。
4 结束语
该文介绍的方法将Excel数据计算和CAD绘图功能结合起来,易于操作,实用性强,大大提高了工作效率和质量。以前人工绘制长沙南站股道表,需核对并更新600余趟列车的数据,两个人一起至少要两天才能完成。采用此方法绘制长沙南站股道表后,优势明显:一是效率高,整个绘制过程一人操作几分钟就可以完成,而且生成的股道表既信息全面又样式美观;二是精准度高,由于是直接从列车运行图Excel文件中转换、读取数据,避免了人工绘制时易造成的文字输入和线条铺画错误的问题;三是图表占地小,一张股道表仅需1张A3纸正反面打印即可,且能保证清晰度,放置于作业台十分便于车站值班员使用,完全符合行车室工作需要。
该方法可以在各铁路车站特别是客运站推广使用,不同车站Excel文件数据处理方法相同,仅需在长沙南站CAD模板基础上根据各站实际修改股道布局即可投入使用。推廣使用后,一方面统一各站股道表样式,另一方面给行车室人员提供便利,不仅提高了编制列车运行图的工作质量,而且给现场作业提供了一个重要安全保障。
参考文献:
[1] 尤苏南. 利用Excel表格在CAD中按类别快速展绘勘探点技术[J]. 计算机与现代化, 2013(2): 163-168.
[2] 彭四清. 利用Excel VBA实现在AutoCAD中展绘坐标点[J]. 测绘与空间地理信息, 2008, 31(4): 195-199.
[3] 张帆, 郑立楷, 王华杰. Auto cad VBA 开发精彩实例教程[M]. 北京: 清华大学出版社, 2004 .
[4] 王若慧. 基于VBA的Auto CAD二次开发及应用实例[J]. 自动化技术与应用, 2007, 26(9): 30-33.
[5] 朱晓亚. 利用VBA实现CAD与Excel相结合自动绘制钻孔采样图[J]. 科技风, 2012(13): 170-171.