付同学的技术客栈/

7x24 稳定运行:产线不会等系统恢复

所属专题 MES现场落地手记 第 5 篇 / 共 9 篇 查看专题目录

车间网络断了十分钟,产线不会停下来等 MES 恢复。

锁螺丝机还在跑,扫码枪还在扫,测试机还在出结果。等网络恢复,如果系统只留下一句“连接失败”,这十分钟的生产过程就像从系统里消失了一样。

所以 MES 的稳定性,不能只看服务有没有挂。

它要看现场数据有没有断,断了能不能补,补回来会不会重复,重复了会不会污染业务。

MES 的稳定性和普通后台系统不太一样。

后台系统卡一下,用户可能刷新;产线系统卡一下,现场的人会马上围过来。操作工等着过站,班长等着看产量,设备还在继续跑,系统不能轻易说“稍后重试”。

所以 7x24 稳定运行,不是喊一个高可用口号,而是要想清楚:服务重启时现场怎么办,网络断开时数据怎么办,数据库维护时产线怎么办。

这些问题都很土,但都很关键。

一、断网不是小概率事件

车间里的网络环境,通常没有办公室那么舒服。

交换机重启、网线松动、工控机断电、无线信号不稳、中心服务升级、消息队列短暂不可用,都可能发生。

如果边缘节点采到数据后只放内存,一断网就丢,那系统迟早会出问题。

至少这些数据要本地持久化:

  • SN 过站。
  • 测试完成结果。
  • 报警开始和恢复。
  • 产量计数变化。
  • 关键质量检测结果。

我更倾向于边缘侧先写本地队列,再上传中心。上传成功后再标记已发送。

这样断网不是灾难,只是延迟。

二、补传一定要和幂等一起设计

有补传,就一定会遇到重复。

边缘节点发了一条测试结果,网络超时了。它不知道中心到底收到没有,只能重发。

中心侧如果简单地“收到就入库”,就可能出现同一个 SN、同一道工序、同一次测试被写两遍。

所以关键事件要有唯一标识。

比如:

edge_node_id
device_code
event_type
event_time
sequence_no
sn
process_code

测试完成、工序过站、报警开始、报警恢复,都应该能做幂等判断。

这里真正要防的不是重复消息,而是重复消息进入业务以后没人发现。

三、设备离线不要用一把尺子量

“超过 30 秒没数据就是离线”,听起来简单,但现场会误伤很多设备。

有些设备每秒上报状态。

有些测试机只在测试结束时上报。

有些扫码枪只有扫到条码才有数据。

有些设备停机待料时,本来就不会产生业务数据。

所以离线判断要按设备类型和点位配置来。

比如:

  • 高频状态点位,超过 3 到 5 个采样周期没数据,标记疑似离线。
  • 测试机用心跳或连接状态判断,不只看测试结果。
  • 扫码枪按工位状态和最后扫码时间判断。
  • 关键设备离线立即告警,普通设备可以先提醒。

离线判断太敏感,现场会被告警淹没。

离线判断太迟钝,真正断了又没人知道。

四、消息积压是慢性故障

有一种故障很隐蔽:所有服务都活着,但看板已经慢了 20 分钟。

边缘节点在线,消息队列在线,消费服务也在线,只是队列积压越来越多。

这时候如果只看 CPU、内存、进程状态,系统看起来是健康的。

但对现场来说,它已经不健康了。

MES 至少要监控:

  • 边缘节点在线状态。
  • 本地缓存积压量。
  • 消息队列积压量。
  • 消费延迟。
  • 数据库写入失败数。
  • 看板数据更新时间。
  • 设备离线数量。
  • 关键点位采集成功率。

一个很实用的指标是“看板数据更新时间”。如果看板显示的是 20 分钟前的数据,服务再健康也没意义。

五、故障隔离要按产线想

MES 稳定性不能只按服务想,还要按产线想。

某条产线的边缘节点异常,不应该影响其他线。

某台测试机数据格式异常,不应该拖垮整个实时处理服务。

看板推送失败,不应该影响工序过站。

业务库慢了,高频采集数据可以先留在边缘缓存或采集链路里。

现场系统的目标不是永远不出故障,而是出故障时影响范围可控。

六、小结

7x24 稳定运行不是一句口号。

在 MES 里,它意味着:

  • 断网能缓存。
  • 恢复能补传。
  • 重复能幂等。
  • 离线能判断。
  • 积压能发现。
  • 故障能隔离。

生产现场不会等系统恢复。系统设计要承认现场会出问题,并提前把这些问题接住。


本系列:

MES现场落地手记 第 5 篇 / 共 9 篇
查看专题目录

留下一条评论

暂无评论