汪溢, 余曉明, 馬凱, 張靜, 單超
(1.廣東電網(wǎng)有限責任公司電力科學研究院,廣東 廣州 510080; 2國電南瑞科技股份有限公司,江蘇 南京 211106)
?
基于代碼自動生成技術的變電站自動化系統(tǒng)軟件開發(fā)與實現(xiàn)
汪溢1, 余曉明2, 馬凱1, 張靜2, 單超2
(1.廣東電網(wǎng)有限責任公司電力科學研究院,廣東 廣州 510080; 2國電南瑞科技股份有限公司,江蘇 南京 211106)
隨著變電站自動化及其建設水平的日益提高,軟件中包含的模塊越來越多,各對象間信息傳遞更加頻繁,大大增加了電力系統(tǒng)非計算機專業(yè)人員的開發(fā)工作難度,導致軟件開發(fā)周期長、開發(fā)成本居高不下且整個過程包含大量的重復勞動。立足于使電力系統(tǒng)非軟件專業(yè)人員能夠擺脫繁瑣的底層編程,集中精力到電力自動化專業(yè)核心技術學習研究,基于代碼自動生成技術、編譯原理中的詞法分析語法分析,深入研究了模型解釋器和代碼生成引擎,給出了基于模型驅(qū)動框架的變電站自動化系統(tǒng)軟件的開發(fā)和實現(xiàn)方案,可根據(jù)需要靈活配置模型和程序模板,將系統(tǒng)中有規(guī)律可循、大量重復的代碼自動生成,減少代碼出錯率,提高軟件開發(fā)的效率。
變電站;代碼自動生成;實時數(shù)據(jù)庫;模型解釋器;代碼生成引擎
變電站自動化系統(tǒng)軟件對變電站運行自動進行監(jiān)視、控制和管理[1],它對下與站內(nèi)通信網(wǎng)相連,將全站的信息順利寫入數(shù)據(jù)庫,并根據(jù)需要將數(shù)據(jù)上送調(diào)度和控制。同時,通過友好的人機界面和強大的數(shù)據(jù)處理能力實現(xiàn)就地監(jiān)視、控制功能[2]。軟件中包含對象種類多,各對象間信息傳遞頻繁,通訊和界面顯示實時性要求高,而且其業(yè)務邏輯需要資深的電力系統(tǒng)專業(yè)人士才能勝任。這些專業(yè)人士一般都有十年以上電力行業(yè)工作經(jīng)驗,具有高學歷的專門人才,難以由軟件領域的專業(yè)開發(fā)人員代替。因此,要將變電站自動化系統(tǒng)軟件開發(fā)為功能完備、易于使用的現(xiàn)代化軟件必須克服許多困難,除了大型軟件開發(fā)中常見的一些困難之外, 還必須解決電力系統(tǒng)非計算機專業(yè)人士編程水平不高、對現(xiàn)代軟件開發(fā)所需了解的面向?qū)ο蟆㈤_發(fā)模式等概念不熟悉的問題,以及由于業(yè)務邏輯發(fā)生變化所產(chǎn)生的大量的維護和開發(fā)工作。
隨著電力系統(tǒng)的日益復雜,變電站自動化系統(tǒng)軟件普遍采用了模塊化設計思想進行系統(tǒng)設計,其中數(shù)據(jù)處理模塊、網(wǎng)絡通訊模塊、用戶界面模塊以及用于模塊間交互的接口是變電站自動化系統(tǒng)軟件的核心組成部分。傳統(tǒng)的變電站自動化軟件的開發(fā)往往耗費大量的時間編寫上述這些基礎代碼,導致軟件開發(fā)周期長、開發(fā)成本居高不下且可移植性差,因此,如果能將這些基礎代碼采用自動生成技術[3]實現(xiàn),將大大降低非軟件專業(yè)人員開發(fā)工作難度,使其擺脫繁瑣的底層編程,集中精力到電力自動化專業(yè)核心技術、技能的學習與研究。
1.1 概述
變電站自動化系統(tǒng)包含大量的配置界面、數(shù)據(jù)交互和數(shù)據(jù)轉(zhuǎn)換,沒有統(tǒng)一風格的用戶界面,參數(shù)配置復雜,但是其實現(xiàn)又有一定的相似性,整個過程包含大量的重復勞動。
將代碼自動生成技術應用到變電站自動化系統(tǒng)基礎代碼開發(fā)中,可以產(chǎn)生規(guī)格統(tǒng)一的代碼,弱化業(yè)務流程的變化對軟件開發(fā)的影響,減少系統(tǒng)的復雜程度,提高軟件開發(fā)的效率[4]。
1.2 系統(tǒng)需求
變電站自動化系統(tǒng)中,大量的配置信息都存儲在關系型數(shù)據(jù)庫,關系型數(shù)據(jù)庫在存儲和管理永久性、非短暫數(shù)據(jù)方面有著廣泛的應用[5],但是,由于關系型數(shù)據(jù)庫系統(tǒng)主要存儲在慢速的外部存儲設備,對時限有嚴格要求的變電站自動化系統(tǒng)必須將數(shù)據(jù)庫上的配置信息加載、映射到實時數(shù)據(jù)庫。同時,組態(tài)工具對這些配置信息進行維護,也需要將配置信息加載到配置庫,修改商用數(shù)據(jù)庫后通過發(fā)送消息修改實時數(shù)據(jù)庫。實時數(shù)據(jù)庫和配置庫中包含很多張表,這些表與數(shù)據(jù)庫中的表一一對應,相當于C++的類,表中的記錄對應于類的實例 , 相同類型的記錄放在同一個表中,主要有廠站類、間隔類、一次設備類、二次設備類、遙測類、遙信類、 電度類、計算規(guī)則類、控制操作類、操作規(guī)則類、系統(tǒng)參數(shù)類、節(jié)點信息類、端口參數(shù)類等。實時數(shù)據(jù)庫和配置庫采用面向?qū)ο蠓椒╗6]定義這些類的屬性和操作方法,而且在初始化和保存數(shù)據(jù)時需要對每張表、每個字段進行數(shù)據(jù)類型檢查和數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)流如圖1所示。
圖1 數(shù)據(jù)流
這些表的類定義、數(shù)據(jù)的組織方式都有一定的規(guī)律可循,而且一些操作無論何種業(yè)務邏輯都會用到如新增、刪除、修改、查詢等。
圖2 消息/服務總線
為方便應用系統(tǒng)間的數(shù)據(jù)交換, 變電站自動化系統(tǒng)設計了服務/消息總線,總線提供協(xié)議轉(zhuǎn)換、消息路由、消息過濾和數(shù)據(jù)適配等功能,如圖2所示。
消息/服務總線的承載體為報文,由兩部分組成:報文頭和報文體。報文頭主要包括每類報文的公共信息,從報文頭的信息分析出該報文完成的功能。報文頭包含報文體的長度、消息類型、事件標識、源節(jié)點、源進程、目標節(jié)點、目標進程等信息。報文頭是每個消息發(fā)送必須帶的公共信息,報文體視各個應用而定。報文體是發(fā)送的具體數(shù)據(jù)信息。報文體針對不同應用的功能定義各自的數(shù)據(jù)體,應用系統(tǒng)在發(fā)送報文前需要對數(shù)據(jù)體進行序列化,接收報文后再通過反序列化獲得請求的結(jié)果,這樣每種應用都需要提供報文體的序列化和反序列化接口,這些接口應用的場景雖不一樣,但是功能上都是對輸入?yún)?shù)進行序列化或反序列化,將結(jié)果作為輸出參數(shù)傳出。
針對上述特征,文中提出了一個基于C++的代碼自動生成的實現(xiàn)方案,該方案分析了變電站自動化系統(tǒng)軟件體系結(jié)構(gòu),抽象出模型和程序模板兩部分,軟件開發(fā)人員通過編輯模型,可選擇任一模型和與之匹配的模板,在配置了項目信息后,可為指定項目生產(chǎn)代碼。該代碼生成器具有良好的可擴展性和靈活性,可根據(jù)模塊需要新增模型和模板,將系統(tǒng)中有規(guī)律可循、大量重復的代碼利用工具來自動生成。
文中所描述的代碼自動生成方案采用OMG組織提出的模型驅(qū)動框架(Model Driven Architecture)[7]進行設計,將模型作為代碼生成器的輸入,按照指定的程序模板和映射規(guī)則,將具體的業(yè)務模型映射成應用程序源代碼,如圖3所示。
圖3 代碼自動生成結(jié)構(gòu)
本文基于代碼自動生成技術,并將編譯原理的相關概念引入到系統(tǒng)中,提出一種結(jié)合詞法分析、語法分析等技術的代碼自動生成的實現(xiàn)方案,其中語法分析、詞法分析的作用是從輸入中分析出其結(jié)構(gòu)并將其轉(zhuǎn)換為在后續(xù)處理過程中更易于訪問的數(shù)據(jù)結(jié)構(gòu),并檢測可能存在的語法錯誤[8]。
該方案包括兩個核心部分,即模型解釋器和代碼生成引擎,分別完成數(shù)據(jù)準備和代碼生成工作。
3.1 模型解釋器
要實現(xiàn)將一個模型通過代碼生成器映射為所需要的代碼,首先需要將某個具體業(yè)務模型轉(zhuǎn)換為代碼生成器可以讀取的文件,然后代碼生成器從這些輸入文件中提取模型中的信息并生成系統(tǒng)應用代碼[9]。模型解釋器的作用就是將模型轉(zhuǎn)換為代碼生成器可讀取的文件,并從文件中提取元數(shù)據(jù)加載到內(nèi)存中以待訪問。
為了便于代碼生成引擎讀取元數(shù)據(jù),本文設計一組類,包括模型信息類和對象類(包含屬性和方法)來共同描述業(yè)務模型中的元數(shù)據(jù)。當?shù)谝淮巫x取模型文件時,元數(shù)據(jù)被加載到這組類中,這組類的關聯(lián)關系如圖4所示。
圖4 模型中元數(shù)據(jù)的類描述圖
以變電站自動化系統(tǒng)中實時數(shù)據(jù)庫和配置庫數(shù)據(jù)結(jié)構(gòu)和接口的代碼自動生成為例說明元數(shù)據(jù)的提取過程和表示方式。實時數(shù)據(jù)庫、配置庫所用到的元數(shù)據(jù)應包含所有的數(shù)據(jù)信息及數(shù)據(jù)的組織方式,本文采用從關系數(shù)據(jù)庫提取元數(shù)據(jù),表是關系數(shù)據(jù)庫的基本組成部分,表由字段組成,關系數(shù)據(jù)庫中每張表抽象為圖4的ObjectClass,表的字段為ObjectProperty,表中每條記錄為ObjectClass的對象。ModelInfo中包含了關系數(shù)據(jù)中所有需要讀入配置庫和實時數(shù)據(jù)庫的表和字段信息,ModelInfo中數(shù)據(jù)信息及組織方式如圖4所示,每條CField記錄了數(shù)據(jù)庫每張表的字段信息和數(shù)據(jù)類型、與之對應的配置庫和實時庫每個類的屬性和數(shù)據(jù)類型。
圖5 ModelInfo數(shù)據(jù)信息及組織方式
以圖5的廠站信息表為例,生成給實時數(shù)據(jù)庫用的元數(shù)據(jù)類為CRtSite,生成給配置庫用的元數(shù)據(jù)為CCfgSite。
3.2 代碼生成引擎
代碼生成引擎是一個獨立的應用程序,以模型解釋器提取的元數(shù)據(jù)為基礎,根據(jù)不同的代碼模板和映射規(guī)則生成代碼。代碼生成引擎生成業(yè)務模型目標代碼的過程主要包含以下步驟:
Step1. 初始化。初始化過程定義一個數(shù)組緩存從模型提取的所有對象類信息,并指定業(yè)務邏輯需要生成的頭文件和源程序文件的名稱。數(shù)組的對象屬性根據(jù)不同的業(yè)務邏輯填寫,以自動生成實時數(shù)據(jù)庫和配置庫數(shù)據(jù)結(jié)構(gòu)及轉(zhuǎn)換接口為例,填寫的數(shù)組屬性包括數(shù)據(jù)表名稱、配置結(jié)構(gòu)類名稱、實時結(jié)構(gòu)類名稱、Field數(shù)組名稱、Field數(shù)組指針和Field數(shù)量。報文的序列化和反序列化的數(shù)組屬性則只需要填寫對象類名稱及屬性。
Step2. 檢查數(shù)據(jù)類型、參數(shù)設置是否合法。
Step3. 生成中間代碼。
Step4. 生成基本變量、函數(shù)。
Step5.生成代碼,保存到指定的頭文件和源程序文件。
本文設計的代碼生成方案已經(jīng)應用于變電站自動化系統(tǒng)軟件開發(fā),實現(xiàn)了實時數(shù)據(jù)庫和配置庫數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)轉(zhuǎn)換接口代碼的自動生成,實現(xiàn)了報文序列化、反序列化接口代碼的自動生成,省去了大量重復代碼的編寫,大大提高了軟件開發(fā)的效率,減少了因業(yè)務需要增加字段產(chǎn)生的大批量修改相關類定義和接口。表1列出了自動生成的文件及文件中的主要數(shù)據(jù)結(jié)構(gòu)或接口。
本文提出的基于模型驅(qū)動框架的代碼自動生成方案已經(jīng)得到全面實現(xiàn),生成的代碼可以直接在Windows、Unix、Linux平臺下進行編譯和執(zhí)行。代碼的自動生成,替代了程序員大量重復性工作,提高了代碼的生成效率,減少了代碼出錯率,提高了變電站自動化系統(tǒng)的健壯性和可維護性。
表1 自動生成的文件及數(shù)據(jù)結(jié)構(gòu)、接口
[1] 賴明江,耿英蘭,張國綱,等. 變電站自動化系統(tǒng)中實時數(shù)據(jù)庫的研究[J].繼電器,2006,34(2):66-69.
[2] 傅蕾,胡敏強. 變電站監(jiān)控軟件系統(tǒng)中內(nèi)存數(shù)據(jù)庫的研究[J].電力自動化設備, 2002,22(10): 21-23.
[3] 楊芙清,朱冰,梅宏. 軟件復用[J]. 軟件學報, 1995,6(9): 525-533.[4] 丁亮,許舒人. 基于SSH框架的java代碼自動生成[J].計算機系統(tǒng)應用, 2014,23(9): 72-77.
[5] 崔江峰,王冬青,劉沛,等. 實時數(shù)據(jù)庫在變電站自動化系統(tǒng)中的應用[J]. 繼電器, 2004,32(12): 47-50.
[6] 仝慶貽,顏鋼鋒. 面向?qū)ο蟮膶崟r數(shù)據(jù)庫管理系統(tǒng)的研究與開發(fā)[J]. 電力系統(tǒng)及其自動化學報, 2001, 13(5):61-64.
[7] 張靜,孔芳,楊季文. 一種基于java代碼生成工具的設計與實現(xiàn)[J].微電子學與計算機, 2007,24(6): 222-224.
[8] London K C著.編譯原理及實踐[M].馮博琴,馮嵐等譯.北京:機械工業(yè)出版社,2000.
[9] 趙艷平,張書杰.基于MDA的央行會計核算系統(tǒng)前臺代碼自動生成[J].計算機與信息技術,2007,15(Z1):76-79.
Software Development and Implementation of the Substation Automation System Based on Automatic Code Generation Technology
Wang Yi1, Yu Xiaoming2, Ma Kai1, Zhang Jing2, Shan Chao2
(1.Electric Power Research Institute, Guangdong Power Grid Co., Ltd.,Guangzhou Guangdong 510080, China;2. NARI Technology Co., Ltd., Nanjing Jiangsu 211106, China)
Along with increasingly improved automation and construction level of substations, software contains more and more modules and information transfer among different objects becomes more and more frequent, thus greatly increasing the difficulty of development by non-software professionals working in the electric power system and resulting in long software development cycle, high development cost and a lot of duplication of labor in the whole process. In order that these professionals may get rid of tedious basic programming and concentrate on studying core technologies in the specialty of electric power automation, based on automatic code generation technology as well as lexical analysis and syntax analysis of the compilation principle, this paper discusses in depth the model interpreter and code generation engine, and presents a software development and implementation scheme for the substation automation system based on the model-driven architecture. This scheme allows flexible configuration of models and program templates according to the need, and a large amount of regular repeated codes are generated automatically with lower code error rate and improved software development efficiency.
substation; automatic code generation; real-time database; model interpreter; code generation engine
南方電網(wǎng)科技項目“K-GD2014-0473變電站自動化統(tǒng)一化配置研究及應用”
10.3969/j.issn.1000-3886.2016.04.026
TP272/278
A
1000-3886(2016)04-0083-03
汪溢(1987-),男,湖北黃岡人,碩士,工程師,主要從事智能變電站通信及測試技術研究,以及變電站自動化新技術研究。 余曉明(1982-),通訊作者,女,福建泉州人,碩士,工程師,主要從事變電站自動化系統(tǒng)技術研究、電力信息分析與處理及監(jiān)控系統(tǒng)軟件開發(fā)。 馬凱(1985-),男,山東濟寧人,碩士,工程師,主要從事智能變電站新技術研究及測試工作。張靜(1981-),男,湖北潛江人,工程師,從事變電站自動化系統(tǒng)、信息安全研究及應用工作。 單超(1986-),男,河南信陽人,工程師,從事變電站自動化系統(tǒng)研究及軟件開發(fā)工作。
定稿日期: 2015-12-29