邹培轩 中海油石化工程有限公司 青岛 266101
随着项目工程设计与采购施工结合越来越紧密,许多工程项目要求设计出的管道材料表带Commodity Code(元件代码)。
在某大型国际总承包项目中,业主明确要求管道专业发表的管道材料表带Commodity Code。经过综合考虑工期、费用等因素,决定对除阀门外的工程材料,先利用SRD(Smart Reference Data)建立等级库,再利用SRD与PDMS的接口导入PDMS中,然后利用二次开发的映射程序,将Commodity Code和详细描述赋给已经存在的管道等级。对于阀门的Commodity Code,主要是先制定项目级的编码规则,然后利用PDMS内置的编程语言PML进行软件开发来进行Commodity Code的建立。
软件开发采用PDMS自带的PML语言来完成,PML是AVEVA产品内置的开发语言,是AVEVA产品命令的集合,功能强大,与软件所有模块无缝对接,同时又具有简化的图形用户界面。
该项目由于其介质特殊性及复杂性,涉及的材质类别很多,阀门的特殊要求多,采用SRD进行阀门Commodity Code的建立,不仅难度大,且耗时耗力,不能满足项目管道材料表的要求。因此针对该项目,单独制定了一套项目级的阀门Commodity Code规则,并通过软件开发来满足合同的要求。
软件开发的目的主要有如下四点:
①制定项目级通用阀门的Commodity Code的编码规则;②对比利用SRD生成阀门Commodity Code,具有效率高、周期短、可读性高、可操作性高的优点;③构成阀门Commodity Code的中间数据可以通过软件开发,保存在PDMS数据库中,方便数据追溯和校核人校对数据库;④灵活性高,可满足不同业主方要求。
通过借鉴SRD针对阀门的编码规则并结合项目情况,制定规则如下:
Rule: Group + Part + Design Code + Rating + End Prep + Operating + Body Material + Tag Number(中间的字符-用ZZZZ替代)。
规则描述如下:
Group:阀门的大类,用2位英文字母表示,均用PV表示。
Part:阀门的小类,用1位英文字母表示。详见表1。
表1 阀门类别-Part示例
Design Code:阀门设计标准,用3位英文字母表示。详见表2。
表2 设计标准-Design Code示例
Rating:阀门压力等级,用1位英文字母表示。详见表3。
表3 压力等级-Rating示例
End Prep:阀门端面连接形式,用2位英文字母表示。详见表4。
表4 端面形式-End Prep示例
Operating:阀门操作形式,用1位英文字母表示。详见表5。
表5 操作形式-Operating示例
Body Material:阀门主材,用3位英文字母表示。详见表6。
表6 阀门主材-Body Material示例
Tag Number:阀门标识,Tag number和项目有关,每一个Tag Number对应一种阀门的详细规格描述,主要包括阀门的内件材质、阀杆材质、密封面材质以及一些特殊要求,例如酸性介质对阀门的特殊要求。在制定Commodity Code规则的时候,通过加入Tag Number来进行Commodity Code与Tag Number的关联。考虑到Tag Number中常有字符-,但Commodity Code一般不包含特殊字符,因此,在进行Commodity Code建立时,用四个大写字母ZZZZ替代字符-。
下面通过PVG2FKDFAF2ABGAZZZZ1A12来详细解释编码规则:
√ PV - Group
√ G - Part
√ 2FK - Design Code
√ D - Rating
√ FA - End Prep
√ F - Operating
√ 2AB - Body Material
√ GAZZZZ1A12 - Tag Number
为了将构成阀门Commodity Code的中间数据保存在PDMS数据库中,建立如下自定义属性用于保存中间数据,详见表7。
表7 自定义属性列表
在实际建立阀门Commodity Code的过程中,记录的中间数据详见图1。
图1 记录信息
软件的主界面通过使用PML进行开发,主要包含如下功能:
①展示Commodity Code;②生成Commodity Code;③启动生成阀门Part的窗体;④启动生成阀门Rating的窗体;⑤启动生成阀门Operating的窗体;⑥启动生成阀门Tag Number的窗体;⑦检查漏项、缺项(红色字体标记);⑧生成阀门的Design Code;⑨生成阀门的Body Material;⑩生成阀门的End Prep等主要功能。
软件主界面详见图2。
图2 程序主界面
部分示例代码如下:
define method.ssavework()
--getSatandardData
!getSatandardData = !this.standard.selection()
!tempDetail = !getSatandardData.substring(1,4).trim(‘LR’)
!tempDesc = !getSatandardData.substring(4).trim(‘LR’).replace(‘”’,’’)
if !this.grid.GetSelectedRows().size() eq 0 then
!!alert.message(‘请先选择需要修改的行’)
return
endif
do !x from 1 to !this.grid.GetSelectedRows().size()
!this.target = !this.grid.GetSelectedRows()[!x][1].dbref()
!this.target.:PDMSSpco_Standard = !temp-Detail
!this.target.:PDMSSpco_StandardDesc =!tempDesc.replace(‘ ‘,’’)
!rowTag = !this.grid.GetSelectedRowTags()[$!x]
!this.grid.setCellColor(!x,6,’red’)
--!this.grid.FeedbackSuccessColor(‘red’)
enddo
--!this.ApplyPart()
!this.extract()
Endmethod
define method.loadFromExcel()
import ‘PMLFileBrowser’
Handle Any
Endhandle
using namespace ‘Aveva.Pdms.Presentation’
!browser = object PMLFileBrowser(‘OPEN’)
!browser.show(‘D:’,’’,’Load Grid from Excel’,true, ‘Excel Documents|*.xls’,1)
!nds = object NetDataSource(‘Grid Control Example’, !browser.file())
!this.grid.BindToDataSource(!nds)
!this.grid.setColumnColor(‘Standard’,’yellowgreen’)
!this.grid.setColumnColor(‘End_Prep’,’yellowgreen’)
!this.grid.setColumnColor(‘Material’,’yellowgre en’)
endmethod
软件小组对软件进行了功能测试。小组成员采用常规水洗罐项目进行测试,该项目共计20个等级,数据库中阀门数量大约有2500个。参考以往通过SRD建立相应数量阀门Commodity Code,大致需要30天的时间,而利用开发的程序仅需要2天时间就可以完成全部阀门Commodity Code的建立。此外,通过软件小组校核,发现准确率能达100%。可见该软件的效率和准确率均非常高。
该软件成功运用在该项目中,大约有40个等级,共计节约90%的工期。
本软件应用效果明显,目前虽只针对阀门建立Commodity Code,但对于其他管道元件,通过制定项目级的编码规则,可以快速进行开发。