郭星星,余建勇
(1.中国铁路郑州局集团有限公司 焦作车辆段,河南 博爱 454450;2.郑州铁路职业技术学院,河南 郑州 451460)
《铁路货车轮轴组装检修及管理规则》(简称《轮规》)中规定,铁路货车在进行厂段修时,车轮轴承压装后必须要刻打轴承标志板并进行安装。现在用的标志板打号机大部分采用“液压站+钢字头”的刻打方式,平均5~6 min才能完成一个标志板的刻打,生产效率不高;由于字头数目固定,当遇到新的内容时须增加或更换字头,非常不便,这在一定程度上延长了轮对检修流程。
焦作车辆段轮轴班组在原有一台液压站打号机的情况下新添置一台YPK-20型激光打号机,该机器刻打速度快,且输入字样灵活,提高了刻打效率。然而机器配套的软件EzCad要利用现有图纸进行更改,且有别于CAD文本框直接在图纸上更改的输入方式,须于图纸一侧的参数框内输入,且每输入一项须点“保存”或“应用”键保存,整个输入过程较原设备更为烦琐。基于这种情况,设计了新的图纸生成程序,提高了输入效率。
液压站打号机的输入界面采用所见即所得的方式,即输入界面与轴承标志板排列格式基本一致[1],这里同样沿用这一设计方案。虽然EzCad可以直接在图纸上修改,但由于其输入是在另外的输入框,且需要保存确认,影响了输入体验,这就要求我们设计一个输入较为方便的界面。而程序也应该拥有保存功能,以便对输入标志板内容进行批量刻打。
虽然EzCad也提供了二次开发的函数,但其开发语言较为单一,功能也较为局限。相比之下,AutoCAD作为通用作图软件,对其进行二次开发的手段比较丰富,而其保存的DXF格式文件也可以在EzCad中打开,所以可以先在CAD中生成待得图像的DXF文件,再将DXF文件导入EzCad中进行刻打,而保存得到的DXF文件也解决了数据的保存问题。这样,原问题就转化成了一个CAD二次开发的问题。
选择较为流行的Python语言作为编程语言。Python是一种面向对象的语言,它的使用和分发完全免费,提供了所有脚本语言的简单性和易用性,并且具有在编译语言中才能找到的高级软件工程工具。
我们希望该程序界面友好、操作简单,所以可以一个GUI程序为主体,而将调用CAD生成DXF文件的函数作为GUI控件的响应函数包含于该程序中。
程序界面设计为有一个对话框的界面(如图1),这样可以使操作更为直观简单。输入内容除了标志板内容外,还有与存储数据和刻打相关的一些内容。下面分别介绍除标志板内容之外的各输入内容。
图1 程序界面
(1)保存文件夹:可输入文本框,用于输入生成DXF保存的文件夹路径。
(2)载重:下拉菜单,选项为“60 t”和“70 t”,用以区分两种不同轴重的轮对。车间习惯于通过车辆载重对车辆部件进行区分,这里也沿用这一习惯。两种轮对标志板大小不同会导致在摆放时纵向中心不一致,可以通过调节各自的图像生成位置来避免手动调节摆放位置带来的麻烦。
(3)轮对编号:可输入文本框,输入压装时对轮对的临时编号,用于保存DXF文件时进行区分和识别。由于一般为流水号,文本框后的“+1”按钮可方便地对上个轮对编号进行加一处理。
(4)待刻打方向:下拉菜单,选项分别为“双侧”“左侧”和“右侧”,用以区分两边标志板都需要刻打、仅需要刻打左侧、仅需要刻打右侧等情况。
(5)轴承修程:下拉菜单,选项分别为“一般检大修”“一般检新造”“大修”和“新造”,用以区分不同修程的轴承,并以此确定标志板A栏中轴承新造/大修检修标记和D栏中一般检修标记是否刻打。
(6)相隔距离调整:文本框,用于调整图纸上两标志板内容的相隔距离,在定位装置固定时该输入内容不变。
(7)生成图纸:按钮,在输入信息完毕后按下它生成图纸。
由于轮对未经二次组装时,其首次组装年月日和末次组装年月日一致,而这样的轮对占很大的比例,故采用“当右端B栏的轮对末次组装年月日文本框为空时,生成图纸时该数据调用左端B栏的轮对首次组装年月日数据”的设计方案以提高输入效率。
在设计好界面布局后对其tab顺序进行编辑,这样就可以通过“tab键”进行各输入位置的切换,实现纯键盘操作以提高输入效率。总体顺序为“从上到下,先填写左端,再填写右端”。然后对左端标志板内容的顺序进行局部调整,填完D栏后,再打C栏的“车轴制造年月”“钢种代号”和“车轴制造单位代号”,以适应新《轮规》实行后,未退卸轴承标志板C栏这三项内容需要完善的情况。
对于界面的程序实现,Python支持多种图形界面的第三方库,这里导入基于Qt库的PySide模块进行编写。PySide集成了Qt和Python的优势,拥有LGPL授权许可,允许进行免费/开源软件和私有商业软件的开发。
pyautocad模块可以帮助完成用Python语言编写简单的ActiveX自动控制脚本[2],这里导入它来编写调用CAD生成DXF文件的函数作为“生成图纸”按钮的响应函数。pyautocad封装了一些接口[3],而且其中的sendcommand函数可以控制在CAD的命令行中运行指定的命令,相当于把CAD命令行prompt当成了一个微型API[4],这就允许我们完整地使用CAD的功能控制生成图纸。
具体生成图纸的流程为:
(1)根据相对位置生成各栏文本;
(2)将文字分解,变为外围轮廓线文字;
(3)对空心的文字进行填充;
(4)对文本进行打散,使之成为曲线;
(5)调整图形位置;
(6)保存。
由于CAD中生成的文字导入EzCad中会变为空心文字,这里先在CAD中将文字变为空心文字,再对其进行填充。将文字变为空心文字有两个方法:一是使用官方自带的Express工具箱,二是安装燕秀工具箱。
虽然Express工具箱的处理速度比燕秀工具箱更快,但文字处理后轮廓内部有一定的多余线条,这会影响后续的填充操作。而燕秀工具箱处理效果更好。
填充过后,还要再把图形打散一次,以保证填充线也能导入到EzCad中去。
在生成一个新的图纸时,先检查该文件夹中是否存在该轮对编号文件名的文件,如果存在,则程序不发生动作,如果不存在,才生成对应的图纸文件。在生成图纸完毕后,可以将图像删除继续等待下一个文件生成,也可以将CAD关闭,当下次调用时再次打开。而如果单单以DXF格式保存就关闭CAD时,CAD会以对话框的形式询问是否以DWG格式保存,故还要主动保存DWG格式的文件。这样目标文件夹中除了会有我们需要的DXF文件,还会有副产品——DWG文件。
最后生成的图纸效果如图2所示。再将保存后的DXF文件作为矢量图导入EzCad中打印即可。
图2 标志板图纸效果图
(1)通过利用Python语言及其pyautocad模块调用AutoCAD生成DXF文件再导入EzCad中进行刻打的方法,并基于PySide模块编制输入界面,提高了输入效率,节省了总体时间。
(2)DXF文件作为中间文件,结合了两个软件的优点,并解决了数据存储的问题。
(3)虽然激光刻打有效率高、刻打内容灵活的特点,但在刻打过程中容易形成烟尘,长期吸入对人体健康有害。在条件不允许重新设计刻打机时,应尽量在宽敞、通风处进行刻打,刻打人员也应佩戴好口罩等防护用品。
[1]师睿鑫.新型轴承标志板打号机的设计与实现[J].铁道机车车辆,2014,34(6):116-118.
[2]Welcome to pyautocad's documentation![EB/OL].http://pyau-tocad.readthedocs.io/en/latest/index.html.
[3]Process Autocad by python[EB/OL], http://www.cnblogs.com./crazytao/p/7699190.html.
[4]CAD命令行深入理解——python乱入CAD[EB/OL]. https://www.jianshu.com/p/bef620e81984.