陳宏君,熊 蕙
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
類C腳本架構(gòu)設(shè)計及在電力系統(tǒng)中的應(yīng)用
陳宏君,熊 蕙
(南京南瑞繼保電氣有限公司,江蘇 南京 211102)
不同國家和地區(qū)的用戶在電力系統(tǒng)裝置功能和配置上有一定的差別,要求基于工具軟件實現(xiàn)裝置的靈活配置需求。研發(fā)人員在采用模塊化、圖形化元件搭建裝置功能過程中,也需要有手段減輕人機接口配置工作量。為此,提出類C腳本的解決方案,設(shè)計了適用于電力系統(tǒng)裝置配置建模的API接口函數(shù),支持設(shè)置變量屬性、信號連線、定值分組、元件投退、IEC61850建模等功能。開發(fā)了腳本解析器,通過構(gòu)建基于表驅(qū)動的詞法提取、基于命令模式的腳本執(zhí)行、基于遞歸下降法的表達式計算、基于多級Hash查找等關(guān)鍵算法,實現(xiàn)了腳本快速解析執(zhí)行,6萬行腳本解析耗時小于3 s?;谠撃_本架構(gòu),裝置研發(fā)人員可定義模塊化元件腳本,實現(xiàn)多個元件實例配置的自動化復(fù)用;可定義全局腳本,根據(jù)用戶選項,觸發(fā)條件執(zhí)行語句,實現(xiàn)靈活的裝置選型配置。實踐表明,類C腳本顯著提高了電力系統(tǒng)保護測控裝置的研發(fā)效率和產(chǎn)品的適用范圍。
類C腳本;元件腳本;全局腳本;裝置配置
電力系統(tǒng)控制保護產(chǎn)品面向平臺化、智能化的方向發(fā)展,要求設(shè)計和開發(fā)通用硬件、軟件平臺,以提高裝置研發(fā)的可靠性和競爭力[1-5]。在面向國內(nèi)外的工程實施中,不同的用戶往往有不同的需求。國際市場用戶要求支持裝置選型、系統(tǒng)配置、功能投退等可配置功能,要求可選擇裝置軟件的版本、應(yīng)用場景,例如選擇是分段單CT、分段雙CT或母聯(lián)雙CT等場景;要求可配置間隔數(shù)目、母線電壓輸入使能、9-2組網(wǎng)模式等。如果每個工程都進行定制化開發(fā),開發(fā)周期長,維護成本高。需要提供一種平臺化的產(chǎn)品適應(yīng)性開發(fā)方法,滿足用戶二次配置需求。可視化編程配置逐漸成為主流研發(fā)模式,可基于模塊化元件多次實例實現(xiàn)保護測控功能的復(fù)用[6]。在完成裝置功能的可視化編程配置后,還需要進行裝置人機HMI接口的配置,例如配置告警變位事件、配置模擬量上送分組、配置IEC61850模型等。這些工作通常是裝置研發(fā)集成人員手工操作,也需要提供方法,在制作模塊化符號元件時可以進行元件相關(guān)的HMI設(shè)置,實現(xiàn)HMI配置的復(fù)用。
腳本是依據(jù)一定的格式編寫的文本,由程序解釋執(zhí)行,具有易于掌握、靈活擴展等優(yōu)點[7-8]。文獻[7]定義了嵌入式Web服務(wù)器腳本解析的主要接口,設(shè)計了腳本引擎的調(diào)用方法。文獻[8]提出一種自定義腳本的實現(xiàn)方法,設(shè)計了用于描述界面布局和參數(shù)格式的腳本語句,實現(xiàn)系統(tǒng)界面的靈活配置。文獻[9]提出一種基于模型的自動判斷方法,利用腳本驅(qū)動判斷模型執(zhí)行對測試數(shù)據(jù)的判斷過程,提高判讀效率和準(zhǔn)確度。文獻[10]研究了語義可配置的模型轉(zhuǎn)換技術(shù),利用基于OCL的腳本語言(TSS)來描述轉(zhuǎn)換語言的語義。
為提高模塊化配置效率和實現(xiàn)面向用戶的選型配置功能,文中設(shè)計了類C腳本,支持在模塊化元件研發(fā)中編寫元件腳本、裝置集成研發(fā)過程中編寫全局腳本。類C腳本支持if-else等控制語句,支持四則運算、標(biāo)準(zhǔn)C庫函數(shù)、自定義API函數(shù)。
1.1 腳本需求分析
采用可擴展的腳本系統(tǒng),源自如下關(guān)鍵需求:
(1)實現(xiàn)配置過程的自動化和多個元件實例配置的重用;提高模塊集成效率。例如支持將信號添加到裝置菜單分組中,將定值添加到定值分組中,把變量填寫到IEC61850[11-12]邏輯節(jié)點對應(yīng)的數(shù)據(jù)屬性中。
(2)根據(jù)全局配置選項,條件使能執(zhí)行相關(guān)功能,自動修改對應(yīng)設(shè)置,實現(xiàn)1個工程支持多場景模式開發(fā)維護。
(3)一些特殊需求通過專屬腳本實現(xiàn),減少對工具界面編輯的二次開發(fā)及對其他應(yīng)用的影響。
1.2 腳本函數(shù)設(shè)計
腳本設(shè)計要求簡單,易于研發(fā)人員掌握,支持靈活組合,適用于電力系統(tǒng)保護測控裝置的配置場景和滿足用戶配置需求。腳本由一系列經(jīng)過精心設(shè)計的API函數(shù)和控制語句組成。按照使用范圍,可分為全局腳本和元件腳本。全局腳本是裝置集成研發(fā)人員在裝置選型和界面定義的控制文本段,是在腳本解析時優(yōu)先執(zhí)行的函數(shù)文本。元件腳本是模塊研發(fā)人員在元件圖形庫制作階段定義的配置文本段。腳本函數(shù)定義的通用形式如下:
(1)返回值類型 函數(shù)名(形參1,形參2,形參…);
(2)返回值類型 函數(shù)名(條件執(zhí)行表達式,形參1,形參2,形參…)。
腳本中支持if、if-elseif-else、if-else等條件控制段,例如:
if(表達式){
腳本函數(shù)段1…
}
else if(表達式){
腳本函數(shù)2…
}
else{
腳本函數(shù)3…
}
對腳本功能按照大類進行歸類精簡,規(guī)范統(tǒng)一函數(shù)命名,通過傳入不同形參細分子選項。通過對電力系統(tǒng)裝置開發(fā)配置場景進行規(guī)劃,共定義了50余個腳本API接口。按照功能可分為:宏定義、信號拉線、信號描述設(shè)置、信號屬性設(shè)置、引用表操作、定值分組和操作、頁面和元件使能操作、IEC61850通信中CID(裝置能力描述)建模、設(shè)置插件型號、修改元件執(zhí)行順序等。表1給出了典型常用的腳本函數(shù)和功能定義。
表1 腳本函數(shù)定義
以信號描述設(shè)置為例,腳本設(shè)計如下:
(1)功能設(shè)計:設(shè)置變量和定值中文、英文描述。
(2)接口定義:bool SetDesc(char* pvar, char*desctype, char* pdesc)。
(3)形參說明:pvar變量名;desctype:描述類型;pdesc:描述值。
(4)使用示例:SetDesc(IA, cn, "@B01.Bus1@母差電流A相")。
腳本函數(shù)是面向應(yīng)用設(shè)計的接口服務(wù),解析執(zhí)行應(yīng)用定義的腳本段。腳本的處理可分解釋型執(zhí)行、編譯型執(zhí)行。解釋型執(zhí)行如MediniQVT,通過編碼的方式實現(xiàn)轉(zhuǎn)換語言的執(zhí)行語義[13],編譯型執(zhí)行工具如ATL,將腳本編譯成字節(jié)碼,然后在虛擬機上執(zhí)行[14]。文中采用解釋執(zhí)行的策略,腳本執(zhí)行的流程包括詞法分析、if語句分支執(zhí)行、根據(jù)腳本類型調(diào)用解析函數(shù)。解析單個函數(shù)時進行表達式計算、形參處理、調(diào)用裝置配置處理軟件開放的服務(wù)接口,例如變量查找、屬性設(shè)置等接口。腳本解析可劃分為詞法提取模塊、腳本執(zhí)行模塊、表達式計算模塊。
2.1 詞法提取模塊
詞法提取模塊,用于讀取腳本段,并進行標(biāo)記分類和管理,其關(guān)鍵實現(xiàn)點是基于表驅(qū)動的字符串查找表和前向探測單詞匹配技術(shù)。詞法提取模塊建立ASCII字符查找表,可快速返回每個字符對應(yīng)的類型。定義單個字符類型如下:
enum CharacterType{
BLANK=01,//空白
NEWLINE=02, //新行
LETTER=04,//字母
DIGIT=010, //數(shù)字
HEX=020,//HEX
OTHER=040, //其他
};
預(yù)先對ASCII字符編碼進行分類,構(gòu)建字符的ASCII碼對應(yīng)字符類型查找表:
static unsigned char map[256]={
0, //000 nul
BLANK, //011 ht
NEWLINE, //012 nl
…
BLANK, //040 sp
DIGIT, //060 0
LETTER|HEX, //101 A
.…
LETTER, //132 Z
OTHER, //176 ~
};
則通過map[unicode]可快速返回該字符對應(yīng)的類型。通過對各個字符和后續(xù)字符的類型探測組合判斷,可提取出各個單詞。單詞CToken、詞法掃描類CLex的主要接口和屬性定義如下:
//單詞標(biāo)記類
class EXPR_DECLSPEC CToken{
public:
CToken();
CToken(const Qstring& s,int mtp=0,intstp=0);
virtual ~CToken();
public:
int m_maintp; //token主類型
int m_subtp; //子類型
QString m_str; //名字、值
};
//詞法掃描類
class EXPR_DECLSPEC CLex {
public:
CLex(const Qstring& text);
virtual ~ULex();
public:
int count(){return m_tklist.count();}
CToken* at(int i){return m_tklist.at(i);}
voidlexParse(Qstring& text,int len);
protected:
QList
int m_pos;
int m_len;
QString m_text;
}
定義每個單詞Token的主類型定義,如KEYWORD(關(guān)鍵字)、IDENTIFIER(標(biāo)識符)、CONSTANT(常量)、STRING(字符串)、OPERATROR(運算符)、PUNCTUATOR(分隔符)、PREPROCESSOR(預(yù)處理)。每種主類型還細分子類型。以運算符為例,還細分如加、減、乘、除等各種子類型,例如COMMA(",")、COLON(":")、PLUS("+")、MINUS("-")、MULT("*")、DIV("/")等。詞法掃描的主算法見圖1。
圖1 詞法掃描主算法
在主算法中,根據(jù)當(dāng)前字符的類型,如果是[a-z]、[A-Z]、‘_’,則是變量命名或關(guān)鍵字的首字母,進入parseIdentifier單詞標(biāo)記提取函數(shù),如果是數(shù)字、運算符、常量、預(yù)編譯字符,則進入相應(yīng)的提取子函數(shù)。其中單詞提取是重要的步驟,其算法流程如圖2所示。
圖2 單詞提取主算法
對于a開頭的字符,需往后探測4步,判斷是否為auto關(guān)鍵字;對于b開頭的字符,需往后探測5步,判斷是否為break關(guān)鍵字,依次類推,探測case、char、const、default、double等關(guān)鍵字,如果不是關(guān)鍵字或首字符例如h、j、A等,則跳轉(zhuǎn)到變量命名id處理,提取為變量名。提取出的CToken實例存放到單詞鏈表,供后續(xù)的腳本執(zhí)行模塊使用。
2.2 腳本執(zhí)行模塊
腳本執(zhí)行模塊通過分析單詞鏈表,提取if控制語句段和各個函數(shù)段。根據(jù)預(yù)先定義的腳本函數(shù)名提取出該函數(shù)包括的單詞子鏈表。當(dāng)掃描到if關(guān)鍵字時,根據(jù){、}的偶對匹配,提取if控制語句包含的腳本函數(shù),某分支條件成立時,執(zhí)行該分支內(nèi)的腳本序列。之后進行類型劃分,將腳本放到不同的優(yōu)先級隊列,在保護測控裝置驅(qū)動包處理程序的不同階段,插入執(zhí)行對應(yīng)優(yōu)先級的腳本函數(shù)。不同優(yōu)先級腳本執(zhí)行時序如圖3所示,共分8個隊列,優(yōu)先執(zhí)行插件型號設(shè)置、元件和頁面投退的腳本函數(shù)。這是由于部分插槽是多選型號,可根據(jù)實際需求通過SetBoardType腳本設(shè)置當(dāng)前投入的插件型號,而部分頁面的有效性和插件型號關(guān)聯(lián),例如某頁面的功能是否執(zhí)行的表達式為“B08_BOARD_TYPE==NR1501”,則需根據(jù)B08的當(dāng)前型號進行替換和使能表達式的計算,通過執(zhí)行如Enable、Disable(B02, AdcSample)的腳本實現(xiàn)元件、頁面投退,可刷新變量庫中變量的狀態(tài),被退出的信號不輸出到最終的產(chǎn)物文件中。
圖3 腳本執(zhí)行過程
2.3 表達式計算模塊
If語句、部分腳本函數(shù)都有表達式,表達式支持算術(shù)四則運算、邏輯運算、C庫函數(shù)、系統(tǒng)軟件平臺定義的接口函數(shù),表達式中可包括宏、定值。當(dāng)條件為1時執(zhí)行該分支或函數(shù),否則不執(zhí)行。例如處理IEC61850的數(shù)據(jù)集時,需判斷信號的顯示屬性是否對IEC61850進程可見,此時需計算信號的顯示屬性表達式。表達式計算流程如圖4所示。
在圖4中,為避免重復(fù)計算,先從緩存hash表中查找表達式計算值,如果找到則返回,首次計算后,將表達式和值存入hash表中。對于擴展格式的表達式,需進行預(yù)處理工作。例如對于包括:的形如“B02.I1n:B02.I2n”的表達式,根據(jù)當(dāng)前定值是取1次側(cè)的值或取2次側(cè)的值,提取其中1側(cè)進行運算。對于層次變量名,例如B02.I1n,用該定值的設(shè)置值進行替換。最后根據(jù)C語言的優(yōu)先級采用遞歸下降的算法計算得出值。
圖4 表達式計算流程
3.1 元件腳本應(yīng)用
以過流保護OverCurrent元件為例,過流元件實例化成OC1、OC2等多個實例后,每個實例的變量都有相同的配置需求,例如部分變量配置到報告菜單、錄波、定值等??蓪⑦@些相同的操作進行抽象歸類,以腳本的形式形成可共享的API函數(shù)庫,提供給模塊研發(fā)人員編寫。在模塊化的元件內(nèi)增加腳本段,用于定義單個元件的配置規(guī)則,包括引用表添加、定值分組、邏輯節(jié)點配置等功能。過流元件的腳本段定義示例如圖5所示。
圖5 元件腳本應(yīng)用
在圖5中,AddTab是配置引用表功能的腳本函數(shù),把變量oc_en添加到binchg引用表;AddParaGroup是配置定值分組的腳本函數(shù),把變量oc_mode添加到定值組OC_Settings;SetDAI是映射變量和邏輯節(jié)點數(shù)據(jù)屬性短地址的函數(shù),表示把變量oc_en填充到GGIO1.SPCSO1.stVal的sAddr屬性。
3.2 全局腳本應(yīng)用
以裝置選型MOT全局為例,闡述全局腳本的使用過程:
(1)定義功能選型配置文件格式,裝置研發(fā)人員在研發(fā)版本配置軟件的功能選型編輯界面中,以編輯層次樹的方式,完成選型問題設(shè)計劃分,輸入問題的若干候選項和默認值??稍O(shè)置問題選項的強制、互斥等條件表達式,根據(jù)其他問題的當(dāng)前選項值設(shè)置某個問題強制選項值或灰化互斥部分可選項。條件表達式是問題名、選項值、常量、全局變量的邏輯組合語句。
(2)使用腳本函數(shù)和規(guī)則文本接口,裝置研發(fā)人員在研發(fā)版本配置軟件的功能選型編輯界面中,編寫和問題、選項關(guān)聯(lián)的腳本。支持使用的全局腳本函數(shù)包括:設(shè)置插件型號SetBoardType、顯示/隱藏插件ShowBoard/HideBoard、修改系統(tǒng)配置選項SetSysCfg等。
(3)用戶在用戶版本配置軟件中,根據(jù)實際工程配置需求,選擇每個問題的對應(yīng)選項。每個選項的切換會觸發(fā)實時腳本執(zhí)行引擎,執(zhí)行和選項對應(yīng)的腳本,實現(xiàn)硬件型號切換、軟硬件功能模塊投入和退出、可視化頁面隱藏和顯示、變量屬性修改等功能。
全局腳本應(yīng)用如圖6所示,當(dāng)用戶切換每個問題的當(dāng)前選項時,用戶版本配置軟件將腳本中的問題名稱用當(dāng)前選項替換,并調(diào)用腳本執(zhí)行引擎,執(zhí)行相關(guān)腳本函數(shù)。
圖6 全局腳本應(yīng)用
介紹了基于元件腳本、全局腳本的電力系統(tǒng)嵌入式裝置的可配置方案,裝置研發(fā)人員可開發(fā)通用的功能配置,并提供可選功能描述和選項,用戶根據(jù)實際工程需求進行功能可控選擇,通過內(nèi)置腳本,自動執(zhí)行相關(guān)函數(shù),修改配置數(shù)據(jù)和界面顯示?;诳膳渲?、可復(fù)用的腳本,顯著減少了裝置二次開發(fā)工作量,提高了研發(fā)效率和產(chǎn)品的通用性、適用范圍,已經(jīng)在電力系統(tǒng)保護測控裝置中大規(guī)模適用,取得了較好的經(jīng)濟效益。
[1] 賀 敏,陳宏君.組件開發(fā)架構(gòu)及在繼電保護配置軟件中的應(yīng)用[J].軟件工程,2016,19(1):35-38.
[2] 李 響,劉國偉,馮亞東,等.新一代控制保護系統(tǒng)通用硬件平臺設(shè)計與應(yīng)用[J].電力系統(tǒng)自動化,2012,36(14):52-55.
[3] 孫振華,高傳發(fā),任華鋒,等.新型基于MPC8309的微機繼電保護平臺[J].計算機系統(tǒng)應(yīng)用,2015,24(3):105-109.
[4] 陳翔宇,王冬青,李 剛,等.基于通用平臺的智能變電站一體化設(shè)計和整合應(yīng)用[J].電網(wǎng)技術(shù),2014,38(1):58-62.
[5] 郭 瑋,田錄林,張永良,等.基于嵌入式PLC軟核的通用保護平臺設(shè)計與實現(xiàn)[J].電力系統(tǒng)保護與控制,2014,42(16):122-126.
[6] 陳宏君,劉克金,馮亞東,等.新一代保護測控裝置配套工具軟件設(shè)計與應(yīng)用[J].電力系統(tǒng)自動化,2013,37(20):92-96.
[7] 徐 兵,沈玉利,謝仕義.嵌入式Web服務(wù)器端腳本引擎設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2008,29(15):3933-3935.
[8] 屈景怡,陳鐘玉,吳仁彪.基于自定義腳本的適配參數(shù)系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2015,36(11):3134-3139.
[9] 張 強,郭麗麗,馬振林.基于模型自動判讀的研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2014,24(7):17-20.
[10] 何 嘯,麻志毅,王瑞超,等.語義可配置的模型轉(zhuǎn)換[J].軟件學(xué)報,2013,24(7):1436-1454.
[11]IEC/TC57.Communicationnetworksandsystemsforpowerutilityautomation-part6:configurationdescriptionlanguageforcommunicationinelectricalsubstationrelatedtoIEDs[S].[s.l.]:[s.n.],2009.
[12]IEC/TC57.Communicationnetworksandsystemsforpowerutilityautomation,part7-4:basiccommunicationstructure-compatiblelogicalnodeclassesanddataobjectclasses[S].[s.l.]:[s.n.],2010.
[13]MediniQVTproject[EB/OL].2012.http://projects.ikv.de/qvt.
[14]ATLflowproject[EB/OL].2013.http://opensource.urszeidler.de/ATLFlow.
Design of C Style Script Structure and Its Application in Power System
CHEN Hong-jun,XIONG Hui
(NR Electric Co.,Ltd.,Nanjing 211102,China)
In different countries and regions,power system users have certain difference on the device function and configuration,so the tool software need to achieve the flexible allocation of equipment requirements.Developers also need to reduce the HMI configuration work when using modular and graphical components to setup the device.The solution of C style script is presented,in which API interface is suitable for power system device configuration,and the scripts support variable properties setting,signals linking,parameters grouping,enable or disable components,IEC61850 modeling and other functions.The main modules and script parser processes are implemented by establishment of the key algorithms including lexical extraction based on table driven,script execution based on command mode,expression calculation based on the recursive descent method,and lookup based on multiple Hash.60 000 lines of resolution takes less than 3 seconds.Device developers can define components script,to realize the automatic configuration of reuse.They also can define global scripts,which provide maximum device features and configuration options.Practice shows that class C script can significantly improve the development efficiency of measurement and control device for power system protection and scope of the product.
C style script;component script;global script;device configuration
2016-05-03
2016-09-07
時間:2017-02-17
國家“863”高技術(shù)發(fā)展計劃項目(2015AA050101)
陳宏君(1981-),男,碩士,高級工程師,研究方向為電力系統(tǒng)平臺軟件開發(fā)。
http://www.cnki.net/kcms/detail/61.1450.TP.20170217.1632.074.html
TP39
A
1673-629X(2017)03-0171-05
10.3969/j.issn.1673-629X.2017.03.036