国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

淺談NAPA宏語言二次開發(fā)

2017-06-06 21:55:25金攀峰
廣東造船 2017年2期

金攀峰

(揚州大洋造船有限公司技術(shù)部,揚州 225107)

摘 要:本文結(jié)合實例,簡介了NAPA宏語言的組成、編寫方法以及NAPA函數(shù)、數(shù)組、程序調(diào)試方法等,供使用者編制、應(yīng)用NAPA宏語言程序作為參考。

關(guān)鍵詞:NAPA;NAPA MACRO;NAPA宏語言編寫;NAPA二次開發(fā)

中圖分類號:U662.9 文獻(xiàn)標(biāo)識碼:A

1 前言

NAPA系統(tǒng)是一個專業(yè)的、綜合性的船舶性能設(shè)計工具軟件。NAPA的發(fā)展,早期由于受計算機軟硬件技術(shù)發(fā)展的限制,僅能工作在命令行模式,沒有圖形窗口,操作方式類似于DOS操作系統(tǒng),每一個操作都是通過鍵盤輸入命令來實現(xiàn)的,這種重復(fù)輸入命令的交互方式會耗費用戶大量的時間。如果把需要的命令按照先后次序集合在一起,使用批處理的方式進(jìn)行操作就會更高效、更準(zhǔn)確,通常將這種操作方式稱為宏,其本質(zhì)是一種簡化的腳本語言。

隨著計算機技術(shù)的發(fā)展,視窗化的交互方式僅需要鼠標(biāo)點擊就能完成操作,這種方式更受到了人們的歡迎。NAPA系統(tǒng)經(jīng)過逐漸發(fā)展變得更易于操作,結(jié)合循環(huán)、判斷等控制命令的宏語言,在專業(yè)應(yīng)用上可以實現(xiàn)比視窗化點擊操作更加高效的操作,有著無可比擬的優(yōu)勢。NAPA系統(tǒng)開放性較好,用戶在編制宏程序時可以使用系統(tǒng)內(nèi)置的大量函數(shù)和NAPA命令,操作NAPA數(shù)據(jù)庫中的任何數(shù)據(jù),因而可以根據(jù)用戶自己的需求進(jìn)行各類宏程序的二次開發(fā),實現(xiàn)各種新功能,輸出各類圖形與表的組合,而不必僅拘泥于NAPA系統(tǒng)提供的基本功能。

2 宏的組成和格式

簡單說來,NAPA宏程序可以由幾個簡單的NAPA命令組合,也可以是一個包括輸入、輸出、跳轉(zhuǎn)、循環(huán)、計算函數(shù)、子程序調(diào)用等復(fù)雜的程序。下面以一個輸出裝載工況的宏程序為例,通過循環(huán)命令、變量、數(shù)組、子系統(tǒng)函數(shù)的使用等,可以一鍵輸出裝載工況組中的所有工況的浮態(tài),而不論工況組里有多少裝載工況。

@@PLEASE DEFINE THE LOADING GROUP FIRST

!END;LD

!HEAD GET EMPTY

@GROUP=ARR(3)

@GROUPNAME=.... WHAT IS THE NAME OF THE LOADING GROUP?

@GROUP=LD.GROUPMEMBERS(GROUPNAME)

@FOR STEP=1 RSIZE(GROUP)

GET @GROUP(STEP)

@EX=LD.NOTE()

TYPE LOAD CONDITION @GROUP(STEP) : ( @EX )

LIS FLOAT NH

TYPE TLCF @LD.QNT('TLCA' 'F=5.2') m

TYPE

NP

@NEXT

@END

裝載工況組中的一個工況輸出結(jié)果如圖1所示:

由上例可以看到,在宏程序中每一行一條命令:開頭沒有特殊標(biāo)識的是普通的NAPA命令;以!開頭的是NAPA透明命令,可以在任何子系統(tǒng)下運行;以@符號開頭的是NAPA BASIC命令、變量和表達(dá)式;以@@開頭的是用來作為注釋說明行。@符號作為標(biāo)識符只能放在行的開頭,而不能放在中間,多余的@符號會被忽略或者會導(dǎo)致運行錯誤。如果在一行中需要寫多條命令,需要用“;”分號將命令分隔開,如要避免一行過長可以在行末尾添加逗號“,”手工換行,運行時系統(tǒng)將逗號之后的視作為一行。

3 宏的編寫

宏的編寫主要有兩種方式:一種是在NAPA系統(tǒng)Tools菜單下的Text Editor工具中,按照規(guī)定的格式和語法直接編寫;另一種是將運行過的命令收集或記錄下來。

第二種方式,系統(tǒng)提供了三個命令:

(1)!L +20 此命令可以列出使用過的20個命令,20表示需要列出命令的個數(shù),可以根據(jù)需要進(jìn)行更改,然后可以將這些命令復(fù)制到Text Editor中進(jìn)行編輯,即可形成一個簡單的宏程序;

(2)TASK?>SCA 此命令可以將運行過的命令記錄保存到項目數(shù)據(jù)庫,運行該命令后出現(xiàn)SEARCH CRITERION?>提示直接回車,會顯示出一個列表,在 SELECT?>后輸入列表中類型為LOG所在行前的數(shù)字,然后在SCAN?>提示符后輸入MACRO mymacro,即可將這個命令記錄以mymacro名稱保存到項目數(shù)據(jù)庫,可以用Text Editor中打開對其進(jìn)行編輯;

(3)!MACRO DEMO 此命令也是透明命令,與!MACRO END命令配對使用,用來收集直至用戶輸入!MACRO END前輸入過的命令并保存至項目數(shù)據(jù)庫DEMO文件中,DEMO為保存的宏名稱,同樣也可用Text Editor打開編輯。

為了便于識別,宏的命名通常按照宏程序的功能進(jìn)行區(qū)分,名稱中可用“.”或“_”符號進(jìn)行分隔。例如CP.SND.L、OUT_LD,從名稱就可以看出為艙容測深表輸出和裝載工況輸出。

4 宏的運行

宏有兩種運行方式:一種是用Text Editor打開宏,點擊工具條上的“RUN”按鈕,宏就會完整的運行。如果只想運行此宏中的部分語句,用鼠標(biāo)高亮選擇需要運行的部分,再點“RUN”即可;另外一種是用命令!ADD加上要運行的宏名稱,如!ADD CP.SND.L即可運行這個名為CP.SND.L的宏,只要這個宏存在于數(shù)據(jù)庫中,這種命令方式也可用在宏中用來調(diào)用另外一個宏。

5 變量

使用變量代替具體的數(shù)據(jù),可以增加宏程序的執(zhí)行效率和靈活性。NAPA變量無需預(yù)先定義,給變量賦值(字符串或者數(shù)值)時,NAPA會自動創(chuàng)建這個變量。變量分成字符串型和數(shù)值型,不同類型的變量相互是不兼容的。變量通常以@符號開頭來表示,但變量出現(xiàn)在表達(dá)式里的時候則要去掉@符號。

需要注意變量和普通字符串的區(qū)別,字符串用單引號或者雙引號表示。當(dāng)可能會引起歧義的時候,變量的結(jié)尾可以用下劃線“_”來表示結(jié)束,如定義一個變量@S=‘WL,那么用命令CUR使用這個變量時需要注意CUR @S1和CUR @S_1這兩個寫法的區(qū)別的,CUR @S1系統(tǒng)直接認(rèn)為變量是S1,而CUR @S_1由于使用了“_”下劃線,表示變量結(jié)束系統(tǒng)認(rèn)為@S_1是WL1。

定義變量也可以通過彈出對話框讓用戶輸入數(shù)據(jù),通過下面的賦值語句來彈出對話框,比如:

@name=.... Enter the name of the ROOM

系統(tǒng)在運行到這一行就停止,彈出如圖2所示的對話框等待用戶輸入,輸入的數(shù)據(jù)會被賦給變量@name,....后面是說明文字,將顯示在輸入對話框上。點的個數(shù)不同,表示要求輸入的內(nèi)容是不同的:@X=...三個點表示僅接受數(shù)值輸入;@name=.... 四個點表示僅接受字符串輸入,會自動轉(zhuǎn)換成大寫;@text=.....五個點表示僅接受字符串,但保留輸入時的大小寫。

變量賦值后可以通過下列命令查看變量數(shù)據(jù):

!CAL var 計算變量,var可由具體的變量代替;

!VAR list 列出所有的變量。

6 數(shù)組

一個數(shù)組代表一組數(shù)據(jù),和變量不同,使用數(shù)組需要預(yù)先定義。有一些命令能夠自動創(chuàng)建數(shù)組,如用!SEL從數(shù)據(jù)庫中選擇對象時,默認(rèn)創(chuàng)建的數(shù)組名為LIST。

數(shù)組分為三種類型:整數(shù)型(1)、實數(shù)型(2)、字符串型(3)。如示例中的@GROUP=ARR(3),即為將數(shù)組@GROUP定義為字串型數(shù)組??梢杂妹?!VAR LIST GROUP或者用!cal GROUP(1)(數(shù)字1表示數(shù)組中記錄的第1個數(shù))來查看數(shù)組中的數(shù)據(jù)。用命令!SEL ...從數(shù)據(jù)庫中選擇對象,NAPA會自動創(chuàng)建數(shù)組LIST并儲存選中的對象,用命令!Cat查看對象,也會自動創(chuàng)建數(shù)組CATALOG。

7 NAPA BASIC命令

NAPA BASIC命令是用來控制宏程序運行的,可以使程序執(zhí)行循環(huán)、選擇或者跳轉(zhuǎn)等功能。也有一些命令可以定義變量的可見性及macro的調(diào)用和參數(shù)傳遞。

常用的NAPA BASIC命令有:

@ FOR … @NEXT

@IF… @THEN

@WHILE…@ENDWHILE

@END

@GOTO

@GOSUB… @RETURN

@LOCAL & GLOBAL

@PARAMETERS

NAPA BASIC

!COM B.f

!EX B.id

8 計算函數(shù)和子系統(tǒng)函數(shù)

NAPA系統(tǒng)里提供超過1300個函數(shù),函數(shù)功能非常廣泛,主要分為計算函數(shù)和子系統(tǒng)函數(shù)兩大類。

標(biāo)準(zhǔn)計算函數(shù)包括:數(shù)學(xué)函數(shù)、日期函數(shù)、艙容函數(shù)、字符串函數(shù)等類型。如通過CG('APTP',1) 標(biāo)準(zhǔn)函數(shù)可以獲取APTP艙的xcg值。

子系統(tǒng)函數(shù)與計算函數(shù)不同,每個子系統(tǒng)下都有相對應(yīng)的一些函數(shù),通過子系統(tǒng)函數(shù)可以直接獲取這個子系統(tǒng)的某些數(shù)據(jù)或者完成某些操作。子系統(tǒng)函數(shù)名稱格式為ss.funct(parameters),funct為函數(shù)名稱,括號中為參數(shù),如果參數(shù)為空,這一對括號也應(yīng)保留。計算函數(shù)和子系統(tǒng)函數(shù)功能和用法,可以通過下列命令在主窗口命令提示符下獲取詳細(xì)的說明:

!COM C.F 列出所有標(biāo)準(zhǔn)計算函數(shù);

!EXP C.id 解釋某個計算函數(shù),id為計算函數(shù)名稱,如!EXP C.AREA;

!COM ss.F 列出子系統(tǒng)函數(shù),ss為子系統(tǒng)名稱,如!COM GM.F;

!EXP ss.id 解釋某個子系統(tǒng)函數(shù),id為函數(shù)名稱,如!EXP LD.NOTE;

9 宏的調(diào)試

宏程序編制過程中,可以以單步運行模式(STEPMODE)進(jìn)行程序的調(diào)試。在此模式下,在主界面按回車鍵,宏程序?qū)⒁恍幸恍械谋粓?zhí)行,并且執(zhí)行一行前會將這行的內(nèi)容顯示出來。有多種方法可以進(jìn)入STEPMODE模式:

(1)在Text editor窗口選擇options菜單下的stepmode;

(2)用!ADD運行宏程序的時候,加上參數(shù)S,如!ADD 宏名稱 S;

(3)在宏程序里的首行頂格大寫加入ENTER STEPMODE;

推薦調(diào)試宏程序時在首行加入@ONERR STEPMODE命令,該命令會在運行宏程序遇到錯誤的時候自動進(jìn)入到SETPMODE模式。

在STEPMODE模式下,可以運行下面幾個常用的命令:

C 取消單步模式,以正常模式運行完宏程序;

!S 跳過當(dāng)前行;

Q 終止宏運行,可以用!ADD *繼續(xù)運行;

!VL 同!VAR LIST;

!VC 同!VAR CHECK。

進(jìn)入單步運行模式后也可輸入宏程序中定義的數(shù)組名,就可列出數(shù)組中的元素。

在宏程序調(diào)試過程中會碰到各種各樣的問題,此時善用幫助資源有助于問題的盡快解決,NAPA系統(tǒng)主要提供了三種幫助資源:

(1)系統(tǒng)命令提示符下用!EX 命令,解釋單個命令;

(2)系統(tǒng)Help菜單下的Help Viewer,提供有關(guān)命令、函數(shù)等用法查閱;

(3)系統(tǒng)自帶的Napa Manual,當(dāng)前最新版提供PDF和CHM兩種格式方便查閱。

10 結(jié)束語

NAPA作為強大的船舶性能設(shè)計軟件,目前已被廣泛應(yīng)用到全球各大設(shè)計公司、大型船廠,其計算結(jié)果也為各大船級社所認(rèn)可。由于NAPA的開放性,使其具有強大的二次開發(fā)優(yōu)勢,而且其命令及內(nèi)置函數(shù)相對易學(xué)易用,設(shè)計人員能夠根據(jù)不同的實際需求,充分利用系統(tǒng)提供的函數(shù)、命令開發(fā)出適應(yīng)不同復(fù)雜情況的宏程序,極大提高工作效率。

參考文獻(xiàn)

[1] NAPA MANUAL 2015.4. NAPA LTD

[2]蔡智波,張利,陳超.NAPA在散裝谷物穩(wěn)性計算中的應(yīng)用[J].廣東造船,2011(3).

[3]王彩蓮.淺談船舶應(yīng)用軟件NAPA[J].船舶,2004(3).

深圳市| 筠连县| 蒲城县| 南皮县| 卫辉市| 定陶县| 彭水| 亚东县| 高陵县| 凤城市| 惠州市| 临西县| 铜鼓县| 定州市| 获嘉县| 山丹县| 磐石市| 中牟县| 清丰县| 儋州市| 钦州市| 苍山县| 惠州市| 兰溪市| 杭锦旗| 连城县| 涡阳县| 临泽县| 鄢陵县| 霍城县| 双牌县| 兰西县| 平凉市| 通许县| 伊通| 霞浦县| 嘉鱼县| 四会市| 义马市| 海口市| 上饶市|