定时中断真的像你想的那样运行吗 会员
1
1147
20
6
- 技术文章
前言:
定时中断,很多人都用过,在S7-300时代代表是OB35,而在S7-1500时代,代表是OB30,意思是每隔固定长的时间执行一次程序,例如每隔100ms执行一次定时中断组织块中的程序,一般常用在PID计算,或者是精确计时等场合。
故障描述:
在正常生产过程,CPU 1516-3 PN/DP的诊断缓冲区忽然出现大量的相同事件:“超出所允许的未决OB36事件数 – 时间错误,请求启动OB80”,以及“OB36事件缓冲区溢出 – 将继续执行功能(系统响应)”,如图1所示。虽然没有导致 CPU 停机,但是一是影响了其他事件在诊断缓冲区的显示,二是OB36缓冲区溢出似乎导致OB36内的程序的循环执行受到了影响。
图1 诊断缓冲区
故障背景:
CPU 1516-3 PN/DP的OB36是每隔10ms执行一次的定时中断。
故障分析:
1) 通过诊断缓冲区提示,“OB36事件缓冲区溢出”,于是打开了OB36的属性设置页面,在OB36的属性中对事件队列进行了如图2的设置。待排队的事件:1,过载事件将在诊断缓冲区中留下一次记录:启用时间错误,时间错误的事件阈值:1。
图2 OB36 事件队列设置
缓冲区溢出对应着组态的过载事件,意思是循环中断出现了按照组态的话每隔一定时间执行(比如现在OB86每隔10ms执行一次),但因为种种原因有些次中断时间到了但是没有执行,也就是某些循环中断OB执行被跳过了。
2) 报警“超出所允许的未决OB36事件数 – 时间错误,请求启动OB80”
调用OB80,触发了看门狗的程序。翻阅手册发现一般有这么几个可能:
- 扫描周期超过最大周期时间
这个首先排除,整个程序的扫描周期并没有超过设置的最大周期时间。
- 请求的中断无法启动
这个是因为前一个中断没有执行完,而后一个相同的中断又进来了,有一定可能,毕竟OB36循环时间很短,并且内部执行的程序还比较多。
- 中断队列溢出
这个是因为当前中断因为一些更高优先级的中断的存在,导致无法执行,从而进入缓冲队列,当缓冲队列超过了设置,就会造成时间错误中断。看到了这项,再结合诊断缓冲区的事件信息,基本可以确定是因为这个导致时间错误中断的提示。那是因为什么导致的呢?
3)针对这个问题,做了以下测试,使用RT_INFO指令,读取OB36的执行时间,发现OB36的执行时间不超过6ms,而设置的循环调用时间是10ms,并没超过调用时间,为什么会出现启动OB80的故障呢。
之后又仔细的看了一下帮助,发现了RT_INFO,有一段话:
OB 的运行时间定义为CPU处理此OB的命令的时间段。因此不包含处理更高优先级OB和可能中断OB的通信任务所需的时间。因此,如果想要确定从处理OB的第一个命令到处理OB的最后一个命令(表示包括处理更高优先级OB和可能中断OB的通信任务)之间所用的完整时间 |
1847会员专享内容,登录后会员免费观看完整内容
本文/视频版权归西门子1847工业学习平台所有,未经允许,不得转载。
关联文章
-
SIMATIC S7-1200/S7-1500 F-CPU
免费 2017-12-28 -
如何配置 SIMATIC S7-1500 的 OPC UA 客户端可以通过 FQDN 或绕过 FQDN 连接服务器?
免费 2020-03-17 -
如何在S7-1500R/H冗余控制器上操作DP从站?
免费 2020-03-17 -
使用 S7 OPT OPC UA 服务器进行一致的读写操作
免费 2020-03-17 -
S7-1500作为Modbus TCP客户端访问多个设备的方法
免费 2020-10-12
评论