第2章:PLC热备概念——热备系统的工作原理、主站与从站的角色、同步机制简介
各位工程师朋友,咱们接着聊。上一章我讲了冗余系统的整体框架,这一章咱们聚焦到PLC热备这个核心概念上。
说实话,我刚入行那会儿,对「热备」的理解特别肤浅。我以为就是两台PLC,一台干活一台闲着,坏了就切换。结果第一次在现场调试,差点把整个产线搞停机。嗯,这里面的门道,我今天好好跟你掰扯掰扯。
2.1 热备系统到底是怎么工作的?
热备系统,说白了就是「主从同步,实时待命」。主站干活的时候,从站不是在那睡大觉,它一直在同步主站的状态。
我习惯用一个比喻来解释:就像两个飞行员开飞机。主驾驶在操作,副驾驶的手也轻轻搭在操纵杆上,眼睛盯着仪表盘。主驾驶的一举一动,副驾驶都看在眼里、记在心里。一旦主驾驶出问题,副驾驶零点几秒就能接手。
PLC热备也是这个道理。主站(Primary)负责实际的IO控制、逻辑运算、通信处理。从站(Standby)呢?它不直接控制现场设备,但它一直在接收主站发来的「状态快照」。
核心要点:热备不是冷备。冷备是关机放着,热备是开机同步。这个区别决定了切换时间是从秒级降到毫秒级的关键。
2.2 主站与从站的角色分工
咱们把角色拆开来看。
主站(Primary)
- 执行控制逻辑:扫描用户程序,处理输入输出
- 管理IO总线:主站独占IO控制权,从站不直接访问IO
- 发送同步数据:周期性地把内存数据、系统状态打包发给从站
- 处理通信请求:上位机、HMI、其他网络设备都跟主站交互
从站(Standby)
- 接收同步数据:不断接收主站发来的数据包
- 保持内存一致:把接收到的数据写入自己的内存区域
- 监控主站心跳:通过心跳信号判断主站是否还活着
- 准备接管:一旦检测到主站故障,立即切换为主站角色
我在一个化工项目里遇到过一个问题:从站虽然同步了数据,但IO模块的配置没同步。结果一切换,从站认不出IO模块,整个装置直接跳停。那次教训让我养成了一个习惯——主从站的硬件配置必须完全一致,包括固件版本。
我的经验:选型时尽量买同一批次、同一固件版本的CPU模块。不同批次可能有微小的硬件差异,虽然理论上兼容,但热备切换时容易出幺蛾子。
2.3 同步机制简介
同步机制是热备系统的灵魂。没有好的同步,热备就是摆设。
常见的同步方式有三种,我列个表给你看:
| 同步方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 全量同步 | 主站把所有内存数据一次性发给从站 | 实现简单,数据完整 | 占用带宽大,同步周期长 |
| 增量同步 | 只同步发生变化的数据 | 带宽占用小,同步快 | 实现复杂,需要记录变化 |
| 事件触发同步 | 特定事件发生时触发同步 | 灵活,减少无效同步 | 事件丢失可能导致数据不一致 |
目前主流PLC厂家(像西门子、罗克韦尔、施耐德)用的都是增量同步+事件触发的混合模式。为什么?你想想看,一个大型项目可能有几万个变量,每次全量同步,光传输时间就够呛。增量同步只传变化的部分,效率高得多。
但这里有个坑——同步时序问题。我曾经在一个项目里发现,主站发送增量数据包时,从站还没来得及处理完上一个包,新的包又来了。结果从站内存里的数据乱套了。后来怎么解决的?加了一个同步缓冲区,从站用双缓冲机制,一个缓冲区在处理,另一个在接收,交替使用。
注意:同步机制里最容易被忽略的是「同步周期」的设定。周期太短,CPU负载高;周期太长,切换时数据丢失多。我一般建议设定在10-50ms之间,具体看项目对实时性的要求。
2.4 同步数据到底传什么?
这个问题我问过不少刚入行的工程师,很多人回答不上来。其实同步数据主要包含这几类:
- 过程映像区:输入输出的当前状态
- 内部寄存器:M区、DB块、定时器、计数器的值
- 系统状态字:CPU运行模式、错误代码、诊断信息
- 通信连接状态:跟其他设备建立的连接信息
- 程序计数器:当前执行到哪条指令了(这个很关键)
我特别想强调一下程序计数器。有些低端的热备方案只同步数据,不同步程序执行位置。切换后从站从头开始扫描程序,那中间丢失的扫描周期怎么办?现场设备可能已经乱套了。所以真正靠谱的热备方案,连程序执行到哪一步都要同步。
举个例子,西门子S7-1500R/H系统的同步机制,它用的是确定性同步。主从站通过光纤直连,每个扫描周期结束时,主站把数据打包通过光纤发给从站。从站收到后,下一个扫描周期开始前完成数据更新。这样主从站最多差一个扫描周期。
// 伪代码示意:主站同步流程
while (系统运行) {
读取输入();
执行用户程序();
更新输出();
// 同步数据打包
同步包.过程映像 = 当前IO状态;
同步包.内部寄存器 = 当前寄存器值;
同步包.程序计数器 = 当前指令位置;
同步包.时间戳 = 获取系统时间();
// 发送给从站
发送同步包(从站);
// 等待从站确认
if (等待确认超时) {
触发报警("同步失败");
}
}
你看,这个流程里最关键的是「等待从站确认」。如果主站发完数据不管从站收没收到,那从站的数据就可能不完整。我见过一个项目,工程师把确认机制去掉了,觉得「反正光纤不会丢包」。结果光纤接口松动,数据丢了几个包,切换时从站直接报错。嗯,从那以后我再也不敢省这个确认步骤了。
2.5 热备切换的触发条件
什么时候从站会接管?不是只有主站死机才切换。常见的触发条件有:
- 主站CPU故障:比如看门狗超时、硬件错误
- 主站掉电:电源模块失效
- 通信中断:主从站之间的同步链路断了
- 程序错误:主站执行了非法指令导致停机
- 手动切换:维护时人为触发切换
这里有个容易踩的坑——误切换。我曾经在一个项目里,因为网络抖动导致主从站之间的心跳信号丢失了几毫秒,从站以为主站挂了,直接切换。结果主站其实好好的,两个CPU同时当主站,IO总线冲突,整个系统崩溃。后来我们加了三次心跳丢失才触发切换的机制,才解决这个问题。
避坑指南:我曾经在调试时把心跳超时时间设得太短(50ms),结果现场电磁干扰大,频繁误切换。后来改成200ms,配合三次确认,再也没出过问题。这个参数要根据现场环境来调,别照搬手册。
2.6 小结
这一章咱们把热备的基本概念捋了一遍。总结下来就三句话:
- 热备不是冷备,从站一直在同步主站的状态
- 主从分工明确,主站干活,从站待命
- 同步机制是核心,增量同步+事件触发是主流方案
下一章我会深入讲同步数据的传输协议,包括光纤环网、以太网冗余这些底层的东西。到时候我会拿我调试过的几个实际案例来拆解,保证让你听完就能用。
好,今天就到这儿。有什么问题,咱们课后交流。