物联网之设备数据上报(二)
上回介绍了使用 Modbus 协议采集蒸汽锅炉数据,本次将采集到的数据通过 MQTT 协议上报到服务器。
配置 MQTT 网关
端口参数
按照设备通讯协议说明配置串口参数。

边缘网关配置

MQTT 网关配置
连接到 MQTT 服务器,配置上报 Topic。
Topic 格式:device/{deviceType}/{deviceName}
| 设备类型 | Topic 示例 |
|---|---|
| 蒸汽锅炉 | device/steam_boiler/1号锅炉 |
| 热水锅炉 | device/hot_water_boiler/1号锅炉 |

MQTT 消息格式
数据结构
1 | |
字段说明
| 字段 | 来源 | 说明 |
|---|---|---|
| dir | 固定值 | 方向标识,up=上行 |
| id | 设备配置 | 设备唯一标识(deviceId) |
| MAC | 设备配置 | 设备 MAC 地址 |
| r_data | 采集数据 | 采集点数组 |
| name | 点表配置 | 采集点名称 |
| value | 采集值 | 实际采集的数值 |
| err | 采集状态 | 0=正常,非0=异常 |
故障值解析
位运算原理
故障寄存器是一个 16 位整数,每一位代表一种故障状态(1=有效,0=无效)。
故障位定义
| 位 | 十进制值 | 故障类型 | 是否故障 |
|---|---|---|---|
| bit0 | 1 | 定时时间到关机 | 否(正常模式) |
| bit8 | 256 | 燃烧机故障 | 是 |
| bit9 | 512 | 烟温传感器故障 | 是 |
| bit10 | 1024 | 烟道超温故障 | 是 |
| bit11 | 2048 | 炉水水位极低 | 是 |
| bit12 | 4096 | 蒸汽压力极高 | 是 |
| bit14 | 16384 | 炉水水位极高 | 是 |
多故障解析示例
故障值:2817
1 | |
对应故障列表:
| 位 | 值 | 故障 |
|---|---|---|
| bit0 | 1 | 定时时间到关机(正常模式) |
| bit8 | 256 | 燃烧机故障 |
| bit9 | 512 | 烟温传感器故障 |
| bit11 | 2048 | 炉水水位极低 |
代码实现
1 | |
MQTT 服务器验证
使用 MQTT 客户端工具订阅 Topic,验证数据上报是否正常。

Topic 设计规范
格式定义
1 | |
| 部分 | 说明 | 示例 |
|---|---|---|
| device | 固定前缀 | device |
| deviceType | 设备类型标识 | steam_boiler |
| deviceName | 设备名称(用户定义) | 1号锅炉 |
订阅规则
| Topic | 说明 |
|---|---|
| device/+/+ | 订阅所有设备 |
| device/steam_boiler/+ | 订阅所有蒸汽锅炉 |
| device/hot_water_boiler/+ | 订阅所有热水锅炉 |
| device/steam_boiler/1号锅炉 | 订阅指定设备 |
小结
本文介绍了:
- MQTT 网关配置方法
- 数据上报的 JSON 格式
- 故障位的解析算法
- Topic 设计规范
下一篇文章将介绍如何存储这些数据并进行大屏展示。
物联网之设备数据上报(二)
https://cszy.top/20260402-物联网之设备数据上报(二)/