胡 江, 秦江濤
(1.武漢理工大學(xué) 高性能艦船技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室, 湖北 武漢 430063; 2.武漢理工大學(xué) 交通學(xué)院, 船舶、海洋與結(jié)構(gòu)工程系, 湖北 武漢 430063)
?
基于VBA的結(jié)構(gòu)有限元建模命令流自動(dòng)生成方法
胡江1,2, 秦江濤1,2
(1.武漢理工大學(xué) 高性能艦船技術(shù)教育部重點(diǎn)實(shí)驗(yàn)室, 湖北 武漢 430063; 2.武漢理工大學(xué) 交通學(xué)院, 船舶、海洋與結(jié)構(gòu)工程系, 湖北 武漢 430063)
摘要針對(duì)目前船舶結(jié)構(gòu)有限元分析建模方法存在的不足,采用VBA編程方法對(duì)船舶設(shè)計(jì)軟件Maxsurf進(jìn)行二次開(kāi)發(fā),能自動(dòng)提取Maxsurf數(shù)據(jù)庫(kù)中肋骨、艙壁、甲板的空間位置坐標(biāo)數(shù)據(jù),并快捷地轉(zhuǎn)換為可在ANSYS、Patran等有限元軟件上執(zhí)行的APDL或PCL參數(shù)化建模命令流文件。相關(guān)實(shí)例表明該方法能顯著提高建模及相關(guān)修改工作的效率。
關(guān)鍵詞結(jié)構(gòu)有限元建模二次開(kāi)發(fā)命令流VBAMaxsurf
Automatic Generation of Parametric Command Flow for FEM Modeling of Structure Based on VBA Method
HU Jiang1,2, QIN Jiang-tao1,2
(1.Key Laboratory of High Performance Ship Technology of Ministry of Education, Wuhan University of Technology, Wuhan Hubei 430063, China; 2.Departments of Naval Architecture, Ocean and Structural Engineering, School of Transportation, Wuhan University of Technology, Wuhan Hubei 430063, China)
AbstractAiming at the problems existing in current FEM modeling of ship structure,secondary development work using VBA for the ship design software Maxsurf has been done, by which the space coordinate dat of frame shape points, bulkhead and deck can be automatic extracted and convered to the APDL or PCL command flow file which can be run on the FEM software like ANSYS or Patran. Related examples show that the method can significantly improve the efficiency of modeling and the related modification work.
Keywords FEM modeling of ship structureSecondary developmentCommand flowVBAMaxsurf
0引言
由于精度高、實(shí)用性強(qiáng)以及行業(yè)的普遍認(rèn)可,船舶結(jié)構(gòu)有限元分析被廣泛應(yīng)用于各類船舶的結(jié)構(gòu)計(jì)算中。其中船體結(jié)構(gòu)建模是有限元分析最基礎(chǔ)的工作,但由于船體外形復(fù)雜、內(nèi)部構(gòu)件繁多,該工作耗時(shí)長(zhǎng)且易出錯(cuò)。因此采用編程手段,對(duì)建模工作進(jìn)行自動(dòng)化處理就顯得尤為必要。
目前船體結(jié)構(gòu)有限元建模一般采取兩種方法。第一種方法是利用初步設(shè)計(jì)或詳細(xì)設(shè)計(jì)階段在其他船舶設(shè)計(jì)軟件中建好的船體模型,將其轉(zhuǎn)換成IGS、STEP等標(biāo)準(zhǔn)格式導(dǎo)入有限元軟件中,再在模型上切割出肋骨線、縱桁線等結(jié)構(gòu)線段。該方法省時(shí)快捷,但要對(duì)船體面進(jìn)行多次切割,且在模型的轉(zhuǎn)換和切割過(guò)程中常會(huì)出現(xiàn)模型拓?fù)湫畔G失、幾何信息錯(cuò)誤(如面的破損等)等情況,導(dǎo)致后續(xù)網(wǎng)格劃分、計(jì)算等無(wú)法進(jìn)行。第二種方法是在結(jié)構(gòu)有限元分析前處理模塊中,通過(guò)圖形界面或手工輸入命令流的建模方式生成船體模型。該方法生成的模型精度好且無(wú)需對(duì)模型進(jìn)行二次轉(zhuǎn)換處理,但由于需要手工輸入型值數(shù)據(jù),工作繁瑣、耗時(shí)長(zhǎng)且容易出現(xiàn)錯(cuò)誤。
為了充分發(fā)揮上述方法各自的優(yōu)點(diǎn),克服其不足,本文采用VBA(Visual Basic for Applications,簡(jiǎn)稱VBA)開(kāi)發(fā)的程序?qū)崿F(xiàn)了既能充分利用船舶設(shè)計(jì)軟件Maxsurf中的船體三維模型數(shù)據(jù),又能自動(dòng)生成相應(yīng)有限元計(jì)算所需的船體建模命令流文件的功能,從而達(dá)到了快捷參數(shù)化建模與修改的目的。
1開(kāi)發(fā)背景與思路
1.1Maxsurf 簡(jiǎn)介
Maxsurf是澳大利亞Formation Design Systems公司開(kāi)發(fā)的船舶設(shè)計(jì)建造軟件中的建模模塊。2011年該軟件成為Bently工程軟件中的一員,其主要優(yōu)勢(shì)在于強(qiáng)大的NURB(非均勻有理B樣條)曲面建模能力、與Word、AutoCAD、Excel等通用軟件良好的數(shù)據(jù)交換能力,以及實(shí)時(shí)快捷的水動(dòng)力性能計(jì)算能力,在國(guó)內(nèi)外諸多高校、科研院所、制造企業(yè)中有著廣泛的應(yīng)用。
1.2Maxsurf二次開(kāi)發(fā)構(gòu)架與方法
目前國(guó)內(nèi)外針對(duì)Maxsurf二次開(kāi)發(fā)均展開(kāi)了相關(guān)工作。國(guó)外主要是將各種多目標(biāo)遺傳優(yōu)化算法如NSGA-II、EASDS等通過(guò)二次開(kāi)發(fā)嵌入Maxsurf中,進(jìn)行船型的水動(dòng)力優(yōu)化工作[1、2];國(guó)內(nèi)則主要進(jìn)行數(shù)據(jù)轉(zhuǎn)換接口的二次開(kāi)發(fā)[3、4]以及系列船型的仿射變換[4、5]。
Maxsurf 自身并無(wú)二次開(kāi)發(fā)的工具,但提供了二次開(kāi)發(fā)的接口,使得其他程序如Excel、Access、AutoCAD可以通過(guò)接口得到所需要的數(shù)據(jù)。該方法核心是微軟所推行的COM(Component Object Model)組件對(duì)象模型技術(shù)[6],其實(shí)質(zhì)是允許一個(gè)應(yīng)用程序操作另一個(gè)應(yīng)用程序[2],[7]。基于該技術(shù)開(kāi)發(fā)的程序或系統(tǒng)具有開(kāi)放性好、易升級(jí)、易維護(hù)、易擴(kuò)展、與平臺(tái)及語(yǔ)言無(wú)關(guān)等特點(diǎn)。
COM是面對(duì)對(duì)象的軟件模型,因而對(duì)象是它的基本要素之一。本文的開(kāi)發(fā)工作就是通過(guò)編程語(yǔ)言對(duì)應(yīng)用程序Maxsurf中對(duì)象(Object)的操控來(lái)實(shí)現(xiàn)的。在Maxsurf中,對(duì)象具體指代的是surface(面)、control point(控制點(diǎn))、marker(標(biāo)記點(diǎn))這些可以定義船體模型的元素,每一個(gè)對(duì)象都包含“特性”(Properties)和“方法”(Methods)兩種屬性,其中,“特性”是用來(lái)存儲(chǔ)類如名稱、型值之類的常量,“方法”是指一些允許對(duì)對(duì)象進(jìn)行操控的函數(shù)[6]。
對(duì)象本身不可被外部程序直接訪問(wèn),但Maxsurf通過(guò)把開(kāi)放對(duì)象的“特性”與“方法”給外部程序,就可以使用許多與COM組件技術(shù)兼容的程序語(yǔ)言(如Matlab、Visual Basic、C++和Java等)來(lái)定義、存取和修改對(duì)象,進(jìn)而達(dá)到控制船體模型、獲取相關(guān)數(shù)據(jù)信息的目的。
Maxsurf是以層級(jí)結(jié)構(gòu)來(lái)組織對(duì)象的,其頂層對(duì)象是Application,其余所有對(duì)象都直接或間接與之關(guān)聯(lián)[6]。圖1以對(duì)象Application為例,展示了部分對(duì)象之間的層級(jí)結(jié)構(gòu)關(guān)系(限于篇幅,圖中只對(duì)對(duì)像Design作了展開(kāi))。
圖1 “對(duì)象”層級(jí)結(jié)構(gòu)圖
各對(duì)象之間的結(jié)構(gòu)關(guān)系,在開(kāi)發(fā)代碼中語(yǔ)言的組織順序里也有體現(xiàn),下面以一段賦值代碼為例進(jìn)行說(shuō)明。
(1) Dim msApp as Maxsurf Modeler.Application;
(2) Dim i%;
(3) Set msApp=New Maxsurf Modeler.Application;
(4) i=msApp.Design.FrameOfReference.DatumWL。
其中(1)、(2)、(3)行代碼是基本的定義語(yǔ)句,代碼(4)實(shí)現(xiàn)了將水線高度值賦給參數(shù)i的功能,可以很清楚地看到代碼(4)中各對(duì)象與圖1中相關(guān)對(duì)象相一致的結(jié)構(gòu)層級(jí)關(guān)系。
2命令流生成程序?qū)崿F(xiàn)過(guò)程
2.1開(kāi)發(fā)環(huán)境
本文選擇了Excel VBA開(kāi)發(fā)環(huán)境,主要基于以下幾點(diǎn):(1) VBA語(yǔ)言雖然在運(yùn)行速度上不及C++之類的語(yǔ)言,但初步設(shè)計(jì)或詳細(xì)設(shè)計(jì)階段船體模型數(shù)據(jù)類型單一,也不包含復(fù)雜的生產(chǎn)加工信息,VBA可勝任此類數(shù)據(jù)的提取和轉(zhuǎn)換工作;(2) 以Excel作為數(shù)據(jù)傳遞的媒介,符合日常工作習(xí)慣,也便于后續(xù)數(shù)據(jù)處理工作;(3) VBA語(yǔ)言相對(duì)簡(jiǎn)單,且不用做封裝處理,便于使用者修改代碼,實(shí)現(xiàn)符合自身需求的功能。
2.2程序開(kāi)發(fā)簡(jiǎn)述
2.2.1庫(kù)文件的引用
在Excel環(huán)境下要實(shí)現(xiàn)與Maxsurf數(shù)據(jù)庫(kù)的連接,可使用前期聯(lián)編方法或后期聯(lián)編方法。與后期聯(lián)編相比,前期聯(lián)編的代碼運(yùn)行速度更快且代碼錯(cuò)誤在編譯階段就可以被自動(dòng)識(shí)別,要使用前期聯(lián)編方法首先需在VB編輯器的引用中加Maxsurf 庫(kù)文件,即在引用對(duì)話框中對(duì)“Bentley Moderler 1.1 Automation Library”勾選,如圖2所示。
圖2 Maxsurf庫(kù)文件的引用
圖3 程序流程圖
2.2.2程序主要步驟與流程圖
程序主要的步驟與流程如下(流程圖見(jiàn)圖3)。
(1) 載入Maxsurf模型并調(diào)整精度;
(2) Mlist命令提取型值點(diǎn)空間坐標(biāo)數(shù)據(jù);
(3) 空間坐標(biāo)數(shù)據(jù)遍歷賦值,輸出至Excel表格并轉(zhuǎn)換成命令流文件;
(4) 命令流數(shù)據(jù)導(dǎo)入ANSYS或Patran生成模型。
2.2.3程序關(guān)鍵代碼
限于篇幅,下面只對(duì)提取型值數(shù)據(jù)的VBA代碼與生成命令流的VBA代碼進(jìn)行說(shuō)明。
(1) For i = 1 To count 'msDesign.markers.count;
(2) Coord(0) = mList(i).Position;
(3) Coord(1) = mList(i).Offset;
(4) Coord(2) = mList(i).Height;
(5) Range("A" & i + 1) =i;
(6) Range("B"&i + 1) =Format(Coord(0), "#0.00";
(7) Range("C"&i + 1) =Format(Coord(1), "#0.00";
(8) Range("D"&i + 1) =Format(Coord(2), "#0.00" 。
第(1)行代碼是對(duì)型值點(diǎn)進(jìn)行遍歷。第(2)、(3)、(4)行代碼分別將型值點(diǎn)的Position(縱向坐標(biāo))、Offset(橫向坐標(biāo))、Height(高度坐標(biāo))賦給含有3個(gè)元素的數(shù)組Coord(),由于mlist命令會(huì)自動(dòng)對(duì)型值點(diǎn)按縱向坐標(biāo)和高度坐標(biāo)從小到大排列,因此我們不用另行編程對(duì)其進(jìn)行排序。第(5)行代碼是為了給型值點(diǎn)編號(hào),以利于后續(xù)的命令流生成工作。第(6)、(7)、(8)行代碼則實(shí)現(xiàn)了將數(shù)組Coord()的三個(gè)元素依次填入Exel表格的功能。
接下來(lái)要生成命令流文件,首先應(yīng)參照APDL或PCL命令流中創(chuàng)建型值點(diǎn)的格式,來(lái)決定如何在代碼中嵌入APDL或PCL命令。
ANSYS軟件結(jié)構(gòu)模塊中創(chuàng)建型值點(diǎn)的命令流格式:/prep7;K,2,0,2.8,187.6……,其中,K命令后面第一位數(shù)字代表節(jié)點(diǎn)編號(hào),后面三個(gè)數(shù)字代表型值點(diǎn)的三維坐標(biāo)。Patran軟件中結(jié)構(gòu)模塊創(chuàng)建型值點(diǎn)的命令流格式:asm_const_grid_xyz("1", "[-172 0 0]",……,中括號(hào)內(nèi)數(shù)字是型值點(diǎn)的三維坐標(biāo)。據(jù)此我們可以用下面的VBA代碼實(shí)現(xiàn)命令流的自動(dòng)生成功能(以生成ANSYS APDL命令流為例):
(1) Set sFile = fso.Create Text File (FileName);
(2) sFile.WriteLine ("/prep7");
(3) sFile.WriteBlankLines (1);
(4) For s = 2 To _ Sheet1. Range("A65536"). End(xlUp). Row;
(5) sFile. Write Line ("k") _ & "," & (Sheet1. Cells(s,1). Value _& "," & Sheet1. Cells(s, 2).Valu _& "," & Sheet1. Cells(s, 3).Value _& "," & Sheet1. Cells(s, 4). Value);
(6) Next s。
圖4 程序界面圖
第(1)行代碼創(chuàng)建了一個(gè)記事本文件,第(2)行代碼嵌入了APDL命令中的進(jìn)入前處理器的命令,第(3)行代碼寫(xiě)入了一個(gè)空白行作為間隔,第(4)、(5)、(6)行代碼則實(shí)現(xiàn)了將Exel表格中的第1至4列數(shù)據(jù)以及APDL命令中創(chuàng)建關(guān)鍵點(diǎn)命令K寫(xiě)入記事本文件的功能。
2.2.4程序界面
在Excel中生成的程序界面如圖4所示。由5個(gè)面板組成,雙擊面板即可執(zhí)行相應(yīng)命令,如需修改或另行嵌入APDL或PCL命令,切換到Excel內(nèi)置的VB編輯器中對(duì)應(yīng)代碼進(jìn)行修改即可。
3實(shí)例介紹
下面以一條總長(zhǎng)為108 m的橫骨架式散貨船的整船建模為例,對(duì)開(kāi)發(fā)程序進(jìn)行說(shuō)明。圖5是該船在Maxsurf中建好的三維模型,圖6是該船的肋骨型線圖。
圖5 Maxsurf中的三維模型圖
圖6 肋骨型線圖
在圖4所示的界面中,點(diǎn)擊載入msd文件(msd文件是Maxsurf模型的專用格式),在彈出的窗口中選擇該散貨船的模型,打開(kāi)后進(jìn)行精度調(diào)整,型值生成、提取、轉(zhuǎn)換工作后可得命令流文件(見(jiàn)圖7)。將命令流導(dǎo)入ANSYS 結(jié)構(gòu)模塊運(yùn)行后,即可生成船體結(jié)構(gòu)建模所需要的關(guān)鍵點(diǎn),如圖8所示(船體左右對(duì)稱,故只顯示一半模型),可以看出采用該方法船體、艙壁、甲板的數(shù)據(jù)點(diǎn)都可以很好地傳遞到ANSYS中。
模型數(shù)據(jù)點(diǎn)建好后,對(duì)照Excel數(shù)據(jù)表中的節(jié)點(diǎn)編號(hào),在生成的命令流中加入循環(huán)、賦屬性、定義邊界條件、加載載荷等語(yǔ)句即可快速建立模型并進(jìn)行計(jì)算分析。
圖7 命令流文件
圖8 模型關(guān)鍵點(diǎn)的生成
4結(jié)語(yǔ)
本文采用的基于VBA與COM組件技術(shù)的開(kāi)發(fā)方法不僅適用于Maxsurf軟件,對(duì)于所有支持COM組件技術(shù)的常用軟件如AutoCAD、Office,均可采用這種方法來(lái)“定制”出自己所想要的功能。
對(duì)常用的行業(yè)軟件進(jìn)行二次開(kāi)發(fā),不僅在于能顯著提高學(xué)習(xí)和工作效率,更重要的是能幫助開(kāi)發(fā)者深入理解國(guó)外先進(jìn)軟件的內(nèi)部組織架構(gòu)及其二次開(kāi)發(fā)接口的設(shè)計(jì)方法理念,這對(duì)開(kāi)發(fā)國(guó)產(chǎn)的優(yōu)秀行業(yè)軟件是很有幫助的。
本方法目前對(duì)橫骨架式船型和縱骨架式船型均適用,能將常規(guī)方法中耗費(fèi)數(shù)天的數(shù)據(jù)輸入建模工作縮短至數(shù)分鐘,尤其適合于結(jié)構(gòu)計(jì)算中的多方案比較以及設(shè)計(jì)修改引起的重新計(jì)算工作。但值得指出的是,目前程序中縱骨架式船型的縱骨位置數(shù)據(jù)尚需人工輸入,這主要是由于縱骨布置的位置數(shù)據(jù)往往要到詳細(xì)設(shè)計(jì)階段的中后期才能得到,且目前尚未見(jiàn)到有定位于初步設(shè)計(jì)、詳細(xì)階段的船舶設(shè)計(jì)軟件能將縱骨布置功能很好地融入到前期的三維船型設(shè)計(jì)中,導(dǎo)致相關(guān)數(shù)據(jù)不足,因此可以以此為出發(fā)點(diǎn),進(jìn)行后續(xù)的研究工作。
參考文獻(xiàn)
[1]Hafez K A, El-Kot A A. Comparative investigation of the stagger variation influence on the hydrodynamic interference of high speed trimaran[J]. Alexandria Engineering Journal, 2012, 51(3): 153-169.
[2]Ayob A F, Ray T, Smith W F. A Framework for Scenario-Based Hydrodynamic Design Optimization of Hard Chine Planing Craft[C].Proceedings of the 9th International Conference in Computer and IT Applications in the Maritime Industries, 2014.
[3]黃金鋒.船型設(shè)計(jì)與性能分析系統(tǒng)數(shù)據(jù)接口設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)艦船研究, 2012, 7(1):95-99.
[4]司南.基于設(shè)計(jì)軟件集成平臺(tái)的游艇外型與型線協(xié)調(diào)性研究[D]. 武漢:武漢理工大學(xué), 2013.
[5]李杰. 三維船體庫(kù)系統(tǒng)的研究與設(shè)計(jì)[D]. 大連:大連海事大學(xué), 2008.
[6]Maxsurf Modeler Automation Manual[Z]. Bentley Systems, Incorporated, Windows Version 18,2012.
[7]李詠紅. CAD二次開(kāi)發(fā)方法研究與實(shí)現(xiàn)[D]. 成都:電子科技大學(xué), 2004.
[8]蔣毅文. Maxsurf及相關(guān)設(shè)計(jì)程序在船舶設(shè)計(jì)中的應(yīng)用[J]. 船海工程, 2005(4):39-41.
[9]李平書(shū), 嚴(yán)家文, 任鴻. 船舶結(jié)構(gòu)有限元模型快速生成研究[J]. 船舶, 2007(4):52-55.
[10]金建海.船舶CAE前后處理系統(tǒng)研制[D]. 無(wú)錫:江南大學(xué), 2012.
中圖分類號(hào)U662
文獻(xiàn)標(biāo)志碼A
作者簡(jiǎn)介:胡江(1988-),男,碩士生,研究方向?yàn)榇八畡?dòng)力性能與船型研究。
基金項(xiàng)目:國(guó)家自然科學(xué)基金項(xiàng)目(編號(hào):51409201);中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)基金(編號(hào):2015IVA029)。