APP下载

数控激光加工路径链表快速搜索优化

2014-02-27王学华刘莉君马凡杰王华龙刘文琪李存荣

武汉工程大学学报 2014年10期
关键词:图元链表解析

王学华,刘莉君,马凡杰,王华龙,刘文琪,李存荣

1.武汉工程大学材料科学与工程学院,湖北 武汉 430074;2.武汉桑普瑞奇科技有限公司,湖北 武汉 430073

0 引 言

在传统的激光加工系统中,均采用数控代码手工编程,只能处理简单轨迹零件的加工过程,在编程中容易出错,效率低.随着CAD技术的不断发展,国内外研究人员将CAD技术应用于激光加工中.其中图形交换文件(Drawing Exchange File,以下简称: DXF)作为Autodesk公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的一种文件格式,其可读性好,占用内存小,易于二次开发,被用于各种图形化数控加工系统[1-5].胡胜红[6]等人利用Visual C++成功对DXF文件进行解析,完成对简单几何面域图形的快速扫描.

由于在DXF文件中,图形元素的记录顺序是以设计人员在CAD中随机绘制图形的先后顺序为主要依据,且控制点的顺序是随系统默认,容易导致激光加工过程中路径的无序性,增加了激光加工过程中的空程路径[7].因此,快速搜索合适的最短激光加工路径对提高加工效率十分必要.笔者采用高级语言Delphi编程完成DXF文件的解析,并对图元信息进行存储优化,实现了DXF数据与激光加工路径之间的数据转换,减少激光空程加工时间,提高加工效率.

1 DXF图形文件与加工过程转换

1.1 DXF文件解析

一个完整的DXF文件由表1所列的各部分组成.DXF文件是由很多的代码和值组成的数据对构造而成,这里的代码称为组码.需指定组码的值的类型和用途,每个组码的值必须为单独的一行.该组码不仅指出了其对应组值的类型,而且与此组值配对.通过以上配对的组码和组值,DXF文件被组织成由记录构成的段,而记录又是由按顺序排列的组码和数据条目所构成的[8-9].

表1 DXF文件的基本构成

1.2 加工数据的获取

DXF文件中的内容都是以组码/组值的形式出现,在读取DXF文件的时候,只需要了解模型的几何信息,因此只用扫描解析DXF文档的ENTITIES实体段区域,它包含了所绘制图形的所有数据,其中实体类型包括直线(LINE)、圆(CIRCLE)、圆弧(ARC)、椭圆(ELLIPSE)、多段线(POLYLINE)、文本(TEXT)等十几种[10-11].

DXF文件的解析过程可以分解成搜索各种图元并将各种图元组合起来的过程.针对DXF文件的每一个段及子类,只需搜索到对应的字符串,然后顺序去读取其后的图元数据信息[12-13],解析流程如图1所示.

图1 DXF文件实体段解析

1.3 加工过程转换

以直线段(LINE)为例,该图元的第一行组码10、20、30 和 11、21、31 分别代表直线段的坐标起点(X1,Y1,Z1)和终点 (X2、Y2、Z2)标志,而其具体的坐标数值则存在其对应的下一行(组值)中.与直线相关的数据信息以及与直线图元相关的读取、写入、绘制等函数在Delphi中定义类的过程如下:

Type Dxf_Cline= Class

Public Movetype:Integer; //0:表示移动,不加工;1:表示加工.

startX,startY,endX,endY:Integer; //定义直线的起点和终点

Previous:Dxf_Cline;

Next:Dxf_Cline;

……

将DXF文件中的图元按其类型进行分类解析,提取的各图元信息存储于各类数据结构中,将各图元类作为链表结构中的结点并按DXF文件中图元出现的先后顺序存储在给定的链表结构中,链表中的每一结点元素即为一种类型的图元,则可以构成图元的数据链表结构.在链表中每个结点中有两个用于链接其他结点的指针,一个指向前趋结点(Previous),另一个指向后继结点(Next),构成双向链表,如图2所示.

图2 图元的链表结构

读取直线段并显示在界面上的部分程序示例如下:

Define DXF_line_count:Integer // DXF文件文本的行数

i:Integer; // 行数计数

str:String;// 中间变量,储存DXF文本的一行内容

if str='AcDbLine' then // 读取直线图元信息

startX:= round(strtofloat(mdxf.Lines[i+2])) ; // 读取直线段起始坐标X

startY:= height_coordiate-round(strtofloat(mdxf.Lines[i+4])) ;//读取直线段起始坐标Y

endX:= round(strtofloat(mdxf.Lines[i+8])) ; //读取终点坐标X

endY:= height_coordiate-round(strtofloat(mdxf.Lines[i+10])) ;//读取终点坐标Y

Image.Canvas.MoveTo(startX, startY) ;

Image.Canvas.LineTo(endX,endY) ;//绘制直线

……

2 加工路径优化实例

在实体段ENTITIES中,若交换图形元素出现的先后顺序和改变该图元的控制点排序,对实体图形的位置和形状没有影响,因此在解析提取DXF文件的有效图元数据信息时,对随机无序的离散图元进行连接处理之后再应用最近距离排序算法,可以有效的提高激光加工过程的效率.图3为路径加工优化示意图,以图3为例,虚线箭头表示模拟加工路径,优化前的加工顺序是和设计人员的绘图顺序一致,从编程零点V0→V1→V2→V3,依次完成后回到加工原点V0.通过采取最近距离法优化之后,读取第一个图形的起点,开始进行加工,到直线的终点结束,在进行下一个图元拾取时,找寻离上一个终点距离最近的端点为新的起始点,完成下一个图元的加工,路线则变为从V0→V1→V3→V2→V0,大大缩短加工距离,提高了加工效率.

图3 路径优化加工示意图

图4为路径优化前后数据点的位置状态.优化前图形数据只是按照初始的CAD存储顺序进行,优化后,激光加工路径从某个图元起点开始,移动至该图元终点后,寻找离其距离最近的下一个图元的起点.

图4 路径优化前后数据点的位置变化

结合MPC03运动控制卡的驱动,将优化后直线段的数据转换为激光数控加工路径的关键程序示例如下:

……

hDll:=LoadLibrary('mpc03LS.dll');//获取动态链接库句柄,加载板卡驱动函数库

If hDll<>0 then

Begin

@init_board:=GetProcAddress(hDll,'init_board');

@set_vector_profile:=GetProcAddress(hDll,'set_vector_profile');

@con_hmove2:=GetProcAddress(hDll,'con_hmove2');

@fast_hmove2:=GetProcAddress(hDll,

'fast_hmove2');

@fast_pmove:=GetProcAddress(hDll,'fast_pmove');

@con_line2:=GetProcAddress(hDll,'con_line2');

@fast_line2:=GetProcAddress(hDll,'fast_line2');

……

End

……//运动函数声明

Tinit_board=function():integer; stdcall;//对控制卡硬件和软件初始化

Tcon_line2=function(ch1:integer;pos1:INTEGER;ch2:integer;pos2:INTEGER):integer; stdcall;//两轴做常速直线运动

Tfast_line2=function(ch1:integer;pos1:INTEGER;ch2:integer;pos2:INTEGER):integer; stdcall;//两轴做快速直线运动

Var //变量声明

hDll: THandle;

init_board: Tinit_board;

con_hmove2:Tcon_hmove2 ;

con_line2:Tcon_line2;

fast_line2:Tfast_line2;

Dline: Dxf_Cline;

If init_board< >0 then

Begin

While Dline < > nil Do // 以下代码实现连续加工

Begin

set_laser_mode(Dline.Movetype); //激光开

set_vector_conspeed(1000); //设置加工速度

con_line2(m_card.Y_axis, Dline.endY,m_card.X_axis, Dline.endX); //正常加工

While not (check_done(0) = 0 and check_done(1) = 0) do

application.processmassage;

set_laser_mode(0); //激光关

Dline.next;

End

End

……

3 运行结果与结论

通过对AutoCAD中DXF文件的构成及数据格式的解析,以直线段LINE图元为例在Delphi开发平台上建立了DXF文件与激光数控加工过程的数据转换接口,运行结果如图4所示.通过遍历图元数据链表结点及搜索最近邻距离的方式,重新对图元数据排序,以MPC03运动控制卡为实例,实现了激光数控加工过程路径的优化,减少了空程路径,提高了激光数控加工的效率.

致 谢

感谢武汉桑普瑞奇科技有限公司和武汉工程大学提供的开发和试验平台!

[1] 胡方霞,刘杰,任艳君. 基于AUTOCAD二次开发的激光标记机软件设计[J]. 激光杂志,2006,27(6):82-83.

HU Fang-xia, LIU Jie,REN Yan-jun. A design of laser marking system based on second developing AutoCAD[J]. Laser Journal,2006,27(6):82-83. (in Chinese)

[2] 刘启生,邵东伟,杜云明,等. 基于DXF文件的数控加工系统的实现研究[J]. 佳木斯大学学报:自然科学版,2009,27(4):542-544.

LIU Qi-sheng, SHAO Dong-wei DU Yun-ming,et al. The realization of research for CNC machining systems based oil DXF file[J]. Journal of Jiamusi University:Natural Science Edition,2009,27(4):542-544. (in Chinese)

[3] SLUEV V A, SMIRNOV K K. A system for controlling laser writing devices[J]. Optoelectronics Instrumentation and Data Processing,2007,43(5):481-487.

[4] 赵英伟.计算机控制激光二维复杂图形扫描加工[D].天津:河北工业大学,2002:23-27.

ZHAO Ying-wei.Computer controlling laser two-dimension scanning complex figure progressing[D].Tianjin:Hebei University of Technology,2002:23-27. (in Chinese)

[5] 王明,孙进. 基于DXF文件的图形自动编程数控系统设计[J]. 中国农机化,2011(2):122-124.

WANG Ming, SUN Jin. Design of graphic automatic programmed numerical control system based on DXF[J].Chinese Agricultural Mechanization, 2011(2): 122-124. (in Chinese)

[6] 胡胜红,刘晓东. 基于AutoCAD面域的图形接口开发及其应用[J]. 工程图学学报,2007(5):1-6.

HU Sheng-hong,LIU Xiao-dong. Development and implementation of the graphic interface based on region in AutoCAD[J].Journal of Engineering Graphics,2007(5):1-6. (in Chinese)

[7] 甘明,陈晓亮,张科威. 基于DXF的数控切割加工优化算法的研究与实现[J].煤矿机械,2010,31(11):130-132.

GAN Ming, CHEN Xiao-liang, ZHANG Ke-wei. Research and realization of optimization algorithm for NC cutting machine based on DXF[J]. Coal Mine Machinery,2010,31(11):130-132. (in Chinese)

[8] 李芳珍,许伦辉. DXF文件格式及其外部接口的研究[J]. 兵工自动化,2008,27 (7):83-85.

LI Fang-zhen, XU Lun-hui. Study on file format and exterior interface of DXF[J]. Ordnance Industry Automation,2008,27(7):83-85. (in Chinese)

[9] 张永超,岳建平,王海青.基于VB6.0和OpenGL的DXF文件读取与交互控制[J].计算机时代,2009(9):39-41.

ZHANG Yong-chao,YUE Jian-ping,WANG Hai-qing. DXF document reading and interaction control based on VB6.0 and OpenGL[J]. Computer Era. 2009(9):39-41. (in Chinese)

[10] 但永平,张蕾,张国涛,等. 基于VC++的DXF数据文件接口程序设计[J]. 电子设计工程,2012,20(23):70-74.

DAN Yong-ping,ZHANG Lei,ZHANG Guo-tao,et al. Design of DXF data file interface program based on the VC++[J]. Electronic Design Engineering,2012,20(23):70-74. (in Chinese)

[11] 沈志荣,谢明红. 基于DXF的数控切割优化排序算法的研究与实现[J]. 计算机工程与应用,2013,49(15):32-35,96.

SHEN Zhi-rong, XIE Ming-hong. Research and implementation of optimized sorting algorithm for NC cutting machine based on DXF[J].Computer Engineering and Applications, 2013, 49(15):32-35,96. (in Chinese)

[12] 张国庆. DXF文件在激光打标系统的应用研究[J].光电技术应用,2010,25(5):8-11.

ZHANG Guo-qing. Application research of DXF file in laser marking system[J]. Electro-optic Technology Application,2010,25(5):8-11. (in Chinese)

[13] 李晨. 用VC实现基于DXF文件的AutoCAD数据共享接口[J]. 工业控制计算机,2010,23(4):76-77.

LI Chen. Implementation of Data interface to DXF format in AutoCAD using visual C++[J].Industrial Control Computer,2010,23(4):76-77. (in Chinese)

猜你喜欢

图元链表解析
三角函数解析式中ω的几种求法
学术出版物插图的编排要求(一):图注
联锁表自动生成软件的设计与实现
基于二进制链表的粗糙集属性约简
跟麦咭学编程
睡梦解析仪
电竞初解析
对称巧用解析妙解
一种基于有序双端链表的高效排序算法
电气CAD接线图快速转换G图形的技术应用研究