工业控制热备切换:同步状态也要防裂脑
两台控制器程序一致、输入相同,并不保证切换后过程无扰。工业控制热备既要同步隐藏运行状态,也要在网络分区时确保只有一台主机拥有输出权。
热备同步若只复制输入映像和最终输出,备用机仍缺少控制器内部历史。定时器累计值、边沿检测前态、顺序步号、报警锁存、滤波器状态和通信事务都可能影响下一扫描结果。主机故障时,备用机从默认值继续计算,输出即使在切换瞬间相同,随后几个周期也会因内部状态不同而分叉。闭环算法还包含积分量和模式标志,直接以当前误差重新启动容易造成输出跃变。所谓无扰切换必须定义允许的输出偏差和恢复时间,不能只用网络断开时长衡量。
状态同步应区分必须逐周期复制、可在检查点更新和不应复制三类数据。快速控制状态需要确定的快照边界,避免备用机收到一半新数据和一半旧数据;配方、顺序和锁存可带版本号在提交时同步。硬件诊断、备用机自身通信质量则不能被主机状态覆盖。主备程序、变量布局和固件版本必须兼容,在线修改期间若状态结构改变,应先阻止自动切换或采用明确迁移规则。同步链路延迟和丢包也要监视,备用机状态落后超过界限时,应降级为不可无扰接管。
测试切换要选在状态最敏感的时刻,例如定时器即将到期、顺序刚发出脉冲、调节输出接近限幅或报警正在确认。记录主备状态版本、切换判定、首个输出和过程反馈,验证差异是否在规定边界。仅拔掉主机电源不足以覆盖故障,还需注入CPU停顿、程序异常、同步链路延迟和I/O通道单边故障。备用机接管后,外部通信客户端可能重建会话,重复提交未确认写命令,因此事务标识也要纳入恢复设计。
裂脑发生在主备之间失去联系,而两台控制器仍分别认为自己应当运行。工业控制系统若允许两台主机同时向共享I/O、驱动或数据库写入,即使各自逻辑正确,命令交替也会让执行机构抖动,顺序记录则出现无法解释的双写。冗余网络增加可用性,却不能保证没有共同分区;两条光纤若同走一条桥架,或两个端口依赖同一交换芯片,仍可能同时切断主备心跳而保留各自到部分现场的连接。
仲裁要把输出所有权交给独立、可验证的机制。可使用硬件仲裁模块、见证节点或带期限的所有权租约,失去多数或无法续租的一侧必须撤销输出。租约时钟和通信延迟需要有界,期限太短会因瞬时抖动频繁切主,太长则扩大双主窗口。对于不能容忍任何并行驱动的输出,物理选择继电器或冗余I/O模块应保证同一时刻只接受一个主通道。优先级固定为某台设备可简化决策,但仍要防止它处于半故障状态时强占主权。
裂脑测试必须切断不同链路组合,验证哪一侧保留主权、另一侧多久撤出以及网络恢复后如何合并状态。两个控制器都重新在线时,不应让优先主机立即抢回输出;先比较程序版本、同步代次和过程所有权,再决定保持现主或受控切换。事件日志应分别存于两端并使用可靠时间基准,便于还原分区期间的判断。还要测试见证节点故障和仲裁通道延迟,避免单点仲裁器把冗余系统变成新的单点失效。真正的可用性来自明确降级,而不是永远声称双机在线。
所以,热备连续性需要复制控制历史,冗余安全性需要唯一输出主权。把状态快照与独立仲裁同时纳入验收,工业控制系统才能在故障切换时既不断序也不双写。





