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