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