2、PLC控制器基础:PLC工作原理、PLC硬件架构、PLC扫描周期与实时性要求
好,咱们进入第二讲。这一节我打算把PLC的底裤扒开,让你看看它到底是怎么工作的。很多刚入行的朋友觉得PLC就是个黑盒子,输入输出一通接,程序一写就完事。其实不然,你如果不理解它的扫描机制,写出来的程序在关键时刻可能会掉链子。我当年就吃过这个亏,后面会讲到。
2.1 PLC工作原理:循环扫描,永不停歇
PLC的工作原理,说白了就是四个字:循环扫描。它不像咱们电脑上的CPU,哪个任务急就先处理哪个。PLC是个老实人,它按部就班,一遍又一遍地执行固定的流程。
这个流程我习惯把它分成三个阶段:
- 输入采样阶段:PLC先把所有输入点的状态(比如按钮按没按,传感器通没通)一股脑儿读进来,存到内存的“输入映像区”。
- 程序执行阶段:CPU开始跑你的梯形图或ST代码。它只认刚才存好的输入映像区数据,算完之后把结果写到“输出映像区”。
- 输出刷新阶段: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控制器的设计。