TRIBON软件与AM软件二次开发方法的比较

2021-11-12 13:18朱安庆
江苏船舶 2021年3期

赵 旭,朱安庆,高 霆

(1.江苏现代造船技术有限公司,江苏 镇江 212003;2.江苏科技大学,江苏 镇江 212000)

0 引言

20世纪90年代以来,TRIBON软件在国内开始被广泛使用,技术人员根据各自的特点和需求进行了大量的研究和二次开发。郑刚较为系统地阐述了TRIBON软件二次开发的原理和方法;谭海蝉等研究了TRIBON软件精确统计紧固件的方法。经过多年的使用和发展,TRIBON软件的二次开发程序已经非常成熟。

与TRIBON M系列有所不同,AM软件集成了数字化三维工厂设计系统(PDMS软件)的精华与TRIBON M3船体设计模块而成的船舶设计软件。AM软件可以实现船舶设计的建模3D化,相对于TRIBON是个巨大的进步。随着船舶建造管理的现代化、高效化,以及生产设计内容不断加深,AM软件开始被广泛地应用。但由于AM软件二次开发工作的滞后,导致该软件在国内船舶企业的适配性反而不如TRIBON软件。为此,本文分别介绍了TRIBON软件和AM软件的二次开发方法,重点从开发语言、建模类二次开发和出图类二次开发分析出两者的不同之处和相似之处。该研究有利于开发人员快速地进行AM软件的二次开发及将TRIBON软件中出图类二次开发程序快速地移植到AM软件中,使TRIBON软件升级到AM软件具有连贯性。

1 TRIBON软件二次开发方法

TRIBON软件二次开发工具Vitesse是基于Python语言而创建的工具库。Python语言配合第三方wxPython工具进行Windows友好界面开发,非常适合TRIBON软件的应用与开发。

1.1 Vitesse二次开发方法

Vitesse提供了许多函数接口,可以分为装配计划函数、电气模型函数、用户界面函数、用户自定义函数、数据库函数、数据抽取函数、图纸函数、船体平面模型函数、用户交互函数、用户工具函数、设备模型函数、铁舾模型函数、管子模型函数、实体模型函数、通用模型函数、结构模型函数、船体曲面模型函数、规格书函数、焊接计划函数等。一个简单的Vitesse主要包含3个部分:①用import关键字调入模块;②用def关键字定义方法;③调用方法运行。

TRIBON提供了交互式的数据查询程序SX700。SX700是数据抽取必备的辅助工具,其语法是由一系列的关键字(Keywords)组成的,例如Pipe、Hull、Structure等,第2个关键字是属性,后面不同的类型有不同的关键字,关键字之间通过“.”分隔符连接,有些关键字后面会有一些参数(Arguments),参数中支持通配符模糊查询。

使用SX700查看和分析结果后,将合适的抽取命令引用到其他编程语言中。SX700.exe位于TRIBON安装目录的bin文件夹下,可以直接运行。

wxPython是Python语言一套GUI图形库,运行Python可以创建完整的、功能健全的GUI用户界面。wxPython程序有5个基本步骤:

(1)导入必须的wxPython包。

(2)子类化wxPython应用程序类。

(3)定义一个应用程序的初始方法。

(4)创建一个应用程序类的实例。

(5)进入这个应用程序的主事件。

利用Vitesse API和SX700辅助工具进行py文件的编写,就可以进行TRIBON软件的二次开发。

1.2 COM二次开发方法

TRIBON也可以利用自身软件的COM接口进行数据的抽取、项目的选择和图纸的打印等功能。利用COM接口进行二次开发的优点是能够脱离TRIBON单独运行,可以用C、C++、VB、C#等语言进行编程,且可以用更好的IDE和更多的第三方工具,缺点则是无法对模型进行编辑和修改。

2 AM软件二次开发方法

AM软件的二次开发根据编程平台可以分为两类:AM软件提供的PML(Programmable Macro Language)和.NET平台的开发语言,如C#等。

2.1 PML二次开发方法

PML是直接在软件平台上执行的解释性语言,是AVEVA公司使用的定制语言,可以使PML将二次开发程序在AVEVA系列的软件中无需编译即可运行。PML的文件类型共有3种,分别为函数文件functions(后缀名为.pmlfnc)、窗体文件forms(后缀名为.pmlfrm)和对象文件objects(后缀名为.pmlobj)。PML程序文件的后缀名必须是小写。

Functions文件用来定义全局变量,以define function开头、endfunciton结尾。如:定义一个全局变量!!Area的函数,其文件名为!!Area.pmlfnc,返回值为real类型,通过PML进行编写,并在AM软件CommandWindow中运行。

Objects对象文件用来定义全局的对象。对象可定义多个成员属性和方法,类似于现代面向对象语言中对象类的概念,如:定义了一个PANEAREA的对象,可拥有length、width、area 3个属性。

Forms窗体文件可用来定义界面,利用AM内置的控件,可编写出与用户友好的界面,不用编译,直接在AM软件中运行即可。其结构形式为setup form开头,以exit结尾。

AM软件中内置了很多控件,包括按钮、下拉菜单、列表、文字、单选框、勾选框、输入框等,可以通过PML二次开发调用。

AM软件的PML编程方法有以下优点:

(1)语法简单易懂,具备现代编程语言的大部分功能。

(2)可以与AM软件无缝衔接,直接在AM软件中调试。

(3)AM软件中有很多PML开源的文件,可供参考。

同时,PML也有比较明显的缺点:

(1)虽然有UE作为编辑器使用,但是其提示和辅助功能较弱。

(2)PML在设计窗体界面时,全靠代码输入,需要多次调试才能达到满意的效果。

(3)目前没有完整的帮助文档,只能通过查阅开发的源码去寻找是否有想要的方法。

2.2 .NET二次开发方法

除了PML,AM软件还引入了对.NET技术的支持,开发人员可以在PML程序中直接调用.NET程序,也可以在.NET程序中调用PML代码。此外,AM软件提供了一系列的.NET API,使开发人员可以直接引用相关的动态库后直接使用API进行C#编程。AM软件提供的API覆盖了绝大部分的功能实现,并且.NET开发的界面可以直接加载到AM软件的窗口中,因此开发者也可以完全使用C#进行编程。其主要步骤如下:

(1)生成动态库。在visual studio 2010(或以上版本)中创建新的项目,在模板中选择类库,框架选择.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方法创建1个浮动窗口来放置新界面,加载新插件继承Aveva.ApplicationFramework.Presentation中的Command类,定义base.Key的值,通过重写Execute()方法来控制插入的控件。

(2)动态库安装目录:将VS编译后的DLL文件放置到AM软件默认的路径下。

(3)添加插件信息:定义AM软件的插件控制文件,如Marine Drafting模块控制文件为marinedraftingaddins.xml,将DLL名加入到XML文件中。

(4)自定义插件的菜单或命令栏:在C:AVEVAMarineOH12.1.SP4路径下新建1个UIC格式的文件,如取名为MyAddin,用于在AM软件中定义工具条时使用,并将新建的UIC文件注册到对应模块的自定义文件中即可完成注册。

AM软件预留了很多接口供开发人员对数据库、模型库、几何库、功能库、图形库等进行开发。其主要的接口如下:

(1)Aveva.Pdms.Database。这是最常用的接口之一,用于对数据的获取和编辑。这个命名空间下有许多类供开发者使用:DbElement、DbElementType、DatabaseService、Db、DbCollection、DBAttribute、MDB等。

(2)Aveva.Pdms.Shared。这个命名空间下有一个使用率高的类“CurrentElement.Element”,用来获取当前选择的元素,返回值为DbElement实例。

(3)Aveva.Marine.UI。这个命名空间下主要是与用户交互的类,其中“MarUi”是最常用的类,Marine Drafting模块中内置的对话框都在这个类中。此外,该类还提供了即时刷新图纸的方法。

(4)Aveva.Marine.Geometry。这个命名空间下提供了平面出图工作的所有类对象,包括平面圆弧、平面画圆、平面直线、平面点、平面多边形、平面多段线、平面移动、平面向量和方向等。

(5)Aveva.Marine.Drafting。这个命名空间是画图类开发最主要的命名空间,提供了对画图工作的各类操作,其中:MarDrafting类是画图工作必须要使用的类,包含了所有画图的操作方法,如所有图形的创建、对子图和图层的操作、对图形元素的识别和获取、对图纸的操作等。此外,MarColour、MarCursorType、MarElementHandle、MarHightlightSet、MarLinetype、MarModel、MarPrintOption、MarSymbol、MarText等类也是出图类开发必须要用到的类。

综上,AM软件在.NET平台上的二次开发流程为:VS进行代码编写→生成DLL文件→添加至AM软件配置文件→在AM界面中配置二次开发按钮→运行二次开发程序。

3 TRIBON软件与AM软件的二次开发方法对比

3.1 TRIBON与AM二次开发平台的对比

TRIBON软件可以用Python和.NET 2种平台的语言。.NET平台只能对数据进行读取和操作,而无法对TRIBON软件的模型进行修改。Python和Vitesse可以编写TRIBON所有功能的二次开发,但是wxPython的界面设计效率较低,且TRIBON软件最高只支持Python2.3的较低版本。AM软件可以用PML和.NET 2种平台的语言。虽然是AM软件内置的语言,但是PML是小众语言,且PML做界面与wxPython一样效率较低。而AM软件的.NET平台的开发很强大,界面可以用visual studio来完成,并且.NET平台有非常多的第三方资源可以使用。

3.2 TRIBON软件与AM软件的二次开发方法的对比

3.2.1 建模类的二次开发

TRIBON软件并未开放数据结构,因此建模类二次开发只能根据TRIBON提供的方法参数去进行开发;而AM各种类型的数据属性都是开放的,可以用面向对象的逻辑属性赋值进行二次开发。

3.2.2 出图类的二次开发

由于AM软件的Marine Drafting模块是从TRIBON软件的Drafting模块移植的,两者界面和操作基本一致,开发的方法也有类似之处;TRIBON软件出图类的方法都是以kcs_draft开头。以新建图纸调入模型的的方法为例:

(1)插入模块import kcs_draft。

(2) 创建图纸dwg_new。参数有3个:第1个“DwgName”图纸名称是必须的参数,第2个“FormName”图框名称和第3个“DwgType”图纸类型不是必填的参数。

(3)创建视图view_new。参数有3个:第1个“ViewName”视图名称是必须的参数,第2个“Uvect”和“Vvect” 2个视向参数不是必填的参数。

(4)定义模型KcsModel.Model。有2个必须的参数:第1个“Type”是模型的类型,第2个“Name”是模型的名字。

(5)调入模型model_draw。参数有2个:第1个必须的参数“model”是第3步定义的模型类;第2个非必须的参数“viewhandle”是第2步创建视图的返回值。

AM软件的.NET平台出图类二次开发与TRIBON软件上方的示例在方法内容上十分类似。AM软件中出图的方法都在Aveva.Marine.Drafting命名空间中。同样以新建图纸调入模型的的方法为例:

(1)引用和实例化。引用类库using Aveva.Marine.Drafting,实例化MarDrafting marDrafting = new MarDrafting()。

(2)创建图纸DwgNew。第1个参数“dwgName”是图名,重载的方法中第2个参数“formName”是图框名,第3个参数“DwgType”则是图纸类型。

(3)创建视图ViewNew。第1个参数“ViewName”是视图名,重载的方法中第2个参数“Uvect”和第3个参数“Vvect”是视图的2个方向。

(4)定义模型MarModel。有2个必须的参数,分别是“Type”模型类型和“Name”模型名。

(5)调入模型ModelDraw。参数有2个:第1个

必须的参数“model”是第3步定义的模型类,第2个非必须的参数“viewhandle”是第2步创建视图的返回值。

4 结论

(1)TRIBON软件与AM软件二次开发相比,TRIBON软件的开发语言版本更低。在界面设计时:TRIBON软件的效率和资源远低于AM软件;AM软件可使用visual studio和第三方资源,使二次开发更加快速、功能更加强大、调试编译更加方便。

(2)TRIBON软件建模方面的二次开发只能根据帮助文档中的方法和说明进行编写,相比AM软件可面向对象的数据属性进行二次开发而言,TRIBON软件则相对比较复杂和低效。

(3)出图类的二次开发方面,TRIBON软件和AM软件基本在原理和思路上是一样的,仅仅是函数名有所不同。随着TRIBON软件逐渐升级为AM软件,TRIBON软件大量成熟的出图类二次开发程序可以快速地移植到AM软件中,使TRIBON软件升级到AM软件具有连贯性。