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