999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SCL文件逐級自動更新算法設計與實現

2016-02-23 04:52:25陳宏君馮亞東王國棟文繼鋒
計算機技術與發展 2016年3期

陳宏君,馮亞東,熊 蕙,王國棟,葉 翔,文繼鋒

(南京南瑞繼保電氣有限公司,江蘇 南京 211102)

SCL文件逐級自動更新算法設計與實現

陳宏君,馮亞東,熊 蕙,王國棟,葉 翔,文繼鋒

(南京南瑞繼保電氣有限公司,江蘇 南京 211102)

針對SCL文件前后變化導致變電站工程升級工作量較大的問題,文中設計了基于層次關鍵字逐級匹配的自動更新算法。該算法基于流文本方式快速解析兩個版本的SCL文件,并以層次樹型結構管理各文件節點數據。通過導入預先定義的節點匹配關鍵字設置信息,以舊版本文件數據為基準,在兩個版本文件數據的各層結構內基于關鍵字進行匹配,標記節點的新增、刪除或部分更新的標記,并將新版本文件差異內容更新到舊版本文件中,還進行邏輯節點內DAI短地址配置匹配處理和數據模板的刷新處理。基于該方法實現了變電站SCL文件自動對比、增量更新功能,方便了工程的升級維護。

SCL文件;自動更新;逐級匹配;文件升級

1 概 述

SCL文件是IEC 61850標準的重要內容,對該文件的配置、建模、修改是智能變電站建設的基礎工作。已經在集成調試、現場投運中的裝置,由于需求的變化或功能調整,可能需要升級。而升級前后的SCD、ICD等SCL文件通常有變化,例如當新增或刪除信號后,可引起邏輯節點實例號和層次索引名的大幅變化,和正在使用的模型文件不兼容。此時集成配置軟件需要重新關聯虛端子、后臺需更新畫面中信號層次索引名,帶來升級的工作量。SCL文件采用XML層次結構描述,不適合直接用文本對比后手動修改,需要分析其語義,提供自動比較、增量更新的方法,降低實際工程實施中的升級工作量。

文獻[1]對當前信息模型的應用現狀進行了總結,討論了模型缺失、擴展、一致性測試3個方面的問題。文獻[2]提出了IEC 61850建模工具的概念,利用數據庫存儲模型描述等信息,通過提取相關信息,自動形成各種模型相關文件。文獻[3]介紹了SCL解析器、數據模型的構建、配置模板庫和相關界面的實現方法,側重于配置工具的具體實現。文獻[4]指出現有的智能變電站設計工具和系統配置工具已經無法滿足用戶日益增長的需求,提出了設計配置一體化的功能規范,在該文的項目管理子系統中簡要介紹了版本管理模塊,提出應支持基于語義的內容比較,不能簡單列出不同版本的XML文本差異,限于篇幅,未具體闡述實現思路。文獻[5]提及了ICD文件導入方法,該方法首先建立裝置初始設計模板,重點用于對比虛端子,在第1次導入時需進行手動匹配。文獻[6]開發了SCL比對工具,利用二維表結構,采用循環、排序、交叉對比的方法,可展示兩個SCL文件的差異。上述文獻均未涉及SCL文件自動更新的內容。

SCL文件本質是XML格式的文本,文獻[7]研究了大型XML解析技術,文獻[8]研究了一種XML數據更新算法,利用SAX技術解析,在局部數據上利用DOM方法更新。文獻[9]提出了支持XML文檔更新的DVLS編碼方法。但是SCL文件定義的相關節點有數據相關性,例如數據模板的變化,涉及到邏輯節點實例的更新,完全基于局部內容替換的方法,并不適合SCL文件的升級。為此文中提出一種處理思路:對于大部分節點,采用逐級關鍵字匹配,標記新增、刪除、部分更新的標記,進行通用化的操作。對于數據模板、邏輯節點等關鍵數據,則在通用化算法的基礎上,定義對應的處理規則并開發合適的算法程序,從而實現SCL文件的自動更新。

2 SCL文件逐級更新算法

SCL文件根節點名為SCL,第1層節點包括Header、SubStation、Communication、IED、DataTypeTemplates共5個節點,在IED節點下包括AccessPoint節點,在AccessPoint節點下包括Server節點,在Server節點下包括LDevcie節點,其概要層次結構如圖1所示[10-12]。

圖1 SCL文件結構圖

文獻[10]詳細定義了SCL相關的節點、屬性、結構,文中不再具體介紹。本節重點介紹模型文件逐級自動更新算法的思路。

2.1 逐級自動更新原理

SCL文件逐級自動更新算法的原理如圖2所示。導入舊版本文件、新版本文件,以舊文件為藍本,將新、舊文件的內容進行對比,根據不同層次的XML節點名稱,按照預先定義的關鍵字,構建對應的查找匹配項,標記節點的新增、刪除、部分更新標記,在舊版本文件對應的內存數據中采取復制、刪除、更新等操作,輸出用于運行的文件。圖2的原理也適用于后綴為icd、cid等SCL系列文件。

圖2 SCL文件自動更新原理圖

SCL文件逐級自動更新算法步驟如圖3所示。首先更新數據模板,再處理IED節點,采用IED的name屬性值作為關鍵字匹配,在name屬性相同的兩個IED內,按照層次結構模型,進行分層更新,依次處理連接接入點(AccessPoint)、邏輯設備(LDevice)、邏輯節點(LN)。之后更新變電站(SubStation)和通信節點(Communication)內容,對于文件頭(Header)則將新文件內容直接替換到舊文件。

圖3 SCL文件逐級自動更新步驟

在處理單個節點時,根據預定義的關鍵字,形成以關鍵字為主鍵的Hash表,關鍵字可以是本層節點、父層節點若干屬性值拼接而成,則該節點的更新邏輯為(數據模板除外):

(1)對于關鍵字相同、在新舊文件中匹配的節點,則進入本層節點的部分更新處理環節,首先更新本層節點的屬性值,之后遞歸調用更新函數,逐層進行子節點的更新;

(2)當新版本文件的節點在舊版本文件內未找到時,將該節點標記為新增內容,并將新增內容復制到舊版本文件對應的內存數據中;

(3)當舊版本文件的節點在新版本文件中未找到時,將該節點標記為刪除內容,并從舊版本內存數據中刪除。

表1給出了典型節點的匹配關鍵字。

表1 SCL節點匹配關鍵字

在表1中,LN、FCDA的匹配關鍵字為多個屬性值拼接而成。DAI有2個關鍵字,其中refName表示層次索引名,由DOI、SDI、DAI的name屬性拼接而成,其中sAddr是短地址信息。

每個DOI可設置一個主鍵DAI,主鍵DAI通過INI文件可配置,INI文件按照DOType的CDC屬性劃分設置,通常為DOI所管理的第1個DAI或第1個SDI下的DAI,例如:

[CDC=INS]

stVal,ST,Key,dU

表示CDC為INS的各個實例化DOI,其主鍵DAI為stVal(FC=ST),提取stVal的sAddr屬性值作為關鍵字,同時dU的屬性值取stVal對應的變量描述。

以站控層的AccessPoint節點下Server為例,在圖4中,新文件有邏輯設備LD0、PROT、MEAS,舊文件有邏輯設備LD0、PROT、CTRL,通過inst關鍵字匹配后,可得出MEAS為新增節點,CTRL為需刪除節點,LD0、PROT為需進行逐層匹配更新的節點。

SubNetwork的匹配關鍵字是name屬性,可用相同的原理處理變電站、通信設置信息等內容。

2.2 數據模板自動更新算法

隨著《IEC 61850工程繼電保護應用模型》規范發布[13]和新六統一入網測試的標準化建模,數據模板的EnumType、DAType、DOType已經趨于統一和穩定,各個廠家或單個廠家在不同時期的數據模板的主要差異體現在LNodeType的定義上。本節重點闡述LNodeType的更新算法,該算法也適用于數據模板內其他3種數據類的處理。對于新、舊版本的SCL文件中LNodeType,以id為關鍵字構建Hash查找表, LNodeType的更新邏輯為:

(1)對于id相同、在新舊文件中匹配的LNodeType節點,則比較其成員DO的個數、DO的name+type的關鍵字是否相同,如果不同,則在新文件中重命名該id,并刷新在新文件中對應的實例化LN的lnType值;并置LNodeType為新增標記,將其復制到舊文件的內存數據中;

(2)當新版本文件的LNodeType在舊版本文件內未找到時,則置為新增標記,匯總該LNodeType中DO成員中使用的DOType、DAType、EnumType,采用覆蓋的策略,將相關內容復制到舊文件內存數據中;

(3)當舊版本文件的LNodeType在新版本文件內未找到時,暫不置刪除標記,而是在邏輯節點更新處理結束后,檢測各個邏輯設備下是否有該類型的LN實例,如果LNodeType在SCL中實例化個數為0,則置刪除標記。

2.3 邏輯節點自動更新算法

1個邏輯節點實例代表1個具體的功能,是分解得到的最小功能單元。邏輯節點由若干公用數據類的派生實例組合而成。LN的匹配關鍵字在表1中定義為prefix+lnType+inst,用lnType替換lnClass作為關鍵屬性的原因是需相同類模板的實例才能匹配。LN的DOI配置內容是關鍵信息,其主鍵DAI的sAddr屬性填寫裝置的變量名或地址,故對sAddr屬性的更新是關鍵步驟。定義需要處理的DOI數據擴充類為CtDOIEx,并命名新文件的LDevice實例為pnewLD,舊文件匹配的實例為poldLD,在LDevice內定義2個Hash表:

(1)基于短地址QMultiHashm_saddrHash,用于匯總配置的變量;

(2)基于DOI的主鍵層次索引名QHashm_refHash,用于匯總配置變量對應的層次索引名。

在邏輯設備范圍內,對各個邏輯節點的配置內容,以sAddr為核心進行更新匹配,其處理步驟為:

(1)依次匯總新、舊文件中匹配的LDevice下各個LN的DOI配置信息,形成pnewLD、poldLD的2個Hash表;

(2)依次遍歷poldLD->m_saddrHash的成員pex1,以pex1的短地址在pnewLD->m_saddrHash查找,如查找到,則置保留標記;若未查找到,置刪除標記;

(3)依次遍歷pnewLD->m_saddrHash的成員pex2,以pex2的層次索引名在poldLD->m_refHash查找,若未查找到,置新增標記;

(4)匯總poldLD中置刪除標記的DOI,在內存數據中清除該DOI配置,并刪除關聯的數據集內FCDA;若單個LN的DOI都刪除,則刪除該LN;

(5)匯總pnewLD中置新增標記的DOI,將該LN復制到poldLD內存數據中,僅復制LN內為新增標記的DOI和關聯的FCDA,并處理LN的實例號和更新數據模板。

上述處理還考慮了變量配置遷移到另一個LN的情況。圖5是邏輯節點更新的示例。

圖5 邏輯節點更新示意圖

在圖5中,通過雙向匹配,舊文件中B12.BI05置刪除標記,新文件中的B02.Op置新增標記,B12.BI01~B12.BI04置保留標記,其refName沿用舊文件的索引,而B02.Op配置內容填充到新創建的GGIO2.Ind1.stVal的sAddr屬性,最大程度保留了舊文件的配置內容,實現了增量更新。

在邏輯節點下,還需處理數據集、報告塊等內容更新,這些節點均以name為關鍵字進行匹配。在數據集內,單個FCDA以其所有屬性值拼接后作為關鍵字進行匹配。

3 大型SCL文件讀寫實現

在實現第2節介紹的處理算法時,需進行XML數據建模,并基于該模型實現大型SCL讀寫操作等基礎功能。

3.1 XML節點類定義

XML節點包括若干屬性和若干子節點,是個遞歸定義結構:

class SCL_DECLSPEC CElement{

public:

CElement(QString& name);

CElement(QString& name,CElement* parent);

virtual~CElement();

public:

QListm_attrList; //本層屬性QList m_childList; //子節點

protected:

ushort m_classID; //類型標記

CElement* m_pParent; //父節點

QString m_strName; //本層XML節點名

QString m_strValue; //本層XML設置值

};

CElement提供屬性和子節點查找、創建、刪除、設置等接口。SCL相關節點基于CElement派生,SCL類設計參照IEC 61850標準發布的SCL.xsd、SCL_IED.xsd等文件的定義,包括CtDO、CtDOI、CtAnyLN、CtLN、CtLDevice、CtAccesPoint、CtIED等數據類。

3.2 大型SCL文件讀寫處理

由于SCL文件更新是分層次進行,并且基于Hash表查找,處理的時間、空間復雜度較低,主要的時間消耗在SCL文件的讀寫處理上(經統計,讀寫時間平均占用整個處理環節65%的時間)。文獻[3]采用Xerces開源庫解析SCL文件,采用基于DOM的樹形結構讀寫文件。基于DOM的接口功能豐富,但是讀寫速度慢。文獻[7]研究了基于SAX方式解析大型XML文件,解析速度較快,SAX在碰到一個節點后,會調用基類定義的回調虛函數,應用層只能根據傳入的參數實現不同處理,代碼實現復雜,并且不支持增量更新寫操作。QT4.5版本提供了QXmlStreamReader、QXmlStreamWriter的接口,是SAX方式的改進接口,讀寫速度有20%的提升,并支持分層讀取。文中采用基于QT提供的流文本方式實現大型SCL文件讀寫。按照流文本方式掃描,通過readNext()讀取一個節點,并對當前節點做相應處理。基于抽象數據結構CElement和對象工廠,則可實現SCL文件的通用化讀寫,核心代碼僅為150行,采用棧來臨時管理創建的節點數據,其讀文件的算法思路為:

(1)如果讀到節點類型為StartElement,則根據節點名調用對象工廠創建派生實例,如果棧為空,是根節點,否則彈出棧頂指針作為父節點,并存儲當前節點的屬性列表;新創建對象入棧;

(2)如果讀到節點類型為Characters,則處理CDATA、TextNode類型的設置值;

(3)如果讀到節點類型為EndElement,則彈出棧頂元素;

(4)讀取到文件尾部,結束。

SCL讀取函數的部分代碼示例如下:

QStack qstack;

QXmlStreamReader reader(&file);

reader.setNamespaceProcessing(false);

while(!reader.atEnd()){

reader.readNext();

if(reader.isStartElement())

{

QString qname=(reader.qualifiedName().toString());

CElement *pbase=CtGlobal::creatByID(qname);

CElement *pParent=qstack.isEmpty()?0:qstack.top();

if(pParent){parent->addElement(pbase);}

else{m_pSCL=pbase;}

qstack.push(pbase);

… //讀取和存儲本節點屬性

}

else if(reader.isCharacters())

{…//讀取節點值}

else if(reader.isEndElement())

{if(!qstack.isEmpty()) qstack.pop();}

}

基于流方式的SCL文件寫操作,則是通過遞歸調用寫節點的函數實現:

void writeNode(QXmlStreamWriter &qwr,

CElement* pnode){

foreach(CAttr* pattr,pnode->m_attrList)

{qwr.writeAttribute(pattr->name,pattr->val);}

if(pnode->isTextNode())

{qwr.writeCharacters(pnode->getValue()); }

else if(pnode->isCdataNode())

{qwr.writeCDATA(pnode->getValue());}

foreach(CElement* pch, pnode->m_childList){

qwr.writeStartElement(pch->getName());

writeNode(qwr,pch);

qwr.writeEndElement();}

}

表2給出了不同大小文件的讀寫時間統計(測試環境為4 G內存、2.6 GHz的臺式機)。

表2 SCL文件讀寫耗時

4 結束語

文中提出一種SCL文件分層比較、自動更新算法,通過新、舊版本文件之間的逐級自動對比,設置相關標記,實現復制、刪除、部分更新等操作,能夠實現模型文件的自動化升級,有效減少實際工程實施中的人工處理工作量,從而降低模型升級風險,提升數字化工程實施效率。該方法已經在新六統一入網測試中進行了應用,并通過了近兩年的國內外數字化工程的實踐檢驗。文中后續工作是支持IEC 61850 Ed2版本[14]的SCL文件更新處理。

[1] 樊 陳,倪益民,竇仁暉,等.智能變電站信息模型的討論[J].電力系統自動化,2012,36(13):15-19.

[2] 王麗華,張青山,張馬龍,等.IEC 61850建模工具的設計與實現[J].電力系統自動化,2008,32(4):73-76.

[3] 祁 忠,篤 竣,張志學,等.IEC61850SCL配置工具的研究與實現[J].電力系統保護與控制,2009,37(7):76-81.

[4] 篤 峻,葉 翔,王長瑞,等.智能變電站設計配置一體化功能規范研究及工具開發[J].電力系統自動化,2014,38(20):85-89.

[5] 修黎明,高湛軍,黃德斌,等.智能變電站二次系統設計方法研究[J].電力系統保護與控制,2012,40(22):124-128.

[6] 高 磊.IEC 61850 SCL配置文件比對工具的研究與實現[J].電力系統自動化,2013,37(20):88-91.

[7] 張太彪,曾文華,陳志偉.大型XML文檔解析技術的應用與研究[J].廈門大學學報:自然科學版,2009,48(3):338-341.

[8] 鮑培明,吉根林.XML數據更新算法研究[J].計算機工程,2008,34(4):101-103.

[9] 付 鵬,蔣夏軍,皮德常.一種新的支持XML文檔更新的編碼方法[J].計算機科學,2014,41(3):193-197.

[10] IEC/TC57.Communication networks and systems for power utility automation-part 6:configuration description language for communication in electrical substation related to IEDs[S].[s.l.]:IEC/TC57,2003.

[11] IIEC/TC57.Communication networks and systems for power utility automation-part 7-3:basic communication structure-common data classes[S].[s.l.]:IEC/TC57,2003.

[12] IIEC/TC57.Communication networks and systems for power utility automation-part 7-4:basic communication structure-compatible logical node classes and data object classes[S].[s.l.]:IEC/TC57,2003.

[13] IIEC 61850工程繼電保護應用模型[S].Q/GDW 1396-2012,2014.

[14] IIEC/TC57.Communication networks and systems for power utility automation-part 6:configuration description language for communication in electrical substation related to IEDs[S].[s.l.]:IEC/TC57,2010.

Design and Implementation of Hierarchical and Automatic Updating Algorithm for SCL File

CHEN Hong-jun,FENG Ya-dong,XIONG Hui,WANG Guo-dong,YE Xiang,WEN Ji-feng

(NR Electric Co.,Ltd.,Nanjing 211102,China)

To solve the problem that massive updating workload is aroused by the change of SCL file in substations,it designs an automatic updating algorithm based on stepwise matching of hierarchical keywords in this paper.The algorithm implements fast analysis of two different version SCL files with streaming-text based approach,and manages data nodes of each SCL file with hierarchical tree structure.Firstly the algorithm imports pre-defined data nodes to match primary key information and considers the old version SCL file as a baseline.Then it compares the keyword of each node between the two version SCL files and marks every different node as added,deleted or partial updated.Finally the algorithm upgrades the old version SCL file node by node hierarchically with the marked distinctions,meanwhile implements the matching process of DOI short addresses within logic nodes and the refreshing of data templates.The algorithm achieves automatic comparison and incremental updating of substation SCL files and facilitates the engineering upgraded maintenance observably.

SCL file;automatic updating;hierarchical matching;file upgrading

2015-06-11

2015-09-15

時間:2016-02-18

國家“863”高技術發展計劃項目(2015AA050101)

陳宏君(1981-),男,高級工程師,碩士,研究方向為可視化編程軟件和嵌入式軟件研發。

http://www.cnki.net/kcms/detail/61.1450.TP.20160218.1630.036.html

TP301.6

A

1673-629X(2016)03-0121-05

10.3969/j.issn.1673-629X.2016.03.029

主站蜘蛛池模板: 国产精品精品视频| 国产在线一区视频| 一区二区三区国产| 伊人久久大香线蕉影院| 天堂成人在线视频| 综合色在线| AV无码一区二区三区四区| 一级毛片免费观看久| 国产精品毛片在线直播完整版| 成人永久免费A∨一级在线播放| 亚洲人成亚洲精品| 无码又爽又刺激的高潮视频| 88av在线| 欧美国产另类| 中文字幕在线观看日本| 午夜福利网址| 欧洲高清无码在线| 国产午夜福利亚洲第一| 九九精品在线观看| 欧美午夜在线视频| 欧美亚洲中文精品三区| 亚洲无码精品在线播放| 老熟妇喷水一区二区三区| 一级片一区| 视频一区视频二区中文精品| 99久久精品国产精品亚洲| 一本一道波多野结衣av黑人在线| 亚洲综合色婷婷中文字幕| 国产麻豆精品手机在线观看| 91成人在线免费观看| 国产精品偷伦在线观看| 国产精品第5页| 97se亚洲综合| 美女扒开下面流白浆在线试听| 国内自拍久第一页| 久久综合色播五月男人的天堂| 欧美福利在线| 亚洲欧美成人综合| 在线国产资源| 99热这里只有免费国产精品 | 成人av手机在线观看| 国产激情无码一区二区免费| 在线亚洲精品自拍| 极品私人尤物在线精品首页 | 在线观看av永久| 欧美成人怡春院在线激情| 国产综合色在线视频播放线视| 国产欧美在线观看一区| 国产成人亚洲精品色欲AV | 欧美色视频在线| 亚洲天堂伊人| 黄色网在线| 日本a级免费| 欧美性久久久久| 国产在线高清一级毛片| 久久一本日韩精品中文字幕屁孩| V一区无码内射国产| vvvv98国产成人综合青青| 久久这里只有精品23| 亚洲中文字幕av无码区| 麻豆AV网站免费进入| 精品夜恋影院亚洲欧洲| 亚洲视频在线观看免费视频| 一级黄色片网| 欧美中出一区二区| 国产91视频观看| 狠狠做深爱婷婷久久一区| 91小视频在线| 啊嗯不日本网站| 久久精品国产国语对白| 九色视频最新网址| 国产精品一区不卡| 91福利免费| 国产美女人喷水在线观看| 欧美成人午夜在线全部免费| 97精品伊人久久大香线蕉| 久久久久久久久18禁秘| 成人永久免费A∨一级在线播放| 亚洲av无码成人专区| 高清无码手机在线观看| 亚洲欧美自拍中文| 一级福利视频|