顏 萍,祝文倩
(1.廣東中遠(yuǎn)海運(yùn)重工有限公司,東莞 523146;2.廣州船舶及海洋工程設(shè)計(jì)研究院,廣州 510250)
NAPA軟件是由芬蘭NAPA公司開發(fā)的一款船舶設(shè)計(jì)軟件,在船舶的初步設(shè)計(jì)及詳細(xì)設(shè)計(jì)階段有著廣泛的運(yùn)用。其中,總體計(jì)算模塊是NAPA軟件的核心部分,主要由船舶建模、靜水力、艙容、裝載工況、完整穩(wěn)性和破損穩(wěn)性等部分組成。我們可以根據(jù)設(shè)計(jì)的需求調(diào)用相關(guān)的模塊進(jìn)行計(jì)算,能有效的提高計(jì)算效率。
NAPA軟件為設(shè)計(jì)者提供了強(qiáng)大的開發(fā)能力,其中宏的運(yùn)用是NAPA最有效的工作方式,宏就是將一系列命令組成在一起作為單獨(dú)的命令完成一個(gè)特定任務(wù)。宏既可以是簡(jiǎn)單命令的集合,也可以是包括了輸入、輸出、條件、計(jì)算等功能的復(fù)雜程序。此外,還可以利用宏作為一個(gè)子程序嵌套在其他的宏中,形成一個(gè)多層的宏程序。設(shè)計(jì)者如能充分掌握NAPA的宏程序編寫,可以達(dá)到對(duì)于NAPA軟件的創(chuàng)造性的使用。
宏可以在NAPA中的TEXT文檔中運(yùn)行,以NAPA自帶的BASCI作為二次開發(fā)語言來實(shí)現(xiàn)各種功能的定制。其中,主要的BASCI邏輯語言有循環(huán)語句@For...@Next、假設(shè)語句@If...@Endif等。宏的運(yùn)行主要依靠變量和表格兩種表現(xiàn)形式來實(shí)現(xiàn),以下我們就這兩者在宏程序中的應(yīng)用做一個(gè)簡(jiǎn)要的介紹。
變量在NAPA中有三種基本的形式:整數(shù)型變量,如@X=5;實(shí)數(shù)型變量,比如@X=5.0;字符串變量,如@X=’LOAD3’。
變量的種類分為自定義變量及NAPA自帶變量?jī)煞N:(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’)等;在艙容計(jì)算中的CP.GAUGE(‘quantity’)或 CP.GEMO(‘quantity’)等。NAPA自帶變量的形式及種類繁多,具體的各種變量解釋和運(yùn)行方式可以參見NAPA MANUAL中每章的Service Function。
澳大利亞海事安全局(AMSA)對(duì)牲口船有特殊的衡準(zhǔn)要求,其中大部分衡準(zhǔn)與IS CODE的基本穩(wěn)性衡準(zhǔn)要求類似,只要簡(jiǎ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')得到動(dòng)穩(wěn)性力臂變量組;由cr.value('gz')得到靜穩(wěn)性力臂變量組;由cr.value('ang')得到橫傾角變量組。
利用自定義變量:由interp(hphi ang 0)得到動(dòng)穩(wěn)性力臂為0時(shí)的角度ang2;由interp (ang mom1 ang2)得到橫傾角為ang2時(shí)的力矩;同樣也可以得到ang3時(shí)的力矩。
通過areaAB和req兩個(gè)變量的計(jì)算,可以得到A+B的面積以及要求的面積衡準(zhǔn)值。
將以上的變量生成的宏程序命名為AMSA.AREA,我們可以利用宏程序生成穩(wěn)性衡準(zhǔn)如下:
目前大部分的傾斜試驗(yàn)是利用各單位自己編制的Excel表格來進(jìn)行計(jì)算的,其中需要手動(dòng)輸入各種液態(tài)艙室在傾斜試驗(yàn)狀態(tài)下的艙容、艙內(nèi)液體的重心位置及自由液面數(shù)據(jù),這些數(shù)據(jù)大多是利用手動(dòng)測(cè)深表通過各種插值得到的,其消耗時(shí)間較多也容易出現(xiàn)計(jì)算錯(cuò)誤。而利用變量在宏中的運(yùn)用,可以準(zhǔn)確快捷的得到各類艙室的傾斜試驗(yàn)數(shù)據(jù),其部分核心代碼如下:
其中,我們可以自己定義艙室名變量@TANK及測(cè)深高度值變量@SND。因此,我們僅需輸入要查詢的艙室名以及傾斜試驗(yàn)量取的測(cè)深高度值,利用循環(huán)語句可以方便得到所有需查詢的艙室的傾斜試驗(yàn)數(shù)據(jù)。
表格在宏中的應(yīng)用居于非常核心的地位。通過Tab的導(dǎo)出、存儲(chǔ)、導(dǎo)入、運(yùn)算等功能,可以方便的實(shí)現(xiàn)各種數(shù)據(jù)的運(yùn)算。除了NAPA默認(rèn)的Tab*table格式外,我們還有多種NAPA特殊的表格形式,如表示布置的表格形式ARR*、重量分布單元的表格形式ELE*等。
通過Tab中的各種命令,可以使用NEW& COL命令產(chǎn)生新的表格,并定義表格的數(shù)據(jù)形式,例如整數(shù)、實(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)性計(jì)算中,我們需要列出各種總結(jié)表、各個(gè)工況的信息(如彎矩和剪力總結(jié)表)、浮態(tài)及穩(wěn)性衡準(zhǔn)的總結(jié)表等。利用Tab的特點(diǎn),可以方便的得到各種數(shù)據(jù)總結(jié)表。
下面將以某PSV船為例,演示生成新的表格、導(dǎo)出舊表格數(shù)據(jù)、將舊表格數(shù)據(jù)選擇性賦予新的表格、最終生成該船的Stability Margin的總結(jié)表。部分核心代碼如下所示:
第一步,生成新的總結(jié)表格:
通過生成的新的總結(jié)表格,可以任意選擇總結(jié)表需要輸出的表列數(shù)據(jù),同時(shí)在生成新表格的同時(shí)也將每列表格的數(shù)據(jù)形式定義好。其中C表示此列表格為字符串形式,R表示此列表格為實(shí)數(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列對(duì)應(yīng)于吃水T的曲線;按照同樣的方式,也可以得到IMOLIM和AMSALIM以及DLIM對(duì)應(yīng)于吃水T列曲線,并用不同的顏色標(biāo)示出來;最終,我們可以得到多列極限GM數(shù)據(jù)對(duì)于吃水T的數(shù)據(jù)圖。
雖然變量與表格的運(yùn)用能夠較好的提高工作效率,但同時(shí)也是宏程序中的一個(gè)難點(diǎn)。在宏程序的運(yùn)用中,需要注意以下幾點(diǎn)以保證宏程序運(yùn)行的準(zhǔn)確性:
(1)首先要保證邏輯語言的閉環(huán),保證多種變量和表格能夠在一個(gè)嵌套的邏輯語言中運(yùn)行,否則容易造成程序出現(xiàn)錯(cuò)誤循環(huán)而不能進(jìn)行計(jì)算;
(2)在NAPA的宏程序中出現(xiàn)的字符串變量盡量使用大寫字母來表示,在部分宏程序中存在小寫字母的字符串變量報(bào)錯(cuò)的情況;
(3)因?yàn)橄到y(tǒng)自帶的變量可以避免間接求解變量,因此靈活運(yùn)用系統(tǒng)自帶的變量往往能起到事半功倍的效果;
(4)表格分配數(shù)據(jù)的時(shí)候,需要注意數(shù)據(jù)導(dǎo)入是否在正確行與列,保證數(shù)據(jù)的準(zhǔn)確性;
(5)NAPA默認(rèn)的表格名字為table,如果沒有給數(shù)據(jù)輸出表格重新命名,那么NAPA輸出的數(shù)據(jù)一般存儲(chǔ)在默認(rèn)的table表格中。
變量和表格是NAPA宏程序中的主要運(yùn)用形式,本文通過實(shí)例分別說明了其在宏程序中的運(yùn)行方式,并介紹了運(yùn)用變量和表格容易出錯(cuò)或容易忽略的地方。固然,在一個(gè)較為復(fù)雜的宏程序中,變量和表格是綜合運(yùn)用在一起,而不是簡(jiǎn)單的運(yùn)用單個(gè)某種形式。通過本文的研究,我們對(duì)變量和表格在NAPA宏程序中的運(yùn)用有了一定的了解,對(duì)復(fù)雜宏程序的編寫將起到一定的指導(dǎo)作用。同時(shí),本文內(nèi)容對(duì)宏程序在NAPA中二次開發(fā)和優(yōu)化設(shè)計(jì)流程也具有一定的參考借鑒作用。