
前言在PLC程序开发时,难免存在一些Bug,平时运行时无异常,但有时这些Bug是致命的缺陷,比如:指令执行时出错,Watchdog时间超时、IO通信故障等,会导致CPU停机,致使整个系统瘫痪。在西门子......
在PLC程序开发时,难免存在一些Bug,平时运行时无异常,但有时这些Bug是致命的缺陷,比如:指令执行时出错,Watchdog时间超时、IO通信故障等,会导致CPU停机,致使整个系统瘫痪。在西门子编程软件STEP7或博途中,是使用组织块,如OB86、OB87、OB121等来避免CPU出现异常情况时停机。那我们来看看,AB大中型PLC发生主故障时避免停机的方法是什么。
解决方法
从上图可以看出,ABPLC发生主故障时,避免控制器停机的方法有三种:
编程依据《LOGIX5000控制器常用过程编程手册》,中文,官方出版号:1756-PM001H-ZH-P.

1.打开Studio5000,新建一个项目FaultDeal,创建一个自定义数据类型UDT_MajorFaultRecord,用于存储主故障的信息:故障时间戳、故障类型、故障代码等。

2.在控制器标签域内新建3个变量:
数据类型均为UDT_MajorFaultRecord,用于存储主故障信息。

一、为程序创建故障例程
这种方法主要是针对指令执行出现故障,比如:在将配方号用作间接地址的系统中,类型错误的编号可能产生主故障(类型4,代码20)。要使整个系统不关机,需创建故障例程清除该(类型4,代码20)主故障。实现方法如下:
1.在控制器标签域内新建3个变量:Number,数据类型DINT;X,REAL[100];X_Point,REAL.

2.在连续任务中,编写一段间接寻址的程序.

3.为该程序创建故障例程Fault,该例程不需要在主程序中调用,只需为将其功能分配为Fault,见图中编号3,创建好以后,在里面编写清除故障的程序,详见下图.

4.其中,获取主故障信息使用GSV指令,清除主故障使用SSV指令,详细设置项见下图.

5.测试情形1:间接寻址Number的范围在0—99,运行正常,不会发生主故障.

6.测试情形2:使用AFI指令屏蔽故障清除程序,当间接寻址Number=100,超出X,REAL[100]的最大维度99时,产生主故障,导致CPU报警并停机。

7.测试情形3:启用故障清除程序,当间接寻址Number=100,超出X,REAL[100]的最大维度99时,产生主故障,被故障例程记录并清除,CPU正常运行,无停机现象发生。

二、为控制器故障处理程序创建例程
1.这种方法主要是针对控制器出现故障,比如:任务Watchdog时间超时,将产生主故障(类型6,代码1),要使控制器不停机,需创建控制器故障处理程清除该主故障。
2.创建过程及编写程序,详见如下图,在该例程中直接编写清除主故障的程序,当然也可以新建多个子程序。

3.该段程序已经实测可行,将看门狗时间改小就可以测试了,测试效果就不写了。
三、为启动处理程序创建例程
1.这种方法主要是针对控制器以运行模式启动产生的主故障(类型1,代码1),要使控制器不停机,需创建启动处理程序清除该主故障。
2.创建过程及编写程序,详见如下图,在该例程中直接编写清除主故障的程序即可。

3.测试说明,该段程序在1769-L18ERM-BB1B、5069-L33OER中测试过,当CPU以运行模式上电启动时,是不会产生主故障(类型1,代码1)的,不知道是我对(控制器以运行模式启动)理解错误,还是方法不对,若各位知道,请一定告知,在此谢过!
结束语综上所述,本文详细的介绍了AB大中型PLC发生主故障时避免停机的三种方法。不过,要避免控制器异常停机,本质性的做法是完善程序、优化设置。所以,建议在设备调试和试运行阶段不要使用程序来清除故障,这样才能及时发现问题、解决问题。