跳到主要内容

ModbusMatser

概述

ModbusMaster 作为主站,主动采集 Modbus 从站协议的设备数据。该插件支持 Modbus TCP 和 Modbus RTU 格式报文,适用于各种工业自动化场景。

主要特性

  • 协议支持:支持 Modbus TCP 和 Modbus RTU 格式报文
  • 高可用:支持粘包,半包等情况自动解析
  • 通信方式:支持 TCP 客户端、TCP 服务(DTU)、串口、UDP 通信
  • 功能码:支持 01、02、03、04、05、06、15、16 功能码
  • 数据类型:支持所有 Modbus 标准数据类型
  • 高性能:基于异步架构,提供高性能的数据访问
  • 易用性:提供简洁的配置界面,易于集成和使用

适用场景

  • 工业自动化设备数据采集
  • PLC 设备通信
  • 传感器数据采集
  • 智能仪表数据读取

插件属性配置项

基本配置

属性说明备注
Modbus 协议类型Modbus TCP/Modbus RTU 格式报文选择协议类型
默认站号默认的 Modbus 站号 ID变量可单独配置站号
DTU 注册包匹配初始包内容仅适用于 TcpService 链路(DTU 模式)
解析顺序4 个字节以上的数据解析,可设置为 ABCD/BADC/CDBA/DCBA,默认 ABCD,变量可单独配置ABCD:Big-Endian
BADC:Big-Endian Byte Swap
CDAB:Little-Endian Byte Swap
DCBA:Little-Endian
读写超时时间读写超时时间(毫秒)3000
发送延时在发送请求前的延时时间(毫秒)0
最大打包长度打包长度,最大限值是 125100
字符串反转字符串变量按字为单位调换false
失败重试次数读取失败时,重试 n 次后判定变量为离线3
占空比N次写入执行一次读取3
写优先写入时优先写,取消读操作false

协议类型说明

Modbus TCP

Modbus TCP 使用 MBAP 报文头:

+--------+--------+--------+--------+--------+--------+--------+--------+
| 事务标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 数据域 |
+--------+--------+--------+--------+--------+--------+--------+--------+
| 2字节 | 2字节 | 2字节 | 1字节 | 1字节 | N字节
+--------+--------+--------+--------+--------+--------+--------+--------+

Modbus RTU

Modbus RTU 使用CRC 校验:

+--------+--------+--------+--------+--------+--------+--------+--------+
| 从站地址 | 功能码 | 数据域 | CRC 校验 |
+--------+--------+--------+--------+--------+--------+--------+--------+
| 1字节 | 1字节 | N字节 | 2字节 |
+--------+--------+--------+--------+--------+--------+--------+--------+

变量地址配置项

基本地址

Modbus PLC 寄存器地址格式:

地址功能码说明
4xxxxx03读取保持寄存器
3xxxxx04读取输入寄存器
1xxxxx02读取输入线圈
0xxxxx01读取输出线圈

站号配置(可选)

当需要指定站号地址时,可使用以下格式:

地址说明
s=2;10001读取 02 功能码,设备地址为 2
s=11;40001读取 03 功能码,设备地址为 11

写入功能码配置(可选)

当需要指定 16/15 功能码时,可使用以下格式:

地址说明
w=15;10001读取 02 功能码,写入 15 功能码
w=16;40001读取 03 功能码,写入 16 功能码

解析顺序配置(可选)

当需要指定解析顺序时,可使用以下格式:

地址说明
o=ABCD;40001使用 ABCD 解析顺序
o=BADC;40001使用 BADC 解析顺序
o=CDAB;40001使用 CDAB 解析顺序
o=DCBA;40001使用 DCBA 解析顺序

功能码说明

读取功能码

功能码名称说明地址格式
01读取线圈读取输出线圈状态0xxxxx
02读取离散输入读取输入线圈状态1xxxxx
03读取保持寄存器读取保持寄存器值4xxxxx
04读取输入寄存器读取输入寄存器值3xxxxx

写入功能码

功能码名称说明地址格式
05写入单个线圈写入单个输出线圈0xxxxx
06写入单个寄存器写入单个保持寄存器4xxxxx
15写入多个线圈写入多个输出线圈0xxxxx
16写入多个寄存器写入多个保持寄存器4xxxxx

数据类型说明

基本数据类型

数据类型说明长度范围
Bool布尔型1 bitTrue/False
Byte字节1 byte0 ~ 255
Short短整数2 bytes-32768 ~ 32767
UShort无符号短整数2 bytes0 ~ 65535
Int整数4 bytes-2147483648 ~ 2147483647
UInt无符号整数4 bytes0 ~ 4294967295
Float单精度浮点数4 bytes±3.4E38
Double双精度浮点数8 bytes±1.7E308
String字符串可变字符串

解析顺序说明

ABCD(Big-Endian)

地址 40001-40002: 0x1234 0x5678
解析结果: 0x12345678

BADC(Big-Endian Byte Swap)

地址 40001-40002: 0x1234 0x5678
解析结果: 0x34127856

CDAB(Little-Endian Byte Swap)

地址 40001-40002: 0x1234 0x5678
解析结果: 0x56781234

DCBA(Little-Endian)

地址 40001-40002: 0x1234 0x5678
解析结果: 0x78563412

常见问题

Q1: 连接设备失败怎么办?

A: 检查以下几点:

  1. 确认设备 IP 地址和端口配置正确
  2. 检查网络连接是否正常
  3. 确认 Modbus 协议类型配置正确
  4. 检查设备是否允许外部连接
  5. 确认防火墙设置

Q2: 读取数据超时怎么办?

A: 检查以下几点:

  1. 增加超时时间设置
  2. 检查设备负载
  3. 减少读取的数据量
  4. 优化网络连接

Q3: 如何处理数据解析错误?

A: 检查以下几点:

  1. 确认解析顺序配置正确
  2. 检查数据类型是否匹配
  3. 确认地址格式正确
  4. 使用单独配置覆盖默认设置

Q4: 支持哪些功能码?

A: 支持以下功能码:

  • 读取功能码:01、02、03、04
  • 写入功能码:05、06、15、16

Q5: 如何提高读取性能?

A: 采用以下方法:

  1. 使用打包读取,减少通信次数
  2. 合理设置超时时间
  3. 优化网络连接
  4. 减少读取的数据量

Q6: Modbus TCP 和 Modbus RTU 有什么区别?

A: 主要区别如下:

特性Modbus TCPModbus RTU
报文头MBAP 报文头从站地址
校验无应用层校验CRC 校验