跳到主要内容

Modbus 主站

读取 Modbus TCP、RTU 或 ASCII 设备。先确认设备 IP 或串口参数、站号,以及一个已知的寄存器地址和类型。没有设备时先做采集第一个点。

先读一个保持寄存器​

下面用 TCP 设备举例;地址和站号必须换成设备实际配置。

  1. 打开“开发配置 → 采集配置”,新建通道,类型选择 TCP 客户端,远程地址填 设备IP:端口,例如 192.168.1.10:502,保存。
  2. 在这个通道下新增设备,采集插件选择“Modbus 主站”。
  3. 在插件属性中把“Modbus类型”设为 ModbusTcp,“默认站号”填写设备站号。示例使用 1,不是所有设备都用 1。
  4. 设备执行间隔先用 1000 毫秒,其余超时、打包和并发参数保持默认,保存并启用。
  5. 选择设备,新增变量,名称填 TestValue,寄存器地址填 40001,类型选 Int16,保持启用并保存。本例要求从站的第一个保持寄存器是有符号 16 位整数。
  6. 回到变量列表,查看当前值、在线状态和采集时间。把当前值与设备显示或已知测试值对比。

读到正确值后,再添加其余点位。第一次读取不需要写入设备,也不用调整所有高级参数。

串口设备怎么改​

通道类型选择串口,填写实际 COM 口及设备要求的波特率、数据位、停止位、校验位。设备的 Modbus 类型选择对应的 RTU 或 ASCII,站号仍按设备填写。不要把 Modbus TCP 与 RTU over TCP 当作同一种报文格式。

对照 TCP、RTU 和 ASCII 的真实报文​

先在一种传输下读通同一已知寄存器,例如站号 1、40001、Int16、值 1234,再切换协议与传输。仅修改通道名称不会改变报文格式。

格式联调时核对
Modbus TCPTCP 连接及 MBAP 头、事务与功能码;端口按设备实际配置。
RTU二进制站号、功能码、数据和 CRC;串口参数与源端逐项一致。RTU over TCP 仍使用 RTU 帧。
ASCII文本帧起始、结束和 LRC,与设备 ASCII 设置一致;不能向 RTU 端点发送 ASCII 帧。
  1. 在当前设备调试页读一个点,确认源端、采集表与直接读取结果一致。
  2. 查看“消息”里的实际请求与响应,确认站号和功能码。40001 与 F=3;0 应定位同一个寄存器。
  3. 串口切换协议前先停用相关任务,释放占用;按源端设置重新配置,启用后重新读取同一值。
  4. 分别测试线圈与保持寄存器,再增加数组和多寄存器类型。数组长度是元素数,打包上限是位数或寄存器数。
  5. 安全点位写入一个不同值,通过独立主站回读源端,再确认网关后续采集。失败时区分没有响应、协议异常和类型解析错误。

串口流控、超时和报文分段见通道传输;大批点表见批量配置。

支持的通道和数据类型​

通道类型配置前检查
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 请求、响应、功能码和异常码,用于定位地址或链路问题。

读写​

Modbus 主站 读写

  1. 打开“读写”,输入同一个测试地址 40001,选择 Int16,读取数量填 1。
  2. 点击“读取”,核对返回结果。需要临时使用另一个站号时,地址可写为 S=2;F=3;0。
  3. 读取失败时查看错误消息,再打开“消息”查看请求和响应。

“写入”会修改从站数据,首次验证不用点击。只有已确认安全的测试寄存器才能写入。

消息​

Modbus 主站 消息

查看设备收发消息和协议日志,定位报文格式、连接和解析问题。

没读到正确值时​

现象先检查
连接超时IP、端口、TCP/RTU 类型,设备是否允许网关连接
有响应但地址错误站号、功能区及偏移;40001 对应 F=3;0,不是 F=3;1
数值明显不对有无符号、16/32 位类型、跨寄存器字节序是否与点表一致
串口无响应串口占用、接线、波特率、校验位和站号
单点成功、批量失败降低对应 FC 的打包数量,并检查点表是否跨越设备不允许的地址区间

相关操作​

  • 采集配置:查看通道、设备和公共变量配置。
  • 插件索引:查找其它采集或数据转发插件。