21-8. PLC的基本逻辑指令(逻辑堆栈操作指令)

93 阅读4分钟

21-8. PLC的基本逻辑指令(逻辑堆栈操作指令)

一、核心概念:什么是“逻辑堆栈”?

  1. 物理实体:S7-200 PLC CPU 内部有一个用于存储中间逻辑运算结果的 9 层存储区域,称为逻辑堆栈。
  2. 工作特性:遵循 “先进后出” 的原则。
    • 入栈:新值进入栈顶,原栈顶及以下各层值依次下压一层,栈底(第 9 层)的原值丢失。
    • 出栈:栈顶值弹出使用,原栈顶以下各层值依次上弹一层,原第 2 层(即新的栈顶)以下的值不确定(补进随机数)。
  1. 存在意义:在没有这些指令的简单PLC中,要实现多路并联输出,需要大量使用内部辅助继电器进行转接,程序冗长。逻辑堆栈指令允许程序直接保存和复用之前的逻辑运算结果,从而高效、清晰地编写复杂分支逻辑。

二、主要指令详解

1. LPS (Logic Push) — 逻辑入栈(分支开始)
  • 功能:将当前逻辑运算结果(栈顶值)复制一份,并压入堆栈。栈中原数据依次下压,栈底值丢失。
  • 梯形图作用:生成一条新的“子母线”或“分支起点”。这个新母线的起点,就是 LPS 指令执行时那一点的逻辑状态。之后编写的支路都从这个状态开始。
  • 类比:相当于在书中某个重点句下面画一条线,之后在这条线下面做笔记。这条线就是新起点。
2. LRD (Logic Read) — 逻辑读栈
  • 功能:读取堆栈中第二层的数据,并用它来替换当前的栈顶值。堆栈本身不进行压入或弹出操作(栈内数据不移动)。
  • 梯形图作用:当 LPS 生成一条新母线后,如果后面有多个并联的从逻辑块,则第一个从逻辑块紧接 LPS 编写,第二个及以后的从逻辑块开始前,使用 LRD 指令。它保证了每个新支路都从最初由 LPS 保存的那个共同逻辑起点开始。
  • 类比:在画了第一条线(LPS)后,要在它下面并列地画第二条、第三条注释线,每条线都要从最初画的那条主线的起点开始读起。LRD 就是让你“回到”那个共同的起点。
3. LPP (Logic Pop) — 逻辑出栈(分支结束)
  • 功能:将堆栈弹出一级。原栈顶值被弹出使用后丢弃,原第二层值成为新的栈顶,以下各层依次上移,栈底补入一个随机值。
  • 梯形图作用:用于 LPS 所生成的新母线右侧的最后一个从逻辑块。在读取这个最终逻辑块的同时,结束/复位这条由 LPS 产生的新母线,将逻辑运算的“当前点”返回到上一层。
  • 关键规则:必须与 LPS 成对使用,以保持堆栈平衡。
  • 类比:处理完在这条线下做的所有笔记后,把这条线擦掉,回到正文。
4. LDS n (Load Stack) — 装入堆栈
  • 功能(图中较少使用):复制堆栈中第 n 个值(n=0~8,0 即栈顶,1 即第二层,以此类推)到栈顶,栈中原数据依次下压,栈底值丢失。
  • 特点:这是一个可以访问堆栈深层的指令,但因其会破坏堆栈结构(丢失栈底),在常规分支编程中极少使用。

三、梯形图举例

image.png

image.png

梯形图直观理解:

在梯形图中,LPS对应一个分支的开始点(像树的一个节点),LRD用于连接该节点下的多个并联支路,LPP用于结束这个节点下的所有支路,回到主树干。

四、关键使用要点

  1. 深度限制:堆栈只有 9 层,因此 LPS 指令不能连续使用超过 9 次(即分支嵌套深度 ≤ 9)。
  2. 成对使用:LPS 和 LPP 必须严格成对出现,以确保堆栈操作平衡,不发生错乱。LRD指令可以根据并联支路的数量,在 LPS和 LPP之间使用多次或零次。
  3. 无操作数:LPS、LRD、LPP指令本身不直接操作某个地址(如 I0.0, M0.0),它们只操作堆栈本身。
  4. 执行顺序:这些指令在语句表编程中至关重要且直观。在梯形图编程时,编程软件会自动将这些分支结构转换成包含 LPS/LRD/LPP 的语句表指令。

总结

PLC的逻辑堆栈操作指令是一组高效管理程序逻辑流的工具:

  • LPS 标记“分支开始”,保存现场。
  • LRD 在多个并行分支间“切换起点”,读取共享现场。
  • LPP 标记“分支结束”,恢复现场。