西门子PLC基础指令4:输出指令、立即输出指令
布尔指令
1. 输出指令
输出指令:当PLC处于“输出刷新”阶段时,会将“输出映射区”中的运算结果,同步到硬件输出端口(继电器、晶体管等),真正控制外部设备动作。
2. 立即输出指令
区别
- 普通输出指令(如 = Q0.0):在程序执行阶段,只是将运算结果写入 输出映像区,不会立即作用于实际硬件输出,必须等到整个程序执行完毕,进入 输出刷新阶段 时,才会将输出映像区的所有结果一次性同步到硬件输出端口。
- 立即输出指令(如 =I Q0.0):在程序执行阶段遇到该指令时,会直接跳过输出映像区,将运算结果立即同步到实际硬件输出端口,同时也会更新输出映像区(保持映像区与硬件状态一致)。
1. 立即输出指令的实时性:仅在执行瞬间生效而非持续监控:
立即输出指令的核心是 “打破输出刷新阶段的统一同步”,但它并非 “持续监控地址变化”,而是在程序执行到该指令的那一刻,强制将当前结果输出到硬件,具体逻辑:
- 程序执行阶段,按顺序扫描指令,当运行到 =I Q0.0 时:
- 读取当前逻辑运算的结果(0 或 1);
- 直接将结果发送到实际输出端口(如继电器、晶体管),硬件立即动作;
- 同时更新输出映像区中 Q0.0 的值(确保后续指令读取的是最新状态)。
- 指令执行完毕后,PLC 继续扫描后续程序,不会 “持续监控” 该地址,只有再次执行到该指令时,才会根据当时的逻辑结果再次更新硬件输出。
2. 立即输出的硬件访问成本:
立即输出指令(=I)直接访问硬件,这比访问内存(映像区)更耗时。在高速或大型程序中,过度使用立即输出可能增加扫描时间。
这里说的扫描时间是什么?为什么会增加扫描时间?
- 这里说的扫描时间,就是PLC循坏周期 扫描一次的时间。
- 操作会增加扫描时间的原因是:
- 正常情况下,PLC 对输出的处理是 “批量的”(程序执行阶段只修改映像区,最后统一刷新硬件),效率很高。
- 而 “立即输出” 需要单独与硬件进行通信(如直接向输出端口发送电信号),硬件访问的速度远慢于内存(映像区)的读写速度。
- 如果在程序中频繁使用立即输出,相当于在循环扫描过程中插入了大量低速的硬件操作,导致整个扫描周期变长。
3. 为什么要更新 输出映像区:
这确保了后续指令如果读取同一个输出点(从映像区)会得到最新值。
4. 时序问题:代码中普通输出与立即输出同时使用以谁为准?
假设在一个扫描周期内,对同一个输出点 Q0.0 有以下操作:
- 执行普通输出指令= Q0.0(将映像区中 Q0.0 设为 0)
此时,仅输出映像区的 Q0.0 变为 0,硬件硬件输出未变化。
- 执行立即输出指令=I Q0.0(将 Q0.0 设为 1)
此时,不仅输出映像区的 Q0.0 变为 1,硬件输出也立即变为 1。
- 再次执行普通输出指令= Q0.0(将映像区中 Q0.0 设为 0)
- 此时,输出映像区的 Q0.0 再次变为 0,硬件输出仍保持 1(未刷新)。
- 这种情况:设备先是1状态,等plc进入输出刷新阶段后,输出映射区的值被同步到设备,设备又变为了0状态
在这个例子中:
- 最后执行的是普通输出指令,所以输出映像区的最终值是 0
- 硬件输出被立即输出指令修改为 1,之后未再更新,所以硬件输出为 1
- 如果最后执行的是立即输出指令,那么映像区和硬件输出会保持一致
注意:这种情况会导致设备状态和输出映射区状态暂时不匹配。比如你奇怪为什么明明输出映射区是0,但是设备却动了一下1!
这便是普通输出指令
和立即输出指令
针对同地址操作所需要的注意带点!