工业遥测阅读约 10 分钟

存储转发遥测:为断网而设计,而不是只为演示

MQTT 连接不是持久化策略。可靠的设备历史需要本地日志、明确的重放规则和可见的容量限制。

泵控制柜内的 Linux 控制器与本地存储,外部上行链路暂时中断

关于作者

Dr. Mehran Kiani-Oshtorjani

工业软件与仿真工程师

Mehran Kiani-Oshtorjani 是机械工程师和软件开发者,工作领域涵盖实时仿真、流体动力系统、工业控制与互联软件。他在 LUT University 的博士研究聚焦于面向工业实时系统的高效计算方法。

工程要点

  • 未发送数据必须由设备本地持久保存。
  • 每条记录都需要事件时间、序列、模式版本和稳定 ID。
  • 队列已满是必须公开的运行状态,不能静默删除。

网络负责传输,不是历史存储

路由器、证书、DNS、移动链路和维护都会造成中断。控制应继续在本地运行,遥测层必须准确知道哪些数据尚未送达。[1][4]

让记录在重放后仍能被识别

设备 ID、信号 ID、值、质量、事件时间、序列、模式版本和稳定记录 ID 共同保证重放正确。[6][5]

  • 按序列或 ID 去重
  • 标记时钟质量
  • 对载荷模式进行版本管理
  • 显式传递陈旧和离线状态

使用有界且具事务性的本地日志

嵌入式数据库或只追加日志可以统一处理排序、确认、压缩和崩溃恢复。[2][3]

状态本地云端动作
排队已持久化未知使用相同 ID 重试
传输中已持久化待确认超时后重试
已确认已持久化已提交可压缩
已过期按策略未发送统计损失

重放历史,但不要阻塞实时状态

为当前健康状态和报警保留带宽,再以受控批次清空历史积压。[1][5]

MQTT QoS 1 允许重复。业务层 exactly-once 仍需要稳定 ID 和幂等写入。[1]

存储满之前先确定策略

根据可信最长中断、数据量、写放大和余量计算容量,并按信号类别定义保留或丢弃规则。[4]

  • 公开队列年龄、字节和丢失数
  • 隔离运行时与存储阻塞
  • 明确保留规则
  • 测试每个阶段的断电

真正有意义的断网测试

  1. 设备运行时断开上行
  2. 分别重启服务和控制器
  3. 达到最大中断时间后恢复
  4. 检查时间、顺序与去重
  5. 重放期间保持实时状态
  6. 主动填满存储至各阈值

常见问题

MQTT QoS 1 足够吗?

不够。它没有定义本地持久日志、保留策略、模式或端到端去重。

重放必须全局有序吗?

通常按设备和信号流有序即可,可避免不相关信号之间的队头阻塞。

本地存储需要多大?

应从最大可信中断、数据量、保留类别和经过测试的余量推导。

资料来源与标准

  1. MQTT Version 5.0OASIS Open
  2. Write-Ahead LoggingSQLite
  3. Transaction control languageSQLite
  4. NIST SP 800-82 Rev. 3: Guide to Operational Technology SecurityNational Institute of Standards and Technology, September 2023
  5. Prometheus Remote-Write 2.0 specificationPrometheus
  6. RFC 3339: Date and Time on the InternetIETF

BootCtrl Engineering 于 2026年7月26日 最后核查本文技术论述与来源链接。所有产品表述均对照当前实现代码库;路线图工作不会被描述为已发布能力。

测试断网状态下的设备

我们可以帮助定义队列限制、重放规则和验收证据。

规划断网测试