馮康佳, 張亦弛, 劉 樂
(深海載人裝備國家重點實驗室, 江蘇 無錫 214082)
隨著船舶行業轉型升級的加速,減少重復性勞動、提高工作效率的需求非常迫切。在船舶三維建模中,舵、翼、舵踵具有相對規則的形狀,便于參數化表達,因而非常適合于固化方法參數化建模。但是,在方案評估中,因CATIA功能限制,對船體濕表面積、排水量、船形參數等的統計往往通過手動量取計算。在整個船舶設計過程中,可能需要多次建模與評估,重復性的工作枯燥低效,迫切需要改進方法來消除。CATIA雖然無法直接提供上述功能,但是提供了串行通信端口(Cluster Communication Port, COM接口)和分布式組件對象模型(Microsoft Distributed Component Object Model, DCOM)接口用于用戶特殊需求的定制,支持從腳本到VB編程語言(Visual Basic, VB)、Microsoft Visual C++(VC)、Delphi等通用開發工具。國內的相關應用常見報道:劉智強等[1]使用VB.NET對CATIA進行開發,建立三維參數化設備庫原型系統,實現三維參數化驅動的船載設備模型庫的構建;徐俊路等[2]對球首參數化設計進行二次開發,可以通過輸入參數快速生成球首;曹晶等[3]開發船舶靜水力計算軟件,實現自動提取實體模型信息,并應用這些信息進行靜水力計算。CATIA二次開發具有強大的生命力和實用性,具有非常廣闊的應用前景[4-5]。采用VB對CATIA進行二次開發,可以快速創建舵曲面和統計船形參數,簡單易用,高效精確。
CATIA二次開發方法主要分為進程內和進程外訪問。進程外訪問中,CATIA不調用腳本文件,而是作為一個對象連接與嵌入(Object Linking and Embedding, OLE)自動化服務器,通過COM接口被外部程序控制[3-5]。使用VB 6.0作為開發環境,調用CATIA函數庫實現對其的各種操作。此外,程序還引用EXCEL庫,可以方便地將主尺度參數直接導出生成Excel文件,便于后續分析。運用VB編寫程序并設計界面,在界面中直接輸入參數和數據。
在舵的設計中,翼型是關鍵參數。在軟件開發中,可以將美國國家航空咨詢委員會(National Advisory Committee for Aeronautics, NACA)、茹科夫斯基、JFS系列等常見翼型和自研翼型編入程序。這樣可以在界面中直接選取,避免型值計算、導入和創建曲面等過程,減少人為出錯,提高建模效率。在界面中輸入弦長、展長、偏移距離等舵參數,還可以添加舵踵,即可實現對整個舵建模的控制。舵參數化建模流程及關鍵函數如圖1所示,程序輸入界面如圖2所示。

圖1 舵參數化建模流程及關鍵函數

圖2 舵參數化建模程序輸入界面
在程序中創建多個常用函數,多處引用,以簡化代碼、提高可讀性、減少出錯。以創建對稱函數Symmetry為例,介紹函數創建與引用,其代碼如下:
‘-----創建對稱函數--------
Sub Symmetry(Spline1, PlaneZX, HBodyC)
’函數三個參數依次是對稱的幾何形狀、對稱平面和對稱形狀插入到的幾何圖形集
Set referenceTem = part1.
CreateReferenceFromObject(Spline1)
Set hybridShapeSymmetry1 = hybridShapeFactory1.
AddNewSymmetry(referenceTem, PlaneZX)
’創建關于ZX平面對稱形狀
hybridShapeSymmetry1.VolumeResult = False
HBodyC.AppendHybridShape hybridShapeSymmetry1’
將對稱形狀插入某幾何圖形集
End Sub
其引用方式如下:
Symmetry Spline2, PlaneXY, HbodyC2
2.2.1 主尺度參數統計
主尺度參數統計模塊初始化設定界面如圖3所示。在計算之前,應在該模塊中調動CATIA對船體曲面進行預處理,以便于程序進行計算。

圖3 初始化設定界面
將整個船體表面連接成一張曲面,沿中縱剖面分割取其一半,并對該曲面進行命名(比如hull)。再計算設置模塊,輸入幾何圖形集名、曲面名和工作目錄等參數,選擇打開或者使用當前CATIA文件,點擊讀入參數即可獲得曲面的長、寬、高等基本參數。工作目錄是舵Part文件和主尺度參數導出的文件位置。程序首先通過Item()函數獲得該曲面所在幾何圖形集名稱和曲面名稱,得到該曲面的句柄(見關鍵代碼中的reference_hull)。對該曲面進行修復,對稱、合并、封閉曲面得到整船封閉實體(見關鍵代碼中的referenceHullWhole),便于后續測量濕表面積和排水量等參數,其中的關鍵代碼如下:
‘修復船體曲面,消除小間隙,提高曲面質量
Set hybridShapeHealing1 = HSF1.
AddNewHealing(reference_hull)
‘對稱船體曲面
Set hybridShapeSymmetry1 = HSF1.
AddNewSymmetry(referenceHealing1, PlaneZX)
‘合并船體曲面
Set hybridShapeAssemble1 = HSF1.
AddNewJoin(RefHealing1, RefSymmetry1)
’創建船體實體
Set referenceTem = part1.CreateReferenceFromName(“”)
Set closeSurface1 = shapeFactory1.
AddNewVolumeCloseSurface(referenceTem)
Set reference Assemble1 = part1
.CreateReferenceFromObject(hybridShapeAssemble1)
closeSurface1.Surface = reference Assemble1
Set referenceHullWhole = part1.
CreateReferenceFromObject(closeSurface1)
‘referenceHullWhole:整船實體
船體主尺度參數統計流程如圖4所示。

圖4 船體主尺度參數統計流程
在界面中輸入吃水高度、船殼厚度、海水密度和中縱剖面坐標,然后點擊計算并導出,即可實現對船體多參數的自動計算、顯示和導出。通過設定海水密度,計算特定海水密度下的排水量。輸入吃水高度得到船體水上水下排水量、重心坐標、濕表面積等參數。根據需要,還可擴充統計參數的種類,進行某些計算,為船體性能評估提供較大便利。船體主尺度參數統計關鍵代碼如下:
Set myMeasure = theSPAWorkbench.
GetMeasurable(referenceHullWhole)‘測量船體實體
HullArea(0) = myMeasure.Area’船體濕表面積
HullVol(0) = myMeasure.Volume’船體排水量
myMeasure.GetCOG Cog‘船體重心坐標
Set hybridShapeSplit1 = HSF1.
AddNewHybridSplit(referenceHullWhole, referenceWL,-1)’將船體沿水線分割成水上水下實體,referenceWL水線平面
Set myMeasure = theSPAWorkbench.
GetMeasurable(referenceSplitDown)’測量水下實體,referenceSplitDown:水下船體實體
2.2.2 船形參數統計
船體船形參數統計界面如圖5所示。

圖5 船體船形參數統計界面
[][]
在該界面中,設定ListView控件用于實時顯示主尺度參數。例如鋼船的型表面是內表面,計算排水量時需要考慮船殼厚度,對ListView控件顯示控制的代碼如下:
ListView2.ListItems(2).SubItems(4) = “考慮船殼厚度排水量/t”
ListView2.ListItems(2).SubItems(i) = Str$(Format((HullArea(0) * ST + HullVol(0)) * SeaRho,“0.00”))
‘HullArea(0):濕表面積,ST:船殼厚度,HullVol(0):排水體積,SeaRho:海水密度
通過下列代碼可以將方形系數寫入Excel文件中,并自動命名,便于后續處理。
xlsWorksheet.Cells(1, 7).Value = “方形系數”
xlsWorksheet.Cells(1, 8).Value = HullVol(0)/xLen/yLen/zLen
‘HullVol(0):排水體積,xLen、yLen、zLen分別是型長、型寬、型高
采用某船形(見圖6)對上述方法和程序進行驗證,在圖3所示的主尺度計算設置模塊對話框中進行參數的讀入,在圖5所示的船體船形界面輸入相關參數,即可顯示并導出整船的多種船形參數。該方法簡單便捷、高效精確,為多方案比較與評估提供較大的方便。

圖6 某船形主體模型
使用VB對CATIA進行二次開發,介紹程序思想和關鍵代碼,可為相關程序的開發提供參考。該程序實現對舵曲面的快速建模和船形參數的快速獲取。該方法具有界面清晰、高效可靠的特點,凸顯出解決實際問題的強大能力。在整個設計生產過程中,可重復性強,當方案改變后,可快速完成建模與評估,使得科研設計人員可輕松面對多型號或多個設計過程中的建模與評估任務。