劉德剛,李佳星,趙靜赟
(中國地質(zhì)大學(xué)(武漢)機(jī)械與電子信息學(xué)院,武漢 430074)
目前的切割軌跡自動生成系統(tǒng)開發(fā)模式主要有參數(shù)圖庫、專用系統(tǒng)以及基于CAD 的二次開發(fā)系統(tǒng)等。參數(shù)化圖庫利用通用編程語言實(shí)現(xiàn)常用基本切割圖形的參數(shù)化定制[3]。此種方式開發(fā)工作量小,系統(tǒng)使用簡單,但是圖庫內(nèi)容有限,不能滿足實(shí)際復(fù)雜需求。專用系統(tǒng)也采用通用編程語言開發(fā),實(shí)現(xiàn)了圖形編輯、套料以及G 代碼生成等功能。此種方式開發(fā)工作量大,開發(fā)難度高,系統(tǒng)使用復(fù)雜,價格高,代表軟件為Fast-CAM[4-5]。基于CAD 的二次開發(fā)系統(tǒng)則可以綜合前兩種方式,既能使用CAD 原有的強(qiáng)大圖形設(shè)計編輯功能,又可以降低開發(fā)及使用難度。
AutoCAD 應(yīng)用廣泛,提供了面向?qū)ο蟮拈_發(fā)庫ObjectARX[6]。基于ObjectARX 已成功開發(fā)出了眾多CAM 系統(tǒng)[7-10]。本系統(tǒng)也基于ObjectARX 開發(fā),論文對系統(tǒng)的設(shè)計與實(shí)現(xiàn)進(jìn)行闡述。
自動編程系統(tǒng)的最終用戶為工廠的CAM 設(shè)計人員或一線工人,他們熟悉切割業(yè)務(wù),但計算機(jī)知識往往掌握得較少。針對這種情況,系統(tǒng)的主設(shè)計目標(biāo)為“傻瓜化”,將復(fù)雜的處理邏輯盡量封裝在算法內(nèi)部,用戶只需幾個簡單的操作就可以完成G 代碼的生成,提高系統(tǒng)的實(shí)用性。
自動編程系統(tǒng)的動態(tài)運(yùn)行是典型的數(shù)據(jù)流處理過程。切割圖形作為原始數(shù)據(jù)輸入,此圖形經(jīng)過多個處理環(huán)節(jié),每個環(huán)節(jié)都對輸入數(shù)據(jù)進(jìn)行專業(yè)加工,輸出加工后的數(shù)據(jù),最終輸出為G 代碼。系統(tǒng)基本數(shù)據(jù)流圖如圖1 所示。

圖1 基本數(shù)據(jù)流圖
原始設(shè)計圖可以利用AutoCAD 強(qiáng)大的設(shè)計功能繪制,經(jīng)過圖形規(guī)范化處理后,加入切割工藝相關(guān)描述信息。工藝編譯根據(jù)用戶輸入的工藝參數(shù),將規(guī)范后的圖形進(jìn)行編譯,包括追蹤封閉輪廓以及進(jìn)行割縫補(bǔ)償?shù)取>幾g后的圖形可以進(jìn)行自動或手動排序。有了排序信息,系統(tǒng)就可以遍歷切割圖形,將其輸出為加工G 代碼。數(shù)據(jù)處理流程貫徹了“傻瓜化”的設(shè)計目標(biāo),步驟簡單。
基于數(shù)據(jù)流圖的設(shè)計模式,流程節(jié)點(diǎn)可以設(shè)計為單獨(dú)的數(shù)據(jù)處理模塊,實(shí)現(xiàn)輸入—處理—輸出的算法模式。各模塊最終注冊為AutoCAD 中的新命令組,通過鍵入命令或者點(diǎn)擊菜單來調(diào)用。系統(tǒng)的功能架構(gòu)設(shè)計如圖2 所示。

圖2 系統(tǒng)功能架構(gòu)
工藝編譯中包含多個子模塊,用來實(shí)現(xiàn)多個處理邏輯。基于“傻瓜化”的設(shè)計目標(biāo),最終用戶只需要使用“工藝編譯”一個命令,工藝編譯會自動調(diào)用子模塊的處理邏輯完成圖形的全部編譯工作。
由于專業(yè)培養(yǎng)目標(biāo)的不同,對于非計算機(jī)專業(yè)而言,其在Access數(shù)據(jù)庫方面的教學(xué)呈現(xiàn)一種不夠科學(xué)嚴(yán)謹(jǐn)?shù)奶攸c(diǎn)。主要體現(xiàn)為:
系統(tǒng)的設(shè)計采用面向?qū)ο蠹夹g(shù),各個模塊都利用類來實(shí)現(xiàn)。還設(shè)計了CBaseARX 基礎(chǔ)類,該類封裝了ObjectARX 的復(fù)雜接口,用簡單的C++函數(shù)提供基本的CAD 數(shù)據(jù)操作功能,如標(biāo)注、直線、多段線、圖層的添加、刪除、修改等基本函數(shù),以及改變多段線方向、判斷多段線的順逆、輪廓縮放等復(fù)雜函數(shù)。上層模塊需要時直接調(diào)用此類中的函數(shù),從而簡化了上層模塊的復(fù)雜度,實(shí)現(xiàn)了代碼重用。
AutoCAD 具有強(qiáng)大的圖形設(shè)計功能,但設(shè)計出的圖形并沒有包含切割工藝相關(guān)的信息,比如一條多段線是屬于外輪廓還是內(nèi)輪廓,一條直線是空移線還是引入線等。普通的AutoCAD 圖形中增加了這些專業(yè)切割信息后就變成了規(guī)范化的切割圖形。
切割附屬信息可以利用圖元的擴(kuò)展屬性進(jìn)行描述,但這種方式操作復(fù)雜,可視化效果差,當(dāng)圖元進(jìn)行合并、打斷等處理后,需要重新設(shè)置,所以不是一種好的方案。
經(jīng)過研究,利用AutoCAD 的圖層屬性來完成切割信息描述。相同類型的圖元放在同一層,每個圖層設(shè)置不同的顏色,用戶通過顏色就能直接判斷圖元切割屬性,內(nèi)部算法也可以根據(jù)圖層進(jìn)行查找與計算。主要的切割圖層如表1 所示。

表1 主要切割用圖層
前五個層與切割輪廓相關(guān),描述了內(nèi)外、順逆、是否封閉等信息。切割順序號層中放置切割順序標(biāo)注數(shù)字。
基于“傻瓜化”的設(shè)計目標(biāo),打開或者新建圖形時,插件自動創(chuàng)建切割專用圖層,不需要用戶輸入命令或者點(diǎn)擊菜單。重載AcRxArxApp 類的On_kLoad-DwgMsg 函數(shù),在其中調(diào)用切割圖層創(chuàng)建函數(shù),即可實(shí)現(xiàn)此效果。
工藝編譯是系統(tǒng)的核心模塊,內(nèi)部實(shí)現(xiàn)了多個子處理功能,算法基本流程圖如圖3 所示。

圖3 工藝編譯算法基本流程圖
工藝編譯首先進(jìn)行圖形數(shù)據(jù)預(yù)處理,包括統(tǒng)一轉(zhuǎn)換圖形為世界坐標(biāo)系,將圖形左下角平移到原點(diǎn),轉(zhuǎn)換橢圓為多段線等。因?yàn)镚 代碼中只支持直線和圓弧,橢圓須轉(zhuǎn)換為多段線。算法實(shí)現(xiàn)原理為利用Object-ARX 設(shè)置為折線繪制模式,自動重畫橢圓,畫出的橢圓即為多短線,然后刪除原始橢圓。樣條曲線可以利用AutoCAD Express Tools 中的flatten 命令轉(zhuǎn)換為多段線。
輪廓追蹤算法取出圖層信息,以此對五個輪廓相關(guān)層進(jìn)行處理。首先是將輪廓層中的圖元自動轉(zhuǎn)換為多段線,通過ObjectARX 獲取圖層范圍,自動執(zhí)行pedit 命令,自動設(shè)置轉(zhuǎn)換參數(shù),完成多段線的轉(zhuǎn)換。多段線轉(zhuǎn)換完成后,計算出多段線的順逆,再根據(jù)所屬圖層判斷是否需要進(jìn)行多段線方向反轉(zhuǎn)。由于系統(tǒng)可以自動追蹤出多段線并調(diào)整方向,用戶繪圖的時候就沒有額外限制,可以按照自己的習(xí)慣進(jìn)行設(shè)計。封閉輪廓中的多段線如果不能閉合,系統(tǒng)會提示錯誤信息。
由于設(shè)計原因或者一些轉(zhuǎn)換軟件的算法原因,切割圖形中有時存在過多點(diǎn)坐標(biāo),導(dǎo)致切割效率嚴(yán)重下降,甚至不能正常切割。刪除多余點(diǎn)算法根據(jù)用戶設(shè)置的允許誤差,對輪廓坐標(biāo)進(jìn)行判斷,刪除多余的點(diǎn)坐標(biāo)。
由于割炬存在寬度,需要對輪廓進(jìn)行補(bǔ)償,根據(jù)補(bǔ)償值放大外輪廓,縮小內(nèi)輪廓。補(bǔ)償算法通過Object-ARX 調(diào)用AutoCAD 所提供的offset 函數(shù),通過圖層取出順逆屬性,計算出偏移的正確參數(shù),完成偏移操作。
引入線生成算法對依次對輪廓層進(jìn)行遍歷,得到多段線坐標(biāo),根據(jù)引入線長度參數(shù),自動生成引入線。引入線的終點(diǎn)坐標(biāo)與輪廓的首點(diǎn)坐標(biāo)重合,通過坐標(biāo)位置建立拓?fù)潢P(guān)系。不封閉輪廓的引入線可以是輪廓本身的一部分或者額外添加引入線,由用戶在切割工藝參數(shù)中設(shè)置。
自動排序功能未集成在工藝編譯模塊中,是為了用戶可以調(diào)整引入線,比如可以改變引入線的引入位置或者使用圓弧引入線等。
引入線符合要求后,可以利用系統(tǒng)提供的自動排序算法自動編排切割順序。算法的基本原則是先切割內(nèi)輪廓,再切割外輪廓,切割的總路徑最短。系統(tǒng)采用LK 算法[11]進(jìn)行最優(yōu)路徑的尋找。切割順序以數(shù)字標(biāo)注形式放置于切割順序號圖層。標(biāo)注的內(nèi)容為輪廓切割的順序,標(biāo)注的坐標(biāo)與引入線的坐標(biāo)開始坐標(biāo)重合,通過坐標(biāo)建立順序標(biāo)注與引入線之間的拓?fù)潢P(guān)系。
系統(tǒng)還提供了手動排序功能,根據(jù)用戶點(diǎn)擊輪廓的向后順序進(jìn)行排序。排序完成后,還可以進(jìn)行排序號的調(diào)整。利用MFC 開發(fā)圖形界面對話框,用戶設(shè)置需要調(diào)整的序號。
排序完成后,就可以遍歷圖形輸出G 代碼。通過圖層屬性以及坐標(biāo)拓?fù)鋵傩钥梢酝瓿奢喞膶ふ遥找凭€可以自動生成。G 代碼輸出算法的基本流程圖如圖4 所示。

圖4 G 代碼輸出算法基本流程圖
本插件系統(tǒng)支持AutoCAD2004 至AutoCAD2014各個版本,提供中英兩種語言版本。由于ObjectARX的版本較多,與開發(fā)環(huán)境關(guān)系密切,在支持不同版本的AutoCAD 時,ObjectARX 的版本與開發(fā)平臺都不同,發(fā)布前需要在多種環(huán)境下編譯。以支持AutoCAD2010的情況為例,ObjectARX 版本為ObjectARX2010,開發(fā)平臺為Visual Studio.NET 2008 SP1,開發(fā)語言為Visual C++,使用MFC 進(jìn)行圖形界面開發(fā)。
插件安裝后,在AutoCAD 中增加了“切割機(jī)”菜單,點(diǎn)擊菜單即可以實(shí)現(xiàn)切割軌跡自動編程功能,如圖5 所示。

圖5 自動編程系統(tǒng)運(yùn)行界面
本插件系統(tǒng)與切割機(jī)廠商合作,已投入實(shí)際運(yùn)行多年。系統(tǒng)在眾多用戶處已成功生成了上萬個的G代碼文件。系統(tǒng)運(yùn)行穩(wěn)定,使用簡單,達(dá)到了“傻瓜化”的設(shè)計目標(biāo),算法的穩(wěn)定性與正確性也得到了驗(yàn)證。
本文利用面向?qū)ο蠹夹g(shù),基于ObjectARX 二次開發(fā)平臺設(shè)計開發(fā)了適用于數(shù)控火焰/等離子切割機(jī)的切割軌跡自動編程系統(tǒng)。該系統(tǒng)已成功投入實(shí)際運(yùn)行。系統(tǒng)遵循“傻瓜化”的設(shè)計目標(biāo),簡單易用,符合現(xiàn)場工人需求。開發(fā)經(jīng)驗(yàn)表明,基于ObjectARX 進(jìn)行二次開發(fā),能夠充分利用AutoCAD 已有的強(qiáng)大功能,快速開發(fā)出領(lǐng)域?qū)S霉δ埽荂AM 開發(fā)中的一種重要開發(fā)方式。本文對類似系統(tǒng)的設(shè)計開發(fā)具有參考意義。未來還可以將參數(shù)化典型圖庫的功能集成進(jìn)本系統(tǒng)中,進(jìn)一步增強(qiáng)系統(tǒng)的實(shí)用性。
[1]楊素嬡,潘文方. 國內(nèi)數(shù)控切割技術(shù)的研究與應(yīng)用現(xiàn)狀[J]. 金屬加工(熱加工),2010(8):37 -40.
[2]張維官. 關(guān)注現(xiàn)代切割設(shè)備核心部件[J]. 金屬加工(熱加工),2012(6):13 -19.
[3]甘明,袁正萍,陳小亮. 數(shù)控切割機(jī)系統(tǒng)加工代碼圖形庫的開發(fā)[J]. 制造技術(shù)與機(jī)床,2010(2):85 -87.
[4]楊帆,婁俊超. FastCAM 實(shí)際生產(chǎn)中的應(yīng)用[J]. 金屬加工(熱加工),2011(6):18 -19.
[5]陳永. 火焰切割機(jī)編程工藝分析與處理[J]. 金屬加工(熱加工),2011(4):33 -34.
[6]王文波. AutoCAD2010 二次開發(fā)實(shí)例教程(ObjectARX)[M]. 北京:機(jī)械工業(yè)出版社,2013.
[7]黃潔瓊,袁群. 基于AutoCAD 的沖裁零件圖形的自動輸入與識別[J]. 機(jī)械設(shè)計與制造,2012(2):82 -84.
[8]董克權(quán),黃鵬,劉超英,等. 基于ObjectARX 的羅茨泵轉(zhuǎn)子刨刀軌跡自動生成[J]. 現(xiàn)代制造工程,2011(8):71-74.
[9]劉輝,談沛,賀俊雄. 基于AutoCAD 的數(shù)控自動編程系統(tǒng)的研制[J]. 組合機(jī)床與自動化加工技術(shù),2008(10):68-70.
[10]陳光霞,曾曉雁. 基于AutoCAD 激光切割數(shù)控系統(tǒng)的開發(fā)[J]. 機(jī)械設(shè)計與制造,2008(4):151 -153.
[11]王東,李婭,吳臣,等. 提高鏈?zhǔn)絃in-Kernighan 算法性能的一種新策略[J]. 計算機(jī)應(yīng)用,2007(2):425 -427.