S7-300/400 PLC在运行时采用循环执行用户程序的方式,这种运行方式也称为扫描工作方式。
下面是循环处理的各个阶段的任务:
1) 操作系统启动循环时间监控。
2) CPU将过程映像输出区的数据写到输出模块。
3) CPU读取输入模块的输入状态,并存入过程映像输入区。
4) CPU处理用户程序,执行用户程序中的指令。
5) 在循环结束时,操作系统执行其他任务,例如下载和删除块等。
6) CPU返回第一阶段,重新启动循环时间监控。
有朋友可能就疑惑了,为什么不是像其他PLC那样,在本次扫描周期结束的时候将过程映像输出区的数据写到输出模块,而是在下一个扫描循环周期才写到输出模块?这样不是产生了一个扫描周期的延迟吗?
其实,PLC的扫描工作方式是一种重复的循环过程,就像我们日常使用的时钟一样,23点59分59秒过了就是下一天的0点0分0秒。说起来进入了下一天,实际上只差一点点时间。因此在下一扫描周期的开始将数据输出到外设,与本周期结束时输出的效果基本上是一样的。这两种方法的输出时间相差不是一个扫描周期,基本上没什么差别。
我觉得楼主一点 有误, 2) CPU将过程映像输出区的数据写到输出模块。
这一步是最后一步完成的,看你怎么理解了,反转循环的次序,就像楼主讲的那样,我相信上电 第一次暖启动的时候,首先执行的是 从 3) CPU读取输入模块的输入状态,并存入过程映像输入区。 开始的。。。。。
一下摘自,系统块手册 , 描述 OB1 执行原理:
了解OB1的操作
在运行期受监视的所有OB中,OB1的优先级最低,换言之,除OB90之外的其它所
有OB均可中断OB1的执行。以下事件可导致操作系统调用OB1:
? 完成启动。
? 已完成OB1的执行(上一循环)。
执行OB1后,操作系统发送全局数据。重新启动OB1之前,操作系统会将过程映像
输出表写入输出模块中、更新过程映像输入表以及接收CPU的任何全局数据。
S7监视最大的扫描时间,并确保最大的响应时间。最大扫描时间的值预置为
150ms。用户可设置一个新值,也可在用户程序中的任意位置使用SFC43
“RE_TRIGR”来重新启动时间监视。如果用户程序超出了OB1的最大周期,则操作系
统将调用OB80 (时间错误OB);如果OB80没有编程,则CPU将转为STOP模式。
除了监视最大扫描时间外,还可以保证最小扫描时间。操作系统将延迟启动新循环
(将过程映像输出表写入输出模块中),直至达到最小扫描时间为止。