Skip to content

Modbus 生成与联调 ​

工具箱将 Modbus 分为 生成、客户端、服务端。生成只产生字节;客户端会发送真实请求;服务端启动后供其他客户端访问。不要将三者混为一个流程。

Modbus 生成与联调 · 下载视频

本片实际生成 RTU、TCP 示例报文;客户端和服务端仅展示设置,未发送请求或开启服务。需要联调时,再按下方对应步骤操作。

先核对工具和数字格式 ​

工具输入格式用途
RTU / TCP 生成报文字段使用 HEX生成并复制完整请求
RTU / TCP 客户端地址、数量、值等数值框使用十进制向对端发送请求
RTU / TCP 服务端按数值框填地址和值模拟寄存器

0010 在 HEX 中是十进制 16,而客户端地址框填 10 是十进制 10。寄存器编号 40001 常用于表示某类寄存器,是否对应协议地址 0 必须查对端手册,不直接照填。

RTU 生成:读一个保持寄存器 ​

  1. 打开 Modbus RTU 生成。
  2. 从站地址填 01,功能码选 03。
  3. 寄存器地址(Hex) 填 0000,长度 / 数据(Hex) 填 0001(功能码 03 下表示读取数量)。
  4. 核对预览,点击 生成报文 加入历史。
  5. 复制结果并核对最后两字节 CRC。
实际生成示例:01 03 00 00 00 01 84 0A。这里没有向现场设备发送。
实际生成示例:01 03 00 00 00 01 84 0A。这里没有向现场设备发送。 点击放大
实际生成示例:01 03 00 00 00 01 84 0A。这里没有向现场设备发送。
实际生成示例:01 03 00 00 00 01 84 0A。这里没有向现场设备发送。
片段含义
01从站地址 1
03读保持寄存器
00 00协议首地址 0
00 01数量 1
84 0AModbus CRC,低字节在前

示例不代表现场设备的有效寄存器。使用前查清地址、数量、读写权限和电气接口。

TCP 生成:同一读取请求 ​

  1. 打开 Modbus TCP 生成。
  2. 事务标识 0001,单元标识 01。
  3. 功能码 03,寄存器地址 0000,长度 / 数据(Hex) 填 0001(读取数量)。
  4. 生成并查看历史结果:00 01 00 00 00 06 01 03 00 00 00 01。
离线工具 TCP 组帧示例;MBAP 头与 RTU 的 CRC 结构不同。
离线工具 TCP 组帧示例;MBAP 头与 RTU 的 CRC 结构不同。 点击放大
离线工具 TCP 组帧示例;MBAP 头与 RTU 的 CRC 结构不同。
离线工具 TCP 组帧示例;MBAP 头与 RTU 的 CRC 结构不同。
片段含义
00 01事务标识
00 00协议标识
00 06后续单元标识与 PDU 的字节数
01单元标识
03 00 00 00 01功能码、首地址和数量

Modbus TCP 不额外追加 RTU CRC。不要直接把 RTU 完整帧复制为 TCP 请求。

客户端:直接发送请求 ​

客户端使用 发送 发起请求,没有独立的“先连接”按钮。

TCP 客户端参数与通信日志。图为初始界面,不代表已经连接现场服务。
TCP 客户端参数与通信日志。图为初始界面,不代表已经连接现场服务。 点击放大
TCP 客户端参数与通信日志。图为初始界面,不代表已经连接现场服务。
TCP 客户端参数与通信日志。图为初始界面,不代表已经连接现场服务。
  1. 打开所需 RTU 或 TCP 客户端。
  2. RTU 选择串口、波特率;TCP 填实际主机和端口。
  3. 填 Unit ID,先选已知可读的功能码,如 03 Read Holding Registers。
  4. 按协议填十进制首地址和数量,建议先读少量已知寄存器。
  5. 点击 发送,观察 TX、RX 或 ERR。
  6. 收到结果后按对端协议解释,不把原始寄存器值直接认作温度等工程量。

TCP 中 127.0.0.1 是当前电脑,不能代表另一台设备;端口按对端实际监听值填写。RTU 页面只提供当前支持的通信选项,对端需要的格式无法设置时先确认工具适用性。

功能码与数量 ​

以下功能码为界面使用的十进制编号:

功能码操作当前工具的请求数量范围
1 / 2读线圈 / 离散输入1~2000 位
3 / 4读保持 / 输入寄存器1~125 个
5 / 6写单个线圈 / 寄存器单个
15写多个线圈,线上 HEX 为 0F1~1968 位
16写多个寄存器,线上 HEX 为 101~123 个

RTU 客户端 Unit ID 为 1~247,TCP 客户端为 0~255;TCP 端口为 1~65535,这些是当前界面允许范围,不保证对端接受全部值。

地址范围为 0~65535,且“首地址 + 数量”不能超过 65536;数量还受目标实际映射和设备限制。不能因为工具允许某范围,就假设对端都存在该地址。

写入值按界面要求用逗号分隔十进制值,数量必须对应。位值用 0/1,寄存器值按 0~65535;有符号数、浮点数和多寄存器字序需先按设备协议换算。写入前确认控制后果;需要进一步确认结果时,可读回或检查实际状态。

日志怎么判断 ​

标记含义进一步确认
TX发起的请求记录目标和参数正确吗
RX请求得到响应/数据功能码、地址映射、数量和业务单位
ERR请求失败或异常完整错误、超时、连接、非法地址等

超时先查目标、端口/串口、Unit ID 和线缆;异常响应先按功能码、权限和地址范围排查。一次失败不立即改成写功能试探。

服务端:模拟寄存器 ​

TCP 服务端停止状态与寄存器区。此图未启动对外监听。
TCP 服务端停止状态与寄存器区。此图未启动对外监听。 点击放大
TCP 服务端停止状态与寄存器区。此图未启动对外监听。
TCP 服务端停止状态与寄存器区。此图未启动对外监听。
  1. 在约定测试环境打开服务端。TCP 填监听端口;RTU 选串口、波特率和 Unit ID。
  2. 选择寄存器区,添加协议地址和初始值。可先在停止状态准备映射;不同类型地址 0 是不同数据区,不能混读。
  3. 核对映射和监听参数后点击 开启服务,确认运行状态,再让测试客户端访问。
  4. 从测试客户端按同一种类型、首地址和数量读取。
  5. 修改模拟值验证客户端,测试写入时再读回检查。
  6. 测试结束点击 停止服务,确认停止;切换页面不作为已停止的证据。
区域对应类型模拟值
Holding / 4x保持寄存器0~65535
Input / 3x输入寄存器0~65535
Coil / 0x线圈0 或 1
Discrete / 1x离散输入0 或 1

例如在 Holding 添加地址 0、值 123,再从客户端用功能码 3、首地址 0、数量 1 读取,应按模拟映射取得 123。这是联调操作示例,不表示本手册已启动服务或现场设备具有该映射。

TCP 服务启动后会监听本机网络接口,局域网是否能访问还取决于防火墙和网络条件。只需离线生成时无需开启服务。

端口被占用时确认占用来源或换约定测试端口;串口被其他工具打开时先结束占用。服务端模拟值与终端实际业务配置相互独立。

设备使用指南