■ 胜宝旺寰球工程有限公司 潘磊 祝涛 刘育嘉
近年来,数字化交付成为国内外工程设计领域涌现的新型业务之一。数字化交付为智慧工厂提供数据基础,数字化交付的快速发展,符合“工业4.0”和“中国智造2015”的整体趋势。海克斯康PPM的SmartPlant系列软件是数字化交付平台的典型代表,其设计理念是以数据为中心,有别于传统的图形辅助设计软件。但到目前为止,SmartPlant相关的应用研究尤其是二次开发方面的研究仍然较少。SmartPlant P&ID是工艺系统专业数字化交付的常用软件,其开放有丰富的接口,用户可以进行个性化的二次开发。
VBA,英文全称为Visual Basic Application,是依附于软件的VB开发环境,其作为VB程序语言的衍生物,广泛存在于Microsoft Office、AutoCAD等常用的工程设计软件环境中。依附于微软的Office组件Excel中的VBA也可称为Excel_VBA。
数字化交付中,管道属性需要批量导入工程数据库,但现有的导入方法或软件都要求对导入的数据进行属性映射,构建符合导入模板格式的属性数据表。
构建符合导入模板格式的属性数据表存在以下两个难题:
(1)每个项目的种子文件不一样,管线属性及其命名也各不相同。而在SmartPlant用于属性管理的组件Data Dictionary Manager中并不能将元件属性导出或另存为可编辑的文档,这为属性的映射带来了很大的不便;
(2)各家工程公司的设计文件模板如管道特性表均与导入模板结构不同,需要转换。常规的转换过程是在Excel中将管道特性表通过复制、粘贴等手段,重新排版成数据导入表模板的格式,这种过程较费时,也容易出错,且涉及传统设计习惯中的代号如“ATM”、“AMB”、“FV”等,与数据导入的要求相悖,需要人工核对、转换成数字型式的数据,方能成功导入工程数据库。
而在数字化交付的不同阶段,为了保证数字化交付的工程数据与项目设计的数据相一致,并满足设计协同的要求,数据一次性精确地完成导入并不现实,往往需要重复多次执行导入,相应的排版工作就要反复多次,带来不小的工作量。
因此,通过二次开发,编写出能够快速而准确地提取出PipeRun属性的程序,并实现传统设计文件到符合导入模板格式的PipeRun属性数据表之间的快速转换,具有很高的实用价值。
本文的总体思路是运用VBA程序语言,在Excel内建的VBE环境下,对SmartPlant P&ID进行二次开发,通过接口访问数据库,获取对象属性,用以构建导入模板,并对管道特性表Excel文档按映射规则自动处理,最终生成可供属性导入的PipeRun属性数据表。
开发原理如下:
(1)通过对LLAMA库的引用,建立到数据库的连接。访问一个PipeRun对象,获取所有的属性名称,并将这些属性名称全部输出到Excel表中;
(2)在Excel中,根据项目统一规定选取获得的PipeRun属性,建立映射,构建PipeRun的合规属性表;
(3)分别将传统的管道设计文件与PipeRun合规属性表赋予索引值,并将两个文件不同的索引值建立映射,以关联两表;
(4)通过VBA编程,以索引值的映射关系为依据,将传统的管道设计文件自动转换成PipeRun属性数据表。
通过以上步骤,实现导入模板与数据库的属性映射和属性导入数据表的快速构建。
以下的代码编译,需要在工程中引用SmartPlant P&ID Logical Model Automation(llama.dll)和Microsoft Scripting Runtime(scrrun.dll)两 个库文件,如图1所示。
(1)定义字符串常量,确定用作媒介的PipeRun对象:
在SmartPlant P&ID软件中,在当前项目中打开任一图纸,选中任一PipeRun作为媒介对象,在右侧属性窗口中,找到SP_ID属性,将其SP_ID的值复制到代码中。如:
Private Const CONST_SPID_PipeRun As String = “A53EC6D17 E684078A9D091E37E2BD510”
(2)定义数据库对象,并建立到工程数据库的连接:
Dim datasource As LMADataSource
在连接执行前,需注意DRAWING MANAGER中的项目数据库要与选作媒介的PipeRun对象所在的数据库保持一致。
(3)定 义PipeRun对 象,并用GetPipeRun方法获取用作媒介的PipeRun对象:Dim objPipeRun As LMPipeRun Set objPipeRun =datasource.GetPipeRun(CONST_SPID_PipeRun)
(4)定义属性对象,并遍历objPipeRun的属性,若属性值非空,则将属性名称存入动态数组:
ReDim Attrs(1 To objPipeRun.Attributes.Count)
Dim objAttribute As LMAAttribute
浙江医药高等专科学校药学院在校企办学过程中,充分利用“医药强省”、“健康浙江”、“药品安全示范城市”的建设契机和学院的行业办学背景和宁波市“唯一”的专业特色,将“药品安全”特色战略贯穿于学院的中心工作中,逐步形成学院的办院特色、教育特色、产业特色和管理特色。
For Each objAttribute In objPipeRun.Attributes
If objAttribute.Value <> “” Then
Attrs(i) = objAttribute.Name
i = i + 1
End if
Next
(5)获取ObjPipeRun的非空属性的名称后,将其存放的数组写入当前活动的Excel文档。
ActiveSheet.Range(“A2”).Resize(i, 1) = WorksheetFunction.Transpose(Attrs)
在本文的试验中,采用了一个技巧,可以快速地挑选出项目数字化交付统一规定中规定的管道属性表,即将媒介PipeRun对象的属性按照统一规定的管道属性表逐一赋值,使其成为一个形式上符合交付要求的属性完备的PipeRun对象。所赋值无需准确,保证相应属性非空即可,因其属性值在后期的导入中均可再次覆盖。
通过对PipeRun对象属性的抽取,得到了PipeRun对象的全部非空属性的名称,其中除PipeRun类型从父类型继承来的属性外,其余非空属性均是项目统一规定要求必须输入的属性,即合规属性。图1中显示该项目数据库的PipeRun类型具有42个非空属性,本研究只涉及对统一规定要求的属性,对获取的属性进行快速挑选后,即可确定全部数据导入相关的属性。至此已获得了PipeRun类型的全部合规属性,将它们作为基本要素,根据设计者的习惯和经验,在Excel中编辑、排版后,即可得到属性数据导入映射表的模板,如图2所示。
值得一提的是,若在程序中不设非空属性的限定条件,则会得到该项目中PipeRun类型的全部343个属性名称,可用于其它的二次开发过程,但这对于本研究获取合规属性是具有一定难度的。
在构建了PipeRun属性数据导入模板并实现了模板与项目数据库相关属性的准确映射之后,还需要将现有的传统设计文件管道特性表,按导入模板的格式和设定进行规整,方能得到可供导入的PipeRun属性数据表。这里需要解决两个问题:“列条目的映射重排”和“特殊值的重新设定”。
列条目的映射重排,指的是将传统设计格式的管道特性表以列为单位,与PipeRun属性数据导入模板中的各列相关联,并按后者格式重新排版。本研究采用的是索引码映射法,即为PipeRun属性导入模板和管道特性表,各自以列为单位设定一套索引码,并将导入模板的索引码填入管道特性表中对应的列,这样即得到了两个文档索引码的关联,实现了相应列的映射(如图3所示),第7行中各列单元格中即为PipeRun属性数据导入模板对应列的索引码。
随后的自动化重排代码与注释如下:
Dim Sht As Worksheet, ShtNew As Worksheet ‘\声 明 两个工作表对象变量
Dim i(), j(), k As Integer ‘\声明动态数组变量和循环条件变量
Set Sht = ActiveSheet ‘\设定当前工作表为源表
Set ShtNew = Sheets.Add ‘\设定一个新建的工作表作为目标表
图1 Excel_VBA工程引用的库文件
图2 抽取的PipeRun对象非空属性
图3 包含索引码映射的传统设计形式管道特性表
图4 自动转换格式后得到的管道特性表
图5 可用作导入的PipeRun属性数据表(局部)
i = Application.Transpose(Application.Transpose(Sht.Range("A6:Y6"))) ‘\将索引值装入数组
j = Application.Transpose(Application.Transpose(Sht.Range("A7:Y7"))) ‘\将索引值装入数组
Sht.Rows("1:5").UnMerge ‘\取消表头区域合并单元格,避免合并单元格对重排版的干扰
For k = 1 To 25 ‘\对k变量所指定范围内的管道特性表列按两套索引码映射关系进行重排版
Sht.Columns(i(k)).Copy
ShtNew.Range("A1").Offset(0, j(k) - 1).PasteSpecial ' (xlPasteValues)
Next k
程序运行后,得到重排的管道特性表,各列数据符合导入模板的次序,如图4所示。
但表中还存在很多特殊值,如“ATM”、“AMB”、“FV”、“液体”等,这些特殊值不符合数据导入对于语言或数据类型的要求,需要处理成英文或Select List Entry中事先定义好的形式。本研究对这些特殊值的处理方法,是通过定义VBA字典,用Replace方法实现批量查找替换的。至此得到了可用作导入的PipeRun属性数据表,如图5所示。
本文运用Excel_VBA程序语言,通过对SmartPlant P&ID的LLAMA库文件的引用,连接了项目数据库,并抽取了期望的PipeRun类型属性名称,用以构建数据导入模板;又通过索引码映射法对管道特性表的Excel文档进行了自动化重排和批量查找替换,最终生成了可用作导入的PipeRun属性数据表。在后续的项目中,我们将构建好的PipeRun属性数据表实现了导入,一次性导入了整个项目3000余个PipeRun的工程数据,并在之后的升版中,重复导入了几次,每次均运用本研究所开发的快速构建方法,该项目SmartPlant P&ID元件工程数据导入工作的效率和准确性均得到了极大提高。
Excel_VBA程序语言是一个成熟的程序语言,其与海克斯康PPM官方推荐用于SmartPlant P&ID的二次开发语言VB具有很高的相似性,同时Excel_VBA开发环境集成于Excel,无需部署,随手可得。使用Excel_VBA进行二次开发,也便于同Excel文档进行数据交换。对于工程公司开展数字化交付业务的实际情况来说,二次开发的成果并非是商业化软件,主要是本公司内项目应用,则利用Excel_VBA进行SmartPlant P&ID二次开发非常方便。如二次开发后需要加强保密或商业化应用,可以再转到VB平台封装。
从工程设计软件的横向考虑,AutoCAD作为传统工程设计常用软件,也支持VBA开发环境,AutoCAD与SmartPlant P&ID软件通过VBA进行协同,也是一个未来值得探索的课题。
本研究仅聚焦于快速构建PipeRun的属性导入表,而该项目要求PID上的所有元件都完成数据导入。本文的研究思路和方法还可以运用到设备类型、仪表类型乃至Label类型对象的属性导入工作之中。
SmartPlant P&ID的LLAMA库文件还有很多强大的方法可供二次开发使用,其中包括LMAutomationUtil、PIDAutomation和PLAICE等库文件。随着“中国制造2025”的澎湃大潮和数字化交付业务的开展,面向SmartPlant P&ID的二次开发必将如雨后春笋般地蓬勃发展。