本章介绍了循环中断OB的功能、与循环中断OB相关的指令、执行过程以及举例说明的内容。 循环中断 OB
● 循环中断 OB 的功能
循环中断 OB 在经过一段固定的时间间隔后执行相应的中断 OB 中的程序。
S7-1500 最多支持 20 个循环中断 OB ,在创建循环中断 OB 时设定固定的间隔扫描时间。在 CPU 运行期间,可以使用“SET_CINT”指令重新设置循环中断的间隔扫描时间、相移时间;同时还可以使用“QRY_CINT”指令查询循环中断的状态。循环中断 OB 的编号必须为30~38,或大于、等于123。 ● 与循环中断 OB 相关的指令功能
4、测试结果:程序下载后,可看到 CPU 的输出 Q0.0 指示灯0.5s亮,0.5s灭交替切换;当 M100.0 由0变1时,通过“SET_CINT”将循环间隔时间设置为1s,这时,可看到 CPU 的输出 Q0.0 指示灯1s亮,1s灭交替切换。
● 相移时间(Phase shift)功能
当使用多个时间间隔相同的循环中断事件时,设置相移时间可使时间间隔相同的循环中断事彼此错开一定的相移时间执行。请通过如下两幅图例理解相移时间的概念。
下图中,没有设置相移时间,以相同的时间间隔调用两个 OB ,则低优先级的 OB 块将不能以固定间隔时间 t 执行;何时执行受高优先级的 OB 执行时间影响,请看图6。
图6. 没有相移的循环 OB 调用
下图中,低优先级的 OB 块可以以固定间隔时间 t 执行;相移时间应大于较高优先级 OB 块的执行时间,请看图7。
图7. 有相移的循环 OB 调用
小结:如果以相同的时间间隔调用优先级较高和优先级较低的循环中断 OB ,则只有在优先级较高的 OB 完成处理后才会执行优先级较低的 OB 。低优先级 OB 的执行起始时间会根据优先级较高的 OB 的处理时间而延迟,如果希望以固定的时间间隔来执行优先级较低的 OB ,则优先级较低的 OB 需要设置相移时间,且相移时间应大于优先级较高的 OB 的执行时间。
1、循环中断 + 延时中断数量 <= 20;
2、循环间隔时间1~60000ms,通过指令“SET_CINT”设置错误的时间将报错16#8091;
3、CPU 运行期间,可通过“SET_CINT”指令设置循环中断间隔时间、 相移时间;
4、如果“SET_CINT”指令的使能端 EN 为脉冲信号触发;则 CPU 的操作模式从 STOP 切换到 RUN 时执行一次,包括启动模式处于 RUN 模式时上电和执行 STOP 到 RUN 命令切换,循环中断间隔时间将复位为 OB 块属性中设置的数值;
5、如果循环中断执行时间大于间隔时间,将会导致时间错误。