罗海友
摘 要:AVEVA MARINE是一个功能强大的CAD设计平台,但各船厂的实际情况千差万别,故几乎每个船厂都要针对不同的项目进行客户化配置及二次开发。本文对我司的AVEVA MARINE软件二次开发进行了系统论述,并对二次开发实例《自动生成零件明细表》进行了详细介绍,希望能够起到抛砖引玉的效果,为有志于AVEVA MARINE软件二次开发的同仁提供参考。
关键词:AVEVA MARINE;软件二次开发;C#
中图分类号:U662.9 文献标识码:A
Redevelopment for AVEVA Marine
Luo Haiyou
( COSCO Shipping Heavy Industry (Guangdong) Co., Ltd., Dongguan 523146 )
Abstract: AVEVA Marine is an extremely powerful CAD design platform, but the actual situation of each shipyard is different. Almost every shipyard needs to carry out the customized configuration and redevelopment for different projects. This paper provides a systematic discussion of the redevelopment of AVEVA MARINE software, and the development example "automatic generation of parts list" was introduced in detail. It provides reference for people interested in redevelopment of AVEVA MARINE software.
Key words: AVEVA MARINE; Redevelopment ; C#
1 前言
目前比較流行的3D船舶生产设计软件,主要有:AUTO CAD ;沪东东欣;CATIA;AVEVA MARINE等。其中,AVEVA MARINE几乎占据了国内船舶生产设计软件领域的半壁江山。
AVEVA公司在船舶和海洋工程、石油、天然气、电力、造纸、制药、化工等工业领域都能提供全生命周期解决方案服务。该公司总部位于英国剑桥,是国际知名的工程信息技术企业,也是目前世界领先的工程信息技术企业之一。AVEVA Marine是AVEVA公司的一系列软件产品之一,是用于设计、建造船舶和海洋工程项目的集成软件。该软件采用以对象为中心的技术,提供一系列解决方案、加载项以及单机版应用程序所构成的产品组合,贯穿造船业务过程中的每个环节。
AVEVA Marine虽然是一个功能强大的CAD设计平台,但各船厂的实际情况千差万别,故几乎每个船厂都要针对不同的项目进行客户化配置及二次开发。鉴于AVEVA Marine是一款专业性极强的设计软件,对该软件进行二次开发的门槛很高,既要精通编程语言,又要有丰富的设计经验及相应专业知识,不然开发出来的东西可能和实际需求相差甚远。目前国内有能力进行二次开发的船厂不多,但需求却很大,很多船厂都是直接向AVEVA或是第三方购买开发服务,成本很高。为了实现自主可控,降低成本,在各船厂建立二次开发部门培养自己的开发人才迫在眉睫。
2 AVEVA MARINE软件二次开发平台
2.1 开发工具
由于历史原因,AVEVA MARINE软件的大舾装和船体优先选择的编程语言有所不同。其中:大舾装优先选择PML;而船体则优先选择C#。PML无需编译AM 即可直接读取,C#则需要以Visual Studio 为载体进行编写及封装。
Visual Studio是美国微软公司开发的一个相对完整的开发工具集,它包括了整个软件生命周期中所需的包括UML工具、代码管控工具、集成开发环境等大部分工具,支持的所有平台都能与用VS写的目标代码完美匹配。由于使用习惯问题,确定选择Visual Studio 2017版。
2.2 编程语言
PML 全称Programamable Macro Language,是PDMS内置的开发语言,已从开始的PML升级到了PML .Net版本。其功能强大,并且与PDMS无缝连接,还能简化用户界面,在大舾装开发方面具有一定的优势。
C#是一种新的、面向对象的编程语言。它可以帮助程序员快速地编写各种基于Microsoft .NET平台而开发的应用程序,是构建各类组件的理想之选。使用简单的C#语言结构,这些组件可以方便的转化为XML 网络服务,从而通过Internet进行调用。
AVEVA MARINE 的船体部分是以C#编写为主,本文主要研究船体的二次开发,所以选择C#语言。
3 AVEVA MARINE软件二次开发实例《自动生成分段零件明细表》
一套完整的船体分段生产设计图纸,包括:分段工作图、板材切割图、型材切割图、板材加工图、型材加工图、板材清单、零件明细表,有些分段还包括小组立图和预密性试验图。其中,船体分段零件明细表包含了零件名、组立流向、板厚材质、套料位置、型材规格、加工信息等几乎所有的零件属性信息,是一套必不可少的图纸。
用AM软件在出图的最后阶段,需要生成一个完整的零件明细表。AM本身可以生成一个零件明细表,但比较粗糙,很难满足各船厂的个性化需求,因此很多船厂的零件表是通过外部开发在AM生成的零件表基础上进行数据再提取,并手动填入所缺的信息后重新生成一个符合本厂要求的零件明细表。这种方式的弊端,是图纸和模型不同步。由于分段模型图纸修改是一种常态,后期很容易出现零件明细表漏更新的情况,所以开发一个嵌入AM软件直接提取模型数据的生成零件表的插件迫在眉睫。
3.1 开发流程及整体框架
根据我司生产及施工需求,零件明细表需要提供如下信息:组立名、零件号、零件数量、组立流向、零件规格、材质、套料图名、零件重量。通过对比发现,AM自带的功能生成零件表缺少了组立流向及另存后的型材下料位置,所以无法直接从生成的零件表中提取所有需要的信息。为了简化流程,节省时间,决定从模型中直接提取。
软件整体开发流程,见图1。
3.2 开发细则
3.2.1 需求调研
需求调研是软件开发的基础,其目的是了解用户想实现什么样的功能,在这个基础上进行更深入的分析,实现用户的需求。
3.2.2 软件算法流程
软件算法流程,如图2所示。
3.2.3 设计软件界面
(1)插件图标
为便于识别,采用零件明细表的英文名PARTLIST 的首字母“P”作为插件的图标。
(2)操作界面
结合零件明细表需要涵盖的信息及AM模型中所包含的属性信息,操作界面中需要提供船号、分段号的填写框,以及是否为左右对称分段的复选框。
AM模型完善后,可自动生成型材下料草图,其图面和模型是互不关联的。也就是说,即使生成了型材下料草图,AM分段模型零件中也不包含零件明细表中所需要的型材下料草图的位置信息,所以操作界面中需要提供一个可以使型材下料和分段模型关联起来的按钮。
船体分段中所有的零件都需要提供流向信息,因AM软件在进行粗建模时是没有零件流向填入选项的,需要等模型校对完成开始正式绘制施工图前,打开装配计划模块按照分段的装配流程进行组立流程的设计和建模,并逐个填写组立的流向信息;AM软件的装配计划模块在填写组立流程的操作上有一个弊端,就是每次只能填写一个小组立的流程信息,这样不但耗时而且操作繁琐。考虑到零件明细表需要提取所有零件的流向信息,在主界面中提供一个装配计划编辑器按钮,通过点击该按钮,可以弹出批量编辑或添加组立流程信息的对话框。
船体的分段是根据场地及起吊能力来划分的,不同船厂的起吊能力不同,划分的船体分段大小及组立数量也不同。另外,有些分段(比如机舱分段)虽然不算大,但是结构复杂,零件数量庞大,并且C#的dataGridView功能比较难实现分页显示,一个界面可能无法将零件显示出来。考虑到插件的通用性问题,在界面中提供显示零件总数量,以便核对。
《自动生成零件明细表》程序实现过程,就是一个从AM模型中提取零件属性信息,通过排列组合,再调用EXCEL功能模块,最后实现生成符合船厂要求的标准格式的《零件明细表》的过程;AM模型提供的零件属性信息本身是有些杂乱无章的,并且有些客户化信息也显示不出来,为了便于检查核对,在操作界面中提供数据预览按钮及预览窗口;此外,操作界面中还需提供清空列表和生成零件表这两个必需的按钮。
3.2.4 代码编写
(1)数据预览功能实现
操作主界面设计好后,首先应实现数据预览功能,以方便核对所提取的模型零件数据正确与否。
数据预览功能的整体思想,是通过设计人员输入的船号、分段号、左右对称信息定位数据所在的位置,并通过对话框列表显示出来。
① 首先判断船号和分段号是否为空,如果都不为空则开始执行主程序,否则如果有一个或者两个为空则弹出报错信息,提示未填船号或分段号;
② 通过对模型零件信息分析发现,板材和型材所存储的目录有所差异,并且各自的属性中都无法提供零件表所需要的全部信息;对比模型数据库及零件数据库后,发现零件数据中的属性信息比模型数据库中的属性信息全面,于是决定从零件数据库中的零件提取信息,并通过写入用户自定义属性的方式把缺失的信息补全;
③ 要提取软件的相关信息,首先要找到该软件的接口程序-API。API的英文全称Application Programming Interface,意思是应用程序编程接口。 AM软件提供了较为完整的API程序:先找到AM提供的过滤器TypeFilter,通过分段号信息筛选出本分段的板材及型材零件,归入到一维数组中,并通过C#的foreach函数遍历整个数组,在dataGridView中列表显示出来。至此,该程序的数据预览功能已初步实现,但信息还不完整;
④ 通过零件数据库中的零件属性,利用AM提供的API程序可以提取到组立名、零件号、零件数量、零件规格、材质、重量和板材套料位置,但缺失了零件流向和型材的套料位置。
(2)型材套料位置功能实现
AM模型完善后,可自动生成型材下料草图,但图面和模型是互不关联的,将图纸另存后图中的型材信息和模型就完全脱钩了,所以通过写入型材套料位置按钮实现将图纸中的零件信息写到模型中,并在数据预览时显示出来;
写入型材套料位置实现的基本原理,是通过定位图纸中图框的坐标找到型材的零件名,然后再和零件数据库中的零件名进行匹配,匹配成功后将图纸名字写入零件属性中。
(3)裝配计划编辑器 功能实现
AM软件的Hulldesign模块中嵌入有一个assembly(装配计划)模块。在模型校对完成后,需要根据分段实际情况,进行组立流程的设计和建模,并逐个填写组立的流向信息。
AM软件的装配计划模块,在填写组立流程的操作上有一个弊端,就是每次只能填写一个小组立的流程信息,而且操作流程较为复杂,如果分段的组立比较多的话,很容易遗漏或出错。装配计划编辑器开发的初衷,除了要将流向写入零件属性外,就是把所有的组立流向填写信息都集成在一个窗口里,并且通过算法实现只填当前组立流向,自动生成下级组立流向。
該功能的基本原理,是将用户指定的装配树列表显示出来,并在API中找到相应的接口程序,把用户所填写的数据写入到AM模型中,写入完成后再将数据集成到零件的属性中,便于数据提取。
(4)生成零件表功能实现
数据预览功能将所需要的数据全部提取,并在dataGridView中显示出来后,接下来的工作是将数据按零件表模版整理出来,并输出EXCEL格式文件。
该功能的基本原理是,通过引用Excel的组件Microsoft.Office.Interop.Excel实现在C#中打开Excel,并将dataGridView中的数据写入Excel,再通过C#编写方法进行处理,最后输出符合要求的Excel格式文件。
3.2.5 软件调试与异常处理
(1)软件调试
软件调试是软件开发过程必不可少的一个环节。对AM二次开发进行调试,首先要将编译后的程序放到AM的安装目录下,并将程序加载到指定模块中,比如船体模块需要通过HullDesignAddins来加载。
Visual Studio提供了编辑器和调试器进行调试。在使用Visual Studio2017开发C#程序时,编辑器既能为开发者提供代码编写的各种辅助提示及实时编译等功能,还提供了源代码快捷修改、重构以及语法纠错等操作。通过Visual Studio2017,可以快速地发现各种语法错误,并提示修改建议进行快速修正。
当代码不能正常运行时,可以通过调试器定位错误。常用的程序调试包括:增加断点;开始、中断、停止程序的执行;单行代码执行和使程序运行到指定的位置。
(2)异常处理
在进行软件开发时,既要考虑软件后期是否能正常运行,还要注意编写代码时可能出现的笔误和各种不可预测的逻辑错误。在C#提供的 .NET类库中,有处理各种异常情形所设计的各种异常类,这些类包含了很多异常的相关信息。
3.2.6 软件交付
软件调试完成后,需交设计人员进行实测,修复完实测过程中暴露出来缺陷后才可以正式交付,同时提交软件开发文档。
4 结束语
对AVEVA MARINE软件的二次开发是一个比较复杂的过程,特别是一些专业性较强的软件,对开发人员要求更高,既要精通编程语言,又要有相应专业知识。目前国内许多大中型船厂和设计公司都在尝试组建自己的软件开发团队,但真正有能力进行二次开发的船厂尚不多。
本文对AVEVA MARINE 软件二次开发进行了系统论述,并通过AM二次开发的实例《自动生成零件明细表》对整个开发过程进行了详细介绍,希望能够起到抛砖引玉的效果,为有志于AVEVA MARINE软件二次开发的同仁提供参考。
参考文献
[1] 明日科技.C#项目开发实战入门[M].吉林:吉林大学出版社, 2019.