罗镇泉 张冠楠 黄锦涛
(上海船舶研究设计院,上海201203)
NAPA BASIC在NAPA STEEL结构快速建模中的应用
罗镇泉 张冠楠 黄锦涛
(上海船舶研究设计院,上海201203)
利用NAPA软件提供的NAPA BASIC语言编写的宏,可以快速并准确地完成一些NAPA STEEL船体结构建模工作,可以节省很多人力并提高效率。通过总结船体结构详细设计经验,提出了几项典型的利用NAPA BASIC宏语言实现部分船体结构快速建模的案例:一键写入常用的开孔和型材定义;自动计算出尾部分段指定肋板上所有减轻孔的大小及中心位置,使其满足设计要求,并将其定义写入STDEF表中;自动完成双层底指定肋板的定义,并将其写入STR表中等。
NAPA;NAPA BASIC;建模;NAPA STEEL
Abstract:In NAPA STEEL some modeling tasks could be done accurately and quickly by using macros developed with NAPA BASIC,which may save a lot of man work and improve efficiency.With summaries on structure detail design experience,several typical applications for quick NAPA STEEL structure modeling using NAPA BASIC macros had been introduced.The applications included functions such as writing the definition of OPENINGS and PROFILES with one button,automatically calculating the size and position of openings on the appointed stern floor which could fulfill the rule requirement and be written to the STDEF table,automatically defining double bottom floors and writing the definition into the STR table and so on.
Keywords:NAPA;NAPA BASIC;modeling;NAPA STEEL
NAPA STEEL是NAPA软件用于三维结构建模的一个模块,在船体结构基本设计及详细设计的初步阶段可以快速直观地表达出船体的三维结构,并在较短时间内完成精确的结构重量重心位置统计。另外该软件还可以批量生成二维图纸,使得船舶设计的效率大大提高。
NAPA BASIC作为NAPA软件自带的二次开发语言,可以实现功能定制[1],如船体结构的参数化建模[2],加快NAPA STEEL船体结构模型的建模速度。本文通过以下几个案例详细介绍如何利用NAPA BASIC来提高船体结构建模的效率:
1)为解决建模伊始常用型材和开孔快速定义的问题,通过预先写好的常用型材和开孔的宏定义语言,实现一键写入常用的开孔和型材定义;
2)为解决尾部分段肋板上开孔大小及开孔位置需手动计算及定义繁琐且效率低下的问题,通过宏语言自动计算出尾部分段指定肋板上所有减轻孔的大小及中心位置,使其满足设计要求,并将其定义写入STDEF表中;
3)以双层底肋板建模为例,解决类似船体结构的SURFACE OBJECT快速定义的问题,介绍了如何通过NAPA BASIC自动完成双层底指定肋板的定义,并将其写入STR表中。
NAPA BASIC宏接口是NAPA软件为了提升设计者的设计效率而提供的一种二次开发手段,通常在 TEXT 编辑器中编辑[3]。
在NAPA BASIC的宏中,一般包括以下两种类型的语句:NAPA命令;NAPA BASIC命令(或语句)[4]。NAPA 命令如 SO、GEN、UNS、!TYPE。 NAPA BASIC命令(或语句)包括一些特定的函数,如对字符串的操作函数 LEN()、SBS()、CNC()等,再如对 NAPA数据库中表格的操作函数TP.READ ()、TP.NLN()、TP.ASSIGN()等,当然也包括与其他语言类似的流控制语句:如@IF...@ENDIF,@FOR...@NEXT等。
一般常用的主要的数据类型包括数值型(A NUMERICAL VALUE)或字符串型(A STRING (TEXT)VALUE)[4]。 对变量的赋值方法,主要有以下两种:
1)在宏运行过程中对变量赋值:用“@”标记,如@A=5。
2)提示用户输入变量的值:如果是数值型,则以三个点表示,如@A=...GIVE THE VALUE OF A;如果是字符串型,则以四个点表示,如@A=....GIVE THE VALUE OF A。
另外可用类似@A=ARR(3)的语句定义数组类型,其中 ARR(1)、ARR(2)、ARR(3)分别代表数组元素的数据类型为INTEGER、REAL、STRING。
在宏中用于注释的语句用 “@@”标记,如@@THIS IS A COMMENT。
因为NAPA BASIC在TEXT编辑器中调试及运行,而NAPA软件给予的调试工具有限,所以可以在宏编写中间插入诸如!TYPE、@AP.TYPE、!VAR LIST等命令,列出需要调试或检验的结果。这样可以检验宏编写是否出现错误。
本节通过以下三个宏案例详细地介绍了在船体结构建模过程中碰到的一些问题,以及如何利用NAPA BASIC来解决这些问题以提高船体结构建模效率的思路和方法,以及最终的运行结果。
2.1.1 宏编写的背景
虽然NAPA STEEL内部拥有标准的型材库和开孔库,但仍然需要用户在特定的项目建模开始之前,手动定义“TAB*PROFILES”和“TAB*OPENINGS”,以便在定义STDEF表格的时候对其进行引用。因这些内容对于不同的项目来说,共性比较大,故可以在建模之初,先行一次性导入常用的型材和开孔的定义。
2.1.2 宏的实现方法
利用TAB命令进入TAB模块,将“TAB*PROFILES”或“TAB*OPENINGS”读入工作区之后,利用SEL和DEF命令组合,可以将PROFIES或OPENINGS的定义通过预设的宏自动写入NAPA数据库中,实现PROFIES或OPENINGS的自动定义。
核心代码如下:
1)对PROFILES的定义
2)对OPENINGS的定义
2.1.3 宏运行结果
运行结果如图1和图2所示。
图1 宏运行后TAB*PROFILES表示意
图2 宏运行后TAB*OPENINGS表示意
2.1.4 注意要点
为了防止运行宏写入型材或开孔的时候,因为表格中已经存在同样的定义而出错,可以在新定义的开孔或型材前加上特定的前缀加以区别。如表中已存在HP140X9,再写入同样的定义会出错;那么在批量写入的定义中统一加上前缀,如AFT_HP140X9,则可以避免错误的发生。
2.2.1 宏编写的背景
根据规范要求[5],在双层底肋板上的开孔高度应不大于该处双层底高度的50%。在设计过程中,在尾部肋板上的减轻孔的开孔大小也参照此条,一般不超过该处肋板高度的一半。
如果手动定义这些开孔,则首先需要选定一个肋位,在这个肋位的肋板上依次量取每个扶强材间距位置处肋板的高度,然后手动计算出需要的减轻孔大小,以及布置的高度。如果尾部肋板有10个肋位,而每个肋位需要开4个开孔,则需要重复上述工作40次,比较费时。
利用NAPA BASIC语言,可以通过循环语句@FOR...@NEXT,对所有肋位的每一个扶强材间距进行循环考察,自动获取肋板高度,并自动计算出所需要的减轻孔大小,以及布置的高度。这样可以避免许多的重复劳动,极大地提高了效率。
2.2.2 宏主过程的实现方法
1)首先利用DEF命令进入NAPA STEEL的DEF模块,提示用户输入指定格式的字符串 (即定义OPENING的肋位范围),如 “#0#4”,然后利用如PARSE、SBS、CNC等字符串操作函数将其解析成一个由FRAME0到FRAME4的肋位线名称组成的数组,再通过GEN命令,生成这些肋位线的CURVE对象。如以下语句可以生成FR0处的肋位线FRAME0:
GEN FRAME0 HULL/X=FMT(XFR(0))
2)针对每档肋位线,通过POINT命令,根据给定的每档扶强材位置处的Y坐标获得该点处船壳的Z坐标。如以下语句可以得到FRAME0上,第J个扶强材处的Z坐标:
POINT(FRAME0,2,XFR(J,3),1,3)
其中:XFR 函数格式为 XFR (FRAME,S),S 可以是以下几种参数:1=FRAMES,2=WEBS,3=LONGITUDINALS,4=VERTICALS。
3)提示用户输入尾部平台的高度PLAT,PLAT与船壳的Z坐标之差即肋板的高度。
@GOSUB ADDHOLE
(子过程的实现方法参见2.2.3)
5)回到DEF模块下,用UNS命令从NAPA数据库中删除新建的肋位线对象。如以下语句可以删除肋位线FRAME0:
UNS FRAME0
2.2.3 宏子过程的实现方法
1)首先利用@LABEL语句标记子过程的开始,并用@RETURN语句标记子过程的结束。代码如下:
@LABEL ADDHOLE
@RETURN
正确的监测分析方法是获得准确结果的关键因素之一。每一种监测分析方法的灵敏度和准确度要能满足要求,方法成熟,抗干扰能力强,操作简便。在常规监测中,分光光度法用得较多,可测定多种金属和非金属离子或化合物;原子吸收法主要用于多种微量、痕量金属元素的测定;容量法主要用于DO、COD、BOD5等的测定。审核时主要关注一些新监测标准和方法有没有进行及时更新。
2)通过以下算法,根据肋板高度值得到减轻孔的开孔大小和减轻孔中心的高度。此处HFLOOR(K)为数组HFLOOR第K个元素的值,即某位置的肋板高度,而VZ为减轻孔中心的高度,HOLEH为减轻孔的开孔大小。
@VZ=PLAT-INT (HFLOOR (K)*1 000/100)*50/1 000
@HOLEH=INT (HFLOOR (K)*1 000/200)*100
需要注意的是,NAPA中单位为m,而减轻孔的开孔大小一般是整百mm,而减轻孔中心的高度为整五十mm,故需要运用以上的换算方法。
3)进入STDEF模块,将需要编辑的STDEF表格(名称以变量表示,可以在宏内设定,也可以提示用户进行输入)读入工作区,然后用SEL和DEF命令将开孔定义写入当前表格。如以下代码可以在A.FLOOR0表中写入内容:
2.2.4 宏运行结果
运行结果如图3和图4所示。
图3 宏运行后STDEF表示意
图4 宏运行后肋板上开孔及加筋示意
2.2.5 注意要点
1)在宏编写的过程中,需要特别注意NAPA BASIC函数的参数传递。因为函数参数较多,如果对参数的含义理解不正确,可能导致结果谬误。如POINT函数格式如下:
POINT (CURVE,AXIS,Q,N,QAXIS), 包 含 的参数有5个,而实际使用中5个参数又不是必须传递的。 如以下两条语句 @P=POINT (‘FRF’,3,4),@Y=COORD (‘FRF’,2,P) 和以下一条语句 @Y=POINT(‘FRF’,3,4,1,2)是等效的。 这个在实际的应用中需要逐步的摸索。
2)因为在尾部分段肋板上的开孔基本上最小是400 mm直径,然后从400 mm×500 mm开始依次根据肋板的高度增加而增大,所以在宏代码中,需要对于肋板高度进行判断,如果小于800 mm,那么此处不开孔,如果处于800 mm~1 000 mm,开的是400 mm×500 mm的孔,以此类推。
2.3.1 宏编写的背景
在NAPA STEEL船体结构建模过程中,因为不同肋位处肋板的定义语句基本一样,可以用循环语句来批量定义这些肋板。
2.3.2 宏的实现方法
1)首先提示用户输入内底板SO对象名(如@UP),以及起始结束的肋位和定义的步长(如STA、EN、STEP)。利用循环语句可以一次性完成该范围内的肋板的定义。主要代码如下:
其中PREFIX是指定的肋板命名前缀。
2)利用STR命令进入STR模块,将目标表格读入工作区(如@TAB),再利用SEL和DEF命令将定义好的肋板一次性写入到目标表格中。主要代码如下:
2.3.3 宏运行结果
根据用户给定的变量值,如@UP=“C.BOTM”,@STA =55,@EN =100,@STEP =2,@PREFIX =“C.FLOOR”,@TAB=“FLOOR” 可以得到运行结果如图5所示。
图5 宏运行后STR表示意
本文通过几个案例详细地介绍了如何利用NAPA BASIC语言编写一些能实现NAPA STEEL船体结构快速建模的宏,并介绍了宏编制的思路和方法。
船体结构建模是一项复杂的工作,只有在不断的实践过程中,才能总结出规律性的东西,并将有一定规律性的重复工作交给宏来完成。希望本文能给予经常使用NAPA STEEL软件进行船体结构建模,并想通过NAPA BASIC进行二次开发加快工作效率的读者一些借鉴和启发。
[1]盛庆武.工程船船体湿表面网格NAPA软件自动生成技术[J].船舶,2010(6):53-57.
[2]管义锋,王剑.基于NAPA Steel的船体结构参数化建模研究[J].船舶工程,2009(5):37-39.
[3]周煜.宏在NAPA船舶完整稳性校核中的应用[J].广东造船,2014(6):48-49.
[4]NAPA.NAPA for Design Manuals[G].2013.
[5]中国船级社.钢质海船入级规范[S].2015.
Application of NAPA BASIC in NAPA STEEL Structure Quick Modeling
LUO Zhen-quan ZHANG Guan-nan HUANG Jin-tao
(Shanghai Merchant Ship Design and Research Institute,Shanghai 201203,China)
U662.9
A
1001-4624(2017)01-0075-04
2016-09-30;
2017-04-15
罗镇泉(1987—),男,工程师,从事船舶结构设计工作。
张冠楠(1987—),男,工程师,从事船舶结构设计工作。
黄锦涛(1985—),男,工程师,从事船舶结构设计工作。