黃金鋒
中國艦船研究設(shè)計(jì)中心,湖北武漢 430064
艦船設(shè)計(jì)是一項(xiàng)非常復(fù)雜的工程,涉及眾多的信息系統(tǒng)。如何在嚴(yán)格的流程管控下實(shí)現(xiàn)這些信息系統(tǒng)之間數(shù)據(jù)的共享和交互,以支持并行、協(xié)同的艦船設(shè)計(jì),是一項(xiàng)十分重要的工作。船型設(shè)計(jì)和性能分析就是其中非常重要的一個(gè)環(huán)節(jié)。
當(dāng)前在船型設(shè)計(jì)中常用的軟件是澳大利亞的Maxsurf,它是一套完整的用于船舶設(shè)計(jì)、分析和建造的計(jì)算機(jī)輔助設(shè)計(jì)軟件,其核心模塊是船型設(shè)計(jì)Maxsurf模塊[1]。而性能分析系統(tǒng)則主要使用的是總體設(shè)計(jì)單位自主研發(fā)的Shipcad系統(tǒng),該系統(tǒng)積累了大量基于艦船設(shè)計(jì)規(guī)范和經(jīng)驗(yàn)的,包括靜水力、穩(wěn)性、不沉性及艙容計(jì)算等在內(nèi)的常規(guī)計(jì)算評(píng)估功能。
在艦船設(shè)計(jì)中,為求得最佳船型,需要設(shè)計(jì)人員經(jīng)過多輪方案的更改迭代才能最終確定滿足產(chǎn)品需求的最佳總體方案。然而,由于Maxsurf和Shipcad軟件的底層結(jié)構(gòu)、數(shù)據(jù)格式和開發(fā)環(huán)境的不一致,導(dǎo)致船型設(shè)計(jì)后的結(jié)果無法直接傳遞給Shipcad進(jìn)行性能計(jì)算,需要設(shè)計(jì)人員花費(fèi)大量的時(shí)間和精力對(duì)數(shù)據(jù)進(jìn)行手工提取和整理。
為解決數(shù)據(jù)轉(zhuǎn)換的技術(shù)難題,在進(jìn)行廣泛的討論和深入的研究之后,確定了數(shù)據(jù)接口的技術(shù)解決方案和實(shí)施途徑:首先制定Maxsurf系統(tǒng)向Shipcad系統(tǒng)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的接口文件;然后在Maxsurf系統(tǒng)中提取三維模型數(shù)據(jù),經(jīng)過插值、數(shù)學(xué)變換和數(shù)據(jù)整理后,轉(zhuǎn)換為接口文件規(guī)定的格式;最后導(dǎo)入到Shipcad系統(tǒng),進(jìn)行性能計(jì)算分析。
本文首先詳細(xì)定義了Maxsurf系統(tǒng)與Shipcad系統(tǒng)間數(shù)據(jù)轉(zhuǎn)換的接口文件,通過對(duì)Maxsurf開發(fā)環(huán)境和數(shù)據(jù)結(jié)構(gòu)的研究,開發(fā)了相應(yīng)的數(shù)據(jù)接口軟件,從而實(shí)現(xiàn)了Maxsurf/Shipcad系統(tǒng)間的數(shù)據(jù)共享與轉(zhuǎn)換。
Maxsurf船型設(shè)計(jì)采用一整套用一個(gè)或多個(gè)真正的三維NURBS曲面 (非二維NURBS曲線)進(jìn)行三維船體曲面建模。NURBS曲面模型為:
式中,di,j為控制頂點(diǎn);wi,j為控制頂點(diǎn)的權(quán)因子;Ni,k(u)與 Nj,l(v)分別為 u、v 兩個(gè)方向的 B 樣條基函數(shù);k、l分別為基函數(shù)在u、v兩個(gè)方向的次數(shù)。
在船型曲面的設(shè)計(jì)過程中,要將船型曲面的數(shù)據(jù)傳遞給性能分析系統(tǒng)進(jìn)行計(jì)算評(píng)估以得到合理的方案,必須對(duì)曲面模型進(jìn)行處理,才能供性能分析系統(tǒng)使用。從公式(1)中可以看出,NURBS曲面是用控制點(diǎn)來控制曲面的質(zhì)量,但性能分析系統(tǒng)卻需要用曲面上的擬合點(diǎn)來進(jìn)行計(jì)算評(píng)估。因此,需對(duì)擬合點(diǎn)進(jìn)行數(shù)據(jù)提取與轉(zhuǎn)換。
船體曲面的特點(diǎn)是輪廓形狀復(fù)雜,在曲面內(nèi)部一般還包括部分平面。因此,一些剖面曲線由直線與曲線組成,并且部分剖面曲線凹凸相間,從而導(dǎo)致剖面線存在切點(diǎn)甚至是折點(diǎn),整個(gè)曲面存在折線,容易形成重點(diǎn)等,從而增加了數(shù)據(jù)轉(zhuǎn)換的難度。
目前,Maxsurf船型設(shè)計(jì)模塊支持通用的IGES、DXF格式。這兩種格式可以被AutoCAD、CADDS5、FORAN、TRIBON、CFX、FLUENT 等船舶設(shè)計(jì)分析軟件接收[2]。而性能分析系統(tǒng)Shipcad則只支持IDF、TK、TKG等文本格式的文件,通用的IGES、DXF格式所提供的數(shù)據(jù)均不能直接導(dǎo)入使用。因此,必須建立Maxsurf與Shipcad的接口,提高設(shè)計(jì)和分析的協(xié)同工作效率。
Maxsurf軟件與Shipcad軟件的接口實(shí)際上是實(shí)現(xiàn)數(shù)據(jù)文件的交接,有直接交接和間接交接兩種。直接交接,即Maxsurf軟件的輸出文件直接作為Shipcad軟件的輸入文件,此時(shí)Maxsurf軟件的輸出文件需符合Shipcad軟件的協(xié)議要求;間接交接則是對(duì)Maxsurf軟件的輸出文件進(jìn)行一定的轉(zhuǎn)換后再作為Shipcad軟件的輸入,此時(shí),Maxsurf軟件輸出文件中數(shù)據(jù)的排列可按專門的協(xié)議實(shí)現(xiàn)。本文采用間接交接方式,即建立專門的接口文件,按照約定的協(xié)議進(jìn)行轉(zhuǎn)換。
接口文件是艦船設(shè)計(jì)單位研究確定的作為數(shù)據(jù)轉(zhuǎn)換的文件[3],主要是在Maxsurf系統(tǒng)中提取模型數(shù)據(jù)信息,經(jīng)過插值、變換和整理并存儲(chǔ)在接口文件中,以作為Shipcad的輸入。接口文件除詳細(xì)定義了船名、對(duì)稱與否、設(shè)計(jì)水線長、設(shè)計(jì)水線寬、設(shè)計(jì)吃水、中部型深、水的密度、平均板厚、船殼系數(shù)等外,還對(duì)剖面信息、艏輪廓點(diǎn)、艉輪廓點(diǎn)和邊界點(diǎn)進(jìn)行了詳細(xì)的定義和說明,數(shù)據(jù)點(diǎn)的具體格式如表1所示。
表1 接口文件協(xié)議格式Tab.1 Protocol format of interface files
Maxsurf的開發(fā)環(huán)境是Maxsurf ActiveX Automation,ActiveX Automation是微軟公司開發(fā)的、跨應(yīng)用程序的、通用的客戶化和集成化技術(shù)。通過ActiveX Automation,Maxsurf與其他 Windows應(yīng)用程序之間的集成變得更加方便。另外一個(gè)強(qiáng)大的特性是,用戶可以使用常見的、易學(xué)易用的客戶化編程語言和工具,如 VB(Visual Basic)、VC(Visual C++)和JAVA等編寫Maxsurf ActiveX應(yīng)用程序。
Maxsurf中的ActiveX Automation接口與微軟公司出品的Excel和Access中的接口相似。在Maxsurf中實(shí)現(xiàn)的ActiveX Automation不但是Maxsurf軟件的一部分,可以立即與其他編程工具,如VB一起使用,而且是在Maxsurf中實(shí)現(xiàn)VBA(Visual Basic for Applications)的基礎(chǔ)。
因此,對(duì)Maxsurf的二次開發(fā)可以通過兩種方式實(shí)現(xiàn):一是選擇 VB(或 VC、JAVA等)作為Maxsurf應(yīng)用程序的開發(fā)工具,通過ActiveX Automation接口在VB開發(fā)環(huán)境中實(shí)現(xiàn)Maxsurf的數(shù)據(jù)獲取與操作;二是可以把Maxsurf與其他標(biāo)準(zhǔn)的 Windows應(yīng)用程序 (Microsoft Excel、Microsoft Word、Microsoft Access、AutoCAD 2000 及更 新版本)通過 VBA 集成[4],直接在 Windows 應(yīng)用程序的VBA中實(shí)現(xiàn)數(shù)據(jù)的訪問,但是只能針對(duì)特定的Windows應(yīng)用程序。
本文中Maxsurf的開發(fā)主要是以VB為主,通過界面和程序訪問Maxsurf對(duì)象模型數(shù)據(jù),然后創(chuàng)建、分析和提取模型數(shù)據(jù)。在VB程序中調(diào)用Maxsurf對(duì)象模型環(huán)境如圖1所示。
目前的應(yīng)用程序,如VB,基本上屬于面向?qū)ο笳Z言,即操作對(duì)象的語言。每一種用面向?qū)ο笳Z言來編程的應(yīng)用程序都有自己獨(dú)特的對(duì)象模型,并且都可以被這種語言所操縱[5]。
用VB 6.0開發(fā)Maxsurf,實(shí)際上就是通過操縱Maxsurf對(duì)象模型來實(shí)現(xiàn)。Maxsurf對(duì)象模型中的大部分對(duì)象都用于描述曲面、標(biāo)記點(diǎn)或網(wǎng)格,或者從Maxsurf模型中查找特性參數(shù),其中,每一個(gè)對(duì)象分別都有各自獨(dú)立的屬性和方法。Maxsurf對(duì)象模型主要有8種,即Application、Design、Frame of Reference、 Grids、 Surface、 Hydrostatics、Markert和Preference。
本文以調(diào)用Marker對(duì)象模型為主。Marker,即標(biāo)記點(diǎn),是船體曲面經(jīng)過縱向、垂向和橫向剖切而生成的曲面擬合點(diǎn),將這些擬合點(diǎn)抽取出來,再經(jīng)過變換處理,即可成為Shipcad所需要的數(shù)據(jù)。Marker對(duì)象模型具體的結(jié)構(gòu)如圖2所示。
Marker對(duì)象模型允許訪問Maxsurf中Marker窗口中的屬性,可以設(shè)置和獲取Marker的Position、Offset和 Height,即(x,y,z)坐標(biāo),也可以獲取站位(Station)、曲面(Surface)標(biāo)識(shí)號(hào)和類型(Type)的屬性。Marker的屬性見表2所示。
表2 Marker屬性表Tab.2 Marker properties list
Marker對(duì)象模型由3部分組成,即Marker、Markers和 MarkerList(圖2)。由圖2可以看出Marker、Markers和 MarkerList之間的邏輯關(guān)系,Markers和MarkerList是訪問Marker的必經(jīng)之路,即Markers和MarkerList是所有Marker的集合,只有通過Markers和MarkerList的屬性和方法才能確定具體的Marker,然后才能訪問到該Marker的屬性信息。
軟件整體流程如圖3所示,具體如下:
1)根據(jù)界面程序主界面輸入的相關(guān)參數(shù)信息,設(shè)置數(shù)據(jù)轉(zhuǎn)換中需要的變量;
2)數(shù)據(jù)轉(zhuǎn)換軟件通過調(diào)用Maxsurf Automation接口,初始化msMaxsurfObj(Maxsurf應(yīng)用程序?qū)ο螅?、msDesignObj (Maxsurf當(dāng)前設(shè)計(jì)對(duì)象)和msMarkersObj(Maxsurf標(biāo)記點(diǎn)集合對(duì)象);
3)操作msMarkersObj對(duì)象,按站位獲得所有標(biāo)記 (Marker)點(diǎn)信息,將站位信息保存至ArrayList對(duì)象(msStationArrayList)中;
4)對(duì)于每一站位,按x坐標(biāo)位置對(duì)msStationArrayList從小到大進(jìn)行排序;
5)對(duì)于每一站內(nèi)的標(biāo)記點(diǎn),按z坐標(biāo)進(jìn)行排序;
6)根據(jù)規(guī)則,在每站內(nèi)第一點(diǎn)和最后一點(diǎn)前、后插入額外標(biāo)記點(diǎn)(z坐標(biāo)按拱高系數(shù)計(jì)算);
7)根據(jù)所有y=0的標(biāo)記點(diǎn),提取艏部前后點(diǎn)差值小于艏部差值的標(biāo)記點(diǎn),并按x坐標(biāo)從大到小排序;
8)根據(jù)所有y=0的標(biāo)記點(diǎn),提取艉部前后點(diǎn)差值小于艉部差值的標(biāo)記點(diǎn),并按x坐標(biāo)從小到大排序;
9)提取每站內(nèi)z坐標(biāo)最大的標(biāo)記點(diǎn),按x坐標(biāo)從小到大排序;
10)對(duì)于兩次排序后的msStationArrayList集合,按表1格式完成輸出。
在該流程中,第1~3條是從Maxsurf獲取Marker信息,第4~9條是對(duì)數(shù)據(jù)的處理,第10條是文件輸出。
數(shù)據(jù)轉(zhuǎn)換接口軟件主界面如圖4所示,其包括參數(shù)輸入框和操作按鈕兩部分。
1)參數(shù)輸入框。包括需要寫入型值轉(zhuǎn)換后文件的數(shù)據(jù)和型值數(shù)據(jù)轉(zhuǎn)換過程中所需的計(jì)算數(shù)據(jù):
(1)輸出數(shù)據(jù):船名、對(duì)稱與否、設(shè)計(jì)水線長、設(shè)計(jì)水線寬、設(shè)計(jì)吃水、中部型深、水的密度、平均板厚及船殼系數(shù);
(2)計(jì)算數(shù)據(jù):拱高系數(shù)、艏部差值和艉部差值。
2)操作按鈕。包括型值轉(zhuǎn)換過程中所有的功能操作:
(1)型線轉(zhuǎn)換:在參數(shù)輸入框輸入型值數(shù)據(jù)轉(zhuǎn)換參數(shù)后,點(diǎn)擊“型線轉(zhuǎn)換”按鈕,程序調(diào)用后臺(tái)算法進(jìn)行型值數(shù)據(jù)轉(zhuǎn)換(轉(zhuǎn)換過程中有轉(zhuǎn)換進(jìn)度提示);
(2)預(yù)覽:型值數(shù)據(jù)轉(zhuǎn)換后,點(diǎn)擊“預(yù)覽”按鈕,可以查看轉(zhuǎn)換后的型值數(shù)據(jù);
(3)輸出:型值數(shù)據(jù)轉(zhuǎn)換后,點(diǎn)擊“輸出”按鈕便會(huì)彈出型值文件文本輸出對(duì)話框,在對(duì)話框中可以設(shè)置輸出的型值文件路徑。
數(shù)據(jù)轉(zhuǎn)換接口軟件的主要功能由剖線數(shù)據(jù)點(diǎn)提取、數(shù)據(jù)排序、增加插值點(diǎn)、提取艏部輪廓點(diǎn)數(shù)據(jù)、提取艉部輪廓點(diǎn)數(shù)據(jù)、提取邊界點(diǎn)數(shù)據(jù)和數(shù)據(jù)整理輸出等幾部分組成。以剖線數(shù)據(jù)點(diǎn)提取為例,其實(shí)現(xiàn)過程如下:
1)獲得標(biāo)記點(diǎn)總數(shù)。每個(gè)標(biāo)記點(diǎn)對(duì)應(yīng)一個(gè)橫剖點(diǎn),獲得標(biāo)記點(diǎn)總數(shù)即得到了需要提取的橫剖點(diǎn)總數(shù);
2)遍歷所有標(biāo)記點(diǎn),獲得標(biāo)記點(diǎn)對(duì)象,主要通過Markerlist或Markers對(duì)象信息獲得每一個(gè)橫剖點(diǎn)的三維坐標(biāo)(x,y,z);
3)判斷標(biāo)記點(diǎn)是否屬于同一站位,將標(biāo)記點(diǎn)信息保存至標(biāo)記點(diǎn)集合中。
剖線數(shù)據(jù)點(diǎn)提取的流程設(shè)計(jì)圖如圖5所示。
在經(jīng)過詳細(xì)的設(shè)計(jì)和代碼編寫后,Maxsurf和Shipcad的數(shù)據(jù)接口軟件便開發(fā)完畢。為提高程序可靠性和穩(wěn)定性,對(duì)該軟件進(jìn)行了實(shí)例驗(yàn)證。圖6(左)所示為某船舶產(chǎn)品的船型曲面,包括球艏曲面、艏部曲面、艉部曲面和舯部曲面4個(gè)部分,在運(yùn)行數(shù)據(jù)轉(zhuǎn)換接口軟件之前,根據(jù)Shipcad對(duì)數(shù)據(jù)點(diǎn)數(shù)量的要求,對(duì)4個(gè)曲面的橫剖點(diǎn)進(jìn)行了劃分,軟件運(yùn)行后可生成如圖6(右)所示的船型數(shù)據(jù)轉(zhuǎn)換接口文件。經(jīng)軟件實(shí)例驗(yàn)證,所開發(fā)的接口軟件運(yùn)行可靠,運(yùn)行速度較快,達(dá)到了預(yù)期目標(biāo)。
Maxsurf和Shipcad作為先進(jìn)的艦船設(shè)計(jì)分析軟件,其設(shè)計(jì)思想和成熟的分析方法有很多值得研究的地方。以基于接口文件的方法研究船型設(shè)計(jì)系統(tǒng)Maxsurf和性能分析系統(tǒng)Shipcad之間的接口問題,利用ActiveX Automation技術(shù),采用圖形化語言編程VB實(shí)現(xiàn)數(shù)據(jù)的提取、變換和輸出,并開發(fā)出相應(yīng)的軟件,實(shí)現(xiàn)了Maxsurf和Shipcad系統(tǒng)間的數(shù)據(jù)傳遞,初步解決了艦船Maxsurf和Shipcad兩系統(tǒng)之間數(shù)據(jù)轉(zhuǎn)換的壁壘,為艦船集成設(shè)計(jì)平臺(tái)數(shù)據(jù)接口的實(shí)際應(yīng)用奠定了良好的基礎(chǔ)。
[1]蔣毅文.Maxsurf及相關(guān)設(shè)計(jì)程序在船舶設(shè)計(jì)中的應(yīng)用[J].船海工程,2005,34(4):39-41.JIANG Y W.Application of Maxsurf and corresponding software in ship design[J].Ship and Ocean Engineering,2005,34(4):39-41.
[2]錢衛(wèi)星.Maxsurf軟件在方案設(shè)計(jì)中的應(yīng)用[J].江蘇船舶,2002,19(2):23-25.QIAN W X.Maxsurf application in ship scenario design[J].Jiangsu Ship,2002,19(2):23-25.
[3]黃金鋒,何剛.艦船CAD/CAM系統(tǒng)船體結(jié)構(gòu)數(shù)據(jù)接口技術(shù)研究[J].武漢理工大學(xué)學(xué)報(bào)(交通科學(xué)與工程版),2008,32(5):906-909.HUANG J F,HE G.Technical research on ship structure data interfaces of the naval ships CAD /CAM system [J].Journal of Wuhan University of Technology(Transportation Science and Engineering),2008,32(5):906-909.
[4]鄒玉堂,李杰,路慧彪.三維船體庫系統(tǒng)研究[J].中國造船,2009,50(2):74-78.ZOU Y T,LI J,LU H B.Study on 3D hull library system[J].Shipbuilding of China,2009,50(2):74-78.
[5]陳燕凡,林焰,紀(jì)卓尚.基于STEP標(biāo)準(zhǔn)的船舶CAD系統(tǒng)數(shù)據(jù)接口研究[J].船舶,2005(4):56-58.CHEN Y F,LIN Y,JI Z S.Data interface of Ship CAD system based on STEP standard[J].Ship and Boat,2005(4):56-58.