羅鎮(zhèn)泉 張冠楠 黃錦濤
(上海船舶研究設計院,上海201203)
NAPA BASIC在NAPA STEEL結(jié)構(gòu)快速建模中的應用
羅鎮(zhèn)泉 張冠楠 黃錦濤
(上海船舶研究設計院,上海201203)
利用NAPA軟件提供的NAPA BASIC語言編寫的宏,可以快速并準確地完成一些NAPA STEEL船體結(jié)構(gòu)建模工作,可以節(jié)省很多人力并提高效率。通過總結(jié)船體結(jié)構(gòu)詳細設計經(jīng)驗,提出了幾項典型的利用NAPA BASIC宏語言實現(xiàn)部分船體結(jié)構(gòu)快速建模的案例:一鍵寫入常用的開孔和型材定義;自動計算出尾部分段指定肋板上所有減輕孔的大小及中心位置,使其滿足設計要求,并將其定義寫入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軟件用于三維結(jié)構(gòu)建模的一個模塊,在船體結(jié)構(gòu)基本設計及詳細設計的初步階段可以快速直觀地表達出船體的三維結(jié)構(gòu),并在較短時間內(nèi)完成精確的結(jié)構(gòu)重量重心位置統(tǒng)計。另外該軟件還可以批量生成二維圖紙,使得船舶設計的效率大大提高。
NAPA BASIC作為NAPA軟件自帶的二次開發(fā)語言,可以實現(xiàn)功能定制[1],如船體結(jié)構(gòu)的參數(shù)化建模[2],加快NAPA STEEL船體結(jié)構(gòu)模型的建模速度。本文通過以下幾個案例詳細介紹如何利用NAPA BASIC來提高船體結(jié)構(gòu)建模的效率:
1)為解決建模伊始常用型材和開孔快速定義的問題,通過預先寫好的常用型材和開孔的宏定義語言,實現(xiàn)一鍵寫入常用的開孔和型材定義;
2)為解決尾部分段肋板上開孔大小及開孔位置需手動計算及定義繁瑣且效率低下的問題,通過宏語言自動計算出尾部分段指定肋板上所有減輕孔的大小及中心位置,使其滿足設計要求,并將其定義寫入STDEF表中;
3)以雙層底肋板建模為例,解決類似船體結(jié)構(gòu)的SURFACE OBJECT快速定義的問題,介紹了如何通過NAPA BASIC自動完成雙層底指定肋板的定義,并將其寫入STR表中。
NAPA BASIC宏接口是NAPA軟件為了提升設計者的設計效率而提供的一種二次開發(fā)手段,通常在 TEXT 編輯器中編輯[3]。
在NAPA BASIC的宏中,一般包括以下兩種類型的語句:NAPA命令;NAPA BASIC命令(或語句)[4]。NAPA 命令如 SO、GEN、UNS、!TYPE。 NAPA BASIC命令(或語句)包括一些特定的函數(shù),如對字符串的操作函數(shù) LEN()、SBS()、CNC()等,再如對 NAPA數(shù)據(jù)庫中表格的操作函數(shù)TP.READ ()、TP.NLN()、TP.ASSIGN()等,當然也包括與其他語言類似的流控制語句:如@IF...@ENDIF,@FOR...@NEXT等。
一般常用的主要的數(shù)據(jù)類型包括數(shù)值型(A NUMERICAL VALUE)或字符串型(A STRING (TEXT)VALUE)[4]。 對變量的賦值方法,主要有以下兩種:
1)在宏運行過程中對變量賦值:用“@”標記,如@A=5。
2)提示用戶輸入變量的值:如果是數(shù)值型,則以三個點表示,如@A=...GIVE THE VALUE OF A;如果是字符串型,則以四個點表示,如@A=....GIVE THE VALUE OF A。
另外可用類似@A=ARR(3)的語句定義數(shù)組類型,其中 ARR(1)、ARR(2)、ARR(3)分別代表數(shù)組元素的數(shù)據(jù)類型為INTEGER、REAL、STRING。
在宏中用于注釋的語句用 “@@”標記,如@@THIS IS A COMMENT。
因為NAPA BASIC在TEXT編輯器中調(diào)試及運行,而NAPA軟件給予的調(diào)試工具有限,所以可以在宏編寫中間插入諸如!TYPE、@AP.TYPE、!VAR LIST等命令,列出需要調(diào)試或檢驗的結(jié)果。這樣可以檢驗宏編寫是否出現(xiàn)錯誤。
本節(jié)通過以下三個宏案例詳細地介紹了在船體結(jié)構(gòu)建模過程中碰到的一些問題,以及如何利用NAPA BASIC來解決這些問題以提高船體結(jié)構(gòu)建模效率的思路和方法,以及最終的運行結(jié)果。
2.1.1 宏編寫的背景
雖然NAPA STEEL內(nèi)部擁有標準的型材庫和開孔庫,但仍然需要用戶在特定的項目建模開始之前,手動定義“TAB*PROFILES”和“TAB*OPENINGS”,以便在定義STDEF表格的時候?qū)ζ溥M行引用。因這些內(nèi)容對于不同的項目來說,共性比較大,故可以在建模之初,先行一次性導入常用的型材和開孔的定義。
2.1.2 宏的實現(xiàn)方法
利用TAB命令進入TAB模塊,將“TAB*PROFILES”或“TAB*OPENINGS”讀入工作區(qū)之后,利用SEL和DEF命令組合,可以將PROFIES或OPENINGS的定義通過預設的宏自動寫入NAPA數(shù)據(jù)庫中,實現(xiàn)PROFIES或OPENINGS的自動定義。
核心代碼如下:
1)對PROFILES的定義
2)對OPENINGS的定義
2.1.3 宏運行結(jié)果
運行結(jié)果如圖1和圖2所示。
圖1 宏運行后TAB*PROFILES表示意
圖2 宏運行后TAB*OPENINGS表示意
2.1.4 注意要點
為了防止運行宏寫入型材或開孔的時候,因為表格中已經(jīng)存在同樣的定義而出錯,可以在新定義的開孔或型材前加上特定的前綴加以區(qū)別。如表中已存在HP140X9,再寫入同樣的定義會出錯;那么在批量寫入的定義中統(tǒng)一加上前綴,如AFT_HP140X9,則可以避免錯誤的發(fā)生。
2.2.1 宏編寫的背景
根據(jù)規(guī)范要求[5],在雙層底肋板上的開孔高度應不大于該處雙層底高度的50%。在設計過程中,在尾部肋板上的減輕孔的開孔大小也參照此條,一般不超過該處肋板高度的一半。
如果手動定義這些開孔,則首先需要選定一個肋位,在這個肋位的肋板上依次量取每個扶強材間距位置處肋板的高度,然后手動計算出需要的減輕孔大小,以及布置的高度。如果尾部肋板有10個肋位,而每個肋位需要開4個開孔,則需要重復上述工作40次,比較費時。
利用NAPA BASIC語言,可以通過循環(huán)語句@FOR...@NEXT,對所有肋位的每一個扶強材間距進行循環(huán)考察,自動獲取肋板高度,并自動計算出所需要的減輕孔大小,以及布置的高度。這樣可以避免許多的重復勞動,極大地提高了效率。
2.2.2 宏主過程的實現(xiàn)方法
1)首先利用DEF命令進入NAPA STEEL的DEF模塊,提示用戶輸入指定格式的字符串 (即定義OPENING的肋位范圍),如 “#0#4”,然后利用如PARSE、SBS、CNC等字符串操作函數(shù)將其解析成一個由FRAME0到FRAME4的肋位線名稱組成的數(shù)組,再通過GEN命令,生成這些肋位線的CURVE對象。如以下語句可以生成FR0處的肋位線FRAME0:
GEN FRAME0 HULL/X=FMT(XFR(0))
2)針對每檔肋位線,通過POINT命令,根據(jù)給定的每檔扶強材位置處的Y坐標獲得該點處船殼的Z坐標。如以下語句可以得到FRAME0上,第J個扶強材處的Z坐標:
POINT(FRAME0,2,XFR(J,3),1,3)
其中:XFR 函數(shù)格式為 XFR (FRAME,S),S 可以是以下幾種參數(shù):1=FRAMES,2=WEBS,3=LONGITUDINALS,4=VERTICALS。
3)提示用戶輸入尾部平臺的高度PLAT,PLAT與船殼的Z坐標之差即肋板的高度。
@GOSUB ADDHOLE
(子過程的實現(xiàn)方法參見2.2.3)
5)回到DEF模塊下,用UNS命令從NAPA數(shù)據(jù)庫中刪除新建的肋位線對象。如以下語句可以刪除肋位線FRAME0:
UNS FRAME0
2.2.3 宏子過程的實現(xiàn)方法
1)首先利用@LABEL語句標記子過程的開始,并用@RETURN語句標記子過程的結(jié)束。代碼如下:
@LABEL ADDHOLE
@RETURN
正確的監(jiān)測分析方法是獲得準確結(jié)果的關(guān)鍵因素之一。每一種監(jiān)測分析方法的靈敏度和準確度要能滿足要求,方法成熟,抗干擾能力強,操作簡便。在常規(guī)監(jiān)測中,分光光度法用得較多,可測定多種金屬和非金屬離子或化合物;原子吸收法主要用于多種微量、痕量金屬元素的測定;容量法主要用于DO、COD、BOD5等的測定。審核時主要關(guān)注一些新監(jiān)測標準和方法有沒有進行及時更新。
2)通過以下算法,根據(jù)肋板高度值得到減輕孔的開孔大小和減輕孔中心的高度。此處HFLOOR(K)為數(shù)組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表格(名稱以變量表示,可以在宏內(nèi)設定,也可以提示用戶進行輸入)讀入工作區(qū),然后用SEL和DEF命令將開孔定義寫入當前表格。如以下代碼可以在A.FLOOR0表中寫入內(nèi)容:
2.2.4 宏運行結(jié)果
運行結(jié)果如圖3和圖4所示。
圖3 宏運行后STDEF表示意
圖4 宏運行后肋板上開孔及加筋示意
2.2.5 注意要點
1)在宏編寫的過程中,需要特別注意NAPA BASIC函數(shù)的參數(shù)傳遞。因為函數(shù)參數(shù)較多,如果對參數(shù)的含義理解不正確,可能導致結(jié)果謬誤。如POINT函數(shù)格式如下:
POINT (CURVE,AXIS,Q,N,QAXIS), 包 含 的參數(shù)有5個,而實際使用中5個參數(shù)又不是必須傳遞的。 如以下兩條語句 @P=POINT (‘FRF’,3,4),@Y=COORD (‘FRF’,2,P) 和以下一條語句 @Y=POINT(‘FRF’,3,4,1,2)是等效的。 這個在實際的應用中需要逐步的摸索。
2)因為在尾部分段肋板上的開孔基本上最小是400 mm直徑,然后從400 mm×500 mm開始依次根據(jù)肋板的高度增加而增大,所以在宏代碼中,需要對于肋板高度進行判斷,如果小于800 mm,那么此處不開孔,如果處于800 mm~1 000 mm,開的是400 mm×500 mm的孔,以此類推。
2.3.1 宏編寫的背景
在NAPA STEEL船體結(jié)構(gòu)建模過程中,因為不同肋位處肋板的定義語句基本一樣,可以用循環(huán)語句來批量定義這些肋板。
2.3.2 宏的實現(xiàn)方法
1)首先提示用戶輸入內(nèi)底板SO對象名(如@UP),以及起始結(jié)束的肋位和定義的步長(如STA、EN、STEP)。利用循環(huán)語句可以一次性完成該范圍內(nèi)的肋板的定義。主要代碼如下:
其中PREFIX是指定的肋板命名前綴。
2)利用STR命令進入STR模塊,將目標表格讀入工作區(qū)(如@TAB),再利用SEL和DEF命令將定義好的肋板一次性寫入到目標表格中。主要代碼如下:
2.3.3 宏運行結(jié)果
根據(jù)用戶給定的變量值,如@UP=“C.BOTM”,@STA =55,@EN =100,@STEP =2,@PREFIX =“C.FLOOR”,@TAB=“FLOOR” 可以得到運行結(jié)果如圖5所示。
圖5 宏運行后STR表示意
本文通過幾個案例詳細地介紹了如何利用NAPA BASIC語言編寫一些能實現(xiàn)NAPA STEEL船體結(jié)構(gòu)快速建模的宏,并介紹了宏編制的思路和方法。
船體結(jié)構(gòu)建模是一項復雜的工作,只有在不斷的實踐過程中,才能總結(jié)出規(guī)律性的東西,并將有一定規(guī)律性的重復工作交給宏來完成。希望本文能給予經(jīng)常使用NAPA STEEL軟件進行船體結(jié)構(gòu)建模,并想通過NAPA BASIC進行二次開發(fā)加快工作效率的讀者一些借鑒和啟發(fā)。
[1]盛慶武.工程船船體濕表面網(wǎng)格NAPA軟件自動生成技術(shù)[J].船舶,2010(6):53-57.
[2]管義鋒,王劍.基于NAPA Steel的船體結(jié)構(gòu)參數(shù)化建模研究[J].船舶工程,2009(5):37-39.
[3]周煜.宏在NAPA船舶完整穩(wěn)性校核中的應用[J].廣東造船,2014(6):48-49.
[4]NAPA.NAPA for Design Manuals[G].2013.
[5]中國船級社.鋼質(zhì)海船入級規(guī)范[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
羅鎮(zhèn)泉(1987—),男,工程師,從事船舶結(jié)構(gòu)設計工作。
張冠楠(1987—),男,工程師,從事船舶結(jié)構(gòu)設計工作。
黃錦濤(1985—),男,工程師,從事船舶結(jié)構(gòu)設計工作。