黄国兵,王嘉浩,黄 凯,王 茜
(1.西安工程大学计算机科学学院,陕西 西安 710048; 2.国网陕西省电力公司咸阳供电公司,陕西 杨凌 712100)
随着我国工业制造2025战略[1]不断向前发展,国家电网公司在整合现有的自动化、信息化技术支撑系统[2]的基础上,构建电力系统专用的大数据平台[3],促进电网管理技术向智能化方向迈进。理论上讲,电力系统的技术支持系统大多是由一些规模庞大的泛在物联网系统组成,这些物联网系统正是电力大数据平台的信息来源[4-5]。关口表电能计量计费系统是电力企业早期建设的一种技术支撑系统,主要实现发电企业上网电量和供电企业下网电量的计费结算业务,支持发供电考核、实时竞价上网以及线损网损计算等功能[6-8]。扩展和完善该系统的数据采集功能是电力大数据平台建设的需要。同时,国家电网电力交易中心要求,发电企业需要按峰谷平费率电价进行电量结算,电量采集终端需要采集和处理的信息容量大幅增加,对信息存储和处理提出了更高要求,需要采取进一步的手段来满足这些新的需求,满足国网电力交易中心的应用。考虑到所升级设计的软件已在发电厂/变电站推广应用,还需要保证软件的向后兼容性[9-10]。由于电能量远方终端采集处理的信息用于电力公司与发电用电用户之间的电费结算、电量考核处罚等经济领域,电量信息必须准确、完整并且可追溯,避免造成结算纠纷。需要采用相应的技术手段来保证软件扩展所需的功能与性能指标要求,本文主要就该泛在物联网终端软件扩展设计的构思和实现方法进行阐述。
原关口电能量远方终端eRTU[11-12]采用“日清月结”的思想设计,只采集正、反向有、无功4个总电量的分钟电量曲线,峰谷平费率电量每日保存一次,信息容量较小。针对新的需求,需要在现有平台上增加采集功能、调整采集策略、信息压缩等,使得信息容量大幅提升后现有平台仍能满足需求。
由于历史的原因,电能表采用的通信协议多种多样,eRTU需要支持多种通信协议[13-15],实现电量信息采集。按照新的要求,需要采集的电量信息包括:瞬时量、费率电量、累计电量、最大需量等。其中费率和累计电量保存周期最小为1 min,冻结电量和需量每日一次,瞬时量为实时数据。为此,调整信息采集的Polling周期,10 s启动一次瞬时量召唤,其它信息按周期自动插入召唤,保证信息的及时性。
考虑到电量信息的特点,以及嵌入式物联网终端硬件平台的限制,关口远程抄表TMR系统所使用的IEC 60870-5-102通信协议按指定时间范围和对象范围读取信息[16],通信流程需要快速、按信息点访问具体的电量对象。电量信息以分钟曲线方式实现存储访问,下面就其处理方法进行说明。
1.2.1 分钟电量曲线的完整性和正确性
导致分钟电量曲线中记录点出错的因素很多[17-19],从eRTU运行的情况来看,主要原因有:1)电能表与eRTU通信连接故障;2)eRTU故障和电能表掉电;3)eRTU复位重启漏记;4)电能表上报的信息错误;5)嵌入式物联网终端的电子盘满;6)与主站的通信中断,等。针对上述问题,eRTU采用相应的措施进行处理,保障信息的完整性和正确性。
对于电能表和eRTU故障、通信连接中断,需要管理人员维护处理。对于eRTU复位漏记,eRTU每次启动之前都要对曲线记录进行检查,如果漏记一个记录点,则调用修复函数进行修复。对于具有分钟电量记录功能的电能表,则采用追补方法读取漏失的记录。部分电能表上报的电能信息与表盘值不符,当电表的电源电压低时,上报的电量值为0,导致电量曲线失去物理意义。针对此问题,采集包进行自动过滤。为了防止因与主站通信中断造成电量信息丢失,eRTU要保存45天的分钟电量曲线,一旦通信恢复,主站启动追补流程,将eRTU存储的信息转储到主站数据库[20-21],由此实现电量信息的完整性。eRTU则自动判断曲线记录的日期时间,自动删除过期记录,防止电子盘满造成死机。
1.2.2 曲线记录的压缩存储
eRTU要保存45天的负荷曲线记录,记录的周期最小为1 min,每台eRTU终端最多可以采集128块电能表的电量信息,存储容量计算公式如下:
存储容量=天数×电能表数×1440×20×4
(1)
式(1)中20表示电量个数,包括正、反有功和无功的总、尖、峰、平、谷电量,4表示每个电量值用4 B保存,1天1440条记录,电量信息容量约为663.552 MB,这对没有数据库支持的嵌入式物联网终端而言,需要采取多种手段进行处理。
1)信息压缩。考虑到TMR读取eRTU电量信息时具有实时性的需求,普通的数据压缩算法在嵌入式终端上不可行。针对关口电量信息的特点,正常情况下,信息值具有递增趋势,电量信息在二次侧计量,电表走字速度很慢,即增量值很小;同时,费率电量只在对应时段有增量,非时段的增量一定为0,因此,曲线中保存增量即可以达到很高的压缩率。由于增量值的不确定性,采用1~4 B变长保存的方法,可以实现压缩率的最大化。具体实现算法为:①计算增量;②判断增量的范围,确定使用多少字节保存;③在电量状态字节中标记增量的长度;④统计该时间点记录的长度,保存在profile概要信息结构中。这样通过增加增量信息大小甄别,可以实现更高的信息压缩率。
按照电表走字的规律,正常情况下,增量大于等于0才符合逻辑,但是电表更换、终端复位、电表上报数据出错都会违背这一规律,进而造成电量数据失去物理意义,主站统计的电量曲线畸变。针对这一问题,软件采用如下措施保障增量信息的正确性:①更换电表需要在配置界面指示;②设计一个系统文件记录装置当前运行的上下文参数,在生成曲线时更新该上下文文件,终端启动时一律以该上下文为依据运行,避免终端运行不连续造成断点;③将连续3次采集的电量值T1、T2、T3按变化趋势判断数据的合法性,滤波剔除坏数据。在信息压缩处理算法中增设这些策略之后,电量信息的正确性得到大幅提升。
2)规划文件内容的结构。IEC 60870-5-102协议按指定时刻和指定信息点访问历史电量信息,因此文件中的信息点以时刻为单位记录电量信息。考虑到曲线信息点的访问效率,曲线文件采用纵横各2级的结构,其中纵向包括记录状态和曲线记录2级,曲线记录的横向按电表依次排放,如图1所示。
图1中,文件的第1个字节是曲线的周期,曲线周期的单位是min,取1、2、5、10、15、30之一。其次为分钟电量曲线的状态参数profile,profile包含3个字段:avail、length和offset。其中avail标记对应的记录点是否存在;length为记录长度;offset表示该时间点记录的偏移位置,即记录在文件中的相对位置。如果avail=1,则offset的值有效,否则忽略不计。曲线文件的纵向第2级为周期曲线记录点,为同一时刻所有电表的电量信息,包括电表位置序号、电能表运行状态、电量对象的个数、电量对象的实际值和字节个数。周期曲线记录横向以电表为单位,每个电表一条记录。也就是说,若同一时刻采集了n块电表的数据,则周期曲线记录包含n个子记录。
由此可见,以分钟电量曲线的周期为单位,每天曲线记录的条数为:
m=1440/T
(2)
其中,T为曲线周期,进而计算得到曲线记录的位置为:
pos=2+sizeof(profile)×m+((avail==0)?0:1)×offset
(3)
这样,文件打开后,先读取周期T,再根据T读取profile,计算得出pos之后,调用seek函数直接跳到记录点所在的位置,一次读取该时间点的所有数据,再在内存中寻找所需的电量值。考虑到IEC 67870-5-102协议按时间点上报电量信息,这种访问方法不仅速度快,而且效率高。
3)按日分段保存。根据IEC 60870-5-102协议访问电量信息特征,将分钟电量曲线按日保存,即每天保存一个文件,每个文件的字节数小,通过减小文件的大小来提高文件访问的效率。每天的曲线文件的文件名格式为:LSyymmdd.dat,其中yy为年,mm为月,dd为日。文件名的定义可以有效访问指定时间点的记录。此外,该文件名也用于删除过期的数据。软件每天清理1次过期文件,防止电子盘存满造成终端死机。
1.2.3 分钟电量曲线的生成
为了保证分钟电量曲线记录的完整性,所设计的曲线生成算法如图2所示。
图2 分钟电量曲线生成算法
图2中,曲线生成算法负责曲线点时间检测,到点获取曲线记录的值并将其添加到曲线文件。如果发现丢失的曲线记录具有可修补性,则修复丢失的记录。为了提高曲线文件的访问效率,每次曲线文件的操作都是所有电表一次性操作。
eRTU采集和生成的电量信息记录采用IEC 60870-5-102协议(中国电力行业等效使用该协议的标准号为DL/T719-2000)通过电力调度数据网的Ⅱ区网络[7,22]上传给计量计费系统主站。由于现有的协议对费率电量传输支持度不够,需要在主站和终端两侧协商进行协议扩展,以满足费率电量传输的需求[23]。
经双方协商,在IEC 60870-5-102协议[13]框架体系内扩展功能码和信息帧,实现费率电量和需量信息的传输。下面以电量信息帧为例,说明帧扩展的方法。
文献[16]中,为了实现尖、峰、平、谷费率电量的传输,在功能码0x78的基础上,扩展了兼容的历史电量帧C_CI_NR_2,使得历史电量中的信息体可以选择包含费率电量,扩展的电量信息体的格式如表1所示。表1对报文帧中记录地址字段的功能进行了重新定义,其bit0表示总电量,bit1~bit4分别定义费率尖、峰、平、谷,bit7恒为1,表示此报文帧为扩展帧,其它字段不变。
表1 历史电量帧中电量信息体的定义
字段名说明信息体地址(1B)电量对象序号(分帧连续)总电量数据(4B)(LL,LH,HL,HH)总电量数据标志尖电量数据(4B)(LL,LH,HL,HH)尖电量数据标志峰电量数据(4B)(LL,LH,HL,HH)峰电量数据标志平电量数据(4B)(LL,LH,HL,HH)平电量数据标志谷电量数据(4B)(LL,LH,HL,HH)谷电量数据标志电量数据长度=5(费率数+1)B记录地址字段定义对应电量对象是否存在,如取值0x9f表示传输全部电量,信息体内数据的含义为:总电能、尖(费率1)电能、峰(费率2)电能、平(费率3)电能、谷(费率4)电能共25B如取值0x81,则只传总电量,共5B校验和(1B)电量数据累加校验和
此外,还扩展了需量信息帧等,完成相关功能。
在完成通信协议扩展之后,对先前软件中的IEC102协议软件包进行了扩展维护,首先对其中历史电量的组帧函数C_CI_NR_2进行修改,使得eRTU上行报文符合表1定义的格式;其次,扩展新定义的需量组帧函数C_CI_XL_2,使用C_CI_NR_2函数实现需量召唤命令的应答。
图3 扩展的分钟电量曲线生成算法
文献[16]专门定义了电量信息召唤的流程,本文嵌入式物联网终端没有采用实时多任务操作系统支持,为了保证协议包的运行流程符合标准,如图3(a),专门设计了一个通信流程状态机实现这一功能,如图3(b)。
如图3(a),为了召唤电量信息,主站下发召唤命令,通知eRTU准备数据,eRTU发送单字符帧E5响应,主站下达召唤1类数据,一旦eRTU准备好数据,则向主站发送镜像激活帧,通知主站召唤数据,主站发召唤1类数据命令,eRTU上报指定数据,直到数据发送完成,在发送完成之后,收到召唤1类数据命令,则响应镜像结束帧,通知主站所召唤的数据已上传完成。实际实现时,主站连续按流程发送请求命令,没有给eRTU准备数据的时间,其次,主站召唤的信息量有时很大,内存没有足够的空间保存,因此eRTU访问文件的效率必须很高,不能造成响应超时而导致通信流程中断。由于主站都采用召唤1类数据命令读取指定的数据信息,导致主站的报文帧是上下文相关的,为此,eRTU设计了专门的状态机对流程进行管理,如图3(b)。主站为了读取eRTU的电量信息,二者通信时,需要建立连接、复位链路、初始化链路等过程,之后,eRTU进入“就绪”状态,可以接收主站下达的转换数据命令,接收召唤数据直至数据召唤完成的状态变换如图3(b)所示,状态变换由主站召唤发起,eRTU响应之后完成。如eRTU在“就绪”态,收到召唤需量的命令,则eRTU发送E5应答,进入“准备”态,表示已按需求准备好数据;在“准备”态,一旦收到召唤1类数据命令,发送镜像激活帧,进入“激活”态,可以传输指定数据。在任何一个状态,如果收到了与期望不一致的命令,则eRTU发送无所请求的数据作答。传输完成之后,发送镜像结束帧,重新进入“就绪”状态。软件包代码严格按这一状态机实现,确保通信流程与标准相符。
根据项目研究和软件开发需求,首先在实验室对所设计的软件进行调试和检测,检测的项目和方法如下。
本次项目开发对eRTU软件中的电能表通信协议包进行了调整,主要是调整了费率电量和最大需量信息召唤的频次,实验室表架上用于测试的电能表品牌包括威胜、国策恒通、红相和兰吉尔等,均可以实现eRTU软件中主流协议包的测试。测试结果如下:1)数据采集。eRTU与电能表通信流畅无中断,表明报文帧正确;捕获报文分析,召唤数据的类型和周期正确。2)采集数据正确性。通过eRTU的界面查询所采集的瞬时量、电量值、最大需量和发生时间等,所有数据与电表显示的值相同,表明解帧正确;电表中电能量参数变化后,eRTU能及时更新。3)压缩性能。检查3天曲线文件的大小,每个文件约373 kB,与理论估算相比,大幅减少。主要原因如下:①电表数虚拟定义后为64块,曲线周期为5 min,理论估算只有1.75 MB;②电表在实验室运行,驱动电流很小,增量值都只有1 B。因此压缩比能达到接近4倍的效果。4)访问性能。这里使用定性方法观测eRTU的曲线访问性能:①eRTU在周期点存储曲线时,左上角时间刷新无停顿现象;②计量主站召唤eRTU电量报文时通信过程流畅,主站无通信超时的告警。可见曲线处理、存储访问的性能满足应用需求。
为了查询分钟电量曲线中记录的值,eRTU设计了专门的界面用于显示指定时间、指定电表的历史电量值。在完成曲线生成、曲线记录访问函数修改之后,扩展的费率电量信息也可以在屏幕上显示,借助此界面,可以测试分钟电量曲线生成的正确性。为了完成测试,将eRTU和电表架上的电能表连接好,并连续运行72 h,查询记录生成的情况,结果如下:1)检查eRTU曲线生成的情况,LS190423~26.dat这4天的曲线文件都存在,文件生成正确;2)从2019年4月23日14点0分开始,翻页查询各时间点的记录,记录完整,显示的电量值与电表走字规律一致;3)eRTU配置曲线周期为5 min,在eRTU连续停电超过5 min后,可以看到曲线点依然连续,说明eRTU随机复位之后,曲线记录点不中断。由此可见所设计的分钟电量曲线模块功能正确。由于eRTU上只有14天的历史文件记录,超过45天过期文件才会删除,这项功能在实验室没有完成测试,待设备现场运行时进一步验证。
费率电量上传测试需要和计量计费系统主站连接后方可完成,实验室不具备测试条件,在和用户商量之后在用户变电站进行联调试验,测试的现场为白家硷和西红墩2座变电站。
为了保证联调工作正常开展,先保证报文通信的流程正常,在逐一核对报文字节流与规范的一致性之后,eRTU和主站之间的报文通信正常。这里以捕获的一条报文做简单说明,如图4所示。通过捕获报文并对报文与协议规范进行核对,逐一核实对象信息正确性。
图4 电能量历史数据上传帧
图4中,第0个电量(主变高压侧主表)的总尖峰平谷值为:325983, 0, 179290, 114094, 32599;第1个电量(主变高压侧副表)的总尖峰平谷值为:325825, 0, 179203, 114038, 32584。报文中传输的电量值与电能表显示值相同,也与协议规范的定义一致。
对eRTU上传的瞬时量、需量信息报文,也进行了与电量信息相同的核实检查,主站显示的需量信息也是电能表号、最大需量及发生时间对位且量值相同。
在完成eRTU与主站通信联调之后,2座变电站的eRTU软件都升级至最后发行版,进入168 h拷机,拷机任务完成之后对该供电局调控的所有变电站和发电厂的eRTU软件都进行升级,实现全局费率电量上传任务。
根据用户费率电量传输的需求,在遵循产品的相关技术标准的基础上,首先对eRTU与全电子式电能表通信协议包的采集策略进行调整,使得费率电量采集满足项目应用的需求;其次,重新设计分钟电量曲线访问模块,实现曲线信息压缩、满足大容量信息存储、快速信息访问的要求;最后,扩展通信协议,实现费率电量的正常传输。在完成软件扩展设计之后,先在实验室和用户变电站与计量计费系统主站进行数据通信联调,测试结果表明,升级设计的软件在电量信息的正确性、完整性、压缩率和访问性能等方面都达到了较高效果。经过在2所变电站的一周试运行无误之后,对全局26座电厂、17座变电站的eRTU软件进行了升级,成功完成了用户单位关口电表费率电量上传的任务。