当CPU中的程序执行时间超过最大循环时间或者发生时间错误事件(例如,循环中断OB仍在执行前一次调用时,该循环中断OB的启动事件再次发生)时,将触发时间错误中断优先执行OB80。由于OB80的优先级最高,它将中断所有正常循环程序或其它所有OB事件的执行而优先执行。
与时间错误OB80相关的信息当触发时间错误中断时,通过OB80的接口变量读取相应的启动信息。OB80的接口变量及启动信息如图1、表1所示。

图1.OB80接口变量
输入
数据类型
说明
fault_id
BYTE
1602-请求的OB无法启动
1609-发生队列溢出
csg_OBnr
OB_ANY
出错时正在执行的OB的编号
csg_prio
UINT
导致错误的OB的优先级
表1.OB80启动信息
时间错误OB的使用示例:
例如:在OB1中做一个循环跳转程序,可通过设置时间控制该部分程序的循环时间,当该部分程序的执行时间大于CPU设定的最大循环时间时,触发时间错误事件。
1、按如下步骤创建时间错误OB80。如图2所示。

图2.创建时间错误OB80
2、OB80中编程如下图,创建地址为MB100、MW102、MW104的变量用于存储出现时间错误时读取到的启动信息。如图3所示。

图3.OB80中编程
3、在OB1中编写一个循环跳转程序,其循环执行时间可通过变量“set_time”设定。如图4所示。

图4.OB1中编程
4、程序下载,测试:
①如果在监控表中将变量“set_time”设置为160ms,则CPU报故障且没有停机,可从监控表中读取到OB80的启动信息,同时查看故障缓冲区。如图5所示。

图5.测试结果1
②如果在监控表中将变量“set_time”设置为310ms,则CPU立即停机,可从监控表中读取到OB80的启动信息,同时查看故障缓冲区。如图6所示。

图6.测试结果2
注:S7-1200CPU默认最大循环时间为150ms。
重新触发扫描循环看门狗指令“RE_TRIGR”“RE_TRIGR”指令用于在单个扫描循环期间重新启动扫描循环监视定时器。其功能是执行一次“RE_TRIGR”指令,使允许的最大扫描周期延长一个最大循环时间段。
关于指令“RE_TRIGR”的相关详细信息,请查看下面链接中S7-1200系统手册,第8.8.6章:重置周期监视时间。

使用示例:在上个示例中的时间错误OB80块中调用指令“RE_TRIGR”,当OB1中的循环跳转程序执行时间大于CPU设定的最大循环时间时,触发时间错误OB80并执行指令“RE_TRIGR”重新触发扫描循环看门狗。
1、在OB80中编程调用“RE_TRIGR”指令。在“指令基本指令程序控制操作运行时控制”中可以找相关指令。如图7所示。

图7.调用重新触发扫描循环看门狗指令
2、OB80中编程如下图,在程序段2中增加重新触发扫描循环看门狗指令“RE_TRIGR”。如图8所示。
图8.OB80中编程
3、程序下载,测试:
如果在监控表中将变量“set_time”设置为400ms(大于两倍最大循环时间300ms),由于“RE_TRIGR”指令的作用CPU报故障但没有停机,可从监控表中读取到OB80的启动信息,同时查看故障缓冲区。如图9所示。
图9.测试结果3
常见问题哪些情况会触发时间错误中断,以及CPU在这些情况下如何响应?1.超出最大循环时间
当CPU中的程序执行时间超过最大循环时间时如果OB80不存在从未调用过OB80的情况下,CPU不停机,只报错,要求启动OB80调用过OB80,但是后边又删除了OB80,CPU停机,要求启动OB80
如果OB80存在,则CPU执行OB80只报错不停机;
如果同一程序循环超过两倍最大程序循环时间且没有通过指令“RE_TRIGR”复位循环定时器无论OB80是否存在,CPU都将停机
2.请求的OB无法启动
如果循环中断、延时中断请求OB,但请求的OB已经在执行,就会出现请求的OB无法启动这种情况。
3.发生队列溢出
如果中断的出现频率超过其处理频率,就会出现发生队列溢出这种情况。如果OB80不存在,则CPU将切换到STOP模式;如果OB80存在,则执行OB80,CPU将保持为RUN模式。
4.总结:发生任何上述事件都将在诊断缓冲区生成一个描述相应事件的条目。无论是否存在OB80,都将生成诊断缓冲区条目。
免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系