包明磊,姚艳松
(国电南京自动化股份有限公司,南京 210061)
电力系统微机继电保护装置作为保证电力系统设备安全运行的自动装置,对于嵌入式系统自身的可靠性有着很高的要求。多年来,围绕着保护装置嵌入式系统的抗干扰技术,以及其受干扰后的自我恢复,在硬件和软件等方面积累了多种方法。这些方法相互结合,配合使用,有效地提高了系统的可靠性与抗干扰能力[1-2]。
看门狗技术是最常见的抗干扰技术。看门狗分为硬看门狗和软看门狗;硬看门狗采用“看门狗”电路,即通过定时器对任务在运行时间上加以约束;软看门狗采用处理器内部定时器,把任务的最大理论运行时间作为时间约束[2-4]。
以往,在多任务系统中一般设置一个优先级最高的任务作为监视器,对系统中运行的所有任务进行监控,只要有一个任务出现故障,该监视任务就延迟喂狗,使硬看门狗溢出,重启系统。使用这种方法需要额外消耗嵌入式系统的信号量资源和任务运行时间,减少保护算法的运行时间,且对监视任务要求较高。当中断运行时间过长时,无法及时恢复[3]。
本文介绍一种多任务硬看门狗容错技术,通过这种技术,保护装置嵌入式软件的所有任务(包括中断)都可以互相无干扰地对硬看门狗喂狗,可以在确保嵌入式系统运行效率的基础上,保证系统的安全可靠。
多任务硬看门狗容错技术是以硬看门狗芯片为基础,以FPGA为核心,以外围电路为辅助,充分考虑保护装置的需求,共同构成一个可实现监视、告警、自恢复等功能的抗干扰系统,具体原理如图1所示。保护装置一般需要运行7~10个任务和2~3个定时中断,每个任务和中断均需要确保硬看门狗喂狗可靠,FPGA中的“多任务喂狗监视系统”监视这些任务的喂狗信号,实时统计每个喂狗信号的状态,只有当所有喂狗信号均有效时,该系统才对硬看门狗发出实际的喂狗信号。若某个任务或者中断出现故障,该系统会自动停止对硬看门狗的喂狗;如果硬看门狗在设定时间内没有被喂狗,则发出RESET信号重启嵌入式系统。此外,本技术包含一个计数器系统,负责统计复位信号的次数,当连续多次出现复位信号,则说明嵌入式软件发生严重故障,该系统发出告警信号通知维修和更换,确保保护装置的可靠性。
图1 多任务硬看门狗容错技术原理框图
在实际应用中,主CPU和FPGA之间可以通过总线相连,各任务和中断的喂狗信号可以以命令的形式对“多任务喂狗监视系统”进行喂狗。在整个系统的硬件设计中,计数器告警电路是个难点,本文给出了具体的硬件原理图,如图2所示。
图2 计数器告警电路原理图
硬看门狗MAX823S是Maxim公司推出的小体积、低功耗的看门狗芯片。该芯片若在1.6s内没有被触发WDI,则引 脚 发 出 200ms的 低 电 平 信 号[4]。SN74HC393DT为计数器,SN74HC32D为或门。MAX823S的WDI引脚接收“多任务喂狗监视系统”的喂狗信号引脚产生的复位信号不仅重启系统,同时接入SN74HC32D的输入端。SN74HC32D的输出接计数器SN74HC393DT的CLK引脚,SN74HC393DT的Q2引脚可以发出告警信号,同时接入SN74HC32D的输入端作为闭锁信号。SN74HC393DT的MR引脚可以接入CPU的PIO引脚,由CPU对其定时初始化。
当嵌入式系统正常工作的时候,CPU可以不停地发送计数器清零信号、复位告警信号;当嵌入式系统发生故障时,硬看门狗在设定时间内没有收到“多任务喂狗监视系统”的喂狗信号 WDI,发出的复位信号产生脉冲,计数器对这个脉冲进行计数;当嵌入式系统连续发生故障无法恢复时,一方面无法发出清零信号对计数器清零,另一方面硬看门狗持续发出复位信号,当复位信号的次数超过4次时计数器SN74HC393DT的Q2引脚有效,发出告警信号,同时该信号将闭锁CLK的输入信号,防止计数器溢出。
多任务喂狗监视系统是整个容错技术的核心,考虑到保护装置的需求,要求该系统运算速度快、延时小、支持多任务并行处理。由于FPGA兼容了PLD和通用门阵列的优点,除了具有体系结构和逻辑单元灵活、集成度高,以及电压适用范围宽等特点外,还具有设计开发周期短、设计制造成本低、移植方便等优点。为了保证监视系统的实时性和可移植性,本设计选用FPGA实现该系统[5]。
在对FPGA芯片进行开发编程时,由于Verilog HDL语言且具有设计技术齐全、方法灵活、支持广泛、硬件描述能力强、易于共享和复用等优点,因此多任务喂狗监视系统使用Verilog HDL语言进行开发[6]。
根据容错技术的设计思路,考虑到实用性、可靠性和拓展性,监视系统的设计重点解决以下问题:
① 该系统可以灵活设置需要监视的喂狗命令接点(一个命令接点受一个任务或者中断控制),并确保禁止的喂狗命令接点不会影响WDI信号的输出;
② 该系统要具有自喂狗功能,即在配置不需要监视任何喂狗命令接点时,还能够自行喂狗,防止系统崩溃;
③ 该系统应能够方便可靠地增减可配置的喂狗命令接点的数量。
针对上述问题,本设计采用模块化设计的思路,将系统设计分成两个部分:命令接点监视模块和WDI产生模块。
命令接点监视模块可以使能和监视指定的喂狗命令接点。它是一个公共模块,输入量为初始化信号rst、清零信号clr、喂狗命令接点地址等等,输出量是使能状态enable和喂狗状态status。
当嵌入式软件需要使能或者禁止某个喂狗命令接点时,该模块可以通过命令解析改变使能状态enable;当嵌入式软件通过命令对某个喂狗命令接点喂狗时,该模块改变喂狗状态status;此外该模块还可以接收clr信号对喂狗状态进行复位。其核心代码如下所示:
由最后一条代码可见,由于喂狗状态受使能状态的控制,因此当禁止某个喂狗命令接点时,该命令接点的喂狗状态可以保持有效,从而确保禁止的喂狗命令接点不会影响到WDI信号的输出。
WDI产生模块负责调用命令接点监视模块,监视每一个喂狗命令接点,统计所有喂狗命令接点的喂狗状态,并决定是否发出WDI信号,软件流程如图3所示。
图3 WDI产生模块的软件流程
其中,如何识别喂狗状态并发出WDI信号是个技术关键点,本系统定义一个喂狗信号总状态TotalStatus,它是由各个喂狗命令接点的喂狗状态“与”门组合而成。当判断该状态有效时,则发出一段时间的WDI信号,并清除所有喂狗命令接点的喂狗状态,启动下一轮的监视;当禁止监视所有的喂狗命令接点时,该状态恒定有效,一直发出WDI信号。
为了实现上述功能,本系统事先产生一个固定周期的脉冲波形WDIPulse,并设计一个由TotalStatus触发的单稳信号 WDIGate,由 WDIGate闭锁和使能 WDIPulse的输出达到控制WDI信号的目的。具体的核心代码如下所示:
可见,TotalStatus的上升沿可以触发至少8个clock的单稳信号。在这段时间内系统可以输出WDI信号对硬看门狗喂狗,在TotalStatus有效后的第7个clock时,模块清除各个喂狗命令接点的喂狗状态,确保可以监视下一轮喂狗信号。当禁止了所有的喂狗命令接点时,由于TotalStatus不受clr信号控制,使得 WDIGate一直有效,系统自行喂狗,防止系统崩溃。当要增加或者删减喂狗命令接点数量(目前为20个)的时候,只需要修改程序,增加或者删减相应的寄存器和调用代码即可,方便且安全可靠。由于FPGA的并行处理能力,增加监视的接点数量,系统延时不变。
为了验证算法中监视和喂狗的效果,我们使用仿真工具对多任务喂狗监视系统进行了验证仿真,其仿真结果如图4所示。
图4 多任务喂狗监视系统的仿真结果
图4中,监视了4个喂狗命令接点。其中,WDI0为定时中断的喂狗信号,WDI1~WDI3为普通任务的喂狗信号。在这轮监视中,WDI0的喂狗状态在t1时有效,WDI1的喂狗状态在t2时有效,则喂狗信号总状态TotalStatus在t2时有效,并触发单稳信号WDIGate。在单稳信号有效期间,WDI输出;同时,TotalStatus信号在t3时清除了各个喂狗命令接点的喂狗状态,启动下一轮监视。
仿真结果表明,多任务喂狗监视系统可以有效监视各任务发出的喂狗信号,并根据喂狗信号的状态发出正确的WDI信号,能够满足嵌入式系统对可靠性的要求。
本文介绍了一种应用于电力系统继电保护装置内的基于FPGA的多任务硬看门狗容错技术,实现了对嵌入式系统多任务的硬看门狗监视。文章在阐述了该技术的设计原理基础上,给出了具体的软硬件实现方案。该技术与传统的硬看门狗和多任务软看门狗技术相比,有以下优点:
① 可直接监视定时中断和所有任务,监视范围广;
② 无需消耗嵌入式软件额外的信号量资源和任务运行时间,且每个任务的最大喂狗间隔时间相同;
③ 配置灵活,可方便增加监视的任务数量,理论上无上限,且系统延时不变;
④ 对严重故障的嵌入式软件,系统可以发出告警信号,便于维修和更换;
⑤ 可以自监视,可靠性高。
多任务硬看门狗容错技术已被应用于最新的继电保护装置中,测试结果表明,该技术可以大大提高保护装置嵌入式系统的可靠性,具有较高的应用参考价值。
[1] 何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2000.
[2] 易丽华.“看门狗”技术的实现[J].仪表技术,2011(7):55-57.
[3] 戴积发,胡玉霞,李绪勇,等.基于uC/OS-II操作系统的多任务看门狗设计[J].衡水学院学报,2009,11(4):31-33.
[4] 王璐,王楠.软硬件结合实现的“看门狗”技术[J].现代电子技术,2002(3):43-45.
[5] 田耕,徐文波.Xilinx FPGA开发实用教程[M].北京:清华大学出版社,2008.
[6] 夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.