余腾龙,胡 潇*,刘显明,赵 璨,王德军

(1.国网江西省电力有限公司信息通信分公司,江西 南昌;2.中南民族大学计算机科学学院,湖北 武汉)

随着电网技术的不断发展,国内电网结构不断趋于复杂化、多样化。同时,伴随着互联网技术的飞速普及,国内电网更加趋于智能化,各项数据更加趋于自动化。智能电网产生的数据激增,为充分发挥数据的优势,智能电网数据共享势如破竹。

智能电网数据共享的第一步是量测数据的接入。电力调度通用数据对象结构化设计规范中[1],量测类数据结构用设备ID 和量测类型标识唯一的指标,不同的指标在不同的事件下拥有不同的处理方式。2021年,陈家静等[2]设计一种电力通信大数据实时共享方法,提出将非结构化数据与XML 文档结合,将异构数据转换为同一数据格式数据,但仅限于提供想法并未进行实际转换。2022 年,程晗蕾等[3]称用电采集系统需要对数据进行中心化归集、整理、挖掘、分析以改善电力交易质量,但其研究重在解决传输过程中数据安全问题。同年,郑晓露等[4]设计一种电网时序数据的云边协同技术,使用Key-Value 数据库进行数据处理,是目前较成熟的数据归集方案,实验证明了技术的可行性,但缺乏针对特定事件的信息处理方式。同年,王新柱等[5]提出基于Hadoop 生态系统的电网量测数据共享技术,对于数据集成方面,通过对量测数据访问组件的服务化实现统一的接入规范,缺乏对异常请求及异构数据集成的关注。

对国内外现有技术分析后发现,数据归集存在如下问题:缺少支持大批量数据下以定制事件形式的标准化归集方法,无法对一些具有特定信息(如异常、超时等)的数据流进行特殊处理。

针对上述问题,本文提出一种流式识别驱动的电网量测数据动态归集方法,以定制事件形式,完成对异源异构的电网量测数据的动态接入、实时同步和常态化监测。开展工作如下:

(1) 事件特征预定义方法。给出基于字符串匹配和正则表达式的事件匹配规则,用于识别客户端预定义的特定事件。

(2) 流式识别驱动的事件判定机制。设计事件识别算法,实时进行流式判定,高效给出事件判定结果。

(3) 动态归集方法。根据事件判定结果,完成对数据的动态接入、实时同步和常态化监测。其中,设计高效获取算法对异常请求数据流进行广播。

(4) 系统实现及实验。搭建流式识别驱动的电网量测数据动态归集系统,基于DLT645_2007 协议数据进行实验,并与文献[4]进行比较。实验结果表明本文方法对于包含正常请求、异常请求和慢响应等特定事件的数据流具有准确率高、性能佳的效果。

1 相关工作

本节从智能电网数据共享技术的角度介绍国内外在量测数据接入方面所作研究工作。

智能电网数据共享技术研究主要集中于共享架构[2,6,7,8]、数据安全[2,9,10]、数据存储[3,11,12,13]和数据监测[13,14,15,16]方面。每个方面的第一步均涉及量测数据接入问题。2021 年,朱红勤等[6]设计基于改进Raft 算法的电力数据共享机制,使用电力调度中心采集数据,但未考虑如何对异构数据进行监测。2022 年罗涛等[7]总结电力大数据实时共享方法应用后称,SOA 架构运用分布式粗粒度的方式进行数据整合,但受到现实的数据资源和技术水平制约。同年,王楠等[8]设计基于区块链技术的数据共享系统,采用云边端协同的技术实现数据可信接入,未对异构数据如何处理进行说明。2021 年,王珏等[9]设计支持双向选择聚合的智能电网隐私保护方案,主要局限于用户耗电量,数据过于单一。2022 年,张利华等[10]设计基于区块链的电网数据安全共享方案,在数据层完成数据的采集清洗和打包,未说明异构数据如何打包和归集。2020 年,杨燕涵[14]完成联盟区块链下智能电网数据监控研究,通过频繁的数据交换实现数据监控,但数据接入中对异常请求方面未作详细考虑。2021 年,姚刚[15]阐述电力物联网在智能配电网状态检测中的应用,提到通过同步相量数据集中器装置汇集数据,仅停留至设计阶段,无法解决异常请求等问题。

通过以上分析,对于量测数据接入,概念层面的研究成熟,但局限于量测数据简单接入,无法同时兼顾接入、监测和同步。针对特定信息无特殊处理技术。可见,一种对电网大批量量测数据的动态接入、实时同步、常态化监测的数据归集方法尤为重要。

2 流式识别驱动的电网量测数据动态归集方法

2.1 方法思想和核心流程

流式识别驱动的电网量测数据动态归集方法的核心思想是一种根据事件判定结果触发进行量测数据归集的方式,见图1。

图1 流式识别驱动的电网量测数据动态归集方法概念架构

首先,需要针对特定事件设定事件特征,制定相应的事件匹配规则。考虑到智能电网数据共享的需求以及用电采集系统的运行模型,特定事件定义使用唯一标识符标识,事件匹配规则采用正则表达式和字符串匹配规则。

其次,考虑电网量测数据归集的实时性要求,采用流计算模型对各个采集节点实时产生的量测数据流进行预定义的事件判定,使用高效缓存机制对数据和事件判定结果进行存储,以便对数据的后续操作。

再次,根据事件特征判定结果,对数据进行相关操作,综合智能电网数据共享方面需求,设置应用率最高的3 种操作:数据冻结、数据接入和监测。数据冻结适用于用电采集系统每15 分钟冻结数据规则,数据接入适用于满足接入条件的数据,监测表示通过一致性模型和唯一标识机制对所有进行识别的数据进行常态化监测,确保其完整并有效。

最后,针对接入数据,通过一致性模型和唯一标志机制,对数据进行汇总、归并,其中汇总适用所有数据,归并适用同源同构数据,通过广播方式对数据情况进行同步。

根据上述思想,流式识别驱动的电网量测数据动态归集方法如下:

服务端实时对各个采集节点的数据流进行预定义事件判定,当出现符合采样条件(事件特征)的数据,给出事件判定结果,由于量测数据发生有前后时间顺序,且跨采集节点的数据异源异构严重,针对该问题,流式识别的方法利用有限的资源高效找到符合采样条件的采集节点及量测数据。

数据处理端根据事件判定结果,对数据进行相关操作。数据冻结适用于用电采集系统每15 分钟冻结数据规则。数据接入针对满足接入条件的量测数据流,拉取数据后进行第一次过滤操作,进行初步的数据清洗,同时通过广播方式更新数据信息。通过一致性模型和唯一标识机制对所有进行识别的数据进行常态化监测,确保其完整并有效。

服务端通过一致性模型和唯一标志机制,对数据进行汇总、归并,其中汇总适用于所有数据,归并适用于同源同构数据,通过广播方式更新数据信息,以便客户端同步接收到常态化监测的结果。

为了实现上述思想和流程,本文方法包括4 部分内容:事件特征预定义方法、流式识别驱动的事件判定机制、数据相关操作说明、数据汇总和同步机制。

2.2 事件特征预定义方法

特定事件意为数据接入过程中可能发生的事件,事件特征用于识别特定事件。根据智能电网数据共享的需求以及用电采集系统的运行模型,特定事件定义使用唯一标识符标识,本文中事件特征包括设备运行状态(控制码)、电能表标识(地址编码),根据数据流实际情况,特定事件包括3 种。

(1) 正常请求。正常请求指有效数据请求,包括数据冻结请求和数据接入请求。

(2) 异常请求。异常请求指数据中包含错误信息或者数据流无具体信息。

(3) 慢响应。慢响应指请求事件过长导致请求超时。

事件匹配规则采用正则表达式和字符串匹配搭配。根据定义好的特定事件和事件特征,制定事件匹配规则,其中数据冻结请求标识00,数据接入请求标识01,异常请求标识1,慢响应标识2。字符串匹配规则使用简单匹配规则,如Code=500。正则表达式用于检查数据流是否包含某种语法规则,如*^[a-z]+:[a-z0-9]{1}*[a-z0-9]+([^f ])。

2.3 流式识别驱动的事件判定机制

采用事件匹配规则、缓存机制和流计算模型对数据流实时进行特征事件判定,采用事件识别算法,高效给出事件判定结果,事件判定结果使用唯一标识符标识。

事件识别算法如下所示,若数据流与预定义的事件规则匹配,则将数据及事件判定结果存入缓存Set,并根据事件判定结果进行初步检查。

算法1 事件识别算法输入:数据流输出:存放数据和事件判定结果的缓存Set;存放错误数据流的Error。1.If 数据流匹配预定义的事件规则2.给出事件判定结果3.数据和判定结果保存至缓存Set 4.Else 5.错误警告6.If 事件判定结果标识为00 7.数据冻结事件,Set 标识00 8.If 事件判定结果标识为01 9.数据接入事件,Set 标识01 10.If 事件判定结果标识为1 11.异常请求事件,数据流保存至Error 12.If 事件判定结果标识为2 13.服务端停止拉取数据

在服务端发现符合事件特征的数据流后,会与数据处理端进行交互,并由数据处理端将一定时间范围内的相关数据进行操作。随着数据流增多,服务端内存有限,使用高效缓存机制Hash B 对Set 进行存储。

Hash B 树算法是结合了支持快速查询的Hash 算法和支持树结构的全值匹配的B Tree 索引算法[18-19],可以快速高效的查询缓存中的数据,本文中用于存储Set 和Error 的缓存结构见图2。

图2 缓存结构示意

2.4 数据相关操作说明

数据处理端获取Set 和Error 后,根据事件判定结果对数据进行不同处理,包括数据冻结、数据接入和监测。

2.4.1 数据冻结

事件判定结果标识为00,数据处理端进行数据冻结操作,即符合用电采集系统每15 分钟冻结数据规则,对数据不进行任何操作,通过广播的方式上报客户端,并清除缓存。

2.4.2 数据接入

事件判定结果标识为01,数据处理端进行数据接入操作。在数据处理端做第一次过滤操作,进行初步的数据清洗。本文Set 采用Hash B 树结构存储,缓存大小设计为1GB,最大容量为10w 条(每条数据最大约500 字节)。缓存采用hashMap 的K-V 存储结构,方便快速读取整个数据。

2.4.3 监测

事件判定结果标识为1,数据处理端对Error 进行监测处理。本文设计一种高效获取算法,采用时间窗口方式处理缓存数据,找到异常数据流的设备运行状态和电能表标识,并将其发送到客户端。如算法2 可见,首先建立环形队列,在保证线程安全的前提下,遍历Error 中所有内容,找到异常请求数据的电能表标识id 和设备运行状态state。

算法2 高效获取算法输入:数据流输出:Error 中设备运行状态和电能表标识1.List<Map<String, List<String>>> Queue=new LinkedList<>();2.Set<String> Error=new Set<>();3.For i ←1 to 1000000 4.String id = 第i 条数据的电能表标识;5.String state=第i 条数据的设备运行状态;6.Map<String, List<String>>queue1=ConcurrentHashMap<>();7.If(queue1.get(id)!=null)8.queue1.get(id).add(state);9.Else 10.List<String> queue2=New ArrayList<>();11.queue2.add(state);12.queue1.put(id, queue2);13.End If 14.End For 15.Return id, state

2.5 数据汇总和同步机制

动态归集方法对CPU 和内存要求较低,在有限的物理资源下充分利用内存资源,将重要特征数据进行快速准确的汇总与同步。量测数据异源异构严重,数据处理端直接归集会使整体信息处理变得复杂,不易维护。故本文采用数据处理端与服务端共同处理来实现整体信息的汇总与同步。

如图3 所示,数据处理端负责对接入数据进行初次过滤和清洗,将清洗后Set 发送至服务端,通过唯一标识机制[20]和一致性模型[21]进行验证,再进行汇总和同步,并作为常态化监测结果发送至客户端。

图3 数据汇总和同步机制

2.5.1 数据汇总

数据汇总包括两部分:一是对Set 汇总,及时更新id 和state 信息;二是对id 相同数据的对齐与归并,按帧序号拼接成一条数据流。

2.5.2 数据同步

通过广播的方式,发送更新好的id 和state 信息到各个服务端,以便服务端同步接受最新的数据特征信息。由于含有错误信息的Error 在数据操作部分的监测操作中已经通报至客户端,不再做其他处理。

3 系统实现及实验验证

为验证流式识别驱动的电网量测数据动态归集方法的准确性和高效性,本文设计了一种流式识别驱动的电网量测数据动态归集系统,并通过DLT645_2007 协议数据进行实验。

3.1 系统实现

如图4 所示,该系统输入为电网量测数据流,输出为常态化监测结果和用电采集节点错误情况通报。系统自顶向下包括特征预定义单元、事件判定单元和操作单元。各单元描述如下。

图4 流式识别驱动的电网量测数据动态归集系统架构

特征预定义单元,用于定义特定事件的事件特征,事件特征包括设备运行状态state、电能表标识id,并通过正则表达式和字符串匹配自动生成事件匹配规则。

事件判定单元,用于识别事件。应用事件识别算法,通过缓存机制高效存储并输出事件判定结果,事件匹配过程中标识符为00 的事件为数据冻结事件;标识符为01 的事件为数据接入事件;标识符为1 的事件为异常事件,做输出处理;标识符为2 的事件为慢响应事件,做停止拉动数据流处理。

操作单元,用于完成数据的动态接入、实时同步和常态化监测。

3.2 实验环境及数据集

为验证动态归集方法的准确率和性能,本实验准备1 个docker 客户端,1 个docker 服务端。服务端CPU 采用Intel (R) Core (TM) m3-6Y30 CPU @0.90GHz,机带RAM 8.00GB。

数据集采用DLT645_2007 协议数据[22],使用dlt645-2007-tool 工具[23]获取20000 条原始帧信息。在该协议中,帧是传送信息的基本单元,帧格式见表1,每个原始数据解析后包含字段。

表1 DLT645_2007 协议数据字段说明

3.3 实验及结果分析

本节对归集方法的准确率和性能进行实验与评价。

准确的归集是指请求帧功能与实际操作一致,同时在客户端显示帧序号、表号和请求帧功能。DLT645_2007 协议应用层请求帧功能共包含12 类,本文选取其中8 类共20000 条帧信息与本文给定特定事件对应,如表2 所示。值得注意的是,本文实验采取数据导入方式,且保证帧信息无序。

表2 DLT645_2007 协议与本文特定事件对应表

本文实验选取数据接入类型帧信息10 000 条,数据冻结帧信息3 000 条,异常请求帧信息1000 条,慢响应信息1 000 条。本实验运行结果使用matlab 点阵图表示,如图5 所示,将区域分成4 块,用于绘制数据接入请求、数据冻结请求、异常请求和慢响应,其中条数由程序自动生成。公式(1)是本文4 种特定事件的准确率计算公式,即程序获取条目数与请求帧功能条目数比值,其中auto_num 代表程序获取条目数,preset_num 代表请求帧功能条目数,n 代表选定的特定事件。

图5 点阵图表示的实验运行结果

通过计算,4 种特定事件的准确率分别为:99.89%、100%、99.2%和99.7%。结果充分表明,特定事件的归集结果与预设的原始帧信息基本高度一致。我们对出现的些许偏差进行溯源后发现,在数据相关操作阶段存在部分帧丢失情况,可能是时间窗口的限制导致部分帧丢。

对于性能方面,目前常规的Key-Value[24]数据处理方式插入10 万条数据需要4 s 左右,查询10 万条数据需要1.8 s 左右,本方法设置20 000 条数据,顺利完成秒级接入,时间置于可接受范围内,效率可观。同时,如图6,与参考文献[4]进行对比。文献[4]主要测试电网时序数据的写入和查询测试功能,本实验将其与4 种特定事件对应,在执行耗时上进行比较。明显地,在准确率可观的条件下,执行耗时基本一致,没有明显的下滑现象,可以说具有性能佳的效果。

图6 对比文献[4]方法的结果

4 结论

量测数据接入是智能电网数据共享的第一步。本文设计一种流式识别驱动的电网量测数据动态归集方法,以事件定制形式,解决异源异构严重、大批量的电网量测数据的动态接入、实时同步和常态化监测问题。主要工作包括:事件特定预定义方法、流式识别驱动的事件判定机制和动态归集方法。同时,搭建相应的流式识别驱动的电网量测数据动态归集系统,基于DLT645_2007 协议数据进行实验,并与现有的归集方法进行比较。实验结果显示,本文方法对于包含正常请求、异常请求和慢响应等特定事件的数据流具有准确率高、性能佳的效果。下一步工作将致力于研究用电采集系统数量对动态归集效果的影响。