基于IEC 61850的智能变电站通信异常分析
2021-01-08李启本许菲菲
李启本,许菲菲,俞 玲
(国网上海市电力公司松江供电公司,上海 200090)
35 kV其昌变电站采用某国产保护测控装置,该变电站站控层采用IEC 61850协议通信,投运于2014年7月。于2020年1月出现部分遥信变位不上送调度的现象,在某仓10 kV开关保护动作后,调度仅收到保护动作记录,未收到该故障仓位开关变位信号,而站内综自后台信号均无问题。其后类似的通信异常情况在该站不同仓位的保护动作及开关遥控操作时多次出现。
1 现象分析
1.1 SOE报文分析
在收到消缺任务后,可在现场利用该站的备用仓,反复进行故障模拟,开关变位等试验,在排除了站控层网络结构、通信配置及IP地址设置等错误可能性且备份现场装置配置后,抓取装置mms报文。
(1)开关位置为双位置接点,合位为KI10,分位为KI11,定义为双点7。遥信初始状态为KI10为0,KI11为1,进行第1次开关变位,KI10的值变为1,KI11的值变为0,mms报文上送了第1次变位时KI10、KI11和对应双点7的值。
(2)进行第2次开关变位,KI10的值变为0,KI11的值变为1,第二次变位的mms报文只上送了双点7的遥信变位,未上送KI10和KI11的遥信变位。
通过分析装置发出的mms报文,确认存在遥信变位报文未上送且EntryID不连续现象,而装置本地记录并未丢失,即保护板记录正常,同时通信板上送记录缓存也正常。
1.2 报告控制块内存分析
BRCB报告控制块信息存储在通信程序全局链表中[1],现场打印全局链表信息,得到现场客户端后台和远动对应的缓冲区情况。
根据内存对比可知,每个控制块的缓冲区最大为20 000,而远动当前使用大小已超过20 000,即保护装置给后台上送报告对应的内存缓存区均正常,给远动上送报告对应的内存缓存区溢出。
1.3 后台远动初始化流程分析
对比后台和远动的初始化流程,远动和后台初始化流程和报告控制块写使能过程大致相同,但远动初始化流程会对PurgeBuf报告控制块写使能[2]。
后台报告控制块使能顺序,以DL1005LD1/LLN0$BR$brcbDin01为例。
(1)后台读LLN0$BR$brcbDin01$RptEna,装置返回FALSE;
(2)后台写LLN0$BR$brcbDin01$RptEna,FALSE,装置返回写成功;
(3)后台写LLN0$BR$brcbDin01$OptFlds,值为bit-string:7900,装置返回成功;
(4)后台写LLN0$BR$brcbDin01$TrgOps,值为bit-string:64,装置返回成功;
(5)后台写LLN0$BR$brcbDin01$RptEna,值为True,装置返回成功。
远动报告控制块使能顺序,以DL1005LD1/LLN0$BR$brcbDin01为例。
(1)远动读LLN0$BR$brcbDin01$RptEna,装置返回FALSE;
(2)远动写LLN0$BR$brcbDin01$RptEna,FALSE,装置返回写成功;
(3)远动写LLN0$BR$brcbDin01$OptFlds,值为bit-string:7900,装置返回成功;
(4)远动写LLN0$BR$brcbDin01$TrgOps,值为bit-string:64,装置返回成功;
(5)远动写LLN0$BR$brcbDin03$PurgeBuf,值为:True,装置回复成功;
(6)远动写LLN0$BR$brcbDin01$RptEna,值为True,装置返回成功。
1.4 现象分析
综合SOE报文分析、报告控制块内存分析以及后台远动初始化流程分析,得到如下内容。
(1)装置上送给后台的mms报文的EntryID连续,但上送给远动mms报文的EntryID不连续且存在跳变,导致远动丢失部分遥信;
(2)对比通信程序的内存,装置给后台上送报告对应的内存区正常,但给远动上送报告对应的内存区溢出;
(3)对比后台和远动初始化流程,发现远动初始化流程会写PurgeBuf报告控制块,而后台不会写PurgeBuf报告控制块。
通过分析总结可知,初步怀疑远动初始化流程对PurgeBuf报告控制块写使能,导致装置长时间运行后给远动上送报告的内存区溢出,最终导致装置给远动上送SOE记录的EntryID不连续,部分遥信不上送调度。
2 故障定位
2.1 软件分析
2.1.1 Purgebuf介绍
根据IEC61850-7-2协议,对Purgebuf控制块解释如下:PurgeBuf属性代表应丢弃缓冲事件的请求。
Purgebuf设置为TRUE,BRCB必须丢弃所有尚未发送给客户端的缓冲事件,且丢弃缓冲事件后,该BRCB属性应自动设置为FALSE[3]。
2.1.2 BRCB数据打包流程
现场通信程序正常报告打包缓冲区判断流程如图1所示。
当有新报告需打包上送时,程序先计算新报告占用空间大小,随后判断当前缓冲区空间是否足够存储当前报告,若足够存储则更新缓冲区计数cur_bufsize并将报告加入到发送队列链表等待发送。反之当缓存区空间不足时,若已发送队列不为空,则释放已发送队列占用的空间,继续判断可用的缓冲区是否满足要求,若已发送缓冲区占用空间全部释放仍然无法满足要求,则判断待发送队列是否为空,不为空则释放待发送队列空间,此时释放的待发送队列报告丢失。若将待发送队列及已发送队列占用空间全部释放,仍然无法满足条件,则使用bufsize以外空间存储保证最新报告顺利发送。
结合装置给远动上送报告控制块的内存可知,给远动上送遥信Din的分配内存区大小为20 000,实际使用的内存大小为28 884,属于使用定义缓冲区以外的空间保存报告的情况。
通过分析代码流程数持续累加。装置长时间运行产生大量报告后会导致缓存区计数溢出,超出分配的内存区大小,此时如果只是产生单个报告,使用分配的20 000以外的空间发送报告,报告发送成功后,当前缓冲区计数仍继续累加;如果一次产生多个报告,分配的20 000以外的空间都无法处理这些报告时,将丢失部分未及时发送的报告,表现为现场部分遥信不上送调度。
2.2 故障重现
根据分析可知,使用现场备份,装置上电初始化之后,客户端对Purgebuf报告控制块写使能,按如下步骤进行试验。
(1)装置和IEC 61850客户端建立连接后,频繁做开关变位后,打印缓冲区情况;
(2)断开网线一段时间,客户端和装置通信恢复后,打印报告缓冲区情况,发现发送计数清零,但缓冲区大小未清零,此时当前缓冲区计数已超过最大缓冲区限制;
(3)缓存区溢出后,再次进行开关变位,远动出现报告丢失、缓冲区溢出。
2.3 修复程序验证
客户端与装置中断重连对PurgeBuf报告控制块写使能,只是将发送计数清零而缓存区大小未清零,导致后续进行连续变位时,装置发送报告缓存区溢出。完善通信程序,客户端中断重连时若收到Purgebuf写使能,将发送计数和缓存区大小同时清零,进行如下验证试验(改后程序产生大量变位内存)。
(1)装置更换通信程序后重启,和客户端重连后频繁做开关变位,将当前缓冲区空间使用近20 000;
(2) 断开网线一段时间,当客户端和装置通信恢复,打印报告缓冲区情况,发现发送计数清零,缓冲区大小同样清零,发送计数为1,为客户端上电写总召的报告(缓存区正常清零)。
2.4 定位分析
根据现场异常现象及验证试验,发现远动装置和保护测控装置建立通信连接时会对PurgeBuf报告控制块写使能,此时发送计数被清零,但清缓冲区大小未被清零。装置长时间运行产生大量变位后导致缓存区溢出,同时处理多个报告时会出现报告丢失的情况。
IEC61850规范定义了PurgeBuf报告控制块属性,未明确规定客户端初始化流程是否需要对PurgeBuf报告控制块写使能,为避免在切机或切网过程中出现漏发信号的问题,一般初始化流程均未对PurgeBuf报告控制块写使能,后台也未对PurgeBuf报告控制块写使能,但远动会对PurgeBuf报告控制块写使能。
3 结语
本次通信异常为远动装置初始化流程对PurgeBuf报告控制块写使能,装置长时间运行产生大量变位导致缓存区溢出而漏发报告,后台初始化流程不会对PurgeBuf报告控制块写使能,故现场后台未出现报告丢失的情况。可通过修改通信程序优化IEC 61850报告控制块使能机制,优化内存管理,从而消除缺陷,提高站控层通信稳定性。