在三菱 PLC 中,比较寄存器(D)的当前值与历史值(通常存储在另一个寄存器中)的核心指令是比较指令(CMP),此外还有区间比较指令(ZCP) 可用于更复杂的范围判断。以下是详细说明:
一、基础比较指令:CMP(Compare)
功能:
比较两个寄存器(或寄存器与常数)的值,根据比较结果(大于 / 等于 / 小于)输出相应的触点信号。
格式:
ladder
CMP S1 S2 D
比较结果:
二、比较寄存器当前值与历史值的典型用法
以 “比较当前值 D0 与历史值 D10” 为例,判断 D0 是否变化:
1. 检测 “值是否变化”(核心逻辑)
ladder
LD M8000 // 常通信号(每个扫描周期执行) CMP D0 D10 M0 // 比较D0(当前值)和D10(历史值),结果存M0-M2 // 当D0≠D10时,M0或M2导通(因M1仅在相等时导通) LD M0 // D0 > D10 OR M2 // D0 < D10 OUT M10 // M10=1表示D0的值发生变化 // 更新历史值(将当前值存入D10,供下一周期比较) LD M8000 MOV D0 D10
逻辑说明:
三、扩展:区间比较指令 ZCP(Zone Compare)
若需判断当前值是否在 “历史值 ± 某范围” 内(如过滤微小波动),可使用 ZCP 指令:
功能:
判断一个值是否在两个边界值之间(S2 ≤ S1 ≤ S3),输出相应触点信号。
格式:
ladder
ZCP S2 S3 S1 D
应用示例(过滤 ±2 以内的波动):
ladder
LD M8000 // 计算历史值D10的上下限(D10-2和D10+2) SUB D10 K2 D20 // D20 = D10 - 2(下限) ADD D10 K2 D21 // D21 = D10 + 2(上限) // 判断D0是否在[D20, D21]范围内 ZCP D20 D21 D0 M0 // 当D0超出范围(变化量>±2)时,M0或M2导通 LD M0 // D0 < 下限(变化量<-2) OR M2 // D0 > 上限(变化量>+2) OUT M10 // M10=1表示有效变化(需处理) // 更新历史值 LD M8000 MOV D0 D10
四、总结
这两种指令是 PLC 中处理 “值变化检测” 的基础工具,广泛用于数据监控、异常判断等场景。

