金攀峰


(揚州大洋造船有限公司技術部,揚州 225107)
摘 要:本文結合實例,簡介了NAPA宏語言的組成、編寫方法以及NAPA函數、數組、程序調試方法等,供使用者編制、應用NAPA宏語言程序作為參考。
關鍵詞:NAPA;NAPA MACRO;NAPA宏語言編寫;NAPA二次開發
中圖分類號:U662.9 文獻標識碼:A
1 前言
NAPA系統是一個專業的、綜合性的船舶性能設計工具軟件。NAPA的發展,早期由于受計算機軟硬件技術發展的限制,僅能工作在命令行模式,沒有圖形窗口,操作方式類似于DOS操作系統,每一個操作都是通過鍵盤輸入命令來實現的,這種重復輸入命令的交互方式會耗費用戶大量的時間。如果把需要的命令按照先后次序集合在一起,使用批處理的方式進行操作就會更高效、更準確,通常將這種操作方式稱為宏,其本質是一種簡化的腳本語言。
隨著計算機技術的發展,視窗化的交互方式僅需要鼠標點擊就能完成操作,這種方式更受到了人們的歡迎。NAPA系統經過逐漸發展變得更易于操作,結合循環、判斷等控制命令的宏語言,在專業應用上可以實現比視窗化點擊操作更加高效的操作,有著無可比擬的優勢。NAPA系統開放性較好,用戶在編制宏程序時可以使用系統內置的大量函數和NAPA命令,操作NAPA數據庫中的任何數據,因而可以根據用戶自己的需求進行各類宏程序的二次開發,實現各種新功能,輸出各類圖形與表的組合,而不必僅拘泥于NAPA系統提供的基本功能。
2 宏的組成和格式
簡單說來,NAPA宏程序可以由幾個簡單的NAPA命令組合,也可以是一個包括輸入、輸出、跳轉、循環、計算函數、子程序調用等復雜的程序。下面以一個輸出裝載工況的宏程序為例,通過循環命令、變量、數組、子系統函數的使用等,可以一鍵輸出裝載工況組中的所有工況的浮態,而不論工況組里有多少裝載工況。
@@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
裝載工況組中的一個工況輸出結果如圖1所示:
由上例可以看到,在宏程序中每一行一條命令:開頭沒有特殊標識的是普通的NAPA命令;以!開頭的是NAPA透明命令,可以在任何子系統下運行;以@符號開頭的是NAPA BASIC命令、變量和表達式;以@@開頭的是用來作為注釋說明行。@符號作為標識符只能放在行的開頭,而不能放在中間,多余的@符號會被忽略或者會導致運行錯誤。如果在一行中需要寫多條命令,需要用“;”分號將命令分隔開,如要避免一行過長可以在行末尾添加逗號“,”手工換行,運行時系統將逗號之后的視作為一行。
3 宏的編寫
宏的編寫主要有兩種方式:一種是在NAPA系統Tools菜單下的Text Editor工具中,按照規定的格式和語法直接編寫;另一種是將運行過的命令收集或記錄下來。
第二種方式,系統提供了三個命令:
(1)!L +20 此命令可以列出使用過的20個命令,20表示需要列出命令的個數,可以根據需要進行更改,然后可以將這些命令復制到Text Editor中進行編輯,即可形成一個簡單的宏程序;
(2)TASK?>SCA 此命令可以將運行過的命令記錄保存到項目數據庫,運行該命令后出現SEARCH CRITERION?>提示直接回車,會顯示出一個列表,在 SELECT?>后輸入列表中類型為LOG所在行前的數字,然后在SCAN?>提示符后輸入MACRO mymacro,即可將這個命令記錄以mymacro名稱保存到項目數據庫,可以用Text Editor中打開對其進行編輯;
(3)!MACRO DEMO 此命令也是透明命令,與!MACRO END命令配對使用,用來收集直至用戶輸入!MACRO END前輸入過的命令并保存至項目數據庫DEMO文件中,DEMO為保存的宏名稱,同樣也可用Text Editor打開編輯。
為了便于識別,宏的命名通常按照宏程序的功能進行區分,名稱中可用“.”或“_”符號進行分隔。例如CP.SND.L、OUT_LD,從名稱就可以看出為艙容測深表輸出和裝載工況輸出。
4 宏的運行
宏有兩種運行方式:一種是用Text Editor打開宏,點擊工具條上的“RUN”按鈕,宏就會完整的運行。如果只想運行此宏中的部分語句,用鼠標高亮選擇需要運行的部分,再點“RUN”即可;另外一種是用命令!ADD加上要運行的宏名稱,如!ADD CP.SND.L即可運行這個名為CP.SND.L的宏,只要這個宏存在于數據庫中,這種命令方式也可用在宏中用來調用另外一個宏。
5 變量
使用變量代替具體的數據,可以增加宏程序的執行效率和靈活性。NAPA變量無需預先定義,給變量賦值(字符串或者數值)時,NAPA會自動創建這個變量。變量分成字符串型和數值型,不同類型的變量相互是不兼容的。變量通常以@符號開頭來表示,但變量出現在表達式里的時候則要去掉@符號。
需要注意變量和普通字符串的區別,字符串用單引號或者雙引號表示。當可能會引起歧義的時候,變量的結尾可以用下劃線“_”來表示結束,如定義一個變量@S=‘WL,那么用命令CUR使用這個變量時需要注意CUR @S1和CUR @S_1這兩個寫法的區別的,CUR @S1系統直接認為變量是S1,而CUR @S_1由于使用了“_”下劃線,表示變量結束系統認為@S_1是WL1。
定義變量也可以通過彈出對話框讓用戶輸入數據,通過下面的賦值語句來彈出對話框,比如:
@name=.... Enter the name of the ROOM
系統在運行到這一行就停止,彈出如圖2所示的對話框等待用戶輸入,輸入的數據會被賦給變量@name,....后面是說明文字,將顯示在輸入對話框上。點的個數不同,表示要求輸入的內容是不同的:@X=...三個點表示僅接受數值輸入;@name=.... 四個點表示僅接受字符串輸入,會自動轉換成大寫;@text=.....五個點表示僅接受字符串,但保留輸入時的大小寫。
變量賦值后可以通過下列命令查看變量數據:
!CAL var 計算變量,var可由具體的變量代替;
!VAR list 列出所有的變量。
6 數組
一個數組代表一組數據,和變量不同,使用數組需要預先定義。有一些命令能夠自動創建數組,如用!SEL從數據庫中選擇對象時,默認創建的數組名為LIST。
數組分為三種類型:整數型(1)、實數型(2)、字符串型(3)。如示例中的@GROUP=ARR(3),即為將數組@GROUP定義為字串型數組。可以用命令!VAR LIST GROUP或者用!cal GROUP(1)(數字1表示數組中記錄的第1個數)來查看數組中的數據。用命令!SEL ...從數據庫中選擇對象,NAPA會自動創建數組LIST并儲存選中的對象,用命令!Cat查看對象,也會自動創建數組CATALOG。
7 NAPA BASIC命令
NAPA BASIC命令是用來控制宏程序運行的,可以使程序執行循環、選擇或者跳轉等功能。也有一些命令可以定義變量的可見性及macro的調用和參數傳遞。
常用的NAPA BASIC命令有:
@ FOR … @NEXT
@IF… @THEN
@WHILE…@ENDWHILE
@END
@GOTO
@GOSUB… @RETURN
@LOCAL & GLOBAL
@PARAMETERS
NAPA BASIC
!COM B.f
!EX B.id
8 計算函數和子系統函數
NAPA系統里提供超過1300個函數,函數功能非常廣泛,主要分為計算函數和子系統函數兩大類。
標準計算函數包括:數學函數、日期函數、艙容函數、字符串函數等類型。如通過CG('APTP',1) 標準函數可以獲取APTP艙的xcg值。
子系統函數與計算函數不同,每個子系統下都有相對應的一些函數,通過子系統函數可以直接獲取這個子系統的某些數據或者完成某些操作。子系統函數名稱格式為ss.funct(parameters),funct為函數名稱,括號中為參數,如果參數為空,這一對括號也應保留。計算函數和子系統函數功能和用法,可以通過下列命令在主窗口命令提示符下獲取詳細的說明:
!COM C.F 列出所有標準計算函數;
!EXP C.id 解釋某個計算函數,id為計算函數名稱,如!EXP C.AREA;
!COM ss.F 列出子系統函數,ss為子系統名稱,如!COM GM.F;
!EXP ss.id 解釋某個子系統函數,id為函數名稱,如!EXP LD.NOTE;
9 宏的調試
宏程序編制過程中,可以以單步運行模式(STEPMODE)進行程序的調試。在此模式下,在主界面按回車鍵,宏程序將一行一行的被執行,并且執行一行前會將這行的內容顯示出來。有多種方法可以進入STEPMODE模式:
(1)在Text editor窗口選擇options菜單下的stepmode;
(2)用!ADD運行宏程序的時候,加上參數S,如!ADD 宏名稱 S;
(3)在宏程序里的首行頂格大寫加入ENTER STEPMODE;
推薦調試宏程序時在首行加入@ONERR STEPMODE命令,該命令會在運行宏程序遇到錯誤的時候自動進入到SETPMODE模式。
在STEPMODE模式下,可以運行下面幾個常用的命令:
C 取消單步模式,以正常模式運行完宏程序;
!S 跳過當前行;
Q 終止宏運行,可以用!ADD *繼續運行;
!VL 同!VAR LIST;
!VC 同!VAR CHECK。
進入單步運行模式后也可輸入宏程序中定義的數組名,就可列出數組中的元素。
在宏程序調試過程中會碰到各種各樣的問題,此時善用幫助資源有助于問題的盡快解決,NAPA系統主要提供了三種幫助資源:
(1)系統命令提示符下用!EX 命令,解釋單個命令;
(2)系統Help菜單下的Help Viewer,提供有關命令、函數等用法查閱;
(3)系統自帶的Napa Manual,當前最新版提供PDF和CHM兩種格式方便查閱。
10 結束語
NAPA作為強大的船舶性能設計軟件,目前已被廣泛應用到全球各大設計公司、大型船廠,其計算結果也為各大船級社所認可。由于NAPA的開放性,使其具有強大的二次開發優勢,而且其命令及內置函數相對易學易用,設計人員能夠根據不同的實際需求,充分利用系統提供的函數、命令開發出適應不同復雜情況的宏程序,極大提高工作效率。
參考文獻
[1] NAPA MANUAL 2015.4. NAPA LTD
[2]蔡智波,張利,陳超.NAPA在散裝谷物穩性計算中的應用[J].廣東造船,2011(3).
[3]王彩蓮.淺談船舶應用軟件NAPA[J].船舶,2004(3).