鄒培軒 中海油石化工程有限公司 青島 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,但對于其他管道元件,通過制定項目級的編碼規則,可以快速進行開發。