摘要:针对变电站集中监控海量告警信息的应用场景,保障告警监视窗多客户端及时响应、告警信息不丢失,本文提出了一种性能优化策略。该方法使用告警信息关键字标记,告警信息共享内存缓存以及线程池管理等方法,缓解数据库访问压力确保告警数据可靠同步。该方法已经应用于福建省电力调控一体化系统中。
关键词:调控一体化;告警关键字;中间层; 散列; 线程池
1引言
随着电网的快速发展和国网公司“三集五大”建设持续推进,监视变电站的数量不断增加,电网调控员集中监控的信号量也成倍增长[1],以“莫兰蒂”台风为例,经统计,台风期间,福建电网省调管辖500kV变电站产生监控信号约2000条,厦、漳、泉地调平均产生62000条告警监控信息,这对智能电网调度系统提出了更高的要求。调度自动化系统一方面需要解决海量信息上送时自身的承载能力问题,另一方面还需要兼顾监控业务提供必要的数据,保障调控运行业务的正常开展。
如何能够更加高效地对管辖范围内变电站的信号进行监视,成为各级调控中心研究的重要课题,为解决该问题,综合文献[1][2][3][4][5]可知,目前有两种主流的实时监控告警处理方案:
方案一,合并、归类站端信号,对不重要的信息就地压缩,减少告警信息量。这样调控端只监视并接收重要的告警数据,必要时通过远程浏览变电站综自后台的方式获取变电站的全部告警信息。该方法可以有效回避海量信号对系统的冲击、减少无效信息对于监控员正常监控业务的干扰,但合并归类信号必然造成部分监控信息的丢失,不利于监控员全面掌控变电站现场情况,影响信息分析。
方案二,保证调控端与变电站端信号一致,调控端可以完整监视到变电站的所有的信息,由主站端完成信号的分类,分级后展示给调控人员。该方案要求调控自动化系统实时性能高。受限于现有调控自动化系统依赖历史数据库的瓶颈,无法在进行大量逻辑处理后仍保证实时性能。
针对上述两方面的难题,本文应用软件中间件的思想,调整SCADA系统告警的架构,由中间层完成逻辑处理与信息分发。主要技术有:对告警进行唯一标识、数据分块存储算法,使用共享内存实现对信息的缓存。本文减少了告警监视功能对数据库的压力和资源占用。彻底消除了实时告警程序对数据库的依赖,提高了实时告警程序的实时性与稳定性,为后续进行告警数据的在线实时处理,实现监控告警的“智能告警+全景感知”提供了基本的处理条件。
2集中监控告警监视功能介绍
“调控一体化”等集中监控模式是一种组织更扁平化,业务流程更加集约,可以有效提高电网事故处理效率和日常操作效率的管理方式。其中,告警监视窗是辅助监控员完成监控作业非常重要的工具之一。
告警窗基本功能为:信号监视、监视信号交互等。监控员重点监视状态量信号,遥测数据的越限告警信号等。告警功能监视需求上,为一个服务端向多个告警窗客户端提供数据,其中服务端为双机互备。通过告警窗,各个监控员能相对独立的对告警信息做到及时的获取与快速核查,业务上,监控员不仅能够查看实时告警数据,还能够方便地获取较近历史的告警数据,并按一定逻辑(如对象的动作告警与复归信息能够自动合并等)展示告警数据。
目前普遍采用的告警数据处理与展示流程,即通过告警服务实现对告警数据的汇集,分级等操作,告警数据处理进程则根据告警数据逻辑进行合并,处理后写入告警显示缓存(实时库或是商用数据库中),人机通过服务获取数据。
为满足业务需要,避免“漏监”等情况的发生。该架构充分应用智能电网调度控制系统(D5000)已有的数据通讯实现机制,将告警窗数据分为两部分,其一为存量历史告警数据,另一为实时增量告警数据。即将需要展示信息保存在告警显示缓存数据表中,由人机客户端应用通用数据转发服务,周期从缓存数据表中读取数据,并按界面显示条件过滤展示,增量数据通过数据转发服务直接获取新的告警,结合界面过滤条件进行展示。
该架构存在的问题是:
1、数据通道应该确保稳定可靠,但通用转发数据通道在大量告警产生时,占用公共资源,质量无法得到保障,冗余读取的方式造成对系统的冲击,影响系统稳定;
2、增量数据与存量数据的合并占用资源,对每一个人机界面均需完成该工作,界面功能负担较重,易造成数据混乱;
3、告警信息无关键字,对于以关系型数据库为存储基础的信息访问困难,整个告警功能互动性差,在线分析能力弱,资源可用率低,无法适应未来告警窗功能的发展。
3性能优化方案
针对上述存在的问题,引入了告警中间层功能,重点解决3个问题:
(1)可靠的实时告警数据通道;
(2)业务逻辑与显示逻辑彻底分开,避免消息数据混乱;
(3)告警信息唯一标识,解决告警数据的访问问题,增强数据的可用性,提高数据在线分析能力。
引入告警中间层后的实时监控告警架构如图1所示。
图1 添加告警中间层的实时监控告警架构
首先,告警中间层利用告警信息特征,为每一条告警增加了唯一性标识符,增强了数据的可用性与利用率,解决了告警信息结构化较差,搜索只能按时间段查询的问题。
其次,告警中间层采用了共享内存技术,在共享内存中,按照时序顺序保存告警存量历史数据与增量告警数据,并按滚动方式存储。
再次,数据交互由告警中间层应用内存池技术,对告警数据统一转发,确保及时上送告警信息。
4关键技术
4.1 告警数据唯一标识方法
现有的调度自动化系统中,告警数据没有唯一标识号,造成告警数据可用率极低,资源严重浪费。作为实时告警窗重要数据,由于存在大量交互操作,如确认,标记等等,缺乏唯一标识,影响人机交互体验。从告警监视的业务需求出发,分析告警信息特点,本文提出了一种告警数据的唯一标识方法。
数据散列表(哈希表)主要解决数据的快速定位问题,充分应用线性数据结构,数组的快速定位特性。具体操作办法是,针对一列键-值对数据,存储在一个table中,把键(Key)通过一个固定的算法函数,即所谓的哈希函数转换成一个整型数字。然后,将该数字对数组长度进行取余,将取余的结果做为数组下标,将值(Value)存储在以该数字为下标的数组空间里,至此完成哈希表的构造。当使用哈希表进行查询的时候,再次使用哈希函数将Key转换为对应的数组下标,并定位到该空间获取Value,如此一来,就可以充分利用到数组的定位性能进行数据定位。
参考数据散列的方法,构造告警标识生成函数h,告警标识能够唯一确定一条告警并基本满足业务要求。其中
以下证明对每一个告警x都可以唯一的构造出关键字。
监控系统是一个时序系统,告警信号按照时间顺序依次出现。结合现有的调度自动化系统前置数据上送特点,在同一秒内可能会有多个告警信息同时到来。综上,告警顺序到来,其发生的时间各不相同,以系统接收到的时间为准,因为目前调度自动化系统的时间精度到毫秒但仍旧可能重叠,将告警精度确定到秒级,使用十进制的Unix时间戳(Unix timestamp)目前为10位,并按照告警到来的顺序依次标号为an,将顺序号放在高位的意义为,Unix时间戳位数到2099年均为10位,能够满足系统设计要求,同一秒到来的告警个数不定放在高位可避免数位冲突,根据设计的Key数据类型为long,在64位服务器操作系统中数位长度为19位,即支持同一秒同时有999999999条告警到来,实际情况远低于该数量。由于各个应用告警汇聚后统一处理,自动化系统有十分精确的对时机制,秒级时间不会出现冲突。
告警唯一性标识解决了信息的快速定位,是后面实现信息处理的基础。
4.2 告警中间层数据逻辑
告警中间层的实现主要由以下4个关键模块构成,主要功能如图2所示:
图2告警中间层功能逻辑图
共享内存队列作为临时存放要写入共享内存的实时告警数据的队列和共享内存。
告警增量队列,作为临时存放新到告警数据;数据分发线程,负责将告警增量队列的数据分发到各个告警窗界面的线程;管理客户端增量告警数据线程和管理客户端全告警数据线程,负责完成新告警窗建立,并分配对应的客户端增量告警数据线程和全告警数据线程。
告警中间层处理主要包括告警数据处理环节,人机交互环节,包括新开告警窗与告警信息互动。
告警中间层在接收到新的实时告警数据时经过一些数据处理后(日志记录,数据过滤等等),将这份告警复制为两份,分别存入共享内存队列和告警增量队列,然后由共享内存处理线程将数据写入共享内存,存入共享内存时对每一条告警生成唯一标识,数据分发线程将数据分发到各个客户端所对应的客户端线程,最后各个对应的客户端线程把实时告警数据发送到对应的实时告警窗口。
人机交互包含两种方式,其一为告警数据的互动,即监控员针对告警窗的数据进行交互操作,如做告警确认,告警标记等,信息需要各个工作站客户端实现同步,保证各个监控席位能够协同工作。数据流向为,交互信息通过工作站客户端获取,由告警中间层将数据写入告警增量队列中,并和对应的告警建立关系,最后由数据分发线程将信息分发给各个告警客户端线程并发送到对应的实时告警窗口中,从而保证某一个告警窗上的交互数据能够及时同步到其他告警窗客户端中。
新的实时告警窗启动,为另一个人机交互功能,当工作站打开新的告警窗时,告警中间层的客户端增量告警数据管理线程和客户端全告警数据管理线程会分别为新的实时告警窗创建客户端增量告警数据线程(socket连接为长连接)和客户端全告警数据线程(socket连接为短连接),全告警数据线程实现将共享内存中的历史存量告警发送给客户端告警窗,完成后断开连接,增量告警数据线程将系统中新产生的告警数据传送给告警客户端,并保持与客户端告警窗的数据连接,直到断开链接为止。 为保证告警信息不丢失,长连接先于短连接建立,即客户端先接收增量告警数据,然后再接收告警全数据,根据告警信号关键字的时序属性合并,删除重复告警数据。
4.3告警中间层的核心模块及实现
告警中间层核心模块有:
共享内存,主要负责实时告警数据的临时存储以及对其的更新和删除。
实时告警窗的管理,包括实时告警窗启、停,实时告警数据和共享内存数据的传输,保证各个实时告警窗数据一致。
4.3.1 告警缓存共享内存
共享内存的实现对告警数据的存储与业务处理缓存,数据的存储结构直接影响数据处理性能的好坏。针对集中监控告警数据特点,设计了告警数据的专有存储结构。根据告警数据的时序属性特点,告警依次进入告警缓存,确定了共享内存的存储模式,即以时间为核心,分块存储,共享内存中的数据根据新进告警滚动存储。具体方法为固定每块共享内存的存储容量,按照接收告警数据的时间分块存储,并记录每块数据的开始时间和结束时间,当数据块满时,存入新的数据块,当数据块数量达到上限时,对数据块做整体删除。当定位到一条数据的话,只需要先判断该告警数据的告警时间处在哪一个数据块中,然后进入对应数据块中遍历。这种结构极大减少了搜索数据规模,提高了数据操作的性能。例如,共享内存有25万告警数据,划分为50个数据块,每块的数据有5000条数据,根据实时监控业务,经常需要对本值中产生的某一条告警进行确认、标记或是查找。按照本文设计的数据结构,定位一条告警数据,只需要先根据告警时间确定这条数据所在的数据块,然后到对应的数据块中搜索所需的告警数据,由于告警数据均为顺序存放,完成一次对指定告警信号的查找,搜索算法时间复杂度为O(1),完成指定时间范围内告警数据的查找所需的算法时间复杂度为O(n)。
4.3.2 实时告警窗线程调度
实时告警窗管理完成告警中间层各个线程的调度,负责管理告警窗启停,和各个工作站的告警窗通讯。每一个客户端告警窗由一个线程负责管理,为避免多线程的并发可能带来的问题,诸如临界变量的保护等,需要处理并发,本文使用线程锁的方式实现。告警中间层对各个线程的锁设计,如图3所示:
图3 告警中间层线程调度
如上图所示:链接客户端数据队列主要解决和客户端告警窗通讯,共享内存(全告警数据)队列主要负责完成包括历史告警信息的数据传送,增量告警数据队列主要完成实时告警数据的传送,告警窗数据队列主要完成对各个告警窗客户端的数据连接与数据传输。
共享内存数据队列与共享内存处理线程、告警窗获取共享内存数据线程互锁;增量告警数据队列与数据分发线程互锁;告警窗获取增量数据与数据分发线程;告警窗获取共享内存数据线程互锁;共享内存处理线程与告警窗获取共享内存数据线程互锁;数据分发线程和管理新客户端启停线程互锁。所有线程之间互锁都是为了保护“链接客户端数据队列”、“共享内存数据队列”、“增量告警队列”以及每个“告警窗处理线程的数据队列”在使用时不会出现数据混乱,只有这四个临界队列的正确,才能确保整个告警中间层程序的正确执行数据逻辑流程。
5 工程实践与使用效果
2015年在福建智能电网调度控制系统平台,首次部署了告警中间层版本的告警窗,直观反映是告警窗的响应速度由过去的3到5秒降到1秒以内,同时告警中间层不再和关系数据库直接关联,能够完全支撑调控一体带来的急剧增大的告警数量。
在2016年“莫兰蒂”台风在福建登陆,造成全省200万户停电,告警中间层在极短时间内承受了近万条的告警信息,确保了告警窗稳定,信息不遗漏与交互流畅。后续又在多家省、地级调控中心完成了部署,告警中间层的使用极大的加强了智能电网调度控制系统调控一体功能的稳定性与可靠性,其架构具有良好的拓展性,为未来进行信号分析打下了良好的基础。
6结论
告警中间层改变了原有的告警监视架构,通过对告警进行关键字标识,改变了过去告警信息结构化查询能力较弱,查询速度较慢的问题,采用了告警主动推送给告警窗的模式去掉了定时刷数据的时间延迟,共享内存技术的使用彻底去除了实时告警对数据库的依赖,另外将告警数据缓存在共享内存中,存储方式和业务关系更为紧凑,数据获取也更为灵活,对实时告警数据的分析,统计等工作提供了极大的便捷,对未来进行监控大数据分析也创造了可能。
告警中间层的思想具有普遍适用性,整合了告警信号处理流程,并改良了告警数据的存储方法,目前的成果,中间层逻辑还较为简单,未来可以根据需要对逻辑进行适当扩充以增强其对监控业务的支撑。研究成果可以运用到所有具有相同需求的工业控制告警监视系统中。
作者简介:刘坚(1945—),男,硕士研究生,从事电网调度自动化、电网调度运行专业。
参考文献
[1]王波,王威,李丰伟 电网集中监控下海量信息导致的安全风险及应对策略[J]中国电力,2015,(12):27-32
[2]金芬兰,王昊,范广民,余建明,米为民 智能电网调度控制系统的变电站集中监控功能设计[J]电力系统自动化,2015,01:241-247.
[3]辛耀中,石俊杰,周京阳,高宗和,陶洪铸,尚学伟,翟明玉,郭建成,杨胜春,南贵林,刘金波. 智能电网调度控制系统现状与技术展望[J]电力系统自动化,2015,01:2-8.
[4]樊陈,倪益民,窦仁晖,姚志强,王永福,叶海明. 智能变电站一体化监控系统有关规范解读[J]电力系统自动化,2012,19:1-5.
[5]王德文,阎春雨. 变电站在线监测系统的一体化建模与模型维护[J]电力系统自动化,2013,23:78-82+113.
[6]李洁,崔锦瑞. 500kV变电站报警信息和事故处理流程优化[J]电力系统自动化,2009,02:101-103.
论文作者:刘坚1,卢健2,王昊2,梅峥2,金芬兰2
论文发表刊物:《电力设备》2017年第23期
论文发表时间:2017/12/8
标签:数据论文; 中间层论文; 线程论文; 实时论文; 信息论文; 内存论文; 客户端论文; 《电力设备》2017年第23期论文;