張曉瑞,蔣衍君,閔彥榮,付豪,董懷普
(國電南自自動化有限公司,南京 211153)
基于OSGi&RCP插件化的智能變電站集成軟件平臺架構(gòu)
張曉瑞,蔣衍君,閔彥榮,付豪,董懷普
(國電南自自動化有限公司,南京 211153)
針對目前智能變電站在二次設備配置、運維及管控系統(tǒng)中存在的問題,結(jié)合“軟件工程”的理念,提出了一種基于OSGi&RCP插件化的多業(yè)務集成軟件平臺架構(gòu)。該架構(gòu)以java動態(tài)模塊化OSGi規(guī)范和Eclipse RCP開源框架為基礎,融合插件間面向服務的通信機制及插件內(nèi)接口與實現(xiàn)相分離的包(Package)最小化依賴設計方法,實現(xiàn)了系統(tǒng)面向多用戶、多業(yè)務的松耦合式集成,解決了傳統(tǒng)軟件架構(gòu)在開發(fā)、部署、工程應用上周期長、靈活性不足的缺陷,達到了“即插即用”的模塊化效果。實際工程應用驗證了該架構(gòu)的可行性與優(yōu)越性。
智能變電站;OSGi;Eclipse RCP;業(yè)務模塊化;即插即用
近年來,智能電網(wǎng)建設發(fā)展迅速,變電站運行技術(shù)水平和業(yè)務復雜程度越來越高[1-2],伴隨著行業(yè)技術(shù)標準的提升以及國內(nèi)外二次設備廠家當前自身因素限制,導致二次設備配置與運維面臨如下問題:現(xiàn)有工具升級無法滿足智能變電站業(yè)務的發(fā)展速度需求;各個廠家設備配置、運維差異性很大[3-4],無法實現(xiàn)資源共享,運維人員需要掌握多廠家工具使用技巧;不同變電站的定制化需求無法得到滿足;個別工具業(yè)務集成太多,加重了硬件資源消耗,程序性能明顯下降,影響工作效率[5]。同時,在現(xiàn)有人力資源與市場競爭更加激烈的條件下,有些廠家已經(jīng)無法很好地適應這種靈活多變的業(yè)務發(fā)展需求,如何尋找一種方案既能滿足主要客戶(國網(wǎng)、南網(wǎng)等)對新趨勢下變電站業(yè)務的發(fā)展需求,又能解決廠家頻繁疲于應對變電站業(yè)務無限靈活擴展的現(xiàn)狀[6-10],是現(xiàn)階段行業(yè)內(nèi)所有二次設備廠商急需要解決的一大難題。
針對以上問題,本文提出了一種基于OSGi&RCP插件化的軟件平臺架構(gòu)方案,該架構(gòu)以java動態(tài)模塊化開放服務網(wǎng)關OSGi(Open Service Gateway Initiative)平臺為基礎,結(jié)合Eclipse的富客戶平臺RCP(Rich Client Platform)富客戶端開源框架,融合軟件工程中軟件復用與構(gòu)件化技術(shù),能夠在軟件架構(gòu)層把智能變電站的遠動、保信、在線監(jiān)測、計量、電力系統(tǒng)同步相量測量裝置(PMU)、合并計算、五防操作票、順控、遠程瀏覽、告警直傳、源端維護等業(yè)務以及報文解析、國際化、數(shù)據(jù)庫讀寫等功能變成一個個風格統(tǒng)一、可靈活組裝、跨平臺、易維護的“大一統(tǒng)”插件,供產(chǎn)品部門按用戶實際需求組裝系統(tǒng)完成發(fā)布工作。
1.1 抽象業(yè)務模塊分析
根據(jù)軟件需求分析中抽象化原則,按基礎業(yè)務模塊進行抽象模塊化分割,再根據(jù)不同的業(yè)務要求,在公共基礎模塊之上進行特有的業(yè)務功能點擴展以滿足實際用戶的需求?;谶@一劃分原則,可以把整個變電站的配置及運維管控相關需求抽象為:全站系統(tǒng)配置模塊、五防模塊、順控模塊、遠程瀏覽模塊、源端維護模塊、遠動模塊、保信子站模塊和告警直傳模塊等,輔以網(wǎng)絡配置模塊、數(shù)據(jù)庫配置模塊、用戶管理模塊、權(quán)限管理模塊、日志模塊、程序配置與進程監(jiān)控模塊、報文分析模塊、實時數(shù)據(jù)瀏覽模塊、統(tǒng)計模塊、持久化模塊等其他模塊。
1.2 架構(gòu)思路
根據(jù)本文引言中對當前智能變電站的發(fā)展描述和抽象業(yè)務模塊分析,設想把變電站業(yè)務變成一個個的模塊化插件,通過按需分配的方法,找出所需要的插件集成到一個公共平臺上。該平臺可支撐所需業(yè)務插件的信息資源共享與動態(tài)化插拔運行,并能很好地擴展每一個功能業(yè)務模塊,同時對其他模塊不產(chǎn)生任何影響。
如果這個設想成立,該平臺需既能滿足對用戶界面(UI)模塊化、又能滿足業(yè)務服務調(diào)用模塊化。
圖2 軟件架構(gòu)
借鑒計算機技術(shù)方面對此問題的解決方案,選擇基于OSGi&RCP的平臺架構(gòu)無疑是最好的思路。其框架圖如圖1所示。
圖1 多業(yè)務集成框架
1.3 架構(gòu)設計
根據(jù)1.1中描述的智能變電站抽象業(yè)務分割方法及1.2中提到的架構(gòu)思路描述,可以得到如圖2所示的架構(gòu)設計。
1.4 架構(gòu)分析與比較
三層軟件架構(gòu)是傳統(tǒng)富客戶端軟件系統(tǒng)最常用的設計方法,如圖3所示。這種架構(gòu)方案具有接口清晰、耦合度低、方便開發(fā)人員協(xié)作等特點,但缺點也很明顯。這種傳統(tǒng)的縱向分層模型,每一層都依賴于下面層次提供的服務,同時又被上面的層次所依賴,逐層依賴的組織方式使軟件趨于一個整體,正是這個“整體”使得各層次對于軟件正常運行都是缺一不可的,無法抽取一部分作為獨立的軟件進行發(fā)布和使用。隨著系統(tǒng)的不斷擴展,每個層次上處理的業(yè)務都在增加,不僅影響系統(tǒng)的可靠性和穩(wěn)定性,同時對后期的維護提出了更高的要求。
圖3 傳統(tǒng)富客戶端軟件架構(gòu)
基于OSGi&RCP模塊化的架構(gòu)設計就是盡可能避免把軟件設計為一個整體,而是偏向于把軟件設計為一個核心加一系列插件構(gòu)成的功能模塊集合。相比傳統(tǒng)的分層架構(gòu)設計,本方案具有以下優(yōu)勢。
(1)除了基礎資料(服務接口、實例類、公共資源類等)的核心插件外,其他的插件間都可以避免相互依賴,保證各個模塊間的相對獨立,同時插件間也不直接進行交互通信,而是通過OSGi層中的注冊服務與監(jiān)聽服務進行協(xié)作,可以解決多廠家服務插件共享問題。
(2)模塊化設計可以讓軟件系統(tǒng)實現(xiàn)按需分配。
(3)系統(tǒng)得益于底層的OSGi天然的動態(tài)化特性,可以很容易地進行熱插拔和動態(tài)更新。安裝和升級只需停用或替換對應的模塊插件,而無需停用服務器,這樣對不相關的模塊不產(chǎn)生任何影響。
(4)提高系統(tǒng)的穩(wěn)定性與可擴展性。一個功能模塊崩潰不會導致整個系統(tǒng)癱瘓,其他的功能模塊正常運轉(zhuǎn),同時增加新的功能也不需要修改原有的功能模塊,實現(xiàn)了低成本、高靈活度的軟件功能擴展與伸縮。
(5)強大的Eclipse開發(fā)工具平臺。RCP框架技術(shù)可以在技術(shù)層面控制界面樣式的統(tǒng)一,并且在此框架下開發(fā),可以很容易實現(xiàn)幫助文檔系統(tǒng)與國際化功能。
2.1 業(yè)務插件(Bundle)的組織與依賴方法
結(jié)合OSGi技術(shù)規(guī)范特性,該方案采用包(類)依賴的方式在編碼層面實現(xiàn)模塊插件間的依賴關系。其內(nèi)部實現(xiàn)則利用OSGi微內(nèi)核架構(gòu)的模塊層和生命周期層來完成。
在RCP框架下實現(xiàn)一個OSGi Bundle,不僅可以使用OSGi的標準應用程序編程接口(API),同時還可以使用RCP框架自己的擴展功能,依托Eclipse平臺,很容易可視化編寫元數(shù)據(jù)描述MANIFEST.MF文件。這也是實現(xiàn)OSGi規(guī)范的插件與普通插件的區(qū)別所在。
該框架對插件的版本和包進行了最小化管理,同時還有清晰的可視化插件依賴關系圖供系統(tǒng)設計階段使用。
2.2 業(yè)務插件間通信機制
一個復雜的業(yè)務模塊不會通過單一插件來實現(xiàn)所有功能,那么模塊間的通信是必須要解決的問題。在最大化保證各個插件相對孤立的情況下,結(jié)合OSGi技術(shù)規(guī)范要求,該方案采用面向服務的通信方法。
服務不能孤立存在,每個服務都從屬并運行在提供服務的Bundle上。Bundle要提供服務供其他插件模塊使用,首先需要把服務(類)注冊到基礎資料Bundle中,這個基礎資料Bundle底層采用一個由OSGi框架提供、可以被所有的Bundle共享的服務注冊表技術(shù)來實現(xiàn),其他Bundle使用服務時只需要從注冊表中查找相應的服務拿來使用,從而避免了與提供服務的Bundle直接交互。因此,這種插件間的通信機制不需要關心該服務來源于哪里,也不需要關心導入提供服務的Bundle或?qū)ν獍l(fā)布什么樣的包。
2.3 UI插件與服務插件的實現(xiàn)
UI插件主要負責系統(tǒng)人機交互界面的靈活組裝,包括基礎框架界面的搭建、基礎模塊業(yè)務的界面顯示、多業(yè)務模塊透視圖的擴展、業(yè)務功能菜單的擴展、人機交互UI幫助系統(tǒng)等。系統(tǒng)UI插件組織結(jié)構(gòu)如圖4所示。
圖4 系統(tǒng)UI插件組織結(jié)構(gòu)
服務插件(非UI插件),此類插件主要負責多業(yè)務邏輯的處理,包括基礎業(yè)務邏輯單元的處理、業(yè)務接口包的暴露、插件間面向服務(類對象)交互的使用等。
2.4 插件粒度分割原則
基于OSGi&RCP技術(shù)的模塊化和運行時動態(tài)化都是以Bundle為基礎的,因此在設計規(guī)模較大的系統(tǒng)平臺架構(gòu)時Bundle的粒度劃分特別重要。不僅要做到低耦合、高內(nèi)聚,還要降低在系統(tǒng)運行時更新Bundle的成本。本系統(tǒng)架構(gòu)按照以下原則對變電站業(yè)務做到了很好地劃分。
(1)根據(jù)智能變電站業(yè)務發(fā)展特點,以業(yè)務為模塊劃分,視圖、菜單擴展、功能服務分別生成插件(Bundle)。
(2)借鑒設計模式思想,通過設計模式模板為我們提供合適的封裝方案,比如工廠模式,將系統(tǒng)的復雜性、多樣性、易變性問題通過工廠方法進行封裝,降低系統(tǒng)的復雜性。
(3)并列原則,對于實現(xiàn)同一目標而需要采用不同方式的功能分別生成插件,在打包發(fā)布系統(tǒng)時按需使用相應Bundle。
(4)領域業(yè)務邏輯代碼與OSGi框架服務代碼分離原則,增加業(yè)務邏輯代碼的結(jié)構(gòu)清晰度,方便復用到非OSGi框架系統(tǒng)項目中。
(5)接口與實現(xiàn)分離原則,降低插件內(nèi)部代碼耦合度和屏蔽使用者對復雜業(yè)務實現(xiàn)類的關注。
與傳統(tǒng)的軟件架構(gòu)相比,基于OSGi & RCP插件化的軟件平臺架構(gòu)將智能變電站中的業(yè)務按業(yè)務模塊進行劃分;利用設計模式的思想封裝業(yè)務模塊為插件;插件內(nèi)采用面向接口的編程方式解決業(yè)務邏輯的復雜性與多變性;插件外采用面向服務的機制完成插件間的交互,保證每個插件的孤立性;開發(fā)與發(fā)布分離,“積木式”組裝和特殊化定制相結(jié)合方式滿足不同用戶對不同或相同業(yè)務功能的按需分配;支持跨平臺,能夠同時導出多個平臺上的產(chǎn)品;業(yè)務功能易擴展,滿足智能變電站業(yè)務未來的發(fā)展方向。
雖然OSGi技術(shù)規(guī)范已經(jīng)非常成熟,但要在本文描述的架構(gòu)上開發(fā)出完美的系統(tǒng)還需要關注以下問題:合理地規(guī)劃系統(tǒng),降低模塊間的耦合性;理解對象的生命周期,合理釋放Bundle資源,防止內(nèi)存泄漏;避免插件啟動順序依賴,為后期維護埋下伏筆。
[1]孫一民,裘愉濤,楊慶偉,等.智能變電站設計配置一體化技術(shù)及方案[J].電力系統(tǒng)自動化,2013,37(14):70-74.
[2]篤峻, 葉翔, 王長瑞,等. 智能變電站設計配置一體化功能規(guī)范研究及工具開發(fā)[J]. 電力系統(tǒng)自動化, 2014, 38(20):85-89.
[3]周恒俊, 曹培, 張金江,等. 面向高級量測體系的分布式對等互聯(lián)OSGi平臺[J]. 電力系統(tǒng)自動化, 2011, 35(11):71-76.
[4]王麗華, 王治民, 任雁銘,等. 插件化IEC61850通信模塊設計與實現(xiàn)[J]. 電力系統(tǒng)自動化, 2012, 36(5):82-85.
[5]趙燕茹, 楊臻, 張延,等. 智能變電站遠動與保信子站信息遠傳功能集成方案[J]. 電力建設, 2013, 34(12):48-52.
[6]悅怡. 基于OSGI的面向服務插件框架研究與應用[D]. 鎮(zhèn)江:江蘇大學, 2008.
[7]相東飛.基于OSGi插件化的應用框架[J].科技信息(學術(shù)版),2007(12):176,179.
[8]WU C L, LIAO C F, FU L C.Service-oriented smart-home architecture based on OSGi and mobile-agent technology[J].IEEE transactions on systems, man and cybernetics, part c(applications and reviews),2007,37(2):193-205.
[9]GREGERSEN A R,JORGENSEN B N.Extending eclipse RCP with dynamic update of active plug-ins[J].The journal of object technology,2007,6(6):67.
[10]MCAFFERJ,VANDERLEI P,ARCHER S.OSGi and equinox:creating highly modular Java systems[M].Addison-wesley professional,2010.
(本文責編:劉炳鋒)
2016-11-25;
2017-01-09
TP 391
A
1674-1951(2017)02-0004-04
張曉瑞(1988—),男,山東濱州人,工程師,工學碩士,從事智能變電站配置與運維系統(tǒng)研發(fā)方面的工作(E-mail:xiaorui-zhang@sac-china.com)。
蔣衍君(1975—),男,黑龍江尚志人,高級工程師,工學碩士,從事電力監(jiān)控及調(diào)度自動化方面的工作(E-mail:yanjun-jiang@sac-china.com)。
閔彥榮(1985—),男,江蘇南京人,工程師,從事智能變電站配置與運維系統(tǒng)研發(fā)方面的工作(E-mail:minyanrong@163.com)。
付豪(1986—),男,河南商丘人,工程師,工學碩士,從事智能變電站配置與運維系統(tǒng)開發(fā)方面的工作(E-mail:hao-fu@sac-china.com)。
董懷普(1988—),男,河南商丘人,工程師,工學碩士,從事智能變電站配置與運維系統(tǒng)開發(fā)方面的工作(E-mail:huaipu-dong@sac-china.com)。