趙 旭,朱安慶,高 霆
(1.江蘇現(xiàn)代造船技術有限公司,江蘇 鎮(zhèn)江 212003;2.江蘇科技大學,江蘇 鎮(zhèn)江 212000)
20世紀90年代以來,TRIBON軟件在國內(nèi)開始被廣泛使用,技術人員根據(jù)各自的特點和需求進行了大量的研究和二次開發(fā)。鄭剛較為系統(tǒng)地闡述了TRIBON軟件二次開發(fā)的原理和方法;譚海蟬等研究了TRIBON軟件精確統(tǒng)計緊固件的方法。經(jīng)過多年的使用和發(fā)展,TRIBON軟件的二次開發(fā)程序已經(jīng)非常成熟。
與TRIBON M系列有所不同,AM軟件集成了數(shù)字化三維工廠設計系統(tǒng)(PDMS軟件)的精華與TRIBON M3船體設計模塊而成的船舶設計軟件。AM軟件可以實現(xiàn)船舶設計的建模3D化,相對于TRIBON是個巨大的進步。隨著船舶建造管理的現(xiàn)代化、高效化,以及生產(chǎn)設計內(nèi)容不斷加深,AM軟件開始被廣泛地應用。但由于AM軟件二次開發(fā)工作的滯后,導致該軟件在國內(nèi)船舶企業(yè)的適配性反而不如TRIBON軟件。為此,本文分別介紹了TRIBON軟件和AM軟件的二次開發(fā)方法,重點從開發(fā)語言、建模類二次開發(fā)和出圖類二次開發(fā)分析出兩者的不同之處和相似之處。該研究有利于開發(fā)人員快速地進行AM軟件的二次開發(fā)及將TRIBON軟件中出圖類二次開發(fā)程序快速地移植到AM軟件中,使TRIBON軟件升級到AM軟件具有連貫性。
TRIBON軟件二次開發(fā)工具Vitesse是基于Python語言而創(chuàng)建的工具庫。Python語言配合第三方wxPython工具進行Windows友好界面開發(fā),非常適合TRIBON軟件的應用與開發(fā)。
Vitesse提供了許多函數(shù)接口,可以分為裝配計劃函數(shù)、電氣模型函數(shù)、用戶界面函數(shù)、用戶自定義函數(shù)、數(shù)據(jù)庫函數(shù)、數(shù)據(jù)抽取函數(shù)、圖紙函數(shù)、船體平面模型函數(shù)、用戶交互函數(shù)、用戶工具函數(shù)、設備模型函數(shù)、鐵舾模型函數(shù)、管子模型函數(shù)、實體模型函數(shù)、通用模型函數(shù)、結構模型函數(shù)、船體曲面模型函數(shù)、規(guī)格書函數(shù)、焊接計劃函數(shù)等。一個簡單的Vitesse主要包含3個部分:①用import關鍵字調入模塊;②用def關鍵字定義方法;③調用方法運行。
TRIBON提供了交互式的數(shù)據(jù)查詢程序SX700。SX700是數(shù)據(jù)抽取必備的輔助工具,其語法是由一系列的關鍵字(Keywords)組成的,例如Pipe、Hull、Structure等,第2個關鍵字是屬性,后面不同的類型有不同的關鍵字,關鍵字之間通過“.”分隔符連接,有些關鍵字后面會有一些參數(shù)(Arguments),參數(shù)中支持通配符模糊查詢。
使用SX700查看和分析結果后,將合適的抽取命令引用到其他編程語言中。SX700.exe位于TRIBON安裝目錄的bin文件夾下,可以直接運行。
wxPython是Python語言一套GUI圖形庫,運行Python可以創(chuàng)建完整的、功能健全的GUI用戶界面。wxPython程序有5個基本步驟:
(1)導入必須的wxPython包。
(2)子類化wxPython應用程序類。
(3)定義一個應用程序的初始方法。
(4)創(chuàng)建一個應用程序類的實例。
(5)進入這個應用程序的主事件。
利用Vitesse API和SX700輔助工具進行py文件的編寫,就可以進行TRIBON軟件的二次開發(fā)。
TRIBON也可以利用自身軟件的COM接口進行數(shù)據(jù)的抽取、項目的選擇和圖紙的打印等功能。利用COM接口進行二次開發(fā)的優(yōu)點是能夠脫離TRIBON單獨運行,可以用C、C++、VB、C#等語言進行編程,且可以用更好的IDE和更多的第三方工具,缺點則是無法對模型進行編輯和修改。
AM軟件的二次開發(fā)根據(jù)編程平臺可以分為兩類:AM軟件提供的PML(Programmable Macro Language)和.NET平臺的開發(fā)語言,如C#等。
PML是直接在軟件平臺上執(zhí)行的解釋性語言,是AVEVA公司使用的定制語言,可以使PML將二次開發(fā)程序在AVEVA系列的軟件中無需編譯即可運行。PML的文件類型共有3種,分別為函數(shù)文件functions(后綴名為.pmlfnc)、窗體文件forms(后綴名為.pmlfrm)和對象文件objects(后綴名為.pmlobj)。PML程序文件的后綴名必須是小寫。
Functions文件用來定義全局變量,以define function開頭、endfunciton結尾。如:定義一個全局變量!!Area的函數(shù),其文件名為!!Area.pmlfnc,返回值為real類型,通過PML進行編寫,并在AM軟件CommandWindow中運行。
Objects對象文件用來定義全局的對象。對象可定義多個成員屬性和方法,類似于現(xiàn)代面向對象語言中對象類的概念,如:定義了一個PANEAREA的對象,可擁有l(wèi)ength、width、area 3個屬性。
Forms窗體文件可用來定義界面,利用AM內(nèi)置的控件,可編寫出與用戶友好的界面,不用編譯,直接在AM軟件中運行即可。其結構形式為setup form開頭,以exit結尾。
AM軟件中內(nèi)置了很多控件,包括按鈕、下拉菜單、列表、文字、單選框、勾選框、輸入框等,可以通過PML二次開發(fā)調用。
AM軟件的PML編程方法有以下優(yōu)點:
(1)語法簡單易懂,具備現(xiàn)代編程語言的大部分功能。
(2)可以與AM軟件無縫銜接,直接在AM軟件中調試。
(3)AM軟件中有很多PML開源的文件,可供參考。
同時,PML也有比較明顯的缺點:
(1)雖然有UE作為編輯器使用,但是其提示和輔助功能較弱。
(2)PML在設計窗體界面時,全靠代碼輸入,需要多次調試才能達到滿意的效果。
(3)目前沒有完整的幫助文檔,只能通過查閱開發(fā)的源碼去尋找是否有想要的方法。
除了PML,AM軟件還引入了對.NET技術的支持,開發(fā)人員可以在PML程序中直接調用.NET程序,也可以在.NET程序中調用PML代碼。此外,AM軟件提供了一系列的.NET API,使開發(fā)人員可以直接引用相關的動態(tài)庫后直接使用API進行C#編程。AM軟件提供的API覆蓋了絕大部分的功能實現(xiàn),并且.NET開發(fā)的界面可以直接加載到AM軟件的窗口中,因此開發(fā)者也可以完全使用C#進行編程。其主要步驟如下:
(1)生成動態(tài)庫。在visual studio 2010(或以上版本)中創(chuàng)建新的項目,在模板中選擇類庫,框架選擇.NET Framework 3.5,引用 Aveva.ApplicationFramework.dll和Aveva.ApplicaitonFramework.Presentation.dll,用using關鍵字導入命名空間Aveva.ApplicationFramework和Aveva.ApplicationFramework.Presentation。新建類繼承IAddin接口,并定義IAddin接口2個必須要定義的方法Start()和Stop():在Start()方法中傳遞ServiceManager實例,通過GetService的方法來獲取WindowManager的功能,并使用WindowManager和CreateDockedWindow方法創(chuàng)建1個浮動窗口來放置新界面,加載新插件繼承Aveva.ApplicationFramework.Presentation中的Command類,定義base.Key的值,通過重寫Execute()方法來控制插入的控件。
(2)動態(tài)庫安裝目錄:將VS編譯后的DLL文件放置到AM軟件默認的路徑下。
(3)添加插件信息:定義AM軟件的插件控制文件,如Marine Drafting模塊控制文件為marinedraftingaddins.xml,將DLL名加入到XML文件中。
(4)自定義插件的菜單或命令欄:在C:AVEVAMarineOH12.1.SP4路徑下新建1個UIC格式的文件,如取名為MyAddin,用于在AM軟件中定義工具條時使用,并將新建的UIC文件注冊到對應模塊的自定義文件中即可完成注冊。
AM軟件預留了很多接口供開發(fā)人員對數(shù)據(jù)庫、模型庫、幾何庫、功能庫、圖形庫等進行開發(fā)。其主要的接口如下:
(1)Aveva.Pdms.Database。這是最常用的接口之一,用于對數(shù)據(jù)的獲取和編輯。這個命名空間下有許多類供開發(fā)者使用:DbElement、DbElementType、DatabaseService、Db、DbCollection、DBAttribute、MDB等。
(2)Aveva.Pdms.Shared。這個命名空間下有一個使用率高的類“CurrentElement.Element”,用來獲取當前選擇的元素,返回值為DbElement實例。
(3)Aveva.Marine.UI。這個命名空間下主要是與用戶交互的類,其中“MarUi”是最常用的類,Marine Drafting模塊中內(nèi)置的對話框都在這個類中。此外,該類還提供了即時刷新圖紙的方法。
(4)Aveva.Marine.Geometry。這個命名空間下提供了平面出圖工作的所有類對象,包括平面圓弧、平面畫圓、平面直線、平面點、平面多邊形、平面多段線、平面移動、平面向量和方向等。
(5)Aveva.Marine.Drafting。這個命名空間是畫圖類開發(fā)最主要的命名空間,提供了對畫圖工作的各類操作,其中:MarDrafting類是畫圖工作必須要使用的類,包含了所有畫圖的操作方法,如所有圖形的創(chuàng)建、對子圖和圖層的操作、對圖形元素的識別和獲取、對圖紙的操作等。此外,MarColour、MarCursorType、MarElementHandle、MarHightlightSet、MarLinetype、MarModel、MarPrintOption、MarSymbol、MarText等類也是出圖類開發(fā)必須要用到的類。
綜上,AM軟件在.NET平臺上的二次開發(fā)流程為:VS進行代碼編寫→生成DLL文件→添加至AM軟件配置文件→在AM界面中配置二次開發(fā)按鈕→運行二次開發(fā)程序。
TRIBON軟件可以用Python和.NET 2種平臺的語言。.NET平臺只能對數(shù)據(jù)進行讀取和操作,而無法對TRIBON軟件的模型進行修改。Python和Vitesse可以編寫TRIBON所有功能的二次開發(fā),但是wxPython的界面設計效率較低,且TRIBON軟件最高只支持Python2.3的較低版本。AM軟件可以用PML和.NET 2種平臺的語言。雖然是AM軟件內(nèi)置的語言,但是PML是小眾語言,且PML做界面與wxPython一樣效率較低。而AM軟件的.NET平臺的開發(fā)很強大,界面可以用visual studio來完成,并且.NET平臺有非常多的第三方資源可以使用。
3.2.1 建模類的二次開發(fā)
TRIBON軟件并未開放數(shù)據(jù)結構,因此建模類二次開發(fā)只能根據(jù)TRIBON提供的方法參數(shù)去進行開發(fā);而AM各種類型的數(shù)據(jù)屬性都是開放的,可以用面向對象的邏輯屬性賦值進行二次開發(fā)。
3.2.2 出圖類的二次開發(fā)
由于AM軟件的Marine Drafting模塊是從TRIBON軟件的Drafting模塊移植的,兩者界面和操作基本一致,開發(fā)的方法也有類似之處;TRIBON軟件出圖類的方法都是以kcs_draft開頭。以新建圖紙調入模型的的方法為例:
(1)插入模塊import kcs_draft。
(2) 創(chuàng)建圖紙dwg_new。參數(shù)有3個:第1個“DwgName”圖紙名稱是必須的參數(shù),第2個“FormName”圖框名稱和第3個“DwgType”圖紙類型不是必填的參數(shù)。
(3)創(chuàng)建視圖view_new。參數(shù)有3個:第1個“ViewName”視圖名稱是必須的參數(shù),第2個“Uvect”和“Vvect” 2個視向參數(shù)不是必填的參數(shù)。
(4)定義模型KcsModel.Model。有2個必須的參數(shù):第1個“Type”是模型的類型,第2個“Name”是模型的名字。
(5)調入模型model_draw。參數(shù)有2個:第1個必須的參數(shù)“model”是第3步定義的模型類;第2個非必須的參數(shù)“viewhandle”是第2步創(chuàng)建視圖的返回值。
AM軟件的.NET平臺出圖類二次開發(fā)與TRIBON軟件上方的示例在方法內(nèi)容上十分類似。AM軟件中出圖的方法都在Aveva.Marine.Drafting命名空間中。同樣以新建圖紙調入模型的的方法為例:
(1)引用和實例化。引用類庫using Aveva.Marine.Drafting,實例化MarDrafting marDrafting = new MarDrafting()。
(2)創(chuàng)建圖紙DwgNew。第1個參數(shù)“dwgName”是圖名,重載的方法中第2個參數(shù)“formName”是圖框名,第3個參數(shù)“DwgType”則是圖紙類型。
(3)創(chuàng)建視圖ViewNew。第1個參數(shù)“ViewName”是視圖名,重載的方法中第2個參數(shù)“Uvect”和第3個參數(shù)“Vvect”是視圖的2個方向。
(4)定義模型MarModel。有2個必須的參數(shù),分別是“Type”模型類型和“Name”模型名。
(5)調入模型ModelDraw。參數(shù)有2個:第1個
必須的參數(shù)“model”是第3步定義的模型類,第2個非必須的參數(shù)“viewhandle”是第2步創(chuàng)建視圖的返回值。
(1)TRIBON軟件與AM軟件二次開發(fā)相比,TRIBON軟件的開發(fā)語言版本更低。在界面設計時:TRIBON軟件的效率和資源遠低于AM軟件;AM軟件可使用visual studio和第三方資源,使二次開發(fā)更加快速、功能更加強大、調試編譯更加方便。
(2)TRIBON軟件建模方面的二次開發(fā)只能根據(jù)幫助文檔中的方法和說明進行編寫,相比AM軟件可面向對象的數(shù)據(jù)屬性進行二次開發(fā)而言,TRIBON軟件則相對比較復雜和低效。
(3)出圖類的二次開發(fā)方面,TRIBON軟件和AM軟件基本在原理和思路上是一樣的,僅僅是函數(shù)名有所不同。隨著TRIBON軟件逐漸升級為AM軟件,TRIBON軟件大量成熟的出圖類二次開發(fā)程序可以快速地移植到AM軟件中,使TRIBON軟件升級到AM軟件具有連貫性。