第3章:从继电器到PLC的思维转变:硬接线逻辑 vs 软逻辑、并行执行 vs 串行扫描

好,咱们今天聊点真正核心的东西。

很多刚接触PLC的朋友,尤其是从继电器电路转过来的,最容易卡在哪儿?就是思维没转过来。你拿着继电器那套逻辑去写PLC程序,不是不行,但会很别扭,而且容易出问题。

我当年刚入行时也犯过这个错。记得有一次调试一个传送带控制,我用继电器电路的习惯画梯形图,结果现场一运行,电机乱跳。查了半天,最后发现是扫描顺序的问题。嗯,从那以后我才真正理解了什么叫「软逻辑」。

3.1 硬接线逻辑 vs 软逻辑

先说说硬接线逻辑。继电器电路里,每个触点、每个线圈都是物理存在的。你接一根线,电流就流过去了。逻辑关系是靠「线」来决定的——线接对了,逻辑就对;线接错了,就得重新焊。

说白了,硬接线逻辑是「一次成型,改起来要命」。

硬接线逻辑的特点:

  • 物理触点:有寿命、有接触电阻、会发热
  • 并行执行:所有继电器同时动作
  • 修改困难:要动螺丝刀、焊枪
  • 故障排查:万用表、示波器伺候

那软逻辑呢?PLC里的逻辑是存在内存里的。一个触点不是真的触点,是一个内存位(bit)。线圈也不是真的线圈,是另一个内存位。逻辑关系靠程序指令来建立。

我习惯这么跟学员讲:硬接线是「铜导线」,软逻辑是「数据流」。铜导线里流的是电流,数据流里流的是0和1。

软逻辑的特点:

  • 虚拟触点:无限寿命、无接触电阻
  • 串行扫描:CPU逐条执行指令
  • 修改方便:改几行代码就完事
  • 故障排查:监控软件、在线调试

举个例子。一个简单的自锁电路:

// 继电器电路(硬接线)
// 启动按钮(常开)并联自锁触点,串联停止按钮(常闭),驱动接触器线圈

// PLC梯形图(软逻辑)
// 启动按钮 I0.0 并联 输出 Q0.0,串联 停止按钮 I0.1,驱动 Q0.0
Network 1:
    I0.0    I0.1    Q0.0
    | |     |/|     ( )
    | Q0.0  |       |
    | |     |       |

看起来差不多对吧?但执行方式完全不同。继电器电路里,按下启动按钮的瞬间,电流同时流过所有并联支路。而PLC里,CPU先读I0.0,再读I0.1,最后写Q0.0——一步一步来。

个人经验:我建议初学者在写梯形图时,脑子里不要想着「电流」,要想「数据流动」。电流是连续的,数据是离散的。这个思维转变很关键。

3.2 并行执行 vs 串行扫描

这是最容易被忽视,但也是最容易踩坑的地方。

继电器电路:真正的并行

你想想看,一个继电器柜里,几十个继电器同时通电、同时动作。A继电器吸合的同时,B继电器也在吸合。它们之间没有先后顺序,完全是并行的。这就是硬接线的天然优势——速度快,响应实时。

PLC程序:伪并行,真串行

PLC的CPU只有一个(或者几个核心),它没法同时干所有事。它只能一条一条地执行指令。从第一条到最后一条,扫完一遍算一个周期。这叫「扫描周期」。

为什么会这样?因为CPU本质上就是个「高速傻瓜」——它只会按顺序读指令、执行指令、写结果。只不过它跑得很快,快到让你感觉像是同时发生的。

我曾经踩过的坑:有一次做包装线项目,我用两个定时器做顺序控制。T1计时到后启动T2,T2计时到后复位T1。在继电器电路里这完全没问题。但在PLC里,因为扫描顺序,T1复位后T2还没来得及输出就被清零了。结果就是T2永远不动作。后来我把T2的输出放在T1复位指令之前,才解决。

来看一个典型的对比:

特性 继电器电路(并行) PLC程序(串行扫描)
执行方式 所有元件同时动作 逐条指令顺序执行
响应时间 微秒级(取决于机械动作) 毫秒级(取决于扫描周期)
逻辑依赖 无顺序依赖 有顺序依赖(后指令依赖前指令结果)
修改影响 改一根线可能影响全局 改一行代码只影响后续逻辑
故障模式 触点粘连、线圈烧毁 程序跑飞、看门狗超时

3.3 思维转变的关键点

说了这么多,到底怎么转?我总结了几条:

  1. 别把梯形图当电路图看。梯形图只是表达方式,本质是程序。你要关注的是数据流向,不是电流流向。
  2. 理解扫描周期。你的程序不是瞬间完成的,它需要时间。这个时间虽然短(通常10-100ms),但足够让逻辑出问题。
  3. 注意输出刷新时机。PLC的输出不是立即生效的,而是在扫描周期结束时统一刷新。这意味着你在程序中间修改了输出,要到下一个周期才生效。
  4. 善用中间变量。不要把所有逻辑都堆在输出线圈上。多用M寄存器(中间位)做逻辑中转,这样程序更清晰,也更容易调试。

避坑指南:我曾经见过一个工程师,把整个设备的逻辑写在一个Network里,密密麻麻的触点和线圈。结果调试时改一个触点,整个逻辑都变了。我建议你:一个Network只做一个功能。启动逻辑一个Network,停止逻辑一个Network,报警逻辑一个Network。这样既好读,又好改。

3.4 实际案例:电机启停控制

咱们用个实际案例来收尾。一个简单的电机启停控制:

继电器电路:

  • 启动按钮(常开)→ 并联自锁触点 → 串联热继电器(常闭)→ 驱动接触器
  • 停止按钮(常闭)→ 串联在回路中
  • 所有元件同时动作,按下启动按钮瞬间,接触器吸合

PLC程序:

Network 1: 启动逻辑
    I0.0(启动)  I0.1(停止)  Q0.0(电机)
    |   |         |/|          ( )
    | Q0.0        |            |
    |   |         |            |

Network 2: 过载保护
    I0.2(热继)  Q0.0
    |/|          (R)

注意看区别:

  • 继电器电路里,热继电器是串联在主回路中的,一旦过载,直接切断接触器线圈电源
  • PLC程序里,热继电器的信号要单独处理。我用了一个复位指令(R)来强制停止电机

为什么要这么写?因为PLC的扫描顺序决定了:如果你把热继电器触点串在启动回路里,它只能在每个扫描周期开始时检测一次。万一在扫描周期中间发生过载,电机可能不会立即停止。所以,我习惯把保护逻辑单独拿出来,用复位指令强制输出。

重要提醒:安全相关的保护(如急停、光幕、热继),我建议还是用硬接线。PLC再可靠也是电子产品,万一CPU死机,软逻辑就全废了。硬接线是最后一道防线,不能省。

好了,这一章的内容就到这儿。说白了,从继电器到PLC,你最大的敌人不是技术,是习惯。把「并行思维」改成「串行思维」,把「电流思维」改成「数据思维」,你的PLC水平会上一个台阶。

下一章咱们聊聊PLC的硬件选型和I/O分配,这个也是很多新手容易懵的地方。