4. 基础指令与逻辑编程:位逻辑指令、置位/复位、边沿检测、定时器与计数器

各位学员,欢迎来到第四讲。今天我们要啃的,是PLC编程里最基础、也是最核心的一块——位逻辑指令。说白了,就是那些让PLC“动起来”的最基本动作。

我经常跟学员讲,你如果把这几个指令玩透了,包装产线里80%的逻辑你都能搞定。剩下的20%,无非是组合和变通。咱们今天不讲虚的,直接上干货。

4.1 位逻辑指令:常开、常闭与线圈

先说说最基础的三个元件:常开触点、常闭触点、线圈。这三位,是PLC世界的“原子”。

常开触点(NO):平时是断开的,有信号才闭合。你可以把它想象成一个门,没人推它,它就是关着的。

常闭触点(NC):平时是闭合的,有信号才断开。这个正好相反,没人推它,门反而是开着的。

线圈(Coil):输出结果。线圈得电,对应的输出点就亮了。

嗯,这里要注意:很多新手会把常闭触点和线圈搞混。我见过一个项目,操作员按了急停按钮,机器反而加速了。为什么?因为他在程序里把急停信号写成了常开触点。急停按钮本身是常闭的,你程序里再用常开,逻辑就反了。

来看个最简单的例子:

// 梯形图示例:启动-停止电路
// I0.0: 启动按钮(常开)
// I0.1: 停止按钮(常闭)
// Q0.0: 电机运行(线圈)

     I0.0        I0.1        Q0.0
---| |----------|/|----------( )---

     Q0.0
---| |---(自锁回路)

这个电路,我估计你们在课本上都见过。但实际用起来,有几个坑要避开。

我的习惯: 停止信号一律用常闭触点。这样即使线路断了,设备也会自动停下来。这叫“故障安全”原则。

4.2 置位/复位指令:S和R

接下来是置位(Set)和复位(Reset)。这两个指令,说白了就是“锁存器”。

置位指令:把某个位强制设为1,哪怕输入信号消失了,它也不变。

复位指令:把某个位强制清0。

为什么要用这个?我举个例子。包装产线上有个气缸,需要把纸箱推出去。你按一下按钮,气缸伸出;再按一下,气缸缩回。如果用普通线圈,你得一直按着按钮。但用置位/复位,按一下置位,气缸伸出并保持;再按一下复位,气缸缩回。

// 置位/复位示例:气缸控制
// I0.0: 伸出按钮
// I0.1: 缩回按钮
// Q0.0: 气缸伸出

     I0.0        Q0.0
---| |----------( S )---

     I0.1        Q0.0
---| |----------( R )---

我曾经在一个项目中,用置位/复位指令控制一个夹爪。结果发现,如果两个按钮同时按下,夹爪会卡在中间。后来我加了互锁逻辑,才解决这个问题。

避坑指南: 置位和复位不要同时触发。否则输出状态不确定。我建议在程序里加一个“互锁”判断,确保同一时间只有一个指令生效。

4.3 边沿检测:上升沿与下降沿

边沿检测,这是个好东西。它只捕捉信号变化的“那一瞬间”。

上升沿(P或R_TRIG):信号从0变1的那一刹那。

下降沿(N或F_TRIG):信号从1变0的那一刹那。

为什么要用边沿?你想想看,如果你按一下按钮,想让计数器加1。但按钮按下去,信号会抖动,可能产生好几个脉冲。用普通触点,计数器会乱跳。用上升沿,只捕捉第一次变化,后面的抖动全被过滤掉了。

// 上升沿检测示例:计数脉冲
// I0.0: 计数按钮
// M0.0: 上升沿标志位
// C0: 计数器

     I0.0        M0.0
---|P|----------(   )---

     M0.0        C0
---| |----------( CU )---

我记得有一次调试一台贴标机,标签总是贴歪。查了半天,发现是传感器信号有毛刺,导致PLC误触发。后来加了上升沿检测,问题立刻解决。嗯,边沿检测就是用来干这个的。

4.4 定时器:TON、TOF与TP

定时器,PLC里最常用的指令之一。包装产线上,延时、计时、脉冲生成,全靠它。

常用的有三种:

类型 功能 典型应用
TON(接通延时) 输入ON后,延时一段时间,输出才ON 电机启动延时、避让时间
TOF(断开延时) 输入OFF后,延时一段时间,输出才OFF 冷却风扇延时停止
TP(脉冲定时器) 输入触发后,输出ON固定时长 喷码机触发脉冲

来看一个TON的实例:

// TON定时器示例:电机启动延时
// I0.0: 启动信号
// T1: 定时器,预设值5秒
// Q0.0: 电机运行

     I0.0        T1
---| |----------( TON )
                PT=5000ms

     T1.Q        Q0.0
---| |----------(   )---

这个逻辑的意思是:启动信号来了,等5秒,电机才启动。为什么要等?因为有些设备需要先润滑、先预热。我见过一个项目,操作员一按启动,电机就转,结果齿轮箱干磨了三天,直接报废。从那以后,我所有电机启动都加延时。

重点: 定时器的精度取决于PLC的扫描周期。一般PLC的定时器精度在10ms到100ms之间。如果你需要高精度计时,建议用专用计时模块。

4.5 计数器:CTU、CTD与CTUD

计数器,用来统计脉冲个数。包装产线上,计数产品数量、统计包装袋数,都离不开它。

常用的计数器类型:

  • CTU(加计数器):每来一个脉冲,计数值加1。达到预设值,输出ON。
  • CTD(减计数器):每来一个脉冲,计数值减1。减到0,输出ON。
  • CTUD(加减计数器):既可以加,也可以减。
// CTU计数器示例:产品计数
// I0.0: 产品检测传感器(上升沿触发)
// I0.1: 复位按钮
// C0: 计数器,预设值100

     I0.0        C0
---|P|----------( CU )
                PV=100

     I0.1        C0
---| |----------( R  )

     C0.Q        Q0.0
---| |----------(   )---  // 满100个,输出信号

这个程序的意思是:每检测到一个产品,计数器加1。当计数值达到100时,Q0.0输出ON,可以触发装箱动作。按复位按钮,计数器清零。

我个人习惯,计数器复位一定要加。不然你生产了一整天,计数器满了,设备就不动了。我曾经遇到过,一个操作员不会复位计数器,结果半夜打电话给我,说机器停了。我远程一看,计数器溢出了。从那以后,我每个计数器都配一个复位条件。

4.6 综合应用:包装产线中的实际案例

好了,知识点讲完了。咱们来一个综合案例,把这些指令串起来。

场景: 一条自动包装线,需要完成以下动作:

  1. 按启动按钮,传送带开始运行。
  2. 产品经过传感器,计数器加1。
  3. 每满10个产品,气缸推出一次,把产品推入包装箱。
  4. 气缸推出后,延时2秒缩回。
  5. 按停止按钮,传送带停止。
// 综合案例:包装产线控制
// I0.0: 启动按钮(常开)
// I0.1: 停止按钮(常闭)
// I0.2: 产品检测传感器(上升沿)
// Q0.0: 传送带电机
// Q0.1: 推出气缸

// 网络1:启动/停止控制传送带
     I0.0        I0.1        Q0.0
---| |----------|/|----------( )---
     Q0.0
---| |---(自锁)

// 网络2:产品计数,每10个触发一次
     I0.2        C1
---|P|----------( CU )
                PV=10

     C1.Q        C1
---| |----------( R  )  // 计数满后自动复位

// 网络3:计数满,触发气缸推出
     C1.Q        T1
---| |----------( TON )
                PT=2000ms

     C1.Q        Q0.1
---| |----------( S  )  // 置位气缸伸出

     T1.Q        Q0.1
---| |----------( R  )  // 2秒后复位气缸缩回

这个程序,我实际调试过很多次。有几个细节要注意:

  • 计数器复位要放在计数满之后,否则会漏计。
  • 气缸的置位和复位之间,要留够时间。我一般用定时器来做延时。
  • 停止按钮用常闭,确保安全。
我的建议: 写程序时,先把逻辑图画在纸上。想清楚了再写代码。我见过太多人,一上来就写,写到一半发现逻辑不通,又得重来。浪费时间。

好了,这一讲的内容就到这里。位逻辑指令、置位/复位、边沿检测、定时器、计数器,这五个东西,是PLC编程的“五虎上将”。你掌握了它们,包装产线里90%的控制逻辑都能搞定。

下一讲,我们会讲数据块和数组。到时候,咱们要处理更复杂的数据了。今天的内容,建议大家多动手练练。光看是学不会的,得自己写一遍,跑一遍,才能真明白。

有什么问题,欢迎在课程群里讨论。咱们下节课见。