3、硬件冗余设计:双电源冗余设计(热备与均流)、双CPU模块设计、双背板总线设计

好,咱们进入正题。硬件冗余设计,说白了就是给系统上「双保险」。你想想看,一个远程IO站要是突然断电了,或者CPU死机了,现场的设备是不是全得停?那损失可就大了去了。

我个人习惯把硬件冗余分成三个层次来看:电源、大脑(CPU)、以及连接它们的骨架(背板总线)。咱们一个一个拆开讲。

3.1 双电源冗余设计:热备与均流

电源是整个系统的命脉。我见过太多项目,因为一个保险丝烧了,整个机柜断电,最后查出来是电源模块老化。所以,双电源冗余是第一步。

双电源冗余有两种主流模式:热备模式均流模式

3.1.1 热备模式(1+1备份)

热备模式,也叫主备模式。一个电源主输出,另一个电源待机。主电源正常工作时,备电源几乎不输出电流。一旦主电源挂了,备电源瞬间顶上。

这里有个关键点:切换时间。我曾经在一个化工项目里遇到过,切换时间长了5毫秒,结果PLC直接掉电重启了。嗯,这里要注意,切换时间必须小于系统掉电保持时间。一般要求小于10ms,好的设计能做到1ms以内。

核心指标:
  • 切换时间:< 10ms(建议< 1ms)
  • 输出电压跌落:< 5%
  • 故障检测:硬件级快速检测,不依赖软件

3.1.2 均流模式(N+1冗余)

均流模式就更有意思了。两个电源同时工作,各承担一半负载。如果其中一个坏了,另一个自动承担全部负载。

均流的关键在于「电流均衡」。我建议使用下垂法或者主动均流法。下垂法简单,但精度差;主动均流法精度高,但需要额外的均流总线。

我的经验: 在远程IO模块这种小功率场景(通常几十瓦),我推荐用主动均流法。虽然成本高一点,但电流分配误差能控制在5%以内。我在一个风电项目里用过,效果很稳。

3.1.3 双电源的ORing电路

不管哪种模式,最后都需要一个ORing电路来合并两路电源。说白了就是两个二极管,或者更高级的MOSFET。

// 典型的双电源ORing电路示意
// 电源1 -> 二极管D1 -> 输出
// 电源2 -> 二极管D2 -> 输出
// 注意:二极管的压降和散热问题

用二极管简单,但压降大、发热大。我建议用理想二极管控制器,比如LTC4357。它能模拟二极管行为,但压降只有几十毫伏,效率高很多。

避坑指南: 我曾经遇到过一个问题:两个电源的地电位不一致,导致ORing电路产生环流。解决办法是:确保所有电源的GND在单点接地,或者使用隔离型电源模块。

3.2 双CPU模块设计

CPU是系统的大脑。双CPU设计,说白了就是让两个CPU同时工作,互相监督。

双CPU有两种架构:热备架构同步架构

3.2.1 热备架构(主从模式)

主CPU干活,从CPU待机。主CPU定期把自己的状态和数据同步给从CPU。一旦主CPU挂了,从CPU接管。

同步数据是关键。我建议同步以下内容:

  • IO状态表:所有输入输出的当前值
  • 运行计数器:程序执行的步数
  • 故障日志:最近的报警和错误
  • 配置参数:IP地址、通信参数等

同步方式有两种:共享内存高速串行链路。共享内存快,但需要双口RAM;高速串行链路灵活,但延迟稍大。

我的建议: 对于远程IO模块这种实时性要求高的场景,我推荐用共享内存。我在一个汽车生产线项目里用过,同步延迟能做到微秒级。

3.2.2 同步架构(双机热备)

同步架构更高级。两个CPU同时执行相同的程序,同时处理相同的输入。输出时,通过表决电路选择其中一个输出。

这种架构的难点在于:时钟同步输出表决

时钟同步可以用IEEE 1588(PTP)协议,精度能达到纳秒级。输出表决可以用硬件比较器,或者软件投票。

小技巧: 我习惯在双CPU之间加一个「心跳信号」。两个CPU每隔1ms互相发一个脉冲。如果连续3次没收到对方的心跳,就认为对方挂了。这个比软件看门狗可靠多了。

3.2.3 双CPU的切换逻辑

切换逻辑不能太敏感,也不能太迟钝。我见过一个项目,因为电源波动导致CPU频繁切换,系统反而更不稳定。

我建议的切换策略:

  1. 故障检测:连续3次心跳丢失,或者看门狗超时
  2. 切换确认:等待10ms,确认故障不是瞬时的
  3. 切换执行:从CPU接管所有IO控制权
  4. 故障上报:通过通信接口上报主CPU故障
避坑指南: 我曾经遇到过一个问题:切换后,从CPU的IO状态和实际现场状态不一致。原因是切换瞬间,主CPU正在更新输出,数据没同步完。解决办法是:在同步数据时,加入「数据一致性校验」,确保同步完成后再允许切换。

3.3 双背板总线设计

背板总线是系统的骨架。所有模块都插在背板上,通过总线通信。如果背板总线坏了,整个系统就瘫痪了。

双背板总线,说白了就是两条独立的通信通道。

3.3.1 双总线架构

有两种常见架构:并行双总线冗余环网

架构 优点 缺点 适用场景
并行双总线 结构简单,切换快 需要双倍背板空间 小型远程IO站
冗余环网 节省背板空间,自愈能力强 协议复杂,延迟稍大 大型分布式系统

我个人习惯用并行双总线。为什么?因为简单可靠。你想想看,远程IO模块本来就不大,多一条总线也不占多少地方。

3.3.2 双总线的切换机制

双总线切换,不能靠软件,必须靠硬件。我建议用总线仲裁器或者硬件选择器

切换条件:

  • 总线A故障:比如CRC错误连续超过阈值
  • 总线A物理断开:比如背板插槽接触不良
  • 总线A噪声过大:比如电磁干扰导致信号畸变

切换时间:我建议控制在1个总线周期内。比如总线速率是10Mbps,一个周期是100ns,切换必须在100ns内完成。

核心设计: 双背板总线必须做到「无缝切换」。也就是说,切换过程中,不能丢失任何数据包。我在一个核电项目里,要求切换时数据包丢失率为0。最后我们用FPGA实现了硬件级切换,才达到这个要求。

3.3.3 双总线的物理设计

物理设计上,有几点要注意:

  1. 电气隔离:两条总线之间必须隔离,防止一条总线故障影响另一条
  2. 阻抗匹配:每条总线的终端电阻必须精确匹配,防止信号反射
  3. 热插拔:模块在带电状态下插拔,不能影响总线通信
我的经验: 热插拔设计,我建议用「预充电」电路。模块插入时,先通过一个电阻缓慢给电容充电,等电压稳定后再接入总线。这样可以避免插拔瞬间的电压尖峰。我在一个轨道交通项目里用过,效果很好。

3.4 总结与建议

好了,咱们把三个硬件冗余设计都过了一遍。总结一下:

  • 双电源:热备或均流,关键是切换时间和均流精度
  • 双CPU:热备或同步,关键是数据同步和切换逻辑
  • 双背板总线:并行或环网,关键是切换速度和物理隔离

最后,我想说一句:冗余设计不是堆硬件,而是设计一套可靠的「故障应对机制」。你想想看,如果冗余系统比单系统还容易出问题,那还不如不用。所以,设计时一定要考虑「故障模式」和「故障恢复」,而不是只想着「多一个备份」。

下一章,咱们聊聊软件层面的冗余设计,比如双链路通信和冗余协议栈。到时候再细聊。