戴乔旭,罗宗杰
(广东电网有限责任公司湛江供电局,广东 湛江 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(“**x”).Nodevalue 方法即可获取到分支的值。具体实现代码为:
documentElement.SelectSingleNode
GetAttributeNode(“**x”).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数据形式,实现在线实时数据转换及传输等应用提供了新的思路。
猜你喜欢 树状文档内存 树状月季的栽培管理及园林应用农业科技与信息(2022年8期)2022-11-22浅谈Matlab与Word文档的应用接口客联(2022年3期)2022-05-31有人一声不吭向你扔了个文档中国新闻周刊(2021年26期)2021-07-27轻松编辑PDF文档电脑爱好者(2021年9期)2021-05-12笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待电脑报(2019年31期)2019-09-10“春夏秋冬”的内存当代陕西(2019年13期)2019-08-20蓬勃能力之树 奠基生命成长新课程·上旬(2017年11期)2018-01-25Word文档 高效分合有高招电脑爱好者(2017年7期)2017-05-06内存搭配DDR4、DDR3L还是DDR3?电脑爱好者(2015年21期)2015-09-10列表画树状图各有所长中学生数理化·中考版(2015年10期)2015-09-10