南京金凌石化工程設(shè)計有限公司 魏 恒
PDMS是AVEVA公司的一款三維建模軟件,在石油化工裝置設(shè)計過程中被廣泛應(yīng)用。PDMS支持二次開發(fā),其中二次開發(fā)包括.NET及自帶的Programmable Macro Language編程語言(簡稱PML)。通過對比不同環(huán)境和需求下.NET和PML的優(yōu)劣,選擇適合自己的編程語言。
PDMS是英國AVEVA公司設(shè)計的旗艦產(chǎn)品。本產(chǎn)品自1977年發(fā)布第一個商業(yè)版本以來,經(jīng)歷AVEVA PDMS 11.5、11.6、12.0、12.1等幾個較大版本的更新升級維護(hù)。尤其在由11.6到12.0版本升級過程中,AVEVA公司對該軟件進(jìn)行大量升級,界面采用Office風(fēng)格。同時,增加了對.NET的支持并發(fā)布.NET開發(fā)使用說明。自PDMS12.0版本發(fā)布以來,基于.NET(C#)進(jìn)行二次開發(fā)的軟件也越來越多,通過對比PML和.NET(C#)語言在不同需求下的編程難易程度、運行效率、語言自身的優(yōu)缺點等,給出在不同環(huán)境下選擇適合的開發(fā)語言的合理化建議。
PML語言為PDMS公司開發(fā)的可編程宏語言,是一種解釋型的腳本語言,其只能在PDMS軟件中被解釋執(zhí)行。自PDMS發(fā)布以來便應(yīng)用于PDMS二次開發(fā)。PML開發(fā)可以使用PDMS大部分資源,對PDMS版本的敏感度不會特別高,無需進(jìn)行編譯即可在PDMS上執(zhí)行。比如,使用PML基于11.5開發(fā)通過簡單的匹配即可以在12.1上完美使用。PDMS軟件命令功能模塊大部分模塊基于PML開發(fā),同時伴隨PDMS發(fā)展,大量的培訓(xùn)資料、開發(fā)實例等為開發(fā)者提供了大量的學(xué)習(xí)資料。PML語言僅應(yīng)用于PDMS軟件,初學(xué)者無論是否學(xué)習(xí)過其它開發(fā)語言,都可以根據(jù)開發(fā)說明進(jìn)行二次開發(fā)。
腳本語言的顯著優(yōu)勢就是將常用的命令封裝出來,這樣在測試程序的新功能時,不再需要編譯源碼,只需編寫程序腳本,能有效提高軟件開發(fā)的效率。
PML語言可以直接使用文本編輯器進(jìn)行編程,或者采用部分人員開發(fā)的PML界面設(shè)計器進(jìn)行編程。對于初學(xué)者,可以通過在PDMS命令欄中輸入常用的PML語句進(jìn)行設(shè)計工作進(jìn)行簡單的PML學(xué)習(xí),再通過《Software Customisation Guide》學(xué)習(xí)窗體(Forms)、功能(Objects)、函數(shù)(Function)、工具(Gadgets)。
(1)窗體(Forms)
窗體是創(chuàng)建一個操作窗口,便于用戶進(jìn)行可視化操作。在該窗口下,可以創(chuàng)建列表、文本框、功能性按鈕等可視化接口。
(2)功能(Objects)
創(chuàng)建一個功能區(qū),該功能區(qū)可以包含多個按鈕,每個按鈕可以指定一個操作窗口。該功能區(qū)可以直接進(jìn)行調(diào)用。
(3)函數(shù)(Function)
在軟件設(shè)計時,通過將所有的函數(shù)或者功能進(jìn)行定制,然后在窗體中進(jìn)行引用。這樣做的目的是,便于設(shè)計者進(jìn)行調(diào)試、歸類管理等。
(4)工具(Gadgets)
在進(jìn)行軟件設(shè)計時,可以設(shè)計一個窗體和基于該窗體的若干個工具。為了便于在窗體中進(jìn)行不同類別的歸納整理,引用該功能。
因為PML僅僅服務(wù)于PDMS的二次開發(fā),所以與其他軟件進(jìn)行數(shù)據(jù)交互時,只能將數(shù)據(jù)轉(zhuǎn)化導(dǎo)出為表格(XLS,CSV)、文本(TXT)型式,然后再進(jìn)行數(shù)據(jù)轉(zhuǎn)化存儲至其他軟件。無形中增加了多個使用步驟哦,增加了操作難度。目前在各個設(shè)計公司均在大量的使用各種類型的設(shè)計軟件工作;需要進(jìn)行大量的數(shù)據(jù)交互。基于當(dāng)前PDMS的發(fā)展軌跡來說,從12.0開始逐步支持.NET二次開發(fā),逐步使用.NET構(gòu)架替換PML也可以說明.NET構(gòu)架也是該軟件發(fā)展的主流。再者,PML編程目前仍然非常小眾,沒有比較好用的開發(fā)平臺。雖然有部分設(shè)計人員,基于自身的開發(fā)經(jīng)驗創(chuàng)建了部分平臺,但仍處于小范圍使用階段;對于擴大PML的影響力毫無用處。再者對于復(fù)雜算法,PML執(zhí)行效率較低,PML命令執(zhí)行時間過長時,PDMS往往會進(jìn)入一種假死狀態(tài),導(dǎo)致軟件崩潰。在小范圍內(nèi)測試,.NET的執(zhí)行效率約為PML的10倍左右。
AVEVA .NET是AVEVA推出的一種更方便的開發(fā)方式。結(jié)合C#豐富的庫及相對于PML而言更高的效率,可以使用C#在AVEVA上快速的開發(fā)出應(yīng)用程序。+C#是由C和C++衍生出來的面向?qū)ο缶幊陶Z言。它在繼承C和C++強大功能的同時,減少了一些它們的復(fù)雜特性。C#是一種面向?qū)ο蟮木幊陶Z言,這樣就使得設(shè)計人員可以快速、高效地開發(fā)各種基于MICROSOFT .NET平臺的程序軟件,同時還可以采用VSTO開放平臺。
基于.NET(C#)進(jìn)行PDMS二次開發(fā)可以使用Visual Studio Tools for Office開發(fā)平臺進(jìn)行軟件設(shè)計。VSTO是一套用于創(chuàng)建自定義應(yīng)用程序的Visual Studio工具包,被程序員廣泛采用。VSTO使你可以用Visual C#擴展PDMS應(yīng)用程序(生成DLL文件被PDMS調(diào)用)。可以使用強大的Visual Studio開發(fā)環(huán)境來開發(fā)PDMS應(yīng)用程序。無論你是創(chuàng)建一個Forms控件,還是創(chuàng)建各種復(fù)雜的函數(shù)以便于進(jìn)行數(shù)據(jù)處理,VSTO都可以實質(zhì)變得非常容易。在添加對PDMS提供的命名空間后,我們可以輕易的使用.NET(C#)從PDMS獲取各種想要的信息。基于VSTO的可視化開發(fā)平臺和豐富的.NET控間資源,開發(fā)可以變得非常簡單、高效。
使用.NET(C#)進(jìn)行PDMS開發(fā)時,需要引用以下幾個命名空間:
(1)命名空間:Aveva.ApplicationFramework
插件管理器:這個類提供屬性和方法來管理應(yīng)用程序框架插件。服務(wù)管理器:這個類定義一個接口,應(yīng)用程序框架中的各種組件可以通過它發(fā)布服務(wù)。這個服務(wù)管理器本身作為一個服務(wù)提供者,也可以響應(yīng)服務(wù)的請求,它還可以被應(yīng)用程序和應(yīng)用程序插件用于發(fā)布額外的服務(wù)。設(shè)置管理器:這個類提供屬性和方法管理應(yīng)用程序設(shè)置,這些設(shè)置保存在設(shè)置組中,用于在不同的任務(wù)中保持一致。
(2)命名空間:Aveva.ApplicationFramework.Presentation
命令條管理器:提供使用基于應(yīng)用程序框架程序的菜單和命令條,也提供方法加載用戶接口定制(UIC)文件中定義的菜單和命令條。命令管理器:這個類定義一個接口來提供一種機制管理命令對象可以關(guān)聯(lián)到工具欄和其他用戶界面對象,當(dāng)激活一個工具(比如點擊一個按鈕)將執(zhí)行相應(yīng)的命令對象。一些不同的用戶界面對象可以關(guān)聯(lián)相同的命令對象,因此可以在命令中集中控制那些用戶界面對象的功能,命令的這種狀態(tài)屬性(例如可用/選中)將可以影響關(guān)聯(lián)這個命令的所有用戶界面對象,例如,命令設(shè)置為不可用后將導(dǎo)致所有關(guān)聯(lián)的用戶界面對象不可用,用戶界面對象通過CommandExecutor派生類關(guān)聯(lián)命令。資源管理器:這個類定義一個接口給插件提供一種簡單的機制來存取本地資源。資源管理器提供一些方法允許插件存取資源文件包含的各種形式的資源(字符串,圖像,光標(biāo),圖標(biāo)等)。窗口管理器:提供存取主程序窗口,狀態(tài)欄,多文檔界面集合和可??看翱冢步o開發(fā)者提供方法生成多文檔界面和可??看翱趤戆丶?/p>
(3)命名空間:Aveva.Pdms.Database
數(shù)據(jù)服務(wù)管理:用于打開一個項目。數(shù)據(jù)屬性管理:一是用于類實例屬性的識別和傳輸;二是提供方法允許檢索一個屬性的元數(shù)據(jù),例如類型,范圍,名稱,是否是隱含屬性等等,這個類對于系統(tǒng)屬性和用戶自定義屬性也有效。
使用.NET進(jìn)行程序開發(fā)時,程序調(diào)試非常的不方便,只能先封裝在運行PDMS進(jìn)行測試,測試結(jié)果只能顯示該程序是否有問題,不能確認(rèn)問題出在哪里。只能由開發(fā)人員自行檢查代碼,找到問題。當(dāng)生成的C#庫DLL文件被PDMS加載后,便不可以卸載;如我需要修改代碼,則需要退出PDMS,嚴(yán)重影響開發(fā)效率。
結(jié)論:綜上所述:在實現(xiàn)簡單功能的二次開發(fā)中,需要根據(jù)不同項目的需求選擇相應(yīng)的開發(fā)語言進(jìn)行軟件開發(fā)。從數(shù)據(jù)來源的角度來說,如果僅僅對PDMS內(nèi)部數(shù)據(jù)處理,不需要與其他軟件進(jìn)行數(shù)據(jù)交互;則直接采用PML語言進(jìn)行設(shè)計較為簡單高效;反之則應(yīng)使用.NET(C#)平臺。從數(shù)據(jù)處理效率來說,當(dāng)軟件內(nèi)容較為復(fù)雜或數(shù)據(jù)處理量比較大時,使用.NET(C#)平臺進(jìn)行二次開發(fā)來提升運行效率則顯得尤為重要。而在部分環(huán)境下,不僅需要軟件進(jìn)行PDMS內(nèi)部數(shù)據(jù)處理,還需要與其他軟件進(jìn)行數(shù)據(jù)交互,軟件數(shù)據(jù)量處理量比較大時,則需要二者結(jié)合使用;使用PML進(jìn)行內(nèi)部數(shù)據(jù)處理、數(shù)據(jù)的運算工作則使用C#進(jìn)行開發(fā)是最有效的解決辦法。