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