工控机软件抗干扰技术

分享到:
点击量: 215984 来源: 深圳市辰沃科技有限公司
工控机软件抗干扰技术
工业现场各种动力设备在不断地启停运行。使得现场环境恶劣,电磁干扰严重。工业控制计算机在这样的环境里面临着巨大的考验。可以说我们研制的工业控制系统能否正常运行,并且产生出应有的经济效益,其抗干扰能力是一个关键的因素。因此,除了整个系统的结构和每个具体的工控机都需要仔细设计硬件抗干扰措施之外,还需要注重软件抗干扰措施的应用。我们在多年的工业控制研究中,深感工业现场意外因素太多并且危害很大。有时一个偶然的人为或非人为干扰,例如并不很强烈的雷击,就使得我们自认为无懈可击的硬件抗干扰措施无能为力,工控机死机了(即程序跑飞了)或者控制出错了(此时
CPU内部寄存器内容被修改或者RAMI/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数据被冲毁;
* RAM
中某片数据被冲毁;
*
个别数据被冲毁。因此需要经常监视RAM的正确性。在工业控制系统中,RAM的大部分内容是为了进行分析、比较而临时存放的,不允许丢失的数据只占极少部分。在这种情况下,除了这些不允许丢失的数据外,其余大部分内容允许短时间被破坏,*多只引起系统的一个很短时间的波动,很快能自动恢复正常。因此,在工控软件中,只要注意对少数不允许丢失的数据保护,一般常用的方法有校验法设标法。这两种方法各有千秋,校验法比较繁锁,但查错的可信度高。设标法简单,但对数据表中个别数据冲毁的情况,查错则无难为力。在编程中一般应综合使用,其具体做法为:
*
RAM工作区重要区域的始端和尾端各设置一个标志码“0” “1”
*
RAM中固定不变的数据表格设置校验字。在程序的执行过程中,每隔一定的时间通过事先设计的查错程序来检查其各标志码是否正常,如果不正常,则利用数据冗余技术通过抗干扰处理程序来进行修正;冗余数据表的一般设计原则是:
*
各数据表应相互远离分散设置,减少冗余数据同时被冲毁的概率。
*
数据表应尽可能远离栈区,减少由于操作错误造堆栈被成数据冲的可能 。上述对RAM区域的恢复处理方法,在不同的应用系统中应根据的具体情况进行取舍3 实时控制系统的互监视法 在实时控制系统中,人们关注的问题是能否确保正常的控制状态。如果干扰进入系统,会影响各种控制条件、造成控制输出失误。为了确保系统**可以采取下述软件抗干扰措施:3.1.软件冗余对于条件控制系统,将控制条件的一次采样、处理控制输出,改为循环采样、处理控制输出。这种方法具有良好的抗偶然因素干扰作用。
3.2.
设置当前输出状态寄存单元当干扰侵入输出通道造成输出状态破坏时,系统可以及时查询当前输出状态寄存单元的输出状态信息,及时纠正错误的输出状态。
3.3.
设置自检程序在计算机系统内的特定部位或某些内存单元设状态标志,在运行中不断循环测试,以保证系统中信息存储、传输、运算的高可靠性。
4
其它常采用的软件抗干扰方法
4.1
陷井法 有时意想不到的干扰,破坏了中断和所有程序的正常运行。此时PC值可能在程序区内,也可能在程序区之外,要使其能够自恢复正常运行,只有依赖于广布陷井的绝招了。 这里所谓的陷井,是指某些类型的CPU提供给用户使用的软中断指令或者复位指令。例如,Z80指令RST 38H,其机器码为FFHCPU执行该指令时,则将当前程序计数器PC的值压入堆栈,然后转到0038H地址执行程序。如果把0038H作为一个重启动入口,则机器就可以恢复新的工作了。再例如,INTEL809880198系列的复位指令RST,机器码也为FFHCPU执行该指令时,其内部进行复位操作,然后从2080H开始执行程序。当然,80198系列还有更多的非法操作码可作为陷井指令使用,这时只需要在2012H的一个字的中断矢量单元里安排中断入口,并且编制一个处理非法操作码的中断服务程序,一遇非法操作码就能进行故障处理。作者多年的经验表明,陷井不但需要在ROM的全部非内容区、RAM的全部非数据区设置,而且在程序区内的模块之间广泛布置。一旦机器程序跑飞,总会碰上陷井,立即就可以救活机器了。
4.2
重复功能设定法
工控机的很多功能的设定,通常都是在主程序开始时的初始化程序里设定的,以后再也不去设定了。这在正常情况下本无问题。但偶然的干扰会改变CPU内部的这些寄存器或者接口芯片的功能寄存器,例如,把中断的类型、中断的优先级别、串行口、并行口的设定修改了,机器的运行肯定会出错,因此,只要重复设定功能操作不影响其当前连续工作的性能,都应当纳入主程序的循环圈里。每个循环就可以刷新一次设定,避免了偶然不测发生。对于那些重复设定功能操作会影响当前连续工作性能的,要尽量想法找机会重新设定。例如串行口,如果接收完某帧信息或者发送完某帧信息之后,串口会有一个短暂的空闲时,就应作出判断并且安排重新设定一次的操作。
4.3
重要数据备份法 工控机中的一些关键数据,应当有至少有两个以上的备份副本,当操作这些数据时,可以把主、副本进行比较,如其改变,就要分析原因,采取预先设计好的方法处理。还可以把重要数据采用校验和或者分组BCH校验的方法进行校验。这两种方法一并使用则更可靠。
4.4
系统死锁的软件对策 在工业控制系统中,A/DD/A,显示等输入/输出接口电路是必不可少的。这些接口 CPU之间采用查询或中断方式工作,而这些设备或接口对干扰很敏感,干扰信号一 旦破坏了某一接口的状态字后,就会导致CPU误认为该接口有输入/输出请求而停止 现行工作,转去执行相应的输入/输出服务程序。但由于该接口本身并没有输入/ 出数据,从而使CPU资源被该服务程序长期占用,而不释放,其它任务程序无法执 行,使整个系统出现死锁。对这种干扰造成的死锁问题,在软件编程中, 可采用时间片的方法来解决。其具体步骤为:
*
根据不同的输入/输出外设对时间的要求,分配相应的*大正常的输入/输出时 间。
*
在每一输入/输出的任务模块中,加入相应的超时判断程序。这样当干扰破坏了接 口的状态造成CPU误操作后,由于该外设准备好信息长期无效,经一定时间后,系统 会从该外设的服务程序中自动返回,保证整个软件的周期性不受影响,从而避免死锁情况的发生。
4.5
数据采集误差的软件对策根据数据受干扰性质及干扰后果的不同,采取的软件对策各不相同,没有固定的模式。对于实时数据采集系统,为了消除传感器通道中的干扰信号,在硬件措施上常采取有源或无源RLC网络,构成模拟滤波器对信号实现频率滤波。同样,运用CPU的运算、控制功能也可以实现频率滤波,完成模拟滤波器类似的功能,这就是数字滤波。在许多数字信号处理专著中都有专门论述,可以参考。随着计算机运算速度的提高,数字滤波在实时数据采集系统中的应用将愈来愈广。在一般数据采集系统中,可以采用一些简单的数值、逻辑运算处理来达到滤波的效果。用的方法有算术平均值法、比较取舍法、中值法、一阶递推数字滤波法等。具体见本版的有关文章。
5
结束语
软件抗干扰的内容还有很多,例如,检测量的数字滤波、坏值剔除;人工控制指令的合法性和输入设定值的合法性判别等等,这些都是一个完善的工业控制系统必不可少的,有关的文章可以参阅本版的其他文章。 工业控制是计算机的*重要的应用领域,也是计算机的*艰难的应用环境。我从多年来的研究经验认为:工业控制计算机的抗干扰性能根本在硬件结构,软件抗干扰只是一个补充。硬件的设计应当尽可能的完善,不能轻易降低标准,让软件去补救!而软件的编制则要处处考虑到硬件可能的失效,可能受到的干扰等种种问题,在保证实时性、控制精度和控制功能的前提下,尽力提高系统的抗干扰性能。要考虑得很细致,努力赋予软件高度的智能。这样,软件才是**的。把硬件和软件有机的结合起来,一个经得起长期现场考验的尽可能完善的工业控制系统才能实现。