物联网之设备数据采集(一)
码农初次实践模拟采集设备数据,本次模拟采集蒸汽锅炉设备运行数据。
前置准备
硬件准备
| 设备 | 说明 |
|---|---|
| USR-TCP232-306 | Serial Device Server,实现串口转网络 |
| UT-890A | USB转RS-485/422转换器(+ 对 A,- 对 B) |
| 网线 | 连接设备到局域网 |

软件准备
| 软件 | 版本 | 用途 |
|---|---|---|
| Modbus Poll | V4.3.4 | Modbus 主站模拟器 |
| Modbus Slave | V4.3.1 | Modbus 从站模拟器 |
| USR-M0 | V2.2.6.3 | 306设备配置工具 |
| TCPCOM | V3.0.6 | TCP/串口调试助手 |
服务准备
- MQTT服务器(如 EMQX)
文档准备
- Modbus协议规范(中文详细).pdf
- USR-TCP232-306_V1.0.1.pdf
- 蒸汽锅炉RS485通讯参数.docx
蒸汽锅炉通讯协议
基础参数
1 | |
采集点定义
模拟量数据
| 参数 | 地址 | 类型 | 换算规则 |
|---|---|---|---|
| 烟道温度 | 40502 | 整型 | 实际值 = 采集值 × 0.1 |
| 锅炉压力 | 40006 | 实数 | 实际值 = 采集值 × 0.01 |
状态量数据
| 参数 | 地址 | 类型 | 说明 |
|---|---|---|---|
| 小火 | 00007=1, 00008=0 | 开关量 | 燃烧状态 |
| 大火 | 00007=1, 00008=1 | 开关量 | 燃烧状态 |
| 无火 | 00007=0, 00008=0 | 开关量 | 燃烧状态 |
| 给水泵运行 | 00006=1 | 开关量 | 1=运行, 0=停止 |
水位状态 (40061)
| 值 | 状态 |
|---|---|
| 0 | 水位极低 |
| 1 | 水位低 |
| 2 | 水位正常 |
| 3 | 水位高 |
| 4 | 水位极高 |
压力状态 (40066)
| 值 | 状态 |
|---|---|
| 1 | 压力低 |
| 2 | 压力正常 |
| 3 | 压力高 |
| 4 | 压力极高 |
故障状态 (40571)
16位整型,按位解析:
| 位 | 值 | 故障类型 |
|---|---|---|
| bit0 | 1 | 定时时间到关机(正常模式) |
| bit8 | 256 | 燃烧机故障 |
| bit9 | 512 | 烟温传感器故障 |
| bit10 | 1024 | 烟道超温故障 |
| bit11 | 2048 | 炉水水位极低 |
| bit12 | 4096 | 蒸汽压力极高故障 |
| bit14 | 16384 | 炉水水位极高故障 |
配置 USR-TCP232-306
按照设备标签上的IP和账户信息进入管理页面。
网络参数
配置局域网固定IP,方便后期调试。

点表参数
按照通讯协议文档配置各个参数,建议先手动添加一个数据点,然后导出JSON配置进行批量编辑。

字段配置说明
| 字段 | 说明 | 示例 |
|---|---|---|
| key | 唯一序号,从1递增 | 1, 2, 3… |
| name | 采集参数名称(英文标识) | flue_temp |
| sadd | 从机地址(站号) | 1 |
| rtype | 功能码:1=读线圈,3=读保持寄存器 | 3 |
| radd | 协议地址 | 501 |
| dtype | 数据类型编码 | 2 |
| magn | 倍率 | 0.1 |
| report | 变化上报开关 | 0/1 |
| ampl | 变化上报幅值 | 0 |
地址转换规则
- **线圈地址 (0xxxx)**:协议地址 = 点位地址 - 1
- **保持寄存器 (4xxxx)**:协议地址 = 点位地址 - 40001
数据类型编码
| dtype | 类型 | 说明 |
|---|---|---|
| 0 | 布尔型 | 开关量/线圈 |
| 1 | 16位有符号 | Signed |
| 2 | 16位无符号 | Unsigned |
| 7 | 32位浮点数(ABCD) | Float |
| 8 | 32位浮点数(CDAB) | Float inverse |
完整配置JSON
1 | |
配置 Modbus Slave
连接设置

采集点配置

数据类型对照表
| 点位名称 | Function | Display | Quantity | dtype |
|---|---|---|---|---|
| 烟道温度 | 03 Holding Register | Unsigned | 1 | 2 |
| 锅炉压力 | 03 Holding Register | Float | 2 | 7 |
| 给水泵状态 | 01 Coil Status | Binary | 1 | 0 |
| 燃烧状态线圈1 | 01 Coil Status | Binary | 1 | 0 |
| 燃烧状态线圈2 | 01 Coil Status | Binary | 1 | 0 |
| 水位状态 | 03 Holding Register | Unsigned | 1 | 2 |
| 压力状态 | 03 Holding Register | Unsigned | 1 | 2 |
| 故障寄存器 | 03 Holding Register | Unsigned | 1 | 2 |
采集点详细说明
1. 烟道温度
- 地址:40502 → radd: 501
- 类型:16位无符号整型
- 换算:实际温度 = 采集值 × 0.1
- 示例:采集值 125 → 实际温度 12.5℃
2. 锅炉压力
- 地址:40006 → radd: 5
- 类型:32位浮点数(注意:slave需配置Float inverse才能正确读取)
- 换算:实际压力 = 采集值 × 0.01
- 示例:采集值 800 → 实际压力 8.00 MPa
3-5. 燃烧状态
通过两个线圈组合判断:
| 线圈1 | 线圈2 | 状态 |
|---|---|---|
| 1 | 0 | 小火 |
| 1 | 1 | 大火 |
| 0 | 0 | 无火 |
6. 水位状态
| 采集值 | 状态 |
|---|---|
| 0 | 水位极低 |
| 1 | 水位低 |
| 2 | 水位正常 |
| 3 | 水位高 |
| 4 | 水位极高 |
7. 压力状态
| 采集值 | 状态 |
|---|---|
| 1 | 压力低 |
| 2 | 压力正常 |
| 3 | 压力高 |
| 4 | 压力极高 |
8. 故障寄存器
故障值按位解析,支持多故障同时上报:
示例:故障值 2817
1 | |
对应故障:
- 定时时间到关机(正常模式)
- 燃烧机故障
- 烟温传感器故障
- 炉水水位极低
字段名称映射
1 | |
小结
本文介绍了如何通过 Modbus 协议采集蒸汽锅炉的运行数据,包括:
- 硬件设备连接配置
- Modbus 协议地址转换
- 数据类型和倍率配置
- 状态量和故障位的解析方法
下一篇文章将介绍如何将采集到的数据上报到 MQTT 服务器。
物联网之设备数据采集(一)
https://cszy.top/20260402-物联网之设备数据采集(一)/