戴喬旭,羅宗杰
(廣東電網有限責任公司湛江供電局,廣東 湛江 524001)
當前,CIM 已經廣泛應用于各國的電力系統,CIM 所提出的電力系統信息交互標準可使不同的系統及應用軟件實現相互連通[1]。但CIM 模型只定義了電力系統數據模型,對于數據庫和交互格式等實現方面沒有提供具體的相關的定義。具有交互特點的XML 語言恰好能與CIM 模型互補,它通過添加標記來完成數據所要表達的信息和數據的組織結構。目前,電力系統大多數應用都是基于CIM/XML 進行離線模型交互,但XML 語言處理過程需要對標簽進行打開及關閉,使得CIM/XML 在描述、解析等方面效率較低,因而常用于離線式的模型交互。而JSON 作為現今互聯網最常用的數據交互格式之一,相比XML 語言更為簡潔、處理速度更快、占用CPU 資源更少,在在線數據交互、關鍵電網模型信息傳輸方面具有更大優勢。因此,將CIM/XML 描述的離線電網模型進行關鍵信息提取,轉換為JSON 數據格式存儲,更便于實現電網模型的在線交互及高效的數據處理。
在電力系統中有著許多獨立分工不同的信息處理系統,而這些系統常由不同廠家提供,其應用程序也運行于不同的平臺,因此數據交互相當困難。國際電工委員會(IEC)在20 紀90年代提出了IEC61970 規范,且定義了公用信息模型(CIM),使得不同的電力系統應用之間可按照統一的模型進行數據交換[2]。可擴展標記語言(XML)是由全球信息網協會(W3C)于1998年提出的一種標準,其優越性主要表現在易于實現異構系統間的信息交互、自定義性和可擴展性、數據內容與顯示處理的分類。由于CIM 并未對模型的數據庫和數據交換格式進行定義,因此XML 語言是一種較好的載體。因此,通過CIM/RDF 模型作為元模型框架,并通過RDF 語法的子集作為描述規則,即可實現構建電網靜態數據模型的CIM/XML 文檔。
JSON 是一種可在多種語言之間進行數據交互的輕量級數據格式,在現今互聯網中最為常用。JSON 字符串由Unicode 字符集合而成,其由規則簡單、使用壓縮格式、占用帶寬小等優點。XML 作為一種既可以用以標記數據也可以定義數據類型的源語言,是互聯網數據交互中的一種跨平臺技術手段,能對結構化的文檔信息實現高效處理[3]。JSON 和XML 都是開放式數據交互,JSON 相比XML 最顯而易見的優點在于簡潔,在XML 中需要打開和關閉標簽,而JSON 使用名稱/值來表示數據,“{”及“}”標記對象,“[”及“]”標記數組,“:”表示數據分隔,“;”表示名稱與值的分隔。在與包含相同信息的XML 比較,JSON 總是更小,這意味著更快的傳輸和處理速度。在相關研究表明,在不考慮大小情況下,JSON 執行序列和反序列的速度顯著優于使用XML。JSON 數據處理在CPU 資源的使用上也優于XML,占用內存相對更小,更利于網絡傳輸與移動設備的處理[4]。
全球信息協會(WC)建立了文件對象模型(DOM)標準,它提供了跨瀏覽器的應用程序實現的平臺。W3C DOM 是一個能夠讓程序和腳本動態訪問和更新文檔內容、結構和樣式的語言平臺,它提供了HTML 和XML 對象集,并有一個標準的接口訪問和操作它們[5]。W3C DOM 可分為不同的部分(核心、XML 和HTML)和不同的版本(DOM1/2/3)。其中,DOM 對XML 文件的解析是將其轉換為一個對象模型集合,用樹形結構對XML 文檔信息放在內存中進行存儲,應用程序可在任何時候訪問XML 文檔中的任意部分數據[6]。因此,這種利用DOM 接口解析訪問方法也被稱為隨機訪問。
VBA 是Visual Basic 的一種宏語言,是其在桌面應用程序中執行通用的自動化(OLE)任務的編程語言,算是一種應用程式視覺化的Basic 腳本。在WPS 軟件中一般自帶了VBA 環境安裝包,可實現VBA 編程。由于VBA 中存在XMLDOM 對象,可對XML 文件進行解析、數據處理。因此,可通過常用的WPS 軟件使用VBA 編程對XML 文檔進行讀寫與控制。
VBA 編程貫穿CIM/XML 電網模型數據解析轉換整個過程,首先利用WPS 表格工具的VBA 程序平臺將CIM/XML 文檔數據加載到內存中,并調用軟件DOM 解析將結果暫存在表格中,再根據實際需要提取模型中設備、聯絡情況等信息進行提取,依據JSON 格式對信息進行處理,最終生成便于網絡傳輸的JSON 數據格式,實現數據模式的轉換,具體過程如圖1 所示。

圖1 CIM/XML 轉換JSON 格式流程
在數據表格的VBA 編程部分,首先需要利用宿主WPS軟件自帶的DOM 將待解析電網模型CIM/XML 文檔整個樹狀結構加載到系統內存,變為易搜索、操作的數據形式。
具體應用為通過Create.Object() 方法,生成一個Microsoft XMLDOC 對象。通過VBA 編程中xmlDoc.Load()方法可將待解析的CIM/XML 文檔與所生成的Microsoft XMLDOC 對象相關聯,DOM 處理器將CIM/XML 文檔模型整個以樹形結構全部載入內存中,以后的所有增、刪、改、查均對內存中的樹形結構操作。樹形結構存在諸多結點,包括根節點與各級分支接點,下級節點可通過上級節點不斷往下延伸。因此,獲取內存中樹形結構的根節點即可對各分支節點信息進行操作。具體可通過Document Element 獲取根節點,即可實現利用宿主軟件的DOM 將電網模型CIM/XML 文檔加載內存中的樹狀結構進行操作,具體實現代碼為:
Set xmlDoc = CreateObject(“Microsoft.XMLDOM”)
xmlDoc.Load (“ABCD.xml”)
Set xmlRoot = xmlDoc.DocumentElement
在獲取到CIM/XML 文檔樹狀結構的根節點后,需獲取內存中樹狀結構的特定節點,如元素節點、實體應用節點等方可實現訪問和修改。在VBA 編程中,讀取及修改樹狀結構節點首先需通過DOM 提供的SelectSingleNode 方法選擇XML 樹狀結構文檔中的分支節點位置信息,再通過GetAttributeNode(“xxx”).Nodevalue 方法即可獲取到分支的值。具體實現代碼為:
documentElement.SelectSingleNode
GetAttributeNode(“xxx”).Nodevalue
在CIM/XML 文檔中,按XML 文檔格式要求定義了大量的斷路器、配變、電桿、導線等電力設備設施基本信息及其物理拓撲。以開關為例,其部分CIM/XML 表達為:
<cim:Breaker rdf:ID=”SWITCH_123456”>
<cim:Naming.name>10T1 開關</cim:Naming.name>
<cim:PowerSystemResource.location>POINT(110.1234,21.5678)
</cim:PowerSystemResource.location>
</cim:Breaker>
在標簽“Breaker”間包含了開關名稱信息“10T1 開關”以及其經緯度位置信息“110.1234,21.5678”,其中“Breaker”為XML 數狀結構中的一個分節點,節點名稱為“Breaker”,其往下延伸還存在“Naming.name”“PowerSystemResource.locationg”元素節點。對于節點及其數據的操作可通過上述采用DOM 解析器及VBA 編程方式獲取到具體的開關節點及其元素節點的信息。
類似地,可以用同樣方法取得電網模型樹狀結構中的電桿、配變、負荷開關等設備元素的具體數據。通過VBA 程序將相關拓撲進行解析,獲取設備的經緯度坐標、線徑、關聯聯絡元素節點等信息,并可暫存在VBA 程序宿主軟件WPS 數據表格中。通過上述VBA 編程對CIM/XML 樹狀結構數據的解析提取,將宿主軟件WPS 數據表格中暫存的電網設備信息進行組合,并可根據需要添加額外的關聯數據信息,作為目標JSON 文件的基礎數據。
在JSON 文件的生成方面,VBA 編程中提供了ADODB.Stream 對象。該對象可存取二進制數據或文本流,從而實現對流的讀、寫和管理等操作。JSON 文件的創建可通過ADODB.Stream 方法創建UTF-8+BOM 編碼的文本,并按JSON 文件格式要求生成標準的JSON 文件。具體實現代碼為:
Set objStream = CreateObject(“ADODB.Stream”)
With objStream
.Type = 2
.Charset = “UTF-8”
.Open
.WriteText “[“
(寫入相關數據)
.WriteText “]”
.SaveToFile ActiveWorkbook.FullName &”.json”, 2
End With
Set objStream = Nothing
通過上述步驟,可通過對WPS 表格宿主軟件中的VBA編程實現對CIM/XML電力系統模型拓撲文檔數據進行解析、提取、處理,并根據需求將電網設備信息、補充信息組合并轉換為易于互聯網傳輸的輕量級JSON 數據交互格式,簡便地實現CIM/XML 與JSON 數據格式間的轉換。
通過上述方法,在WPS 表格軟件中使用VBA 編程解析CIM/XML 電網模型文檔。首先通過WPS 軟件“開發工具”模塊繪制“文本框”“按鈕控件”,通過“文本框”用以讀取存放XML 文檔的位置、“按鈕控件”用以開啟執行解析操作。其次在WPS 表格中建立不同的sheet 用以存放CIM/XML 電網模型中各類型電網設備數據,如配變位置坐標sheet、開關位置坐標sheet、線路軌跡sheet 等。對應的人機交互界面如圖2 所示。

圖2 CIM/XML 轉換人機交互界面
通過本文第二節分描述方法,創建XMLDOC 對象,解析CIM/XML 電網模型,并獲取樹狀結構根節點。通過For循環歷編XML 文檔,依據子節點名稱“Pole”“ACLineSe gment”“Substation”“Breaker”等分別獲取電桿、導線、配變、開關等設備的名稱、坐標、聯絡節點等信息,并相應寫入至WPS 表格軟件所建立對應的sheet 中,便于 進行下一步處理。
對于解析提取出的電網設備信息,再進一步處理生成JSON 文件。具體通過VBA 程序創建ADODB.Stream 對象,按UTF-8 編碼,使用數據流模式,將電桿、導線、配變、開關信息分別生成對應的JSON 文件,并保存在指定位置便于查詢。
本文針對CIM/XML 電力系統靜態模型的XML 文檔,采用VBA 編程,借助宿主軟件的DOM 對XML 文檔進行解析,并根據需求提取電力系統模型數據并轉換為易于進行網絡傳輸與解析的JSON 格式。文章所涉及的VBA 編程方法已通過在南網智瞰平臺中得到實踐驗證。該方法對于采用CIM/XML 文檔表達的電力系統模型轉換為輕量級的JSON數據形式,實現在線實時數據轉換及傳輸等應用提供了新的思路。