当前位置: 首页 > news >正文

西门子PLC基础指令4:输出指令、立即输出指令

布尔指令

1. 输出指令

在这里插入图片描述
输出指令:当PLC处于“输出刷新”阶段时,会将“输出映射区”中的运算结果,同步到硬件输出端口(继电器、晶体管等),真正控制外部设备动作。

2. 立即输出指令

在这里插入图片描述

区别

  • 普通输出指令(如 = Q0.0):在程序执行阶段,只是将运算结果写入 输出映像区,不会立即作用于实际硬件输出,必须等到整个程序执行完毕,进入 输出刷新阶段 时,才会将输出映像区的所有结果一次性同步到硬件输出端口。
  • 立即输出指令(如 =I Q0.0):在程序执行阶段遇到该指令时,会直接跳过输出映像区,将运算结果立即同步到实际硬件输出端口,同时也会更新输出映像区(保持映像区与硬件状态一致)。

1. 立即输出指令的实时性:仅在执行瞬间生效而非持续监控:

立即输出指令的核心是 “打破输出刷新阶段的统一同步”,但它并非 “持续监控地址变化”,而是在程序执行到该指令的那一刻,强制将当前结果输出到硬件,具体逻辑:

  1. 程序执行阶段,按顺序扫描指令,当运行到 =I Q0.0 时:
    • 读取当前逻辑运算的结果(0 或 1);
    • 直接将结果发送到实际输出端口(如继电器、晶体管),硬件立即动作;
    • 同时更新输出映像区中 Q0.0 的值(确保后续指令读取的是最新状态)。
  2. 指令执行完毕后,PLC 继续扫描后续程序,不会 “持续监控” 该地址,只有再次执行到该指令时,才会根据当时的逻辑结果再次更新硬件输出。

2. 立即输出的硬件访问成本

立即输出指令(=I)直接访问硬件,这比访问内存(映像区)更耗时。在高速或大型程序中,过度使用立即输出可能增加扫描时间。

这里说的扫描时间是什么?为什么会增加扫描时间?

  • 这里说的扫描时间,就是PLC循坏周期 扫描一次的时间。
  • 操作会增加扫描时间的原因是:
    • 正常情况下,PLC 对输出的处理是 “批量的”(程序执行阶段只修改映像区,最后统一刷新硬件),效率很高。
    • 而 “立即输出” 需要单独与硬件进行通信(如直接向输出端口发送电信号),硬件访问的速度远慢于内存(映像区)的读写速度。
    • 如果在程序中频繁使用立即输出,相当于在循环扫描过程中插入了大量低速的硬件操作,导致整个扫描周期变长。

3. 为什么要更新 输出映像区

这确保了后续指令如果读取同一个输出点(从映像区)会得到最新值。

4. 时序问题:代码中普通输出与立即输出同时使用以谁为准?

假设在一个扫描周期内,对同一个输出点 Q0.0 有以下操作:

  1. 执行普通输出指令= Q0.0(将映像区中 Q0.0 设为 0)

    此时,仅输出映像区的 Q0.0 变为 0,硬件硬件输出未变化。

  2. 执行立即输出指令=I Q0.0(将 Q0.0 设为 1)

    此时,不仅输出映像区的 Q0.0 变为 1,硬件输出也立即变为 1。

  3. 再次执行普通输出指令= Q0.0(将映像区中 Q0.0 设为 0)
    1. 此时,输出映像区的 Q0.0 再次变为 0,硬件输出仍保持 1(未刷新)。
    2. 这种情况:设备先是1状态,等plc进入输出刷新阶段后,输出映射区的值被同步到设备,设备又变为了0状态

在这个例子中:

  • 最后执行的是普通输出指令,所以输出映像区的最终值是 0
  • 硬件输出被立即输出指令修改为 1,之后未再更新,所以硬件输出为 1
  • 如果最后执行的是立即输出指令,那么映像区和硬件输出会保持一致

注意:这种情况会导致设备状态和输出映射区状态暂时不匹配。比如你奇怪为什么明明输出映射区是0,但是设备却动了一下1!
这便是普通输出指令立即输出指令针对同地址操作所需要的注意带点!

http://www.lryc.cn/news/608782.html

相关文章:

  • JavaScript 性能优化实战指南:从运行时到用户体验的全面提升​
  • adb 与pad 交互方法
  • MyBatis动态SQL精要:从<if>到<foreach>的灵活拼接之道
  • Go语言声明变量
  • 怎么修改论文格式呢?提供一份论文格式模板
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 面向智能体的上下文工程:策略、实现与 LangGraph 实践
  • LangChain4J入门:接入大模型
  • 系统学习算法:专题十六 字符串
  • 第三章-提示词-高级:开启智能交互新境界(13/36)
  • 日常--详细介绍qt Designer常用快捷键(详细图文)
  • 【QT】概述
  • 高质量数据集|建设三大难点
  • 01.MySQL 安装
  • 服务器中切换盘的操作指南
  • Android 之 MVVM架构
  • 使用 Docker 部署 Golang 程序
  • 第四章:OSPF 协议
  • Dify中自定义工具类的类型
  • WebMvc自动配置流程讲解
  • MySQL 索引失效的场景与原因
  • 嵌入式开发学习———Linux环境下IO进程线程学习(二)
  • 04.Redis 的多实例
  • 笔试——Day27
  • 前端面试手撕题目全解析
  • 【数据迁移】Windows11 下将 Ubuntu 从 C 盘迁移到 D 盘
  • Redis——常用指令汇总指南(三)(哈希类型)
  • Odoo OWL前端框架全面学习指南 (后端开发者视角)
  • 三角洲行动ACE反作弊VT-d报错?CPU虚拟化如何开启!
  • GitOps:云原生时代的革命性基础设施管理范式