顏 萍,祝文倩
(1.廣東中遠(yuǎn)海運重工有限公司,東莞 523146;2.廣州船舶及海洋工程設(shè)計研究院,廣州 510250)
NAPA軟件是由芬蘭NAPA公司開發(fā)的一款船舶設(shè)計軟件,在船舶的初步設(shè)計及詳細(xì)設(shè)計階段有著廣泛的運用。其中,總體計算模塊是NAPA軟件的核心部分,主要由船舶建模、靜水力、艙容、裝載工況、完整穩(wěn)性和破損穩(wěn)性等部分組成。我們可以根據(jù)設(shè)計的需求調(diào)用相關(guān)的模塊進(jìn)行計算,能有效的提高計算效率。
NAPA軟件為設(shè)計者提供了強(qiáng)大的開發(fā)能力,其中宏的運用是NAPA最有效的工作方式,宏就是將一系列命令組成在一起作為單獨的命令完成一個特定任務(wù)。宏既可以是簡單命令的集合,也可以是包括了輸入、輸出、條件、計算等功能的復(fù)雜程序。此外,還可以利用宏作為一個子程序嵌套在其他的宏中,形成一個多層的宏程序。設(shè)計者如能充分掌握NAPA的宏程序編寫,可以達(dá)到對于NAPA軟件的創(chuàng)造性的使用。
宏可以在NAPA中的TEXT文檔中運行,以NAPA自帶的BASCI作為二次開發(fā)語言來實現(xiàn)各種功能的定制。其中,主要的BASCI邏輯語言有循環(huán)語句@For...@Next、假設(shè)語句@If...@Endif等。宏的運行主要依靠變量和表格兩種表現(xiàn)形式來實現(xiàn),以下我們就這兩者在宏程序中的應(yīng)用做一個簡要的介紹。
變量在NAPA中有三種基本的形式:整數(shù)型變量,如@X=5;實數(shù)型變量,比如@X=5.0;字符串變量,如@X=’LOAD3’。
變量的種類分為自定義變量及NAPA自帶變量兩種:(1)自定義變量,如@I=20或@I=RSIZE(A) 等;(2)NAPA自 帶 變 量,如 在 裝 載 工 況 中 的 LD.QNT(‘quantity’)或LD.SQNT(‘quantity’)等; 在 穩(wěn) 性 衡 準(zhǔn) 中 的CR.VALUE(‘quantity’) 或 CR.ASSIGN(‘quantity’)等;在破損穩(wěn)性中的中的DA.ASSIGN(‘quantity’)或DA.CROSSTIME(‘quantity’)等;在艙容計算中的CP.GAUGE(‘quantity’)或 CP.GEMO(‘quantity’)等。NAPA自帶變量的形式及種類繁多,具體的各種變量解釋和運行方式可以參見NAPA MANUAL中每章的Service Function。
澳大利亞海事安全局(AMSA)對牲口船有特殊的衡準(zhǔn)要求,其中大部分衡準(zhǔn)與IS CODE的基本穩(wěn)性衡準(zhǔn)要求類似,只要簡單的修改NAPA中衡準(zhǔn)語句便可以套用。但是,其中有一條面積衡準(zhǔn)(見圖1),要求A的面積不小于(0.2*(A+B)的面積+1.03m*degree),沒有類似的衡準(zhǔn)可以套用,要求我們必須自己編寫宏來生成衡準(zhǔn)。

圖1 牲口船滿足AMSA穩(wěn)性衡準(zhǔn)中的面積衡準(zhǔn)
利用變量,我們可以較方便的生成衡準(zhǔn)所需要的面積值以及衡準(zhǔn)要求值,部分核心代碼如下:

從以上代碼,利用NAPA自帶變量CR.VAUE(‘quantity’)可以:由cr.value('mom')得到力矩變量組;由cr.value('ephi')得到動穩(wěn)性力臂變量組;由cr.value('gz')得到靜穩(wěn)性力臂變量組;由cr.value('ang')得到橫傾角變量組。
利用自定義變量:由interp(hphi ang 0)得到動穩(wěn)性力臂為0時的角度ang2;由interp (ang mom1 ang2)得到橫傾角為ang2時的力矩;同樣也可以得到ang3時的力矩。
通過areaAB和req兩個變量的計算,可以得到A+B的面積以及要求的面積衡準(zhǔn)值。
將以上的變量生成的宏程序命名為AMSA.AREA,我們可以利用宏程序生成穩(wěn)性衡準(zhǔn)如下:


目前大部分的傾斜試驗是利用各單位自己編制的Excel表格來進(jìn)行計算的,其中需要手動輸入各種液態(tài)艙室在傾斜試驗狀態(tài)下的艙容、艙內(nèi)液體的重心位置及自由液面數(shù)據(jù),這些數(shù)據(jù)大多是利用手動測深表通過各種插值得到的,其消耗時間較多也容易出現(xiàn)計算錯誤。而利用變量在宏中的運用,可以準(zhǔn)確快捷的得到各類艙室的傾斜試驗數(shù)據(jù),其部分核心代碼如下:

其中,我們可以自己定義艙室名變量@TANK及測深高度值變量@SND。因此,我們僅需輸入要查詢的艙室名以及傾斜試驗量取的測深高度值,利用循環(huán)語句可以方便得到所有需查詢的艙室的傾斜試驗數(shù)據(jù)。
表格在宏中的應(yīng)用居于非常核心的地位。通過Tab的導(dǎo)出、存儲、導(dǎo)入、運算等功能,可以方便的實現(xiàn)各種數(shù)據(jù)的運算。除了NAPA默認(rèn)的Tab*table格式外,我們還有多種NAPA特殊的表格形式,如表示布置的表格形式ARR*、重量分布單元的表格形式ELE*等。
通過Tab中的各種命令,可以使用NEW& COL命令產(chǎn)生新的表格,并定義表格的數(shù)據(jù)形式,例如整數(shù)、實數(shù)還是字符串形式等;利用TP.VALUE()及TP.COLUMN()等命令,可以將原有表格的數(shù)據(jù)導(dǎo)出;利用ASG、CAL等命令,可以將導(dǎo)出的數(shù)據(jù)按照一定的數(shù)學(xué)關(guān)系選擇性的分配給新的表格;最后可以利用DIAG命令,將新生成的表格中數(shù)據(jù)用圖形形象的表現(xiàn)出來。
在穩(wěn)性計算中,我們需要列出各種總結(jié)表、各個工況的信息(如彎矩和剪力總結(jié)表)、浮態(tài)及穩(wěn)性衡準(zhǔn)的總結(jié)表等。利用Tab的特點,可以方便的得到各種數(shù)據(jù)總結(jié)表。
下面將以某PSV船為例,演示生成新的表格、導(dǎo)出舊表格數(shù)據(jù)、將舊表格數(shù)據(jù)選擇性賦予新的表格、最終生成該船的Stability Margin的總結(jié)表。部分核心代碼如下所示:
第一步,生成新的總結(jié)表格:

通過生成的新的總結(jié)表格,可以任意選擇總結(jié)表需要輸出的表列數(shù)據(jù),同時在生成新表格的同時也將每列表格的數(shù)據(jù)形式定義好。其中C表示此列表格為字符串形式,R表示此列表格為實數(shù)形式。
第二步,導(dǎo)出各工況下以及各種衡準(zhǔn)下的最小GM值的表格數(shù)據(jù)作為變量組以便后面使用:

利用TP.VALUE()將工況的最小GM值、衡準(zhǔn)的要求值、以及GM值與要求值的余量值等表格數(shù)據(jù)導(dǎo)出。
第三步,利用ASG或CAL命令將導(dǎo)出的表格數(shù)據(jù)選擇性的分配到新的表格中去:

最終,生成了Stability Margin的總結(jié)表如表1所示。

表1 Stability Margin總結(jié)表
利用Tab中的DIAG命令,可以將數(shù)據(jù)用數(shù)據(jù)圖的形式表現(xiàn)出來,使數(shù)據(jù)更加直觀。以下以一艘牲口船的極限GM總結(jié)表(表2)為例,生成總結(jié)表的數(shù)據(jù)圖。此處的極限GM值總結(jié)表,按不同的吃水分成滿足IMO 衡準(zhǔn)的極限GM數(shù)值滿足AMSA衡準(zhǔn)的極限GM值以及滿足破損穩(wěn)性的極限GM值。以下列出宏程序的部分語句作為例子,說明如何將表格數(shù)據(jù)轉(zhuǎn)換為圖表。

表2 極限GM總結(jié)表

從以上宏程序可知,首先需要進(jìn)入到圖表的源數(shù)據(jù)表格GMLIM@TR(M)中得到此表格中的數(shù)據(jù);利用表格的畫圖命令DIAG,可以將源數(shù)據(jù)表格中的MAXGM和T的數(shù)據(jù)以平滑的曲線形式畫出來,得到以上源數(shù)據(jù)表格MAXGM列對應(yīng)于吃水T的曲線;按照同樣的方式,也可以得到IMOLIM和AMSALIM以及DLIM對應(yīng)于吃水T列曲線,并用不同的顏色標(biāo)示出來;最終,我們可以得到多列極限GM數(shù)據(jù)對于吃水T的數(shù)據(jù)圖。
雖然變量與表格的運用能夠較好的提高工作效率,但同時也是宏程序中的一個難點。在宏程序的運用中,需要注意以下幾點以保證宏程序運行的準(zhǔn)確性:
(1)首先要保證邏輯語言的閉環(huán),保證多種變量和表格能夠在一個嵌套的邏輯語言中運行,否則容易造成程序出現(xiàn)錯誤循環(huán)而不能進(jìn)行計算;
(2)在NAPA的宏程序中出現(xiàn)的字符串變量盡量使用大寫字母來表示,在部分宏程序中存在小寫字母的字符串變量報錯的情況;
(3)因為系統(tǒng)自帶的變量可以避免間接求解變量,因此靈活運用系統(tǒng)自帶的變量往往能起到事半功倍的效果;
(4)表格分配數(shù)據(jù)的時候,需要注意數(shù)據(jù)導(dǎo)入是否在正確行與列,保證數(shù)據(jù)的準(zhǔn)確性;
(5)NAPA默認(rèn)的表格名字為table,如果沒有給數(shù)據(jù)輸出表格重新命名,那么NAPA輸出的數(shù)據(jù)一般存儲在默認(rèn)的table表格中。
變量和表格是NAPA宏程序中的主要運用形式,本文通過實例分別說明了其在宏程序中的運行方式,并介紹了運用變量和表格容易出錯或容易忽略的地方。固然,在一個較為復(fù)雜的宏程序中,變量和表格是綜合運用在一起,而不是簡單的運用單個某種形式。通過本文的研究,我們對變量和表格在NAPA宏程序中的運用有了一定的了解,對復(fù)雜宏程序的編寫將起到一定的指導(dǎo)作用。同時,本文內(nèi)容對宏程序在NAPA中二次開發(fā)和優(yōu)化設(shè)計流程也具有一定的參考借鑒作用。