计算机软件抗干扰技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工控计算机软件抗干扰技术
0引言
工业现场各种动力设备在不断地启停运行。使得现场环境恶劣,电磁干扰严重。工业控制计算机在这样的环境里面临着巨大的考验。可以说我们研制的工业控制系统能否正常运行,并且产生出应有的经济效益,其抗干扰能力是一个关键的因素。因此,除了整个系统的结构和每个具体的工控机都需要仔细设计硬件抗干扰措施之外,还需要注重软件抗干扰措施的应用。我们在多年的工业控制研究中,深感工业现场意外因素太多并且危害很大。有时一个偶然的人为或非人为干扰,例如并不很强烈的雷击,就使得我们自认为无懈可击的硬件抗干扰措施无能为力,工控机死机了(即程序跑飞了)或者控制出错了(此时CPU内部寄存器内容被修改或者RAM和I/O口数据被修改)。这在某些重要的工业环节上将造成巨大的事故。使用软件抗干扰措施就可以在一定程度上避免和减轻这些意外事故的后果。软件抗干扰技术就是利用软件运行过程中对自己进行自监视,和工控网络中各机器间的互监视,来监督和判断工控机是否出错或失效的一个方法。这是工控系统抗干扰的最后一道屏障。
1工控软件的结构特点及干扰途径
在不同的工业控制系统中,工控软件虽然完成的功能不同,但就其结构来说,一般具有如下特点:
* 实时性:工业控制系统中有些事件的发生具有随机性,要求工控软件能够及时地处理随机事件。
* 周期性:工控软件在完成系统的初始化工作后,随之进入主程序循环。在执行主程序过程中,如有中断申请,则在执行完相应的中断服务程序后,继续主程序循环。
* 相关性:工控软件由多个任务模块组成,各模块配合工作,相互关联,相互依存。
* 人为性:工控软件允许操作人员干预系统的运行,调整系统的工作参数。在理想情况下,工控软件可以正常执行。但在工业现场环境的干扰下,工控软件的周期性、相关性及实时性受到破坏,程序无法正常执行,导致工业控制系统的失控,其表现是:
* 程序计数器PC值发生变化,破坏了程序的正常运行。PC值被干扰后的数据是随机的,因此引起程序执行混乱,在PC值的错误引导下,程序执行一系列毫无意义的指令,最后常常进入一个毫无意义的“死循环”中,使系统失去控制。
* 输入/输出接口状态受到干扰,破坏了工控软件的相关性和周期性,造成系统资源被某个任务模块独占,使系统发生“死锁”。
* 数据采集误差加大。干扰侵入系统的前向通道,叠加在信号上,导致数据采集误差加大。特别是当前向通道的传感器接口是小电压信号输入时,此现象更加严重。
* RAM数据区受到干扰发生变化。根据干扰窜入渠道、受干扰数据性质的不同,系统受损坏的状况不同,有的造成数值误差,有的使控制失灵,有的改变程序状态,有的改变某些部件(如定时器/计数器、串行口等)的工作状态等。
* 控制状态失灵。在工业控制系统中,控制状态的输出常常是依据某些条件状态的输入和条件状态的逻辑处理结果而定。在这些环节中,由于干扰的侵入,会造成条件状态错误,致使输出控制误差加大,甚至控制失常。
2 工控计算机实时控制软件运行过程中的自监视法
自监视法是工业控制计算机自己对自己的运行状态的监视。
一般的工控机CPU内部具有Watchdog Timer,使用定时中断来监视程序运行状态。定时器的定时时间稍大于主程序正常运行一个循环的时间,在主程序运行过程中执行一次定时器时间常数刷新操作。这样,只要程序正常运行,定时器不会出现定时中断。而当程序运行失常,不能及时刷新定时器时间常数而导致定时中断,利用定时中断服务程序将系统复位。在8031应用系统中作为软件抗干扰的一个事例,具体做法是:
* 使用8155的定时器所产生的“溢出”信号作为8031的外部中断源INT1。用555定时器作为8155中定时器的外部时钟输入;
* 8155定时器的定时值稍大于主程序的正常循环时间;
* 在主程序中,每循环一次,对8155定时器的定时常数进行刷新;
* 在主控程序开始处,对硬件复位还是定时中断产生的自动恢复进行分类判断处理。
然而,这并不等于万无一失。例如,① Watchdog电路本身失效;②设置Watchdog的指令正好在取指令时被干扰而读错;③ Watchdog“发现”程序跑飞之后,其产生的复位脉冲或者NMI申请信号正好被干扰而没奏效等等。虽然以上的导致Watchdog失效的因素的几率很小,但总是存在的。另一个方面,还有相当数量的工业控制计算机没有Watchdog电路。因此,以下重点讨论的软件自监视法就势在必行了。
2.1 随时监督检查程序计数器PC的值是否超出程序区
计算机正常运行,其PC值一定在程序区内。如果PC值跑出程序区,计算机肯定已发生了程序跑飞。检查程序计数器PC值是否在程序区内的方法,是在一个经常要产生外部中断的某个中断服务程序中,读取转入该中断时压入堆栈的断点地址。如果该地址在程序区内,则认为PC值正常,否则一定是程序跑飞
了。此时,程序跳转到机器的重启动入口或者复位入口,机器重新启动。于是机器又自救活了。如果没有一个这样合适的中断源,可以专门设置一个定时中断或者几个定时中断,在中断服务程序中检查PC值是否合法,一旦发现不对就立即转入机器的重启动入口。定时器中断的时间常数,可视机器的繁忙程度和重要性设定,一般从几个毫秒到几十毫秒都可以。
这个方法的局限性是不能查出PC值在程序区内的乱跳,即此时PC值虽受干扰却并没有超出程序区,而是错位乱拼指令而构成一些莫名其妙的操作,或者死循环。
2.2 主循环程序和中断服务程序相互监视
每个工控机的主循环程序和中断服务程序都有一定的运行规律可循。因此可以设计出主循环程序与各中断服务程序、各中断服务程序之间的相互监视。每个监视对要定义一个RAM单元,依靠对其计数/清零的方法表达相互监视信息。例如,某工控机的主循环程序循环一次最长时间为80 ms,它的一个定时中断时间常数为10 ms,当我们安排该定时中断监视主循环程序运行时,可以每次10 ms中断对该RAM单元加1计数,而主循环程序每循环一次对该RAM单元清零。因此,正常运行时,这个监视计数RAM单元的计数值不可能≥9,如果10 ms定时中断服务程序发现其计数值≥9,就知道主循环程序已经被干扰跑飞或出现死循环,于是就跳转到机器的重启动入口,重新恢复运行。使用这个方法,如果设计得当的话,是非常有效的。我们多年的经验是:主循环程序被干扰跑飞可能性最大,中断服务程序越短小越不易跑飞。主循环程序和中断服务程序以及中断服务程序之间的相互监视,应当多设计几个监视对会更好。
2.3 随时校验程序代码的正确性
工业控制计算机的实时控制程序代码通常都采用EPROM固化运行,一般不易发生被改写的情况。但成年累月运行,我们有时也会发现极个别的单元出错。其原因可能是芯片质量问题或者因静电、雷击干扰等造成的改写。程序出错了,将直接造成运行错误或者无法运行。校验的方式可以采用累加和校验或者BCH校验(一种CRC校验方法)。当采用BCH校验时,其分组附加的冗余字节可以集中在程序区之外的某个EPROM区域里。校验方法是在某个短小而且经常发生的中断服务程序内安排一个校验模块,可以设计成每次循环校验一部分程序代码,分若干次校验完成;或者当代码少,任务轻松时也可以一次校验完。如果发现校验错,应当立即向工控网络主站报告或者以自身报警的办法告知操作人员,以便及时处理。这个方法的局限性是被损坏的程序代码不是校验程序块,而且以该中断还可以正常响应为前提。由于该中断服务程序短小,通常还是有很大的概率自监视程序代码的正确性。
2.4 随时校验RAM的正确性
在实时控制过程中,干扰造成比较严重的危害之一就是冲毁RAM中的数据,由于RAM中保存的是各种原始数据、标志、变量等,如果被破坏,会造成系统出错或无法运行,根据数据被冲毁的程度,一般可分为三类:* 整个RAM数据被