朱財(cái)良
(東風(fēng)柳州汽車有限公司,廣西 柳州 545000)
CATIA 軟件作為通用的CAD 軟件,廣泛應(yīng)用于各個(gè)制造行業(yè),特別是汽車行業(yè),幾乎所有的汽車主機(jī)廠都使用CATIA 作為整車零部件設(shè)計(jì)工具。由于汽車的日益發(fā)展,傳統(tǒng)的設(shè)計(jì)軟件無(wú)法滿足單個(gè)行業(yè)或企業(yè)的個(gè)性化需求,所以針對(duì)不同客戶的需求,對(duì)CATIA 進(jìn)行相應(yīng)的二次開發(fā)有著重要的意義。目前對(duì)CATIA 的二次開發(fā)主要集中在數(shù)據(jù)建模上,而對(duì)數(shù)據(jù)處理上較少,在與外部軟件連接上也主要集中在EXCEL、Word 等Office 軟件上,而對(duì)Windows 的連接較少。張溥海運(yùn)用CATIA 二次開發(fā)方法完成了對(duì)組合夾具管理系統(tǒng)及工裝夾具設(shè)計(jì)系統(tǒng)的構(gòu)建,提高了企業(yè)對(duì)組合夾具的管理及設(shè)計(jì)效率[1]。楊宇超通過(guò)CATIA 二次開發(fā)設(shè)計(jì)了可以提高船舶管道設(shè)計(jì)的效率和質(zhì)量的船舶管道布置CAD 系統(tǒng)[2]。趙立營(yíng)等[3-6]對(duì)CATIA 進(jìn)行二次開發(fā),在三維標(biāo)準(zhǔn)件庫(kù)、螺旋槳繪制、鉸鏈傳送帶、轎車儀表盤視野系統(tǒng)等方面取得了很好的成果。
汽車整車零部件設(shè)計(jì)部門輸出的產(chǎn)品(由多個(gè)子產(chǎn)品或者零件組成)數(shù)據(jù)包含比較多的設(shè)計(jì)信息(設(shè)計(jì)過(guò)程產(chǎn)生的點(diǎn)、線、面,孔、面信息等)(圖1)工藝部門往往需要對(duì)數(shù)據(jù)進(jìn)行處理后再進(jìn)行其他工藝工裝設(shè)計(jì)(比如零部件定位策略的設(shè)計(jì)、夾具的設(shè)計(jì)、檢具的設(shè)計(jì)、裝具的設(shè)計(jì)等),以達(dá)到刪除不必要的設(shè)計(jì)信息,保護(hù)知識(shí)產(chǎn)權(quán),簡(jiǎn)化數(shù)據(jù)的目的。而各大汽車主機(jī)廠對(duì)整車零部件數(shù)據(jù)的處理基本處在人工手動(dòng)操作的水平上,這完全依賴于CATIA 提供的現(xiàn)有功能,即使人員操作熟悉度再高也免不了操作費(fèi)時(shí)費(fèi)力的狀況,同時(shí)受人員水平的限制,還會(huì)有出現(xiàn)錯(cuò)漏的風(fēng)險(xiǎn)。
圖1 設(shè)計(jì)部門輸出的產(chǎn)品數(shù)據(jù)
針對(duì)上述問(wèn)題,提出了一種在CATIA 中可實(shí)現(xiàn)由產(chǎn)品數(shù)據(jù)批量轉(zhuǎn)換為Part 方法,并對(duì)轉(zhuǎn)化后的零件進(jìn)行分類優(yōu)化處理。通過(guò)CATIA Automation 技術(shù),利用CATIA 提供的API 以及Windows API,以VBA 為載體,利用遞歸思想,實(shí)現(xiàn)了CATIA 產(chǎn)品數(shù)據(jù)的一次性批量處理,同時(shí)可以避免人員手動(dòng)操作出現(xiàn)的錯(cuò)漏,大大提高工作效率,為后續(xù)工藝工裝設(shè)計(jì)提供堅(jiān)實(shí)的基礎(chǔ)。
目前,針對(duì)CATIA 二次開發(fā)主要有四種方法:智能軟件(Knowledge ware)、交互模式用戶自定義特征方法(Interactive User Defined Feature)、基于組件的應(yīng)用架構(gòu)(CAA)、使用自動(dòng)化對(duì)象編程接口方法(Automation API)。智能軟件、交互模式用戶自定義特征方法僅能滿足較為簡(jiǎn)單的功能需求開發(fā),對(duì)于較為復(fù)雜功能則需用到基于組件的應(yīng)用架構(gòu)或者使用自動(dòng)化對(duì)象編程接口方法來(lái)開發(fā)。
基于組件的應(yīng)用架構(gòu)(CAA)是一系列C++庫(kù)函數(shù),并在CATIA 運(yùn)行時(shí)加載該庫(kù)函數(shù),需要用戶安裝CAA RADE 模塊來(lái)實(shí)現(xiàn)可視化編程。由于其覆蓋了定義新口、控制交互過(guò)程、應(yīng)用和建立新的數(shù)據(jù)模型等方面的應(yīng)用,幾乎可以實(shí)現(xiàn)CATIA 所有功能的二次開發(fā)。正是由于CAA 具有穩(wěn)定性好,功能強(qiáng)大、全面等特點(diǎn),其適用于工程化、專業(yè)化、智能化和可擴(kuò)展的開發(fā),但同時(shí)其對(duì)二次開發(fā)人員的水平也要求高。
Automation API 是實(shí)質(zhì)上是使用宏程序的開發(fā)方法。對(duì)CATIA 進(jìn)行宏編程操作的方法可以分為2種方法:(1)進(jìn)程內(nèi)腳本;(2)進(jìn)程外腳本。前者是通過(guò)VBA、CATScript 以及VBScript 等腳本語(yǔ)言通過(guò)CATIA 內(nèi)部的腳本引擎來(lái)進(jìn)行解析的方法。Automation技術(shù)是對(duì)應(yīng)一系列對(duì)象遵循一定的不能顛倒的層次順序組成的一種對(duì)象結(jié)構(gòu),不同的對(duì)象在CATIA 中都有一一對(duì)應(yīng)的功能[7]。CATIA Automation 技術(shù)中所有功能均以方法和屬性的方式存在CATIA Automation 對(duì)象中,二次開發(fā)人員可以根據(jù)其方法和屬性對(duì)CATIA 進(jìn)行二次開發(fā)對(duì)數(shù)據(jù)進(jìn)行處理。Automation 技術(shù)二次開發(fā)對(duì)開發(fā)人員的水平相對(duì)于CAA 來(lái)說(shuō)較低,可以滿足中等難度功能開發(fā)。
因?yàn)橐獙?shí)現(xiàn)的功能難度,本研究選擇中等開發(fā)難度的Automation 技術(shù)開發(fā)。
汽車零部件設(shè)計(jì)部門輸出的產(chǎn)品數(shù)據(jù)包含比較多的設(shè)計(jì)信息,工藝部門需對(duì)數(shù)據(jù)進(jìn)行處理后再進(jìn)行其他工藝工裝設(shè)計(jì)。在手動(dòng)操作的情況下,通常是將產(chǎn)品轉(zhuǎn)化為零件,以到達(dá)消參數(shù)的目的,并將多零件組成的產(chǎn)品轉(zhuǎn)化為一個(gè)零件。對(duì)于二次開發(fā)同樣如此。
在CATIA 數(shù)據(jù)中,對(duì)于某一特定的、少層級(jí)、少數(shù)據(jù)的產(chǎn)品,可用人工數(shù)的方法來(lái)確定遍歷的個(gè)數(shù)及每個(gè)遍歷的次數(shù)。但對(duì)于未知數(shù)據(jù)的處理,數(shù)據(jù)可能涉及未知的多層級(jí),內(nèi)部可能出現(xiàn)嵌套,這時(shí)需要運(yùn)用遞歸的思想來(lái)解決問(wèn)題。在整車零部件數(shù)據(jù)中,存在多個(gè)層級(jí),存在多個(gè)產(chǎn)品,產(chǎn)品中可能包含下級(jí)的子產(chǎn)品,這數(shù)據(jù)是一個(gè)復(fù)雜的數(shù)據(jù)。對(duì)于每個(gè)產(chǎn)品,我們都需要將其轉(zhuǎn)化為單個(gè)零件,其處理過(guò)程是一樣的,可以將這個(gè)過(guò)程單獨(dú)寫在一個(gè)函數(shù)中,假如產(chǎn)品中包含下層級(jí)的產(chǎn)品,則可以調(diào)用函數(shù)本身。
遞歸函數(shù)定義主要代碼如下:
通過(guò)遞歸函數(shù),可以實(shí)現(xiàn)所有產(chǎn)品的遍歷,從而保證對(duì)所有產(chǎn)品的處理。
在CATIA Automation 技術(shù)中,并不是所有的人工手動(dòng)操作都有直接對(duì)應(yīng)的API,比如本研究需要實(shí)現(xiàn)的產(chǎn)品轉(zhuǎn)為零件中關(guān)鍵的一步人工手動(dòng)操作命令“從產(chǎn)品生成CATPart…”(該命令將多個(gè)帶參或者不帶參零件組成的產(chǎn)品轉(zhuǎn)化不帶的零件文件)就沒(méi)有API。CATIA 二次開發(fā)提供了部分人工操作相對(duì)應(yīng)命令無(wú)對(duì)應(yīng)直接API 的解決方案,即使用StartCommand。StartCommand 方法是CATIA 提供的應(yīng)用對(duì)象,只需傳遞要作為參數(shù)啟動(dòng)的命令的名稱,CAITA 即可啟動(dòng),如同單擊了其圖標(biāo)或者在“命令欄”框中輸入命令一樣。
對(duì)于需要解決的問(wèn)題,StartCommand 應(yīng)用主要代碼如下:
CATIA.StartCommand“從產(chǎn)品生成CATPart...”
StartCommand 功能,不是萬(wàn)能的,在命令執(zhí)行過(guò)程中,如遇到需要用戶交互時(shí),命令將終止;如遇到彈出對(duì)話框,需要點(diǎn)擊“確定”才能執(zhí)行時(shí),否則Start-Command 語(yǔ)句會(huì)忽略,繼續(xù)執(zhí)行下條命令,相當(dāng)于StartCommand 語(yǔ)句不起作用。比如本研究需要實(shí)現(xiàn)的功能中,在運(yùn)行CATIA.StartCommand “從產(chǎn)品生成CATPart…”后,會(huì)出現(xiàn)一個(gè)對(duì)話框,需要選擇“確定”才能完成數(shù)據(jù)的轉(zhuǎn)換,否則不執(zhí)行數(shù)據(jù)轉(zhuǎn)換。
為解決上述問(wèn)題,需要對(duì)彈出對(duì)話框進(jìn)行控制,而Windows API 則能提供解決方案。Windows API 是Windows 應(yīng)用程序接口,是針對(duì)Microsoft Windows 操作系統(tǒng)家族的系統(tǒng)編程接口。
2.3.1 延時(shí)的應(yīng)用
StartCommand 作為一個(gè)非常規(guī)使用的CATIA 方法,執(zhí)行時(shí)有時(shí)候會(huì)出現(xiàn)電腦反應(yīng)慢的情況,導(dǎo)致出現(xiàn)后續(xù)部分代碼不執(zhí)行的問(wèn)題。
使用Windows API 中timeGetTime 函數(shù)可以獲取以毫秒計(jì)的系統(tǒng)時(shí)間(該時(shí)間為從系統(tǒng)開啟算起所經(jīng)過(guò)的時(shí)間),再進(jìn)行處理可以實(shí)現(xiàn)延時(shí)。
延時(shí)函數(shù)主要代碼如下:
2.3.2 彈出窗口的控制
通過(guò)Windows API,檢索彈出窗口(圖2),找到彈出窗口的“確定”,再發(fā)送左鍵單擊指令。實(shí)現(xiàn)該功能主要應(yīng)用Windows API 中的FindWindow、Enum-ChildWindows、GetWindowText、GetWindowTextLength和SendMessage 這幾個(gè)函數(shù)。
圖2 彈出窗口
使用FindWindow 函數(shù)來(lái)檢索系統(tǒng)中是否存在具有指定類名或窗口名的窗口;使用EnumChildWindows 函數(shù)通過(guò)將句柄傳遞給應(yīng)用程序定義的回調(diào)函數(shù),枚舉屬于指定的父窗口的子窗口;使用GetWindowText 函數(shù)獲取指定窗口的標(biāo)題;使用GetWindow-TextLength 函數(shù)獲取指定窗口標(biāo)題的長(zhǎng)度;使用SendMessage 函數(shù)向指定的窗口發(fā)送消息。
向窗體中發(fā)送左鍵單擊“確定”命令,主要代碼如下:
SendMessage WindowBotOK,MouseB_CLICK,0,0
發(fā)送“確定”命令后,產(chǎn)品數(shù)據(jù)開始轉(zhuǎn)化,最終形成如圖3 所示的不帶參的幾何體和幾何圖形集組成的一個(gè)零件數(shù)據(jù)。
圖3 轉(zhuǎn)化后結(jié)果
根據(jù)遍歷產(chǎn)品時(shí)記錄的子產(chǎn)品的名稱,對(duì)于需包含焊點(diǎn)信息的工藝工裝設(shè)計(jì)文件(如零部件定位策略的設(shè)計(jì)文件、夾具的設(shè)計(jì)文件等)依次檢索產(chǎn)品轉(zhuǎn)化后的數(shù)據(jù);對(duì)于不需包含焊點(diǎn)信息的工藝工裝設(shè)計(jì)文件(如檢具的設(shè)計(jì)文件、裝具的設(shè)計(jì)文件等)則在產(chǎn)品轉(zhuǎn)化后的數(shù)據(jù)中不檢索焊點(diǎn),其他依次檢索,對(duì)符合子產(chǎn)品名稱條件的進(jìn)行復(fù)制粘貼到模板文件指定位置中,直至所有子產(chǎn)品都復(fù)制完成,如圖4 所示(含焊點(diǎn)信息)。
圖4 檢索零件(含焊點(diǎn)信息)并復(fù)制到模板中
使用CATIA.Documents.Open 可以打開建立好的模板文件;使用Search 可以檢索指定零件并選擇;使用Copy 和Paste 在不同文件中進(jìn)行復(fù)制粘貼;使用SaveAs 對(duì)處理后的模板文件進(jìn)行另存為其他文件。
由于處理后的文件是對(duì)原文件子產(chǎn)品的分別復(fù)制粘貼到指定位置,所以保證了數(shù)據(jù)處理與原產(chǎn)品結(jié)構(gòu)的一致性。復(fù)制粘貼的數(shù)據(jù)是不帶參的,且有選擇的,從而也消除了產(chǎn)品設(shè)計(jì)過(guò)程中對(duì)工藝部分沒(méi)用的信息。
為驗(yàn)證CATIA 產(chǎn)品數(shù)據(jù)轉(zhuǎn)化處理的效率和準(zhǔn)確性,分別使用二次開發(fā)工具和手動(dòng)操作兩種處理方式進(jìn)行對(duì)比。
測(cè)試模型選擇某車型的一個(gè)總成,該總成及其下級(jí)總共7 個(gè)總成(含下級(jí)下包含的所有更小的總成)(圖5),62 個(gè)實(shí)體零件(含螺母及螺柱等標(biāo)準(zhǔn)件)。
圖5 某總成及其下級(jí)總成
使用二次開發(fā)工具與人工操作分別對(duì)上述測(cè)試模型進(jìn)行數(shù)據(jù)轉(zhuǎn)化及處理,效率測(cè)試結(jié)果詳見表1。通過(guò)對(duì)比測(cè)試結(jié)果可知,使用二次開發(fā)工具相比于手動(dòng)操作效率提升681.8%,效率提升極為顯著。
表1 效率對(duì)比
二次開發(fā)工具效率提升極為顯著的原因主要有2 點(diǎn):(1)使用VBA 對(duì)CATIA 進(jìn)行二次開發(fā),運(yùn)行時(shí)代碼時(shí)計(jì)算機(jī)執(zhí)行的是更接近計(jì)算機(jī)底層語(yǔ)言的高級(jí)語(yǔ)言,執(zhí)行速度快(經(jīng)測(cè)算執(zhí)行一行簡(jiǎn)單代碼的時(shí)間為幾毫秒);(2)遞歸函數(shù)、StartCommand、timeGet-Time、SendMessage、Search等方法、Automation API、Windows API 的使用實(shí)現(xiàn)了所有手動(dòng)操作均可用代碼執(zhí)行代替,代碼可以連續(xù)不間斷地執(zhí)行,直至該執(zhí)行的代碼都執(zhí)行完成。
由于使用延時(shí)函數(shù)及遞歸函數(shù),從而可以實(shí)現(xiàn)一次性無(wú)縫連接批量處理,無(wú)需人員額外進(jìn)行監(jiān)控,人力資源得以釋放,因此在進(jìn)行數(shù)據(jù)轉(zhuǎn)化處理同時(shí)不影響人員處理其他工作,進(jìn)一步提升效率,而手動(dòng)操作則不能。
手動(dòng)操作在總成識(shí)別、總成名稱編寫(數(shù)據(jù)處理時(shí)用到)、數(shù)據(jù)復(fù)制粘貼等方面均可能出現(xiàn)錯(cuò)漏,而通過(guò)二次開發(fā)用代碼實(shí)現(xiàn)代替人工,可以保證數(shù)據(jù)處理100%準(zhǔn)確。
通過(guò)CATIA Automation 技術(shù),利用CATIA 提供的API 以及Windows API,以VBA 為載體,利用遞歸思想,可實(shí)現(xiàn)CATIA 產(chǎn)品一次性批量轉(zhuǎn)換為零件,并對(duì)轉(zhuǎn)化后的零件進(jìn)行分類優(yōu)化處理,也實(shí)現(xiàn)了汽車CATIA 數(shù)據(jù)的批量處理。通過(guò)實(shí)例驗(yàn)證對(duì)比二次開發(fā)與手動(dòng)可知,二次開發(fā)效率提升681.8%,效率提升極為顯著,在進(jìn)行數(shù)據(jù)轉(zhuǎn)化處理同時(shí)不影響其他工作的處理;二次開發(fā)可以保證數(shù)據(jù)處理100%準(zhǔn)確,避免人員手動(dòng)操作出現(xiàn)的錯(cuò)漏,為后續(xù)工藝工裝設(shè)計(jì)提供堅(jiān)實(shí)的基礎(chǔ)。