4、位逻辑指令:常开/常闭触点、线圈输出、置位/复位、边沿检测的实际应用
各位同学,今天咱们来聊聊PLC编程里最基础、也最核心的东西——位逻辑指令。
说实话,不管你以后做多复杂的项目,哪怕是搞几百个点的DCS系统,底层逻辑都离不开这几个指令。我做了十几年自动化,见过太多新手一上来就搞功能块、搞SCL,结果连个自锁电路都写不利索。嗯,咱们还是先把地基打牢。
4.1 常开触点和常闭触点:你脑子里的开关
常开触点,说白了就是「平时断开,按下去才通」。常闭触点正好相反——「平时通着,按下去断开」。
我刚开始学的时候,老是把常闭和常开搞混。后来师傅跟我说了一句话,我记到现在:「你想想看,急停按钮为什么用常闭?」
因为急停按钮要是用常开,线断了或者接触不良,你按下去也没用,设备停不下来。用常闭,线一断,信号丢失,设备自动停机——这叫故障安全。
核心记忆法:
- 常开(NO):没信号时断开,有信号时闭合
- 常闭(NC):没信号时闭合,有信号时断开
在梯形图里,常开用 --| |-- 表示,常闭用 --|/|-- 表示。别小看这两个符号,它们构成了所有逻辑的基础。
4.2 线圈输出:让东西动起来
线圈输出,就是PLC的「执行端」。你前面判断了半天,最后总得让某个东西动作吧?线圈就是干这个的。
梯形图里线圈用 --( )-- 表示。比如:
I0.0 Q0.0
---| |-----------( )---
这段代码的意思是:当输入I0.0为ON时,输出Q0.0得电。简单吧?
但我提醒你一句:线圈输出在同一个程序里,最好只出现一次。我见过有人图省事,同一个Q点在不同网络里反复赋值,结果现场设备乱跳,查了两天才发现是双线圈问题。嗯,这个坑我踩过。
避坑指南:我曾经在一个项目里,因为双线圈导致气缸误动作,差点把操作工的手夹了。从那以后,我给自己定了个规矩:一个线圈只在一个地方输出,其他地方用中间变量。
4.3 置位/复位:锁住状态
置位(SET)和复位(RST),说白了就是「自锁」的升级版。
你想想看,用常开触点自锁,你得写好几行:
I0.0 Q0.0
---| |--------( )---
Q0.0
---| |--------
但用置位复位,一行搞定:
I0.0 Q0.0
---| |-----------( S )---
I0.1 Q0.0
---| |-----------( R )---
置位指令 --( S )-- 让线圈保持ON,复位指令 --( R )-- 让线圈恢复OFF。中间就算断电重启,有些PLC还能保持状态(比如西门子的保持型SR)。
我个人习惯是:凡是需要记忆状态的逻辑,优先用置位复位。比如电机启动、阀门开关、报警锁定,用SR指令写出来既清晰又不容易出错。
小技巧:写SR逻辑时,我建议把复位条件写在置位条件后面,或者单独用一个网络。别混在一起,否则逻辑容易乱。我曾经见过有人把置位和复位写在同一行,结果复位优先级搞反了,设备死活停不下来。
4.4 边沿检测:抓住那一瞬间
边沿检测,是位逻辑里最容易被忽视、但实际最常用的功能。
什么叫边沿?就是信号从0变1(上升沿),或者从1变0(下降沿)的那一瞬间。
你想想看,按钮按下去,PLC扫描周期那么快,如果你不抓边沿,程序可能会在一个扫描周期里反复执行同一个动作。比如你按一下启动按钮,结果电机启动了三次——这就是没做边沿检测的后果。
梯形图里,上升沿用 --|P|-- 或 --( P )--,下降沿用 --|N|-- 或 --( N )--。不同厂家符号略有不同,但原理一样。
I0.0 M0.0
---|P|-----------( )---
这段代码的意思是:当I0.0从0变成1的那一个扫描周期,M0.0会ON一次,然后立即OFF。
实际应用场景:
- 按钮触发:启动、停止、点动,必须用边沿
- 计数:产品经过传感器,每来一个上升沿计一次数
- 状态切换:按一下开,再按一下关,用边沿配合取反指令
- 报警触发:故障信号上升沿触发报警,下降沿复位
我记得有一次做包装线项目,客户说计数老是不准。我去现场一看,程序里直接用常开触点读传感器信号,没做边沿检测。传感器信号有抖动,一个产品过去能触发三四次。加上边沿检测后,计数立马准了。嗯,有时候问题就这么简单。
4.5 综合应用:一个简单的电机启停控制
咱们把上面讲的串起来,写一个完整的电机控制程序。
控制要求:
- 按启动按钮(I0.0),电机(Q0.0)启动并自锁
- 按停止按钮(I0.1),电机停止
- 过载保护(I0.2)动作时,电机立即停止并锁定报警
- 报警复位按钮(I0.3)清除报警状态
梯形图程序:
Network 1: 电机启动(上升沿触发)
I0.0 M0.0
---|P|-----------( )---
Network 2: 电机自锁与停止
M0.0 Q0.0
---| |--------( S )---
I0.1 Q0.0
---| |--------( R )---
Network 3: 过载保护与报警锁定
I0.2 M1.0
---|P|-----------( S )---
M1.0 Q0.0
---| |-----------( R )---
Network 4: 报警复位
I0.3 M1.0
---|P|-----------( R )---
个人经验:这个程序看起来简单,但我建议你养成一个习惯——所有按钮输入都做边沿检测。哪怕你现在觉得没必要,等现场出现误触发的时候,你会感谢我的。
4.6 常见错误与避坑
| 错误类型 | 现象 | 解决方法 |
|---|---|---|
| 双线圈 | 输出状态不稳定,设备乱动 | 一个Q点只在一个网络输出 |
| 缺少边沿检测 | 按钮按一次触发多次 | 所有按钮输入加边沿指令 |
| 置位/复位顺序错误 | 复位优先级高于置位 | 先写置位,后写复位 |
| 常闭触点误用 | 急停失效或逻辑反了 | 急停、安全门必须用常闭 |
我曾经在一个项目里,因为把急停按钮的常闭触点写成了常开,结果调试时按急停,设备反而加速了。嗯,那场面,挺尴尬的。从那以后,我每次写急停逻辑都会反复确认触点类型。
4.7 小结
位逻辑指令,说白了就是PLC的「字母表」。常开常闭是元音,线圈输出是辅音,置位复位是连词,边沿检测是标点符号。你把这些组合好了,就能写出任何逻辑。
我建议你找个仿真软件,把今天讲的例子都跑一遍。别光看,动手写。写错了不要紧,PLC又不会炸。等你把位逻辑玩熟了,后面学定时器、计数器、功能块,就会轻松很多。
下一章咱们聊定时器,那个更有意思。先消化今天的,有问题随时问我。