Modbus 主站
读取 Modbus TCP、RTU 或 ASCII 设备。先确认设备 IP 或串口参数、站号,以及一个已知的寄存器地址和类型。没有设备时先做采集第一个点。
先读一个保持寄存器
下面用 TCP 设备举例;地址和站号必须换成设备实际配置。
- 打开“开发配置 → 采集配置”,新建通道,类型选择 TCP 客户端,远程地址填
设备IP:端口,例如192.168.1.10:502,保存。 - 在这个通道下新增设备,采集插件选择“Modbus 主站”。
- 在插件属性中把“Modbus类型”设为
ModbusTcp,“默认站号”填写设备站号。示例使用1,不是所有设备都用1。 - 设备执行间隔先用
1000毫秒,其余超时、打包和并发参数保持默认,保存并启用。 - 选择设备,新增变量,名称填
TestValue,寄存器地址填40001,类型选Int16,保持启用并保存。本例要求从站的第一个保持寄存器是有符号 16 位整数。 - 回到变量列表,查看当前值、在线状态和采集时间。把当前值与设备显示或已知测试值对比。
读到正确值后,再添加其余点位。第一次读取不需要写入设备,也不用调整所有高级参数。
串口设备怎么改
通道类型选择串口,填写实际 COM 口及设备要求的波特率、数据位、停止位、校验位。设备的 Modbus 类型选择对应的 RTU 或 ASCII,站号仍按设备填写。不要把 Modbus TCP 与 RTU over TCP 当作同一种报文格式。
支持的通道和数据类型
| 通道类型 | 配置前检查 |
|---|---|
| TCP 客户端 | 确认设备 IP、端口和网关到设备的网络可达性。 |
| TCP 服务端 | 确认本地监听地址和端口可用,并允许现场设备主动连接网关。 |
| 串口 | 确认串口未被其它程序占用,并与设备保持一致的波特率、数据位、停止位和校验位。 |
| UDP | 确认本地绑定地址、端口和防火墙规则,并核对报文来源。 |
可选数据类型: Boolean、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Float、Double、String、Decimal
插件参数
Modbus 主站继承采集公共属性。通道类型、远程地址/本地绑定地址、串口参数、TLS、连接超时、失败重试、读写占空比、写优先、数据解析顺序、字符串反转和最大并发数仍在设备属性中显示,具体字段和通道联动见采集配置。本页只列出 Modbus 专用字段。
协议参数
| 参数 | 说明 |
|---|---|
| Modbus类型 | 普通 Modbus TCP 选 ModbusTcp;RTU、ASCII 或透传连接按设备实际报文类型选择。 |
| 默认站号 | 默认 1,按设备站号修改;地址中写了 S= 时,以该变量地址的站号为准。 |
打包规则
首次只读一个点时全部保持默认。批量读取失败、但单点读取成功时,再按设备说明书降低对应功能码的数量上限。
| 参数 | 说明 |
|---|---|
| FC1 最大读取线圈位数量 | 默认 1600 位,可填 1~2000;限制一次读取的线圈位数。 |
| FC2 最大读取离散输入位数量 | 默认 1600 位,可填 1~2000;限制一次读取的离散输入位数。 |
| FC3 最大读取保持寄存器数量 | 默认 100 个,可填 1~125;按寄存器数量计算,不是变量条数。 |
| FC4 最大读取输入寄存器数量 | 默认 100 个,可填 1~125;按寄存器数量计算,不是变量条数。 |
| FC15 最大批量写入线圈位数量 | 默认 1968 位,可填 1~1968;只影响批量写线圈,不用于调整读取。 |
| FC16 最大批量写入寄存器数量 | 默认 123 个,可填 1~123;只影响批量写寄存器,不用于调整读取。 |
连接配置
| 参数 | 说明 |
|---|---|
| DTU ID | 仅通过 DTU 服务连接时填写登记的设备标识;直连设备留空。 |
“通道类型”为 DTU 服务时,DTU ID 必须与DTU 服务中登记的设备标识完全一致;直连 TCP、串口和 UDP 不需要填写该值。
地址规则
- 线圈使用从
00001开始的地址编号。 - 离散输入使用从
10001开始的地址编号。 - 输入寄存器使用从
30001开始的地址编号。 - 保持寄存器使用从
40001开始的地址编号。 40001表示保持寄存器的第一个寄存器。40001;s=2;表示使用站号2读取保持寄存器。40001;w=16;表示写入时使用功能码16。F=3;100表示显式使用功能码3从协议偏移100读取保持寄存器;使用F=时地址是零基偏移,不再按40001这类区域前缀换算。- 多个选项用分号分隔,例如
S=2;F=3;100;站号、功能码和写功能码只作用于当前变量地址。
地址中的 W= 只接受大于 0 的功能码,批量写入通常使用 15(多线圈)或 16(多寄存器)。如果不填写 W=,写入功能码由变量数据类型和协议默认规则决定。
设备调试
进入“开发配置 → 采集配置”,选择当前设备后点击“更多功能”并打开“调试”。
| 功能 | 作用 |
|---|---|
| 读写 | 按站号、寄存器地址和数据类型读取或写入测试值。写入前确认功能码和现场安全。 |
| 消息 | 查看 Modbus 请求、响应、功能码和异常码,用于定位地址或链路问题。 |
读写

- 打开“读写”,输入同一个测试地址
40001,选择Int16,读取数量填1。 - 点击“读取”,核对返回结果。需要临时使用另一个站号时,地址可写为
S=2;F=3;0。 - 读取失败时查看错误消息,再打开“消息”查看请求和响应。
“写入”会修改从站数据,首次验证不用点击。只有已确认安全的测试寄存器才能写入。
消息

查看设备收发消息和协议日志,定位报文格式、连接和解析问题。
没读到正确值时
| 现象 | 先检查 |
|---|---|
| 连接超时 | IP、端口、TCP/RTU 类型,设备是否允许网关连接 |
| 有响应但地址错误 | 站号、功能区及偏移;40001 对应 F=3;0,不是 F=3;1 |
| 数值明显不对 | 有无符号、16/32 位类型、跨寄存器字节序是否与点表一致 |
| 串口无响应 | 串口占用、接线、波特率、校验位和站号 |
| 单点成功、批量失败 | 降低对应 FC 的打包数量,并检查点表是否跨越设备不允许的地址区间 |