王學(xué)華,劉莉君,馬凡杰,王華龍,劉文琪,李存榮
1.武漢工程大學(xué)材料科學(xué)與工程學(xué)院,湖北 武漢 430074;2.武漢桑普瑞奇科技有限公司,湖北 武漢 430073
在傳統(tǒng)的激光加工系統(tǒng)中,均采用數(shù)控代碼手工編程,只能處理簡(jiǎn)單軌跡零件的加工過(guò)程,在編程中容易出錯(cuò),效率低.隨著CAD技術(shù)的不斷發(fā)展,國(guó)內(nèi)外研究人員將CAD技術(shù)應(yīng)用于激光加工中.其中圖形交換文件(Drawing Exchange File,以下簡(jiǎn)稱: DXF)作為Autodesk公司開發(fā)的用于AutoCAD與其它軟件之間進(jìn)行CAD數(shù)據(jù)交換的一種文件格式,其可讀性好,占用內(nèi)存小,易于二次開發(fā),被用于各種圖形化數(shù)控加工系統(tǒng)[1-5].胡勝紅[6]等人利用Visual C++成功對(duì)DXF文件進(jìn)行解析,完成對(duì)簡(jiǎn)單幾何面域圖形的快速掃描.
由于在DXF文件中,圖形元素的記錄順序是以設(shè)計(jì)人員在CAD中隨機(jī)繪制圖形的先后順序?yàn)橹饕罁?jù),且控制點(diǎn)的順序是隨系統(tǒng)默認(rèn),容易導(dǎo)致激光加工過(guò)程中路徑的無(wú)序性,增加了激光加工過(guò)程中的空程路徑[7].因此,快速搜索合適的最短激光加工路徑對(duì)提高加工效率十分必要.筆者采用高級(jí)語(yǔ)言Delphi編程完成DXF文件的解析,并對(duì)圖元信息進(jìn)行存儲(chǔ)優(yōu)化,實(shí)現(xiàn)了DXF數(shù)據(jù)與激光加工路徑之間的數(shù)據(jù)轉(zhuǎn)換,減少激光空程加工時(shí)間,提高加工效率.
一個(gè)完整的DXF文件由表1所列的各部分組成.DXF文件是由很多的代碼和值組成的數(shù)據(jù)對(duì)構(gòu)造而成,這里的代碼稱為組碼.需指定組碼的值的類型和用途,每個(gè)組碼的值必須為單獨(dú)的一行.該組碼不僅指出了其對(duì)應(yīng)組值的類型,而且與此組值配對(duì).通過(guò)以上配對(duì)的組碼和組值,DXF文件被組織成由記錄構(gòu)成的段,而記錄又是由按順序排列的組碼和數(shù)據(jù)條目所構(gòu)成的[8-9].
表1 DXF文件的基本構(gòu)成
DXF文件中的內(nèi)容都是以組碼/組值的形式出現(xiàn),在讀取DXF文件的時(shí)候,只需要了解模型的幾何信息,因此只用掃描解析DXF文檔的ENTITIES實(shí)體段區(qū)域,它包含了所繪制圖形的所有數(shù)據(jù),其中實(shí)體類型包括直線(LINE)、圓(CIRCLE)、圓弧(ARC)、橢圓(ELLIPSE)、多段線(POLYLINE)、文本(TEXT)等十幾種[10-11].
DXF文件的解析過(guò)程可以分解成搜索各種圖元并將各種圖元組合起來(lái)的過(guò)程.針對(duì)DXF文件的每一個(gè)段及子類,只需搜索到對(duì)應(yīng)的字符串,然后順序去讀取其后的圖元數(shù)據(jù)信息[12-13],解析流程如圖1所示.
圖1 DXF文件實(shí)體段解析
以直線段(LINE)為例,該圖元的第一行組碼10、20、30 和 11、21、31 分別代表直線段的坐標(biāo)起點(diǎn)(X1,Y1,Z1)和終點(diǎn) (X2、Y2、Z2)標(biāo)志,而其具體的坐標(biāo)數(shù)值則存在其對(duì)應(yīng)的下一行(組值)中.與直線相關(guān)的數(shù)據(jù)信息以及與直線圖元相關(guān)的讀取、寫入、繪制等函數(shù)在Delphi中定義類的過(guò)程如下:
Type Dxf_Cline= Class
Public Movetype:Integer; //0:表示移動(dòng),不加工;1:表示加工.
startX,startY,endX,endY:Integer; //定義直線的起點(diǎn)和終點(diǎn)
Previous:Dxf_Cline;
Next:Dxf_Cline;
……
將DXF文件中的圖元按其類型進(jìn)行分類解析,提取的各圖元信息存儲(chǔ)于各類數(shù)據(jù)結(jié)構(gòu)中,將各圖元類作為鏈表結(jié)構(gòu)中的結(jié)點(diǎn)并按DXF文件中圖元出現(xiàn)的先后順序存儲(chǔ)在給定的鏈表結(jié)構(gòu)中,鏈表中的每一結(jié)點(diǎn)元素即為一種類型的圖元,則可以構(gòu)成圖元的數(shù)據(jù)鏈表結(jié)構(gòu).在鏈表中每個(gè)結(jié)點(diǎn)中有兩個(gè)用于鏈接其他結(jié)點(diǎn)的指針,一個(gè)指向前趨結(jié)點(diǎn)(Previous),另一個(gè)指向后繼結(jié)點(diǎn)(Next),構(gòu)成雙向鏈表,如圖2所示.
圖2 圖元的鏈表結(jié)構(gòu)
讀取直線段并顯示在界面上的部分程序示例如下:
Define DXF_line_count:Integer // DXF文件文本的行數(shù)
i:Integer; // 行數(shù)計(jì)數(shù)
str:String;// 中間變量,儲(chǔ)存DXF文本的一行內(nèi)容
if str='AcDbLine' then // 讀取直線圖元信息
startX:= round(strtofloat(mdxf.Lines[i+2])) ; // 讀取直線段起始坐標(biāo)X
startY:= height_coordiate-round(strtofloat(mdxf.Lines[i+4])) ;//讀取直線段起始坐標(biāo)Y
endX:= round(strtofloat(mdxf.Lines[i+8])) ; //讀取終點(diǎn)坐標(biāo)X
endY:= height_coordiate-round(strtofloat(mdxf.Lines[i+10])) ;//讀取終點(diǎn)坐標(biāo)Y
Image.Canvas.MoveTo(startX, startY) ;
Image.Canvas.LineTo(endX,endY) ;//繪制直線
……
在實(shí)體段ENTITIES中,若交換圖形元素出現(xiàn)的先后順序和改變?cè)搱D元的控制點(diǎn)排序,對(duì)實(shí)體圖形的位置和形狀沒有影響,因此在解析提取DXF文件的有效圖元數(shù)據(jù)信息時(shí),對(duì)隨機(jī)無(wú)序的離散圖元進(jìn)行連接處理之后再應(yīng)用最近距離排序算法,可以有效的提高激光加工過(guò)程的效率.圖3為路徑加工優(yōu)化示意圖,以圖3為例,虛線箭頭表示模擬加工路徑,優(yōu)化前的加工順序是和設(shè)計(jì)人員的繪圖順序一致,從編程零點(diǎn)V0→V1→V2→V3,依次完成后回到加工原點(diǎn)V0.通過(guò)采取最近距離法優(yōu)化之后,讀取第一個(gè)圖形的起點(diǎn),開始進(jìn)行加工,到直線的終點(diǎn)結(jié)束,在進(jìn)行下一個(gè)圖元拾取時(shí),找尋離上一個(gè)終點(diǎn)距離最近的端點(diǎn)為新的起始點(diǎn),完成下一個(gè)圖元的加工,路線則變?yōu)閺腣0→V1→V3→V2→V0,大大縮短加工距離,提高了加工效率.
圖3 路徑優(yōu)化加工示意圖
圖4為路徑優(yōu)化前后數(shù)據(jù)點(diǎn)的位置狀態(tài).優(yōu)化前圖形數(shù)據(jù)只是按照初始的CAD存儲(chǔ)順序進(jìn)行,優(yōu)化后,激光加工路徑從某個(gè)圖元起點(diǎn)開始,移動(dòng)至該圖元終點(diǎn)后,尋找離其距離最近的下一個(gè)圖元的起點(diǎn).
圖4 路徑優(yōu)化前后數(shù)據(jù)點(diǎn)的位置變化
結(jié)合MPC03運(yùn)動(dòng)控制卡的驅(qū)動(dòng),將優(yōu)化后直線段的數(shù)據(jù)轉(zhuǎn)換為激光數(shù)控加工路徑的關(guān)鍵程序示例如下:
……
hDll:=LoadLibrary('mpc03LS.dll');//獲取動(dòng)態(tài)鏈接庫(kù)句柄,加載板卡驅(qū)動(dòng)函數(shù)庫(kù)
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
……//運(yùn)動(dòng)函數(shù)聲明
Tinit_board=function():integer; stdcall;//對(duì)控制卡硬件和軟件初始化
Tcon_line2=function(ch1:integer;pos1:INTEGER;ch2:integer;pos2:INTEGER):integer; stdcall;//兩軸做常速直線運(yùn)動(dòng)
Tfast_line2=function(ch1:integer;pos1:INTEGER;ch2:integer;pos2:INTEGER):integer; stdcall;//兩軸做快速直線運(yùn)動(dòng)
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 // 以下代碼實(shí)現(xiàn)連續(xù)加工
Begin
set_laser_mode(Dline.Movetype); //激光開
set_vector_conspeed(1000); //設(shè)置加工速度
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); //激光關(guān)
Dline.next;
End
End
……
通過(guò)對(duì)AutoCAD中DXF文件的構(gòu)成及數(shù)據(jù)格式的解析,以直線段LINE圖元為例在Delphi開發(fā)平臺(tái)上建立了DXF文件與激光數(shù)控加工過(guò)程的數(shù)據(jù)轉(zhuǎn)換接口,運(yùn)行結(jié)果如圖4所示.通過(guò)遍歷圖元數(shù)據(jù)鏈表結(jié)點(diǎn)及搜索最近鄰距離的方式,重新對(duì)圖元數(shù)據(jù)排序,以MPC03運(yùn)動(dòng)控制卡為實(shí)例,實(shí)現(xiàn)了激光數(shù)控加工過(guò)程路徑的優(yōu)化,減少了空程路徑,提高了激光數(shù)控加工的效率.
致 謝
感謝武漢桑普瑞奇科技有限公司和武漢工程大學(xué)提供的開發(fā)和試驗(yàn)平臺(tái)!
[1] 胡方霞,劉杰,任艷君. 基于AUTOCAD二次開發(fā)的激光標(biāo)記機(jī)軟件設(shè)計(jì)[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文件的數(shù)控加工系統(tǒng)的實(shí)現(xiàn)研究[J]. 佳木斯大學(xué)學(xué)報(bào):自然科學(xué)版,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] 趙英偉.計(jì)算機(jī)控制激光二維復(fù)雜圖形掃描加工[D].天津:河北工業(yè)大學(xué),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] 王明,孫進(jìn). 基于DXF文件的圖形自動(dòng)編程數(shù)控系統(tǒng)設(shè)計(jì)[J]. 中國(guó)農(nóng)機(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面域的圖形接口開發(fā)及其應(yīng)用[J]. 工程圖學(xué)學(xué)報(bào),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的數(shù)控切割加工優(yōu)化算法的研究與實(shí)現(xiàn)[J].煤礦機(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]. 兵工自動(dòng)化,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].計(jì)算機(jī)時(shí)代,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] 但永平,張蕾,張國(guó)濤,等. 基于VC++的DXF數(shù)據(jù)文件接口程序設(shè)計(jì)[J]. 電子設(shè)計(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的數(shù)控切割優(yōu)化排序算法的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用,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] 張國(guó)慶. DXF文件在激光打標(biāo)系統(tǒng)的應(yīng)用研究[J].光電技術(shù)應(yīng)用,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實(shí)現(xiàn)基于DXF文件的AutoCAD數(shù)據(jù)共享接口[J]. 工業(yè)控制計(jì)算機(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)