在PLC编程中,当需要检测某个数据寄存器(如D0)的值从20增加到21或从21减少到20时,可以通过比较指令和上升沿/下降沿检测来实现。以下是几种常见PLC品牌的编程示例:
1. 三菱PLC(使用GX Works2)
方法1:使用比较指令和边沿检测
ladder
LD M8000 // 常ON触点(确保扫描) LDI D0 20 // 如果D0不等于20 OUT M0 // M0置0 LD D0 20 // 如果D0等于20 OUT M0 // M0置1 LD M0 // 检测M0的上升沿(D0从非20变为20) AND P_First // 使用上升沿指令(如P_ON或P_First) OUT M1 // M1置1(表示D0刚变为20)
// 检测D0从20变为21 LD M1 // 如果上一步检测到D0=20 AND D0 21 // 且当前D0=21 OUT M2 // M2置1(表示D0从20增加到21)
// 检测D0从21变为20 LD D0 21 // 如果D0=21 OUT M3 // M3置1 LD M3 // 检测M3的下降沿(D0从21变为非21) AND P_Last // 使用下降沿指令(如P_OFF或P_Last) AND D0 20 // 且当前D0=20 OUT M4 // M4置1(表示D0从21减少到20)
方法2:使用SUB指令和比较
ladder
LD M8000 MOV D0 D1 // 将D0的值复制到D1(上一次的值) MOV D1 D0 // 更新D0的值
// 检测上升(20→21) LD D1 20 AND D0 21 OUT M5 // M5置1(20→21)
// 检测下降(21→20) LD D1 21 AND D0 20 OUT M6 // M6置1(21→20)
2. 西门子PLC(使用TIA Portal)
方法1:使用比较指令和边沿检测
ladder
Network 1: 检测D0=20 A "DB1".D0 // 读取D0的值 L 20 // 加载比较值 ==I // 整数比较 = M0.0 // 结果存入M0.0
Network 2: 检测上升沿(20→21) A M0.0 // 上一次D0=20 A "DB1".D0 // 当前D0的值 L 21 ==I FP M0.1 // 上升沿检测 = M0.2 // 结果存入M0.2(20→21)
Network 3: 检测下降沿(21→20) A M0.3 // 上一次D0=21(需额外逻辑记录) A "DB1".D0 // 当前D0的值 L 20 ==I FP M0.4 // 上升沿检测(实际是下降沿逻辑) = M0.5 // 结果存入M0.5(21→20)
方法2:使用SCRT指令(状态控制)
ladder
// 定义状态字 A "DB1".D0 L 20 ==I S M0.0 // 状态位:D0=20
A "DB1".D0 L 21 ==I S M0.1 // 状态位:D0=21
// 检测状态变化 A M0.0 // 上一次状态:D0=20 AN M0.1 // 当前状态不是D0=21 = M0.2 // 20→其他值(非21)
A M0.1 // 上一次状态:D0=21 AN M0.0 // 当前状态不是D0=20 = M0.3 // 21→其他值(非20)
3. 欧姆龙PLC(使用CX-Programmer)
方法1:使用比较指令和边沿检测
ladder
LD D0 CMP K20 // 比较D0和20 OUT M0 // M0=1表示D0=20
LD M0 AND D0 CMP K21 // 比较D0和21 OUT M1 // M1=1表示D0从20变为21
LD D0 CMP K21 // 比较D0和21 OUT M2 // M2=1表示D0=21
LD M2 AND D0 CMP K20 // 比较D0和20 OUT M3 // M3=1表示D0从21变为20
方法2:使用微分指令(DIFU/DIFD)
ladder
LD D0 CMP K20 // 比较D0和20 OUT M0
LD M0 DIFU M1 // 检测M0的上升沿(D0从非20变为20)
LD D0 CMP K21 // 比较D0和21 OUT M2
LD M2 DIFU M3 // 检测M2的上升沿(D0从非21变为21)
// 结合逻辑判断20→21或21→20 LD M1 AND M3 OUT M4 // M4=1表示20→21
LD M3 AND M1 OUT M5 // M5=1表示21→20(需额外逻辑)
关键点总结
边沿检测:使用上升沿(
P_ON
/FP
)或下降沿(P_OFF
/FD
)指令捕捉值的变化瞬间。状态记录:通过辅助继电器(如M0)记录上一次的值,与当前值比较。
品牌差异:
三菱:
P_ON
/P_OFF
或DIFU
/DIFD
。西门子:
FP
(正跳变)或SCRT
状态控制。欧姆龙:
DIFU
/DIFD
或比较指令组合。
推荐方案(通用逻辑)
使用两个辅助寄存器(如
M0
和M1
)分别记录“上一次值”和“当前值”。通过比较指令检测具体变化(20→21或21→20)。
结合边沿检测确保动作只触发一次。
如果需要更具体的代码(如特定PLC型号),请提供详细信息!