文档中心 › Modbus 转 MQTT
Modbus 转 MQTT/HTTP,并接入 EMQX、ThingsBoard
Modbus 只是“车间内的语言”,平台要的是 MQTT/HTTP。网关/软件的角色是翻译官:把轮询到的寄存器值打包成 JSON 发出去。本文给出约定建议与 nscada 的配置示例。
一、推荐的主题与载荷约定
主题:cx/{deviceId}/data // 每设备一个主题
QoS:1(至少一次,配合去重更稳)
载荷:{"deviceId":1,"device":"Modbus设备","tag":"RPM","value":42,"unit":"rpm","ts":...,"quality":192}
若平台要求批量,可用 HTTP 转发并开启 batchSize 聚合,一次 POST 多条。
二、接入 EMQX / ThingsBoard 的要点
- EMQX:nscada 作为 MQTT 客户端连到 broker;EMQX 侧可建“数据集成”规则把主题转发进数据库/Kafka。注意 broker 地址、用户名密码、QoS;
- ThingsBoard:把 MQTT 用户名配成设备访问令牌(access token),主题用 ThingsBoard 的
v1/devices/me/telemetry,载荷为 JSON 遥测即可自动入库; - 自定义平台:改 nscada 转发通道的 topicTemplate 即可适配任意主题前缀。
三、断网补传:别让平台“留白”
MQTT 断连期间的消息不应丢弃:nscada 的数据先入本地 SQLite 与 Outbox,broker 恢复后自动按退避续投,超限条目转死信可人工重放。对“按分钟补历史曲线”的场景,配合本地库查询更完整。
四、验证三步
- EMQX 控制台订阅
cx/#,看到实时报文; - ThingsBoard 设备遥测里出现最新值;
- 断开 broker 60 秒再恢复,确认缺的时间段被补发。
