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又不会炸。等你把位逻辑玩熟了,后面学定时器、计数器、功能块,就会轻松很多。

下一章咱们聊定时器,那个更有意思。先消化今天的,有问题随时问我。