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、RTU 和 ASCII 的真实报文
先在一种传输下读通同一已知寄存器,例如站号 1、40001、Int16、值 1234,再切换协议与传输。仅修改通道名称不会改变报文格式。
| 格式 | 联调时核对 |
|---|---|
| Modbus TCP | TCP 连接及 MBAP 头、事务与功能码;端口按设备实际配置。 |
| RTU | 二进制站号、功能码、数据和 CRC;串口参数与源端逐项一致。RTU over TCP 仍使用 RTU 帧。 |
| ASCII | 文本帧起始、结束和 LRC,与设备 ASCII 设置一致;不能向 RTU 端点发送 ASCII 帧。 |
- 在当前设备调试页读一个点,确认源端、采集表与直接读取结果一致。
- 查看“消息”里的实际请求与响应,确认站号和功能码。
40001与F=3;0应定位同一个寄存器。 - 串口切换协议前先停用相关任务,释放占用;按源端设置重新配置,启用后重新读取同一值。
- 分别测试线圈与保持寄存器,再增加数组和多寄存器类型。数组长度是元素数,打包上限是位数或寄存器数。
- 安全点位写入一个不同值,通过独立主站回读源端,再确认网关后续采集。失败时区分没有响应、协议异常和类型解析错误。
支持的通道和数据类型
| 通道类型 | 配置前检查 |
|---|---|
| TCP 客户端 | 确认设备 IP、端口和网关到设备的网络可达性。 |
| TCP 服务端 | 确认本地监听地址和端口可用,并允许现场设备主动连接网关。 |
| 串口 | 确认串口未被其它程序占用,并与设备保持一致的波特率、数据位、停止位和校验位。 |
| UDP | 确认本地绑定地址、端口和防火墙规则,并核对报文来源。 |
可选数据类型: Boolean、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Float、Double、String、Decimal
插件参数
通道类型、远程/绑定地址、串口、TLS、连接超时和通道并发在关联通道中配置,可从设备编辑器的“关联通道”旁打开通道编辑器。失败重试、读写占空比、写优先、读写超时、数据解析顺序和字符串反转属于设备插件属性。公共字段见采集配置,本页列出 Modbus 专用字段。
协议参数
| 参数 | 说明 |
|---|---|
| Modbus类型 | 普通 Modbus TCP 选 ModbusTcp;RTU、ASCII 或透传连接按设备实际报文类型选择。 |
| 默认站号 | 默认 1,按设备站号修改;地址中写了 S= 时,以该变量地址的站号为准。 |
运行与数据格式
| 参数 | 说明 |
|---|---|
| 读写超时时间 | 默认 3000 毫秒,限制单次协议等待,不设置采集周期。 |
| 失败重试次数 | 默认 3,失败后的重试按错误类型和驱动策略执行;会增加请求与等待成本。 |
| 帧前时间 | 默认 0 毫秒,发送前的等待;多个读包会分别产生等待,不是 RTU 帧边界设置。 |
| 读写占空比 | 默认 3,持续读写竞争时按写操作次数给等待读取让出机会;不是百分比,也不保证任意窗口恰好 3:1。 |
| 写优先 | 默认关闭,影响支持该设置的读写竞争调度;写入后仍需核对返回结果和源端反馈。 |
| 数据解析顺序 | 默认 ABCD,多字节数值按点表选择 ABCD、BADC、CDAB、DCBA,地址中的 data= 可为单点指定。 |
| 字符串反转字节 | 默认关闭。开启后在每个字内交换两个字符,例如同一 ASCII 源 PLC001 读为 LP0C10;它不是数值字节序或字符编码转换。 |
打包规则
首次只读一个点时全部保持默认。批量读取失败、但单点读取成功时,再按设备说明书降低对应功能码的数量上限。
| 参数 | 说明 |
|---|---|
| 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=,写入功能码由变量数据类型和协议默认规则决定。
字节序 data、字符串长度 len、BCD 格式 bcd 和字符编码 encoding 的配置方法及组合示例,见变量寄存器通用配置。
寄存器位与 Byte 的检查
保持寄存器的 Boolean 可用 .0~.15 指定位。已知寄存器 1234 的原字节为 04 D2,40001.0 应为 false,40001.1 应为 true;不能把整个非零寄存器都解释成同一布尔值。
Byte 的周期采集与调试单字节读取应分别核对:同一源 04 D2,周期变量 40001.0 可读取低字节 210,而调试“读写”中的单个 Byte 读取返回响应首字节 4,该调试入口不会用 .1 后缀改选低字节。验证业务点时以变量采集结果和原帧对应,不用单次调试 Byte 的结果替代点表映射。
数组长度表示元素数。Int16 三元素需要三个寄存器,Float 三元素需要六个寄存器;单变量数组超过从站一次允许的长度时,应缩短数组或拆分变量,不能只调整变量行数。
单次数组写入还必须满足 FC15/FC16 上限,不会因为上限较小就自动拆成多笔。例如写入三个 Int16 时,FC16 上限为 2 会拒绝该请求;上限为 4 且源端允许这段范围时才可写入。多地址批量操作应逐点查看结果,不能将外层请求成功视为全部地址成功。
Decimal 使用十六字节表示,占八个保持寄存器;它不是通用的 PLC 十进制格式。按设备定义选择整数加比例、Float 或 Double,不要把其他布局直接标为 Decimal。核对 64 位累计量时,还应检查源端原字节和接收端的完整整数表示,避免仅凭浏览器中的近似数字判断精度。
设备调试
进入“开发配置 → 采集配置”,选择当前设备后点击“更多功能”并打开“调试”。
| 功能 | 作用 |
|---|---|
| 读写 | 按站号、寄存器地址和数据类型读取或写入测试值。写入前确认功能码和现场安全。 |
| 消息 | 查看 Modbus 请求、响应、功能码和异常码,用于定位地址或链路问题。 |
读写

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

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