林國斌,劉向堯
(貴州理工學院航空航天工程學院,貴州 貴陽 550003)
飛機三維外形是飛機CAD中的一個重要組成部分。由于在概念設計階段飛機外形經常需要修改,因此如何快速地生成飛機三維外形模型是一個需要解決的問題。參數化設計工作為快速地生成飛機三維外形模型提供了一種有效的途徑[1]。參數化設計是指CAD通過尺寸驅動的方式,以獨立的幾何約束條件按既定的幾何參數生成一系列具有相同或相似幾何特征的二維或三維圖形的一種設計方法。從編程角度來看,實現參數化設計的途徑主要有三種:(1)基于圖形庫,如Open GL[2-3];(2)基于已有的CAD軟件進行二次開發?;趫D形庫的方法實現飛機三維外形建模相對復雜些;而基于CAD軟件的方法則可以省略圖形軟件的開發,同時可以利用已有CAD系統的強大功能和通用性[4-5]。(3)直接利用CAD的基礎理論進行建模編程。
本文應用Visual Basic 6.0(以下簡稱VB6.0)編程語言和CATIA二次開發技術進行實現飛機機身外形的參數化設計。首先分析不同類型的零部件設計方法,梳理在CATIA中的建模流程,再介紹VB6.0環境下CATIA二次開發的步驟,然后討論飛機參數化描述,最后以一個簡單的飛機機頭外形為例,說明基于CATIA二次開發實現飛機外形參數化設計的實現方法及可行性。
CATIA作為CAD/CAM/CAM/CAPP一體化的軟件,廣泛地應用于航空航天、汽車、船舶等行業。尤其在航空領域,航空企業普遍使用CATIA進行零部件的建模工作。然而由于用戶使用的側重點不同,功能再強大的軟件也不可能同時滿足各類用戶的需求。因此,對CATIA進行二次開發已經受到國內外許多企業及高校的重視。通過開發工具對CATIA的功能進行二次開發,可以開發出針對某一功能需求,甚至針對某一用戶的特定模塊,以方便用戶使用,其是對CATIA功能的深入挖掘和拓展[4]。CATIA二次開發的過程和意義如圖1所示。

圖1 CATIA二次開發的過程和意義
CATIA二次開發主要分為以下兩種方法:一種是采用C++作為開發工具、CAA二次開發技術,另一種是采用VB作為開發工具、Automation二次開發技術。
CAA是CATIA的一套C++函數庫,該函數庫在CATIA運行時加載,用戶可通過RADE模塊在VC++編程環境下編寫程序,與CATIA進行通信[5],一般在CATIA的低版本運行。
Automation其核心技術是允許外部程序操作CATIA。此技術并不是直接進行獲取處理CATIA數據,而是間接的通過調用CATIA類的對象和屬性,利用對象的方法和屬性來獲取、設置及處理數據。不足之處在于這種方法功能有限制,但入門輕松[6],比如可以采用API函數進行調用。Application對象結構圖如圖2所示。
本文在此僅以VB6.0二次開發CATIA為例,敘述CATIA二次開發的一般步驟。通常情況下有以下幾個步驟:
(1)在CATIA中進行CAD建模,初始化COM庫,獲得模板文件。
(2)打開或新建一個全局對象Application。
(3)向Application中加入Document對象,注意類和對象的區別。以實現數據管理,如零件圖設計使用PartDocument,工程圖設計使用DrawingDocument。

圖2 Application對象結構圖
(4)聲明使用的對象,在模板上改寫對應參數,繪制二次開發后的幾何形體。
(5)保存CAD文件,關閉Application,釋放COM庫,關閉VB程序。
根據該程序要實現的功能及所需的輸入參數,可編制程序的運行界面如圖3所示。在這里坐標系采用y軸坐標為巡航方向,從機頭指向機尾的方向為正方向;x軸沿展向,指向艙門左側為正方向;z軸由x軸和y軸按右手法則確定。
為了實現飛機機身零部件的參數化設計系統,將該系統劃分為一個主模塊和若干個子模塊:
1)長桁類零件的設計
2)隔板類零件的設計
3)蒙皮類零件的設計
4)艙門類零件的設計
5)其他機身零件的設計
程序總體結構如圖4所示。

圖3 程序的運行界面

圖4 程序的總體結構
程序主界面程序是按照應用人員要求輸入符合國家、企業標準的3D零件圖的參數,經過程序內運算得到宏程序參數。
獲取保存路徑界面程序是為了方便應用人員,將生成的宏程序和零件圖按照自定義的宏程序文件名稱、宏程序文件格式、零件名稱、零件格式到應用人員指定的路徑進行保存,并按照經過程序主界面運算得到的宏程序參數,傳入至宏文件中,生成符合應用人員的宏程序文件和零件圖。
從任務的角度來解釋,不同的零部件有不同的模板,比如長桁零件中的截面長度、高度、厚度、倒圓和整個零件的長度等工作就對應著不同的零件模板。為了切合使用者的使用情況,為使用者提供準確的數值,令使用者達到滿意,在簡單的操作下將零件圖繪制到符合要求。以長桁為例生成零件圖的步驟如下圖5所示。

圖5 生成零件圖的步驟
CATIA提供了完整的參數化建模及數據管理手段,其參數化設計過程可為產品結構的全部數據提供參數輸入和函數關系式,所有飛機結構理論站位可依靠總體坐標系、飛機總體設計人員發布理論外形面并通過參數轉換生成,直接提供窗框、地板、門框、前起后端框、前起艙側壁的骨架模型元素,并提取與理論外形相關的站位布局。機頭結構布置設計首先要解決全局理論數據和結構站位的協調關系,確定全過程設計需求的特征面, 特征線、特征點。然后為模型建立一個總的布局樹,結構站位遞歸關系一目了然。這樣既為后續關聯設計骨架模型定義打下基礎,也可以有效防止數據的循環引用,使錯誤數據鏈的發生概率降到最低,同時也能快速響應上游總體專業參數化理論外形的設計變化,實現飛機結構方案設計階段上下游專業設計輸入與輸出之間更改影響的自動傳遞、自動更新,保證設計數據的有效性、唯一性和一致性。
(1)讀取分析宏程序內的參數
打開錄制的宏程序文件,查找文件內有利用價值的參數值。機身信息如表1所示。

表1 機身信息
(2)讀取分析宏程序編譯規則
根據V5Automation.chm分析宏程序編譯規則;
例如:圓弧的定義
Func CreateCircle( double iCenterX,
double iCenterY,
double iRadius,
double iStartParam,
double iEndParam) As Circle2D
進行創建并返回一個2D圓弧
(3)讀取分析剩余未確定數值函數表達式
分析出已有確切數值后,對未確切數值進行分析,建立對應的函數表達式。
(4)將確切數值及表達式轉換成VB語言
為使程序能夠正常運行,進行將所有參數值利用表達式轉換成VB程序語言,需要進行格式的統一,便于CATIA軟件的識別。對于復雜函數,利用變量進行運算。在部分處理中,VB中沒有直接的數學函數表達式,采用自編函數的方式進行解決,比如arcsin函數。同樣地,創建的平面和拉伸的凸臺與凹槽的距離,是不能確定的值,也不能利用函數進行表達,但可以利用判斷更改其值。所以針對該種參數值編寫函數進行表達。
在使用VB應用程序時,可以使用以下語法:
(1)如果CATIA已經在運行,那么宏應該使用GetObject方法連接到CATIA。
(2)如果CATIA還沒有運行,宏應該使用CreateObject方法啟動CATIA。
一般把兩種方法合在一起,這樣訪問CATIA的時候就不會出問題。
(1)得到一個未使用的文件號
Dim FileNumber1, FileNumber2, Stri As String
FileNumber1 = FreeFile '
(2)打開要讀取的文件
Open App.Path & "/macro737-0005-parts1_I.CATScript" For Input As #FileNumber1 ' FileNumber2 = FreeFile
(3)打開要寫入的文件
Open Dir1.Path & "/" & Text2.Text & Combo1.Text For Output As #FileNumber2 '
(4)按行讀取文件,直到最后一行
Line Input #FileNumber1, Stri '
While Not EOF(1) '
(5)'寫入替換后的內容
Print #FileNumber2, Stri
(6)關閉文件
當程序將參數的運算結果傳入宏程序文件后,按照模板進行更改參數,利用語句進行在CATIA環境中自動打開指定路徑的宏程序文件。繪制的機頭零部件圖如圖6所示。

圖6 機頭零部件圖
CATIA的二次開發在開發完成后,需要應用人員利用圖紙在程序中查找相對應類型的零部件,將零件圖圖紙的參數,輸入至程序中,按照規定的步驟即可得到符合要求的三維機身零件圖。同時完善二次開發相關功能使用戶體驗佳。
本文以CATIA二次開發的問題為導向,提高效率為目標,設計了程序,并采用CATIA和VB進行實現。希望本探索能有效地幫助設計人員高效率地開展零部件設計的工作。