2、PLC控制器基础:PLC工作原理、PLC硬件架构、PLC扫描周期与实时性要求

好,咱们进入第二讲。这一节我打算把PLC的底裤扒开,让你看看它到底是怎么工作的。很多刚入行的朋友觉得PLC就是个黑盒子,输入输出一通接,程序一写就完事。其实不然,你如果不理解它的扫描机制,写出来的程序在关键时刻可能会掉链子。我当年就吃过这个亏,后面会讲到。

2.1 PLC工作原理:循环扫描,永不停歇

PLC的工作原理,说白了就是四个字:循环扫描。它不像咱们电脑上的CPU,哪个任务急就先处理哪个。PLC是个老实人,它按部就班,一遍又一遍地执行固定的流程。

这个流程我习惯把它分成三个阶段:

  1. 输入采样阶段:PLC先把所有输入点的状态(比如按钮按没按,传感器通没通)一股脑儿读进来,存到内存的“输入映像区”。
  2. 程序执行阶段:CPU开始跑你的梯形图或ST代码。它只认刚才存好的输入映像区数据,算完之后把结果写到“输出映像区”。
  3. 输出刷新阶段:PLC把输出映像区的数据,一次性全部送到实际的输出端口上(比如继电器吸合、晶体管导通)。

然后,再回到第一步,重新开始。周而复始,直到断电。

核心要点:在整个程序执行阶段,即使外部输入信号变了,PLC也“视而不见”。它只认扫描周期开始时拍下的那张“快照”。这是理解PLC实时性的关键。

为什么会这样设计?你想想看,如果程序执行到一半,输入突然变了,那逻辑就乱套了。这个机制保证了程序执行的确定性。我在调试一条包装线时,有个光电传感器信号抖动特别厉害,如果PLC实时响应,输出继电器能在一秒内吸合释放几十次。但利用扫描周期的“快照”机制,配合一点软件滤波,问题就解决了。

2.2 PLC硬件架构:三大件与总线

PLC的硬件,拆开来看,核心就是三大件:CPU模块电源模块I/O模块。再加上一根连接它们的背板总线

我画个简单的逻辑图给你看:

+-------------------+      +-------------------+      +-------------------+
|   电源模块 (PS)    |      |   CPU 模块 (CPU)   |      |   I/O 模块 (IO)   |
|                   |      |                   |      |                   |
| 提供 24V/5V 电源  |<---->| 执行用户程序       |<---->| 连接传感器/执行器 |
|                   |      | 管理通信           |      | 光电隔离          |
+-------------------+      +-------------------+      +-------------------+
        ^                         ^                         ^
        |                         |                         |
        +-------------------------+-------------------------+
                          |  背板总线 (Backplane Bus)  |
                          |  (数据、地址、控制、电源) |
                          +---------------------------+

这里我要重点说一下背板总线。它就像PLC的脊梁骨,所有模块之间的数据交换都靠它。工业MCU在PLC里的落地,很大程度上就是看这颗MCU能不能高效地驱动这条总线。

硬件组件 功能描述 工业MCU的参与
CPU模块 大脑,运行固件和用户程序 MCU直接作为主处理器,执行逻辑运算
电源模块 将外部电源转换为内部工作电压 MCU的电源管理单元参与监控和诊断
I/O模块 信号转换与隔离 MCU的GPIO、ADC、定时器直接驱动或采样
背板总线 模块间通信的物理通道 MCU的并行接口或高速SPI负责总线协议

我的经验:选型时别光看CPU主频。I/O模块的响应速度,往往受限于背板总线的速率和MCU处理中断的能力。我曾经用一颗主频200MHz的MCU,结果因为总线仲裁设计得不好,实际I/O刷新速率还不如别人100MHz的MCU。嗯,这里要注意,木桶效应在PLC硬件设计中非常明显。

2.3 PLC扫描周期与实时性要求

扫描周期,就是PLC完整执行一遍“输入采样-程序执行-输出刷新”所花的时间。这个时间通常以毫秒计。对于中小型PLC,一般在1ms到10ms之间。

实时性,说白了就是PLC对外部事件做出反应的速度。这个速度直接受扫描周期影响。你想想看,如果一个输入信号在输出刷新之后才到来,那它必须等到下一个扫描周期才能被处理。所以,最坏情况下的响应时间,接近两个扫描周期。

我举个例子:

假设扫描周期 T = 5ms
输入信号在 t=0ms 时变化
最幸运情况:t=0ms 刚好在输入采样阶段,响应时间 ≈ 5ms
最倒霉情况:t=0ms 刚好在输出刷新阶段刚结束,响应时间 ≈ 10ms

对于一般的逻辑控制,10ms的响应时间完全够用。但对于高速计数、脉冲输出、或者运动控制,这个时间就太长了。这时候就需要用到PLC的中断功能或者高速计数器(HSC),它们可以绕过扫描周期,由硬件直接响应。

避坑指南:我曾经在一个项目中,用普通I/O点去读取一个编码器的脉冲信号。结果PLC扫描周期是10ms,编码器一转起来,脉冲全丢了。后来换成专用的高速计数器模块,用MCU的硬件定时器捕获,才解决问题。记住:不要用软件轮询去处理高速信号,这是新手最容易犯的错误。

那么,工业MCU在这里扮演什么角色?

  • 控制扫描节奏:MCU的定时器负责产生精确的扫描周期中断。
  • 执行用户程序:MCU的CPU核心直接运行编译后的梯形图逻辑。
  • 管理I/O刷新:MCU通过DMA(直接存储器访问)技术,在不占用CPU的情况下,快速刷新输入输出映像区。

我个人习惯在设计PLC固件时,把扫描周期分成几个固定的时间片。比如1ms的时间片用于处理高速I/O和通信,剩下的时间用于执行用户程序。这样既能保证实时性,又能充分利用MCU的性能。

最后总结一句:PLC的实时性,不是靠CPU跑得快,而是靠确定性的扫描机制硬件级的快速响应通道。理解了这一点,你才算真正入门了PLC控制器的设计。