零零碎碎地摸索了一个多月,用.net开发出了一个小工具,开发过程基本就是在各种坑和弯路中来回碰撞,做好以后有一些心得体会与大家分享。
1.NET的开发方式
AVEVA提供.Net的二次开发接口,可使有C#编程经验的软件工程师使用Visual Studio来对AVEVA的工厂(Plant)设计和船舶(Marine)设计产品进行二次开发。使用PML二次开发要受限于AVEVA提供的PML对象,可使用的资源有限。[1]
使用.Net来进行二次开发,不仅可以利用AVEVA提供的类库,还可以利用很多资源,开发效率更高。相比于PML这种脚本类型的语言,.NET优势十分明显,不完全地列举几个方面:
- 数据处理能力,特别借助.NET成熟的并发处理方案,使大批量高并发的数据处理成为可能,可以在批量出图、批量数据修改或运算时提高性能;
- 连接第三方数据库,根据不同的业务场景可以选用不同类型的数据库,而.NET基本具备了对所有主流数据库的访问能力,使得PDMS的数据与各类数据库系统的交互成为可能,进一步可以对PDMS的工程数据实现数据挖掘,让他们不再是躺在元件库里的一个符号,变为更有价值的数据;
- 界面的友好性,不再是pml那种VB或者dephi风格的界面,流行的界面技术都可以被使用,例如ribbon菜单等组件,使工具软件界面更加漂亮友好,功能区域布局更加合理,在强调用户体验的时代,这些特性十分重要。
- 报表定制,因为.NET接口的开放,使得PDMS的报表可以通过类似水晶报表这样的工具对模板进行订制,让用户不编写代码即可自主控制报表格式,当然也可用通过Aspose或者NPOI这样的组件直接写好固定格式的报表样式,减少用户的订制工作,直接一键出成品文件;
- 高级编程语言特性,.NET开发本身具有一些PML没有的高级特性。真正的面向对象编程、内存控制、借助HashTable等提高数据检索和命中的速度,提高数据遍历等基本动作的速度;
- 外部资源广阔,可用引用大量的第三方.NET插件,实现更强大的功能和更好的用户体验。
引入微软的.NET技术来对AVEVA进行二次开发,为AVEVA的二次开发打开了一个全新的世界,也便于其它系统与AVEVA产品的集成。.NET API可以访问产品的各方面,包括图形用户界面(Graphical User Interface),数据库(Database)和几何库(Geometry)。[2]
模型数据借助.NET的接口可以转换成数据库中的关系型数据,将固化在PDMS软件中的工程数据,转移到更广阔的应用领域。
.NET二次开发的两种方式。一种是使用.NET插件;另一种是使用PML.NET。两种方式的机制都可以使用程序被动态加载到使用的模块中。我采用的是纯.NET开发的方式,熟悉PML的人可能更喜欢PML.NET的方式。
2.开发生态
2.1市场
有不少做这个生意的公司,也有很多成熟的产品,例如出图、支吊架等,整个生态给我感觉就是专业性非常强,但是非常小众,基本就是前AVEVA或者设计院的几个大神。蛋糕很小,个体开发者没有清晰的盈利模式,早期开发者基本都已经完成了技术积累,有一些已经开了公司。
2.2通用性
有些类型的工具不容易开发成通用型的,因为各家的数据格式定制方式不同,比如材料描述DETEXT,很多用户要分列显示,设置了不同分隔符和字段顺序,AVEVA有Sample标准项目,但是有的用户并没有按照官方推荐的数据结构进行订制,数据结构太灵活本来是个优点,在这里变成劣势;开发基本围绕自己的订制方式来进行,要想开发统一的工具插件,必须对数据结构十分熟悉,而且具备灵活的订制功能,对开发者的工程经验和PDMS的掌握程度有很高的要求。
3.技术支持
3.1现状
技术支持基本一片荒芜,只能依靠官方英文手册,海川、马后炮基本查不到二次开发有用的资料,整个论坛都是求破解和免费工具的帖子、百度里搜PDMS二次开发,有效内容第一页都填不满,这可能就是目前国内PDMS开发现状的缩影,印证了PDMS开发在国内的小众与薄弱,虽然有少数大神,但是因为行业因素或开发专业性太强等原因,使得做的很精深的产品和队伍在互联网存在感很低,给人感觉是都在低调地悄悄赚钱,有的可能埋在设计院内部没有暴露出来。
3.2没有人能扶你上驴
新人基本就是只能自己对着AVEVA官方PDF一点点摸索了,如果有大神带是最好,但现状是首先你要能找到一个大神,其次大神多数已经一骑绝尘,望不到背影。
4.应用场景
4.1自身功能加强
PDMS自身功能加强,借助.NET开发用户体验更好的功能模块,借助第三方数据库,实现设计管理功能,比如公共数据的查找和提取,版本、人员信息的记录,日志管理,设计变更管理等。应用层复杂逻辑管理功能都可以借助自主开发实现,批量数据设置、Element元素的选中、修改、Attribute元素的拾取、赋值等功能,都可以通过二次开发提高用户体验;
4.2扩展
与其它软件的接口、集成甚至是取代,比如PDMS与CAESAR II的接口,解决自动输入条件到CAESAR II的需求,其实我们还可以做的更多,数据输入后的处理和输出借助.NET可以开发出独立的软件或者PDMS插件,CAESAR II作为一个应用软件,理论上完全可以用.NET实现出来,业务领域上会有一些难点,但是从IT角度出发没有任何障碍。类似的软件有很多,只要是输入-运算-输出类型的软件,都可以用这种开发方式进行扩展。
国外有小团队开发Revit的Addin插件,功能强大到取代了专业软件的部分功能,成为具有专业软件功能的原生插件,这是我们值得借鉴的地方。
4.3系统集成
与ERP系统的集成也成为可能,比如材料元件库与材料编码、采购包、费用代码等管理属性从模型库中就做好关联,在材料表数据产生的时候,这些代码全部连带一起产生,为ERP管理系统提供数据源,用于采购和费用管理;材料特性库中的材料尺寸、重心等数据可以发送给物流仓储管理系统,物流运输、仓储等专业需要这些信息。在未来这是一种打通设计协同与ERP管理数据流的方法,通过系统集成,提高数据输入、输出的自动化程度,数据的唯一性、准确性也得到保证。还有更多可以从工程模型库中挖掘的数据,有待我们继续研究。
5.补充思考
5.1未来看思路
对于工程公司来说是这种开发还是属于比较有干货的创新,但是多数停留在解决实际模型布置中遇到的问题和小功能需求上,不能形成真正的商业产品。只有少数嗅到商机的人在静悄悄地持续投入。我觉得PDMS开放.NET接口相当于打开了一座金矿,有大量的功能可以完善或者创新,大量的第三方开发资源可以引用,未来能做什么取决于我们能不能想到好点子,而不再是PML功能的限制。
5.2关于Hello World
我的HelloWorld是一个根据AEVEA-Sample项目数据结构生成MTO的小工具集,只是在功能体现了一下我们能做什么,有大量的细节可以打磨,比如计算一个管子的直管段有多长,每个元件带有一堆跟管段长度有关的属性(见下表)。
Attribute Name | Data Type | Description |
---|---|---|
ATLE | real | Length of arrive implied tube |
LTLE | real | Length of leave implied tube |
MTCL | real | Material tube centreline length. |
STLE | real | Length of leave straight tube |
STAP | real | Length of arrive straight tube |
哪个是我们需要的,问了一圈也没有人能解答。再比如螺栓的计算,对夹的法兰面怎么避免把螺栓重复计算两次,如果直接总数减半的话,管线起点或者终点的端部法兰螺栓就少了一半,这样的涉及工程经验问题实在是太多了,无形中抬高了开发的门槛。
最后,给作品录了一个视频,为了提高逼格,增加了五毛特效和音乐,1080p 。
//v.qq.com/txp/iframe/player.html?origin=https://mp.weixin.qq.com&containerId=js_tx_video_container_0.7338372438910301&vid=l0894tdgcy8&width=677&height=380.8125&autoplay=false&allowFullScreen=true&chid=17&full=true&show1080p=false&isDebugIframe=false
引用:
[1],[2] AVEVA官方文档《Net Customisation User Guide.pdf》