开篇:润墨网以专业的文秘视角,为您筛选了一篇浅谈NAPA宏语言二次开发范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
(扬州大洋造船有限公司技术部,扬州 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).