3.1用监视定时器技术提高巡检装置的可靠性
监视定时器(Watchdog)技术现在使用得非常广泛,技术已较为成熟,支持手段也很多。目前,各处理器的生产厂家几乎都在生产内置有看门狗定时器的单片机产品,市场上还有许多独立的看门狗定时器芯片可供选择。采用监视定时器技术后,一旦程序跑飞,系统立即会被监视定时器复位掉,从头重新启动系统,从而退出不正常的运行状态[5],但是这样使用时必须注意系统的可重入性。所谓系统的可重入性可以这样来定义:当一个微处理器系统在重新复位启动以后,系统对外的执行操作不因重新启动而改变,从而保证整个系统对外操作的连续性和顺序性,也就是系统最终的安全性和可靠性。对于一个系统,如果它对外的控制操作只与系统当前的输入状态有关,那么这个系统就几乎具有完全的重入性能;相反,如一个系统对外的输出操作不仅与系统当前的输入相关,而且与系统的历史状态有关,那么如果系统重入时系统的历史状态没有保留或者历史状态被破坏,那么此时系统对外的操作就可能完全是错误的,这样的系统虽然在看门狗定时器的作用下退出了不正常的运行状态,但重入的状态也不会正常,那么这样的系统也只能是病态的系统,不能使用。因此,对于采用了看门狗电路来提高可靠性的系统,必须严格保证系统的可重入性。对于与历史状态相关的系统,为保证其重入性能,可以把其历史状态保存在系统的RAM中,即在单片机系统的内存或其扩展的外部存储器中,开辟出专用于保存历史状态的缓冲区。在确保系统不掉电的情况下,这些历史数据在系统重入时可以被重新使用。如果不能保证系统的电源稳定,还必须考虑采用备用电池供电,以保证 RAM数据的安全稳定;对于时间不是太敏感的系统,还可以采用E2PROM或Flash ROM来保存历史数据。
根据试验故障情况,对增加看门狗功能的智能模块进行了调试,并制定了验证试验方案。为验证不同厂家看门狗芯片工作情况,选用了两种芯片MAX706和TPS3705,其中1#智能模块状态不变,将2#智能模块的复位芯片MAX708更换为带看门狗功能的复位芯片MAX706,将3#智能模块的复位芯片MAX708更换为带看门狗功能的复位芯片TPS3705,重新校准密度后,巡检装置经过1344小时连续运行,2#、3#智能模块工作正常,证明采用监视定时器技术提高巡检装置的可靠性是可行的。
3.2 采用软件抗干扰技术提高巡检装置的可靠性
采用监视定时器技术提高巡检装置的可靠性虽然可行,但没有从根本上解决提高巡检装置可靠性的问题。一个系统可能由于存在着各种干扰及不稳定因素而出现运行故障。针对巡检装置程序跑飞的故障,可以从程序的设计方面采取一些措施[6]。如抑制系统的干扰信号而经常采用的软件滤波技术、软件冗余设计技术,还可以采用软件锁设计技术、程序陷阱设计技术等方法。当系统在干扰信号的作用下发生程序跑飞时,程序指针有可能指向两个区域:一种可能正好转到程序区的其他地址进行执行,一种可能转移到程序空间的盲区进行执行。
当程序指针转到程序区的其他地址进行执行时,可以采取软件锁加以抑制。例如为保证对外操作的安全,在软件锁设计中,对于每一个相对独立的程序块在其执行以前或执行中对一个预先设定好的密码进行校验,只有当这一密码相符时执行才真正有效,也只有程序是通过正常的转移途径转移过来时,才会由上一级的程序设定正确的密码;否则,会根据校验错而使程序强制发生转移,错误状态得到处理,并恢复程序的正常运行状态。例如在巡检装置软件设计中,采取的软件锁:
SUB-PRO1:PUSH ACC
MOVE A,#S-CODE1
CJNE A,SAFE-CODE,ERR1
POP ACC
… ;块处理部分
MOVE SAFE-CODE,#S-CODE2
SJMP SUB-PRO2
ERR1: POP ACC
… ;错误处理部分
SUB-PRO2:PUSH ACC
MOVE A,#S-CODE2
CJNE A,SAFE-CODE,ERR2
POP ACC
… ;块处理部分
MOVE SAFE-CODE,#S-CODE3
SJMP SUB-PRO3
ERR2: POP ACC
… ;错误处理部分
SUB-PRO3:PUSH ACC
MOVE A,#S-CODE3
CJNE A,SAFE-CODE,ERR3
POP ACC
… ;块处理部分
MOVE SAFE-CODE,#S-CODE4
SJMP SUB-PRO3
ERR3: POP ACC
… ;错误处理部分
为了防止程序跑飞到程序盲区进行执行,可以采用程序陷阱设计技术。一般情况下,对于程序代码空间以外的ROM空间的处理是采用空置的方法。固化程序时,这些空置空间被全写为1或全写为O,这样程序跳入这一区域将不可控。为了捕获跳入此区的程序,可以采用程序陷阱来予以实现。在巡检装置中,通过在程序空间未被使用的区域放置下面的陷阱程序:
CAP-PRO:NOP
NOP
…
NOP
LJMP START
… ;
用上面程序段重复覆盖剩余的程序空间,陷阱程序里的每一段含有的NOP指令的多少对于捕获的成功率及捕获的时间有影响。NOP指令放置的越多捕获的成功率 就越高,但花费的时间就越长,程序失控的时间也越长;否则,情况则相反。因为只有程序跳转到NOP指令或LJMP指令的首个字节时,才能成功捕获;当程序跳到LJMP指令的后两个字节时,可能会出现不可预知的执行结果。被捕获的程序如果跳到程序的起始处执行时,还必须考虑程序的可重入性。
4 提高巡检装置可靠性的其他方法的探讨
4.1 采用备份系统提高可靠性
备份系统在许多重要控制系统中已被广泛使用,但多在工控机中或较大型的系统中采用。备份系统可根据具体的情况分为在线备份系统和后备备份系统。对于在线备份系统,系统中的两个CPU均处于工作状态,有可能两个CPU处在对等的位置,也可能一个处在主CPU的位置,而另一个处在从CPU的位置。在对等的情况下,两个CPU共同决定系统对外的操作,任何一个CPU出错都将引起对外操作的禁止。对于一主一从的情况,往往是主CPU负责系统控制逻辑的实现,而从CPU负责对主CPU的工作状态进行监控。当监控到主CPU工作异常时,从CPU通过强行复位主CPU等操作使主CPU恢复正常,同时,为确保从CPU工作正常,从CPU的工作状态也被主CPU监控;当从CPU的工作状态不正常时,主CPU也可采取措施使从CPU恢复正常工作,即实现互相监控的目的。在具体的设计中,主从CPU进行信息交换的途径非常灵活、多样。例如,采用公用的存储器来实现监控信息的交换(如把公用信息存入双口RAM),采用握手信号的方法实现监控信息的交换等。
4.2 提高系统可靠性的综合设计方法
在一个具体的系统设计中,为提高系统的稳定性和可靠性,往往要综合采用多种措施来达到满意的效果,这是全面提高系统可靠性的必由之路。系统不同,其具体的控制对象就可能不同,运行环境也会千差万别,因而其面临的主要干扰问题就不同,采取的措施也就不同;但仅采取某项措施就希望全面提高系统的可靠性常常是不现实的,而要针对主要问题综合采取多项措施联合提高可靠性.