■ 勝寶旺寰球工程有限公司 潘磊 祝濤 劉育嘉
近年來,數(shù)字化交付成為國內(nèi)外工程設(shè)計領(lǐng)域涌現(xiàn)的新型業(yè)務(wù)之一。數(shù)字化交付為智慧工廠提供數(shù)據(jù)基礎(chǔ),數(shù)字化交付的快速發(fā)展,符合“工業(yè)4.0”和“中國智造2015”的整體趨勢。海克斯康PPM的SmartPlant系列軟件是數(shù)字化交付平臺的典型代表,其設(shè)計理念是以數(shù)據(jù)為中心,有別于傳統(tǒng)的圖形輔助設(shè)計軟件。但到目前為止,SmartPlant相關(guān)的應(yīng)用研究尤其是二次開發(fā)方面的研究仍然較少。SmartPlant P&ID是工藝系統(tǒng)專業(yè)數(shù)字化交付的常用軟件,其開放有豐富的接口,用戶可以進行個性化的二次開發(fā)。
VBA,英文全稱為Visual Basic Application,是依附于軟件的VB開發(fā)環(huán)境,其作為VB程序語言的衍生物,廣泛存在于Microsoft Office、AutoCAD等常用的工程設(shè)計軟件環(huán)境中。依附于微軟的Office組件Excel中的VBA也可稱為Excel_VBA。
數(shù)字化交付中,管道屬性需要批量導(dǎo)入工程數(shù)據(jù)庫,但現(xiàn)有的導(dǎo)入方法或軟件都要求對導(dǎo)入的數(shù)據(jù)進行屬性映射,構(gòu)建符合導(dǎo)入模板格式的屬性數(shù)據(jù)表。
構(gòu)建符合導(dǎo)入模板格式的屬性數(shù)據(jù)表存在以下兩個難題:
(1)每個項目的種子文件不一樣,管線屬性及其命名也各不相同。而在SmartPlant用于屬性管理的組件Data Dictionary Manager中并不能將元件屬性導(dǎo)出或另存為可編輯的文檔,這為屬性的映射帶來了很大的不便;
(2)各家工程公司的設(shè)計文件模板如管道特性表均與導(dǎo)入模板結(jié)構(gòu)不同,需要轉(zhuǎn)換。常規(guī)的轉(zhuǎn)換過程是在Excel中將管道特性表通過復(fù)制、粘貼等手段,重新排版成數(shù)據(jù)導(dǎo)入表模板的格式,這種過程較費時,也容易出錯,且涉及傳統(tǒng)設(shè)計習(xí)慣中的代號如“ATM”、“AMB”、“FV”等,與數(shù)據(jù)導(dǎo)入的要求相悖,需要人工核對、轉(zhuǎn)換成數(shù)字型式的數(shù)據(jù),方能成功導(dǎo)入工程數(shù)據(jù)庫。
而在數(shù)字化交付的不同階段,為了保證數(shù)字化交付的工程數(shù)據(jù)與項目設(shè)計的數(shù)據(jù)相一致,并滿足設(shè)計協(xié)同的要求,數(shù)據(jù)一次性精確地完成導(dǎo)入并不現(xiàn)實,往往需要重復(fù)多次執(zhí)行導(dǎo)入,相應(yīng)的排版工作就要反復(fù)多次,帶來不小的工作量。
因此,通過二次開發(fā),編寫出能夠快速而準確地提取出PipeRun屬性的程序,并實現(xiàn)傳統(tǒng)設(shè)計文件到符合導(dǎo)入模板格式的PipeRun屬性數(shù)據(jù)表之間的快速轉(zhuǎn)換,具有很高的實用價值。
本文的總體思路是運用VBA程序語言,在Excel內(nèi)建的VBE環(huán)境下,對SmartPlant P&ID進行二次開發(fā),通過接口訪問數(shù)據(jù)庫,獲取對象屬性,用以構(gòu)建導(dǎo)入模板,并對管道特性表Excel文檔按映射規(guī)則自動處理,最終生成可供屬性導(dǎo)入的PipeRun屬性數(shù)據(jù)表。
開發(fā)原理如下:
(1)通過對LLAMA庫的引用,建立到數(shù)據(jù)庫的連接。訪問一個PipeRun對象,獲取所有的屬性名稱,并將這些屬性名稱全部輸出到Excel表中;
(2)在Excel中,根據(jù)項目統(tǒng)一規(guī)定選取獲得的PipeRun屬性,建立映射,構(gòu)建PipeRun的合規(guī)屬性表;
(3)分別將傳統(tǒng)的管道設(shè)計文件與PipeRun合規(guī)屬性表賦予索引值,并將兩個文件不同的索引值建立映射,以關(guān)聯(lián)兩表;
(4)通過VBA編程,以索引值的映射關(guān)系為依據(jù),將傳統(tǒng)的管道設(shè)計文件自動轉(zhuǎn)換成PipeRun屬性數(shù)據(jù)表。
通過以上步驟,實現(xiàn)導(dǎo)入模板與數(shù)據(jù)庫的屬性映射和屬性導(dǎo)入數(shù)據(jù)表的快速構(gòu)建。
以下的代碼編譯,需要在工程中引用SmartPlant P&ID Logical Model Automation(llama.dll)和Microsoft Scripting Runtime(scrrun.dll)兩 個庫文件,如圖1所示。
(1)定義字符串常量,確定用作媒介的PipeRun對象:
在SmartPlant P&ID軟件中,在當前項目中打開任一圖紙,選中任一PipeRun作為媒介對象,在右側(cè)屬性窗口中,找到SP_ID屬性,將其SP_ID的值復(fù)制到代碼中。如:
Private Const CONST_SPID_PipeRun As String = “A53EC6D17 E684078A9D091E37E2BD510”
(2)定義數(shù)據(jù)庫對象,并建立到工程數(shù)據(jù)庫的連接:
Dim datasource As LMADataSource
在連接執(zhí)行前,需注意DRAWING MANAGER中的項目數(shù)據(jù)庫要與選作媒介的PipeRun對象所在的數(shù)據(jù)庫保持一致。
(3)定 義PipeRun對 象,并用GetPipeRun方法獲取用作媒介的PipeRun對象:Dim objPipeRun As LMPipeRun Set objPipeRun =datasource.GetPipeRun(CONST_SPID_PipeRun)
(4)定義屬性對象,并遍歷objPipeRun的屬性,若屬性值非空,則將屬性名稱存入動態(tài)數(shù)組:
ReDim Attrs(1 To objPipeRun.Attributes.Count)
Dim objAttribute As LMAAttribute
浙江醫(yī)藥高等??茖W(xué)校藥學(xué)院在校企辦學(xué)過程中,充分利用“醫(yī)藥強省”、“健康浙江”、“藥品安全示范城市”的建設(shè)契機和學(xué)院的行業(yè)辦學(xué)背景和寧波市“唯一”的專業(yè)特色,將“藥品安全”特色戰(zhàn)略貫穿于學(xué)院的中心工作中,逐步形成學(xué)院的辦院特色、教育特色、產(chǎn)業(yè)特色和管理特色。
For Each objAttribute In objPipeRun.Attributes
If objAttribute.Value <> “” Then
Attrs(i) = objAttribute.Name
i = i + 1
End if
Next
(5)獲取ObjPipeRun的非空屬性的名稱后,將其存放的數(shù)組寫入當前活動的Excel文檔。
ActiveSheet.Range(“A2”).Resize(i, 1) = WorksheetFunction.Transpose(Attrs)
在本文的試驗中,采用了一個技巧,可以快速地挑選出項目數(shù)字化交付統(tǒng)一規(guī)定中規(guī)定的管道屬性表,即將媒介PipeRun對象的屬性按照統(tǒng)一規(guī)定的管道屬性表逐一賦值,使其成為一個形式上符合交付要求的屬性完備的PipeRun對象。所賦值無需準確,保證相應(yīng)屬性非空即可,因其屬性值在后期的導(dǎo)入中均可再次覆蓋。
通過對PipeRun對象屬性的抽取,得到了PipeRun對象的全部非空屬性的名稱,其中除PipeRun類型從父類型繼承來的屬性外,其余非空屬性均是項目統(tǒng)一規(guī)定要求必須輸入的屬性,即合規(guī)屬性。圖1中顯示該項目數(shù)據(jù)庫的PipeRun類型具有42個非空屬性,本研究只涉及對統(tǒng)一規(guī)定要求的屬性,對獲取的屬性進行快速挑選后,即可確定全部數(shù)據(jù)導(dǎo)入相關(guān)的屬性。至此已獲得了PipeRun類型的全部合規(guī)屬性,將它們作為基本要素,根據(jù)設(shè)計者的習(xí)慣和經(jīng)驗,在Excel中編輯、排版后,即可得到屬性數(shù)據(jù)導(dǎo)入映射表的模板,如圖2所示。
值得一提的是,若在程序中不設(shè)非空屬性的限定條件,則會得到該項目中PipeRun類型的全部343個屬性名稱,可用于其它的二次開發(fā)過程,但這對于本研究獲取合規(guī)屬性是具有一定難度的。
在構(gòu)建了PipeRun屬性數(shù)據(jù)導(dǎo)入模板并實現(xiàn)了模板與項目數(shù)據(jù)庫相關(guān)屬性的準確映射之后,還需要將現(xiàn)有的傳統(tǒng)設(shè)計文件管道特性表,按導(dǎo)入模板的格式和設(shè)定進行規(guī)整,方能得到可供導(dǎo)入的PipeRun屬性數(shù)據(jù)表。這里需要解決兩個問題:“列條目的映射重排”和“特殊值的重新設(shè)定”。
列條目的映射重排,指的是將傳統(tǒng)設(shè)計格式的管道特性表以列為單位,與PipeRun屬性數(shù)據(jù)導(dǎo)入模板中的各列相關(guān)聯(lián),并按后者格式重新排版。本研究采用的是索引碼映射法,即為PipeRun屬性導(dǎo)入模板和管道特性表,各自以列為單位設(shè)定一套索引碼,并將導(dǎo)入模板的索引碼填入管道特性表中對應(yīng)的列,這樣即得到了兩個文檔索引碼的關(guān)聯(lián),實現(xiàn)了相應(yīng)列的映射(如圖3所示),第7行中各列單元格中即為PipeRun屬性數(shù)據(jù)導(dǎo)入模板對應(yīng)列的索引碼。
隨后的自動化重排代碼與注釋如下:
Dim Sht As Worksheet, ShtNew As Worksheet ‘\聲 明 兩個工作表對象變量
Dim i(), j(), k As Integer ‘\聲明動態(tài)數(shù)組變量和循環(huán)條件變量
Set Sht = ActiveSheet ‘\設(shè)定當前工作表為源表
Set ShtNew = Sheets.Add ‘\設(shè)定一個新建的工作表作為目標表
圖1 Excel_VBA工程引用的庫文件
圖2 抽取的PipeRun對象非空屬性
圖3 包含索引碼映射的傳統(tǒng)設(shè)計形式管道特性表
圖4 自動轉(zhuǎn)換格式后得到的管道特性表
圖5 可用作導(dǎo)入的PipeRun屬性數(shù)據(jù)表(局部)
i = Application.Transpose(Application.Transpose(Sht.Range("A6:Y6"))) ‘\將索引值裝入數(shù)組
j = Application.Transpose(Application.Transpose(Sht.Range("A7:Y7"))) ‘\將索引值裝入數(shù)組
Sht.Rows("1:5").UnMerge ‘\取消表頭區(qū)域合并單元格,避免合并單元格對重排版的干擾
For k = 1 To 25 ‘\對k變量所指定范圍內(nèi)的管道特性表列按兩套索引碼映射關(guān)系進行重排版
Sht.Columns(i(k)).Copy
ShtNew.Range("A1").Offset(0, j(k) - 1).PasteSpecial ' (xlPasteValues)
Next k
程序運行后,得到重排的管道特性表,各列數(shù)據(jù)符合導(dǎo)入模板的次序,如圖4所示。
但表中還存在很多特殊值,如“ATM”、“AMB”、“FV”、“液體”等,這些特殊值不符合數(shù)據(jù)導(dǎo)入對于語言或數(shù)據(jù)類型的要求,需要處理成英文或Select List Entry中事先定義好的形式。本研究對這些特殊值的處理方法,是通過定義VBA字典,用Replace方法實現(xiàn)批量查找替換的。至此得到了可用作導(dǎo)入的PipeRun屬性數(shù)據(jù)表,如圖5所示。
本文運用Excel_VBA程序語言,通過對SmartPlant P&ID的LLAMA庫文件的引用,連接了項目數(shù)據(jù)庫,并抽取了期望的PipeRun類型屬性名稱,用以構(gòu)建數(shù)據(jù)導(dǎo)入模板;又通過索引碼映射法對管道特性表的Excel文檔進行了自動化重排和批量查找替換,最終生成了可用作導(dǎo)入的PipeRun屬性數(shù)據(jù)表。在后續(xù)的項目中,我們將構(gòu)建好的PipeRun屬性數(shù)據(jù)表實現(xiàn)了導(dǎo)入,一次性導(dǎo)入了整個項目3000余個PipeRun的工程數(shù)據(jù),并在之后的升版中,重復(fù)導(dǎo)入了幾次,每次均運用本研究所開發(fā)的快速構(gòu)建方法,該項目SmartPlant P&ID元件工程數(shù)據(jù)導(dǎo)入工作的效率和準確性均得到了極大提高。
Excel_VBA程序語言是一個成熟的程序語言,其與??怂箍礟PM官方推薦用于SmartPlant P&ID的二次開發(fā)語言VB具有很高的相似性,同時Excel_VBA開發(fā)環(huán)境集成于Excel,無需部署,隨手可得。使用Excel_VBA進行二次開發(fā),也便于同Excel文檔進行數(shù)據(jù)交換。對于工程公司開展數(shù)字化交付業(yè)務(wù)的實際情況來說,二次開發(fā)的成果并非是商業(yè)化軟件,主要是本公司內(nèi)項目應(yīng)用,則利用Excel_VBA進行SmartPlant P&ID二次開發(fā)非常方便。如二次開發(fā)后需要加強保密或商業(yè)化應(yīng)用,可以再轉(zhuǎn)到VB平臺封裝。
從工程設(shè)計軟件的橫向考慮,AutoCAD作為傳統(tǒng)工程設(shè)計常用軟件,也支持VBA開發(fā)環(huán)境,AutoCAD與SmartPlant P&ID軟件通過VBA進行協(xié)同,也是一個未來值得探索的課題。
本研究僅聚焦于快速構(gòu)建PipeRun的屬性導(dǎo)入表,而該項目要求PID上的所有元件都完成數(shù)據(jù)導(dǎo)入。本文的研究思路和方法還可以運用到設(shè)備類型、儀表類型乃至Label類型對象的屬性導(dǎo)入工作之中。
SmartPlant P&ID的LLAMA庫文件還有很多強大的方法可供二次開發(fā)使用,其中包括LMAutomationUtil、PIDAutomation和PLAICE等庫文件。隨著“中國制造2025”的澎湃大潮和數(shù)字化交付業(yè)務(wù)的開展,面向SmartPlant P&ID的二次開發(fā)必將如雨后春筍般地蓬勃發(fā)展。