范文進
(南京揚子石油化工設計工程有限責任公司,南京210048)
目前在石油化工工程設計工作中,雖然自控專業工程設計軟件INtools(又稱SmartPlant Instrumentation)已被國際各大石油和化工工程公司所接受,但在國內運用時還存在一些弊端,不僅需要大量前期的二次開發工作,而且其本身提供的智能化還有局限性,需要根據項目的特點進行選擇和設置。同時,INtools軟件自身并無分配I/O(輸入輸出)卡件的功能,僅能通過在Browser模塊中的打印預覽功能將儀表索引或I/O索引生成Excel格式的CSV文件,再通過VBA技術編寫Excel宏命令或采用針對Office開發的可視化工作室工具VSTO(Visual Studio Tools for Office)技術實現對I/O卡件的分配工作。
VSTO不像VBA那樣嵌入在Office產品中,而是借助.Net平臺集成在Visual Studio集成開發環境(IDE)中,進而提升了代碼編輯能力,使開發人員更容易使用托管控件來擴展Office解決方案,為開發人員帶來更直觀的設計、開發和調試體驗,可以對Office創建應用程序級別的插件,從而開發自己的程序功能來滿足各種應用中的不同需求。因此,通過VSTO開發Office相對VBA更具有靈活性,在使用上也更具有便利性。
在自控工程設計中,Excel軟件常作為自控專業的出圖工具,用來制作儀表索引表、I/O分配表以及儀表規格書等。雖然Excel軟件具有強大的制表、計算等功能,在處理表格文件中體現的優勢非常明顯,可以用來創建報表,對數據進行復雜的操作和分析、打印等。但目前在傳統設計模式下,并未完全發揮出Excel軟件的強大功能,大部分設計信息數據還需人工錄入,特別是很多重復性的數據不能像INtools軟件那樣基于數據庫一次錄入和重復使用。而人工重復錄入數據,極易出現筆誤等類似錯誤,同時在成品圖格式上也易出現不統一的問題,這將影響成品圖紙的可讀性,從而使出圖質量變差。因此,很有必要通過VSTO技術定制Excel功能插件,將復雜的工作簡化,充分發揮VSTO技術本身的優勢,有效提高設計工作的效率,并減少非設計原因造成的錯誤。
根據中國石油化工集團公司發布的SHSG—053—2011《石油化工裝置詳細設計內容規定》,儀表索引表及I/O分配表應是儀表專業詳細工程設計文件的組成部分,其中儀表索引表包含的信息數據最全面,各個設計表格文件內的信息都應通過儀表索引得到反映,I/O分配表也不例外。因此,可以將必要的信息從儀表索引表中提取,制作I/O分配表。但如此大批量的數據提取工作采用傳統的人工錄入方式時,效率不但得不到提高,而且錯誤率也增加。而這些工作完全可以通過VSTO技術定制對應的程序功能,批量生成I/O分配表來完成,大大改善因人工錄入產生的錯誤。同時減少了工作強度及工時消耗,提高工作效率和準確性,進一步保證有充足的時間來發現、分析、解決設計工作中存在的問題。以下將分析通過VSTO技術定制Excel插件,實現I/O分配表設計工作的過程。
a)創建Excel格式的模板文件。該模板應包含儀表索引表及I/O分配表,并完全可以利用以前項目使用的通用Excel設計文件格式,即項目設計中最后成品圖的格式文件。對于每個項目而言,I/O分配表的設計相對一致,具有通用性,模板都應能反映I/O卡件類型及點數,卡件冗余信息等。當然主要信息必不可少,例如信號的位號、用途、儀表或信號名稱、輔助設備等。同時,儀表索引表模板也應體現出I/O分配表中的信息。
b)錄入I/O分配表數據信息。由于該數據源自儀表索引表,包括位號、儀表類型、用途及輔助設備等,因此源數據是在儀表索引表中錄入的。若數據源自INtools文件,應將詳細的儀表索引或I/O索引從INtools軟件中導出為Excel文件格式,然后再通過定制的插件,錄入并完善相關數據信息。
c)導出數據,批量生成I/O分配表。使用插件將眾多I/O分配表的數據信息從儀表索引表中導出,批量生成I/O分配表。同時還應考慮出圖的先后順序,排列順序可設定為AI—AO—DI— DO—PI—PO—AIR—AOR—DIR—DOR—PIR—POR(A為模擬量;D為數字量;P為脈沖;I為輸入;O為輸出;R為冗余),即先輸出非冗余I/O卡件的分配表,再輸出冗余I/O卡件的分配表。同時,卡件類型按I/O類型的字母順序排列。
d)校核I/O分配表。批量出圖后應該及時校核,這項工作對于設計人員來說是必不可少的程序。它可以完善一些可能的后續工作,進一步保證生成圖紙的準確性,達到成品圖的要求。
利用VSTO技術完成上述I/O分配功能,即開發Excel應用程序的插件,就是表現形式為.dll的程序集(Excel COM加載項)。而Excel COM加載項的突出優勢是它可以在需要Excel應用程序時創建該程序,并和Excel應用程序在同一個進程中運行。而且使用Visual Studio集成開發環境,開發流程也變得更簡單。只需根據開發環境向導建立Excel 2003外接程序框架,然后再編寫定制的功能程序,并生成Excel COM的安裝程序,最后在客戶機上部署安裝即可。
筆者開發的插件在Excel 2003應用程序的菜單項中添加了自定義功能菜單。添加該菜單需編寫程序代碼,在Excel 2003應用程序啟動時添加菜單。該代碼應在ThisAddIn_Startup子程序過程中編寫實現。為了實現I/O分配功能,設計了專用的功能窗口(Form),由自定義功能菜單對應的菜單命令調出,如圖1所示。

圖1 自定義功能菜單
具體的I/O分配功能是在對應的功能窗口中通過編程實現的。程序首先會在調出該窗口時對指定的儀表索引表進行初始化,得到儀表索引表所反映的項目信息,并獲取模板參數的設置信息,如位號、I/O類型等字段所在模板的列表位置等。然后通過“統計”子程序將目前設計的I/O分配信息數據反映到界面的兩個數據瀏覽器中。
I/O分配功能開發完畢后,通常都需要將其部署到客戶的使用環境中。而用戶運行一個.Net應用程序必須滿足兩方面需求:環境需求,即程序集的支持;安全性需求,即用戶要有足夠權限來執行應用程序。因此,對于.Net Excel應用程序來說,部署并不是簡單將程序和文檔復制到客戶機上,而是先在客戶機上安裝托管程序運行環境。為此需要安裝4個程序:.net framework 3.5,Microsoft Office(含SP1或SP2),Office 2003 PIA(主互操作集)及VSTO運行庫,之后再安裝VSTO開發完成的插件Excel_InstCtrl_Tools.msi(在文件夾“bin\\debug\\”下)。此時,客戶機的注冊表中才會注冊該Excel COM加載項。最后還應對其安全性進行設置。VSTO本身沒有添加安全性功能,但可以使用.Net框架附帶的安全性功能,以及Office 2003中已有的安全性功能。筆者在部署該應用程序時,采用了編程方式,即使用程序代碼控制Caspol工具進行部署。這樣,客戶只要安裝應用程序便可完成部署,既安全又方便。具體操作中,建立一個批處理文檔,將客戶機安裝目錄下(C:\Program Files\FanWenJin\Excel_InstCtrl_Tools)的Excel_InstCtrl_Tools.dll程序集權限設置為“完全信任”(FullTrust)即可,命令參數及程序代碼如下:

該插件不僅可以完善INtools軟件二次開發方面的不足,還提高了傳統設計模式的工作效率。經過在多個項目設計中的使用,該插件修復了一些漏洞,并逐步升級了程序,其準確性得到很大提高,并進一步提高了項目自控設計的工作效率,明顯降低了設計人員的勞動強度和工時消耗。同時,筆者還根據自控工程設計需要擴展了該插件,使其可以在傳統設計模式下對儀表安裝和電纜敷設材料進行自動統計,使設計工作更加自動化。此外,應該注意的是,在使用該插件前,需要針對不同項目的特殊性設置Excel模板文件的自定義屬性參數,以便插件在初始化時讀取。
[1] 項飛.INtools軟件綜述及其二次開發[J].石油化工自動化,2007,43(04):57-60.
[2] 隋明新,方留安,姜秀君.了解和應用INtools儀表設計管理軟件[J].石油化工自動化,2004,40(05):5-8.
[3] 馬東寧.INtools軟件在儀表專業工程設計中的應用[J].石油化工自動化,2003,39(06):9-12.
[4] KATHLEEN MG,PAUL S.VSTO for Mere Mortals[M].Boston:Pearson Education Inc,2007.
[5] 苑青,孔捷,冷靜.利用VSTO和.NET的Office開發技術[J].電腦編程技巧與維護,2009(06):10-12.
[6] KATHLEEN MG,PAUL S.VSTO開發者指南[M].李永倫,譯.北京:機械工業出版社,2009.
[7] 鄭宇軍,朱連軍.新一代.NET Office開發指南Excel篇[M].北京:清華大學出版社,2006.
[8] 朱強,原小艷.托管Office COM加載項的設計與實現[J].計算機時代,2006,24(04):11-13.
[9] 陸德民,張振基,董步余.石油化工自動控制設計手冊[M].3版.北京:化學工業出版社,2000.
[10] 中國石油化工集團公司.SHSG—053—2011石油化工裝置詳細設計內容規定[S].中國石化集團洛陽石油化工工程公司,2011.