2023 年 8 月,我去华东一家 3C 电商仓做回访。40 台货架式 AMR,跑得正欢。上午十点,机房空调罢工,一次教科书级的单点故障发生了:调度服务器过热自动重启——15 分钟。15 分钟里 40 台车收不到一条指令,全部触发保护停车,齐刷刷定在原地。上午波次延误了将近 2 小时,仓库经理的脸比机房温度还难看。
事后复盘,服务器本身没坏,重启就好了。但这 15 分钟暴露了一个真相:这套看着很"智能"的系统,单点故障就藏在最不起眼的地方。下面这篇文章,把 AMR 系统的单点故障拆成三层讲清楚:每层怎么冗余、分界线画在哪、验收时怎么亲手把它搞瘫一次。先声明:下面数字凡没注来源的,都是我做项目的复盘估算,量级靠谱,精确值别拿去写标书。
单点故障到底藏在哪三层
你可以理解为城市交通。AMR 车队就是车流,调度系统(FMS)就是信号灯控制中心,Wi-Fi 网络就是司机手里的对讲机。瘫痪整座城的,永远不是一辆车抛锚,而是这三样东西里的某一样:
第一层:单机。 一台车趴窝——电池过放、激光雷达脏了、驱动轮卡了异物。这是最常见的,也是杀伤力最小的,一台车倒下,车队少 2.5% 的运力(40 台车队的账)。
第二层:调度。 FMS 服务器宕机、调度软件 bug、数据库锁死。一台服务器抖一下,全场车辆集体失聪——上面那个 15 分钟就是这一层。这是真正的单点故障,一台机器管全场。
第三层:网络。 AP 故障、漫游失败、某区域信号盲区。车和调度之间断了线,车按"失联保护"策略原地停车,停的位置还他妈经常是主干道。
三层里,90% 的项目把钱都花在了第一层——买更贵的车、加更多的传感器。对第二层和第三层,能省则省。这就是为什么一出事就是全场趴窝:钱花错了地方。
三层冗余,钱该花在哪一层
先讲原理,再给分界线。冗余这东西不是越多越好,是花在刀刃上。
单机冗余:备车,不是备件。 正确姿势是 N+1 备车:40 台车的车队,多买 1~2 台做热备,趴窝的车拖走,备车顶上,运力不掉。分界线画在这儿:24 小时两班倒的仓,N+1 是刚需;只跑白班单班的仓,可以几家仓共用一个备车池,或者干脆不备——白天坏了晚上修,损失可控。
这里必须开一炮。有供应商跟客户说"我们这车是双激光雷达、双电池,单机冗余做足了",把车价抬高 30%。这叫伪需求。主流工业 AMR 的 MTBF 厂商标称都在 5000 小时以上,你花 30% 的溢价把单机故障率从每年几次降到每年一两次,调度服务器一抖,照样全军覆没。单机冗余的天花板很低,钱要省下来砸在第二层。
调度冗余:主备双机,这是保命钱。 原理很简单:两台服务器跑 FMS,一主一备,心跳检测,主机挂了备机自动接管。你可以理解为飞机的双引擎——坏一个还能飞。分界线是切换时间:主备切换必须快过车辆的"失联保护停车"阈值。这个阈值各家不一样,常见的是 5~10 秒(经验值,签合同前问厂家要这个数,白纸黑字写进技术协议)。切换能在 30 秒内完成的,算合格;超过 1 分钟的,等于没做——车早就自己停了,你切过来看到的是一地"尸体",还得人工逐台恢复。
网络冗余:AP 重叠覆盖。 原理:每个区域至少被两台 AP 的信号覆盖,一台 AP 挂掉,相邻 AP 能接住。分界线:单台 AP 故障时,相邻 AP 要能覆盖该区域 90% 以上的面积,漫游切换时间控制在 1 秒内。做不到这个数的"双 AP 方案",就是摆设。
三档方案的账,我按 40 台车队的常见规模算了一笔(比例是经验区间,绝对值看你谈下来的车价):
| 方案 | 多花的钱(占项目比例) | 复杂度 | 典型恢复时间 | 适合谁 |
|---|---|---|---|---|
| 基础型:单机 FMS + 单 AP + 无备车 | +0% | 低 | 故障靠人工,30 分钟~2 小时 | 单班小仓,停得起 |
| 标准型:FMS 主备 + AP 重叠覆盖 + 1 台备车 | +8%~12% | 中 | 切换 30 秒内,单车故障 10 分钟内顶上 | 大多数 24 小时仓 |
| 高可用型:FMS 双活 + 双频网络 + 10% 备车池 | +20%~30% | 高 | 秒级切换,运力几乎不掉 | 医药、汽车等停线即赔钱的仓 |
看明白了吗?从基础型到标准型,多花 10% 左右的钱,恢复时间从小时级掉到分钟级,这是性价比最高的一档。高可用那档是给"停一分钟赔几万"的主准备的,普通电商仓别碰,复杂度会反噬你——双活调度的数据一致性问题,够你喝一壶。
故障隔离:趴窝的车先拖出路网
冗余是让系统不死,故障隔离是让死掉的部分不连累活着的部分。这就像高速上抛锚:第一步永远是先把车拖进应急车道,而不是在行车道上修车。
一套合格的故障隔离,链条是这样的:车辆自检发现异常(电池、定位丢失、驱动故障)→ 3 秒内上报 FMS → FMS 把该车当前所在路段标记为临时禁行区(exclusion zone)→ 把该车未完成的任务拆出来,重新分配给健康的车 → 派人工或备车去拖车。全程自动,人工只负责最后拖车那一下。

反例我见过。2024 年 3 月,华北一家汽配仓,一台 AP 供电模块烧了,覆盖区里 6 台车失联超过 5 秒,触发保护停车。坏就坏在其中 2 台正好停在主干道上,而 FMS 的故障隔离逻辑有个 bug:失联车辆的位置信息超过 10 秒没更新,就不再下发绕行指令。结果后面 4 台健康的车按原路线开过来,在"尸体"后面排起了长队。人工花了 40 分钟才把路挪开。那 40 分钟,半个仓的配送任务是停的。
这个案例说明两件事:第一,故障隔离的逻辑必须按"最坏位置"来设计——假设趴窝的车永远停在最要命的主干道上;第二,失联车辆的绕行策略不能依赖它最后上报的位置,要按"最后已知位置 + 安全半径"画禁行区,宁可多绕路,不可撞上去。
还有降级运行(graceful degradation),这是故障隔离的下半场。假设极端情况:30% 的车同时趴窝(比如批量电池问题),系统不该直接躺平,而应该自动降级:车速降一档保证安全、任务优先级重排(先保出库波次,入库任务延后)、人工拣选区临时扩编。这个降级策略要在 FMS 里预先配好,阈值写死——"健康车辆低于 70% 自动进入降级模式",别指望半夜三点值班的人临场发挥。
验收前,单点故障演练一个不能少
这是维护的坑,也是大多数项目的坑:方案书写得天花乱坠,验收时没人敢真动手搞瘫一次。我给的清单,验收那天一条一条亲手测,测不过不许签字:
- 拔调度服务器电源。 看备机多久接管,车辆是否出现批量保护停车。切换超 1 分钟,打回。
- kill 调度进程不断电。 模拟软件崩溃,看心跳检测能不能发现"假活"(进程在、服务死的脑裂情况)。
- 给一台 AP 断电。 看覆盖区车辆是否平滑漫游,有没有车触发失联停车。
- 随机指定一台车急停。 看 FMS 多久画出禁行区、任务多久重分配。超过 3 分钟,隔离逻辑不合格。
- 充电桩整排断电。 看低电量车辆的调度策略会不会乱——这是最容易被忽略的一项,低电量车集体回充、充不上电集体趴窝,我见过两次。
- 模拟 30% 车辆同时下线。 看降级模式是否自动触发,出库波次保不保得住。
这 6 场演练,每场都要有书面记录:触发时间、恢复时间、有没有人工介入。供应商如果跟你说"我们实验室测过",你就回一句:拿你们的车,在我的场地上,現在测。实验室的 99.99% 可用性,到了全是货架和叉车的现场,至少打八折。
最后算账。这钱花得值不值,看这一个数:你家旺季单小时的停摆损失。算法很简单:旺季单小时出库单量 × 平均每单毛利,再加上超时赔付和人工闲置。一家中型电商仓,这个数轻轻松松过 2 万。标准型冗余多花的 10%,摊到 3 年折旧里,每小时才几十块。用几十块的成本,对冲 2 万块一小时的损失,这账不用我教你算。但如果你的仓单班、日单量小,停 2 小时也就耽误半天——那基础型就够了,冗余的钱省下来买备件更实在。冗余不是信仰,是数学。
作者:大刘|自动化设备工程师







