馮康佳, 張亦弛, 劉 樂
(深海載人裝備國家重點(diǎn)實(shí)驗(yàn)室, 江蘇 無錫 214082)
隨著船舶行業(yè)轉(zhuǎn)型升級的加速,減少重復(fù)性勞動、提高工作效率的需求非常迫切。在船舶三維建模中,舵、翼、舵踵具有相對規(guī)則的形狀,便于參數(shù)化表達(dá),因而非常適合于固化方法參數(shù)化建模。但是,在方案評估中,因CATIA功能限制,對船體濕表面積、排水量、船形參數(shù)等的統(tǒng)計(jì)往往通過手動量取計(jì)算。在整個船舶設(shè)計(jì)過程中,可能需要多次建模與評估,重復(fù)性的工作枯燥低效,迫切需要改進(jìn)方法來消除。CATIA雖然無法直接提供上述功能,但是提供了串行通信端口(Cluster Communication Port, COM接口)和分布式組件對象模型(Microsoft Distributed Component Object Model, DCOM)接口用于用戶特殊需求的定制,支持從腳本到VB編程語言(Visual Basic, VB)、Microsoft Visual C++(VC)、Delphi等通用開發(fā)工具。國內(nèi)的相關(guān)應(yīng)用常見報道:劉智強(qiáng)等[1]使用VB.NET對CATIA進(jìn)行開發(fā),建立三維參數(shù)化設(shè)備庫原型系統(tǒng),實(shí)現(xiàn)三維參數(shù)化驅(qū)動的船載設(shè)備模型庫的構(gòu)建;徐俊路等[2]對球首參數(shù)化設(shè)計(jì)進(jìn)行二次開發(fā),可以通過輸入?yún)?shù)快速生成球首;曹晶等[3]開發(fā)船舶靜水力計(jì)算軟件,實(shí)現(xiàn)自動提取實(shí)體模型信息,并應(yīng)用這些信息進(jìn)行靜水力計(jì)算。CATIA二次開發(fā)具有強(qiáng)大的生命力和實(shí)用性,具有非常廣闊的應(yīng)用前景[4-5]。采用VB對CATIA進(jìn)行二次開發(fā),可以快速創(chuàng)建舵曲面和統(tǒng)計(jì)船形參數(shù),簡單易用,高效精確。
CATIA二次開發(fā)方法主要分為進(jìn)程內(nèi)和進(jìn)程外訪問。進(jìn)程外訪問中,CATIA不調(diào)用腳本文件,而是作為一個對象連接與嵌入(Object Linking and Embedding, OLE)自動化服務(wù)器,通過COM接口被外部程序控制[3-5]。使用VB 6.0作為開發(fā)環(huán)境,調(diào)用CATIA函數(shù)庫實(shí)現(xiàn)對其的各種操作。此外,程序還引用EXCEL庫,可以方便地將主尺度參數(shù)直接導(dǎo)出生成Excel文件,便于后續(xù)分析。運(yùn)用VB編寫程序并設(shè)計(jì)界面,在界面中直接輸入?yún)?shù)和數(shù)據(jù)。
在舵的設(shè)計(jì)中,翼型是關(guān)鍵參數(shù)。在軟件開發(fā)中,可以將美國國家航空咨詢委員會(National Advisory Committee for Aeronautics, NACA)、茹科夫斯基、JFS系列等常見翼型和自研翼型編入程序。這樣可以在界面中直接選取,避免型值計(jì)算、導(dǎo)入和創(chuàng)建曲面等過程,減少人為出錯,提高建模效率。在界面中輸入弦長、展長、偏移距離等舵參數(shù),還可以添加舵踵,即可實(shí)現(xiàn)對整個舵建模的控制。舵參數(shù)化建模流程及關(guān)鍵函數(shù)如圖1所示,程序輸入界面如圖2所示。
圖1 舵參數(shù)化建模流程及關(guān)鍵函數(shù)
圖2 舵參數(shù)化建模程序輸入界面
在程序中創(chuàng)建多個常用函數(shù),多處引用,以簡化代碼、提高可讀性、減少出錯。以創(chuàng)建對稱函數(shù)Symmetry為例,介紹函數(shù)創(chuàng)建與引用,其代碼如下:
‘-----創(chuàng)建對稱函數(shù)--------
Sub Symmetry(Spline1, PlaneZX, HBodyC)
’函數(shù)三個參數(shù)依次是對稱的幾何形狀、對稱平面和對稱形狀插入到的幾何圖形集
Set referenceTem = part1.
CreateReferenceFromObject(Spline1)
Set hybridShapeSymmetry1 = hybridShapeFactory1.
AddNewSymmetry(referenceTem, PlaneZX)
’創(chuàng)建關(guān)于ZX平面對稱形狀
hybridShapeSymmetry1.VolumeResult = False
HBodyC.AppendHybridShape hybridShapeSymmetry1’
將對稱形狀插入某幾何圖形集
End Sub
其引用方式如下:
Symmetry Spline2, PlaneXY, HbodyC2
2.2.1 主尺度參數(shù)統(tǒng)計(jì)
主尺度參數(shù)統(tǒng)計(jì)模塊初始化設(shè)定界面如圖3所示。在計(jì)算之前,應(yīng)在該模塊中調(diào)動CATIA對船體曲面進(jìn)行預(yù)處理,以便于程序進(jìn)行計(jì)算。
圖3 初始化設(shè)定界面
將整個船體表面連接成一張曲面,沿中縱剖面分割取其一半,并對該曲面進(jìn)行命名(比如hull)。再計(jì)算設(shè)置模塊,輸入幾何圖形集名、曲面名和工作目錄等參數(shù),選擇打開或者使用當(dāng)前CATIA文件,點(diǎn)擊讀入?yún)?shù)即可獲得曲面的長、寬、高等基本參數(shù)。工作目錄是舵Part文件和主尺度參數(shù)導(dǎo)出的文件位置。程序首先通過Item()函數(shù)獲得該曲面所在幾何圖形集名稱和曲面名稱,得到該曲面的句柄(見關(guān)鍵代碼中的reference_hull)。對該曲面進(jìn)行修復(fù),對稱、合并、封閉曲面得到整船封閉實(shí)體(見關(guān)鍵代碼中的referenceHullWhole),便于后續(xù)測量濕表面積和排水量等參數(shù),其中的關(guān)鍵代碼如下:
‘修復(fù)船體曲面,消除小間隙,提高曲面質(zhì)量
Set hybridShapeHealing1 = HSF1.
AddNewHealing(reference_hull)
‘對稱船體曲面
Set hybridShapeSymmetry1 = HSF1.
AddNewSymmetry(referenceHealing1, PlaneZX)
‘合并船體曲面
Set hybridShapeAssemble1 = HSF1.
AddNewJoin(RefHealing1, RefSymmetry1)
’創(chuàng)建船體實(shí)體
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:整船實(shí)體
船體主尺度參數(shù)統(tǒng)計(jì)流程如圖4所示。
圖4 船體主尺度參數(shù)統(tǒng)計(jì)流程
在界面中輸入吃水高度、船殼厚度、海水密度和中縱剖面坐標(biāo),然后點(diǎn)擊計(jì)算并導(dǎo)出,即可實(shí)現(xiàn)對船體多參數(shù)的自動計(jì)算、顯示和導(dǎo)出。通過設(shè)定海水密度,計(jì)算特定海水密度下的排水量。輸入吃水高度得到船體水上水下排水量、重心坐標(biāo)、濕表面積等參數(shù)。根據(jù)需要,還可擴(kuò)充統(tǒng)計(jì)參數(shù)的種類,進(jìn)行某些計(jì)算,為船體性能評估提供較大便利。船體主尺度參數(shù)統(tǒng)計(jì)關(guān)鍵代碼如下:
Set myMeasure = theSPAWorkbench.
GetMeasurable(referenceHullWhole)‘測量船體實(shí)體
HullArea(0) = myMeasure.Area’船體濕表面積
HullVol(0) = myMeasure.Volume’船體排水量
myMeasure.GetCOG Cog‘船體重心坐標(biāo)
Set hybridShapeSplit1 = HSF1.
AddNewHybridSplit(referenceHullWhole, referenceWL,-1)’將船體沿水線分割成水上水下實(shí)體,referenceWL水線平面
Set myMeasure = theSPAWorkbench.
GetMeasurable(referenceSplitDown)’測量水下實(shí)體,referenceSplitDown:水下船體實(shí)體
2.2.2 船形參數(shù)統(tǒng)計(jì)
船體船形參數(shù)統(tǒng)計(jì)界面如圖5所示。
圖5 船體船形參數(shù)統(tǒng)計(jì)界面
[][]
在該界面中,設(shè)定ListView控件用于實(shí)時顯示主尺度參數(shù)。例如鋼船的型表面是內(nèi)表面,計(jì)算排水量時需要考慮船殼厚度,對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:海水密度
通過下列代碼可以將方形系數(shù)寫入Excel文件中,并自動命名,便于后續(xù)處理。
xlsWorksheet.Cells(1, 7).Value = “方形系數(shù)”
xlsWorksheet.Cells(1, 8).Value = HullVol(0)/xLen/yLen/zLen
‘HullVol(0):排水體積,xLen、yLen、zLen分別是型長、型寬、型高
采用某船形(見圖6)對上述方法和程序進(jìn)行驗(yàn)證,在圖3所示的主尺度計(jì)算設(shè)置模塊對話框中進(jìn)行參數(shù)的讀入,在圖5所示的船體船形界面輸入相關(guān)參數(shù),即可顯示并導(dǎo)出整船的多種船形參數(shù)。該方法簡單便捷、高效精確,為多方案比較與評估提供較大的方便。
圖6 某船形主體模型
使用VB對CATIA進(jìn)行二次開發(fā),介紹程序思想和關(guān)鍵代碼,可為相關(guān)程序的開發(fā)提供參考。該程序?qū)崿F(xiàn)對舵曲面的快速建模和船形參數(shù)的快速獲取。該方法具有界面清晰、高效可靠的特點(diǎn),凸顯出解決實(shí)際問題的強(qiáng)大能力。在整個設(shè)計(jì)生產(chǎn)過程中,可重復(fù)性強(qiáng),當(dāng)方案改變后,可快速完成建模與評估,使得科研設(shè)計(jì)人員可輕松面對多型號或多個設(shè)計(jì)過程中的建模與評估任務(wù)。