切换深色模式
Modbus 生成与联调
工具箱将 Modbus 分为 生成、客户端、服务端。生成只产生字节;客户端会发送真实请求;服务端启动后供其他客户端访问。不要将三者混为一个流程。
本片实际生成 RTU、TCP 示例报文;客户端和服务端仅展示设置,未发送请求或开启服务。需要联调时,再按下方对应步骤操作。
先核对工具和数字格式
| 工具 | 输入格式 | 用途 |
|---|---|---|
| RTU / TCP 生成 | 报文字段使用 HEX | 生成并复制完整请求 |
| RTU / TCP 客户端 | 地址、数量、值等数值框使用十进制 | 向对端发送请求 |
| RTU / TCP 服务端 | 按数值框填地址和值 | 模拟寄存器 |
0010 在 HEX 中是十进制 16,而客户端地址框填 10 是十进制 10。寄存器编号 40001 常用于表示某类寄存器,是否对应协议地址 0 必须查对端手册,不直接照填。
RTU 生成:读一个保持寄存器
- 打开 Modbus RTU 生成。
- 从站地址填
01,功能码选03。 - 寄存器地址(Hex) 填
0000,长度 / 数据(Hex) 填0001(功能码 03 下表示读取数量)。 - 核对预览,点击 生成报文 加入历史。
- 复制结果并核对最后两字节 CRC。

| 片段 | 含义 |
|---|---|
01 | 从站地址 1 |
03 | 读保持寄存器 |
00 00 | 协议首地址 0 |
00 01 | 数量 1 |
84 0A | Modbus CRC,低字节在前 |
示例不代表现场设备的有效寄存器。使用前查清地址、数量、读写权限和电气接口。
TCP 生成:同一读取请求
- 打开 Modbus TCP 生成。
- 事务标识
0001,单元标识01。 - 功能码
03,寄存器地址0000,长度 / 数据(Hex) 填0001(读取数量)。 - 生成并查看历史结果:
00 01 00 00 00 06 01 03 00 00 00 01。

| 片段 | 含义 |
|---|---|
00 01 | 事务标识 |
00 00 | 协议标识 |
00 06 | 后续单元标识与 PDU 的字节数 |
01 | 单元标识 |
03 00 00 00 01 | 功能码、首地址和数量 |
Modbus TCP 不额外追加 RTU CRC。不要直接把 RTU 完整帧复制为 TCP 请求。
客户端:直接发送请求
客户端使用 发送 发起请求,没有独立的“先连接”按钮。

- 打开所需 RTU 或 TCP 客户端。
- RTU 选择串口、波特率;TCP 填实际主机和端口。
- 填 Unit ID,先选已知可读的功能码,如 03 Read Holding Registers。
- 按协议填十进制首地址和数量,建议先读少量已知寄存器。
- 点击 发送,观察 TX、RX 或 ERR。
- 收到结果后按对端协议解释,不把原始寄存器值直接认作温度等工程量。
TCP 中 127.0.0.1 是当前电脑,不能代表另一台设备;端口按对端实际监听值填写。RTU 页面只提供当前支持的通信选项,对端需要的格式无法设置时先确认工具适用性。
功能码与数量
以下功能码为界面使用的十进制编号:
| 功能码 | 操作 | 当前工具的请求数量范围 |
|---|---|---|
| 1 / 2 | 读线圈 / 离散输入 | 1~2000 位 |
| 3 / 4 | 读保持 / 输入寄存器 | 1~125 个 |
| 5 / 6 | 写单个线圈 / 寄存器 | 单个 |
| 15 | 写多个线圈,线上 HEX 为 0F | 1~1968 位 |
| 16 | 写多个寄存器,线上 HEX 为 10 | 1~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 填监听端口;RTU 选串口、波特率和 Unit ID。
- 选择寄存器区,添加协议地址和初始值。可先在停止状态准备映射;不同类型地址 0 是不同数据区,不能混读。
- 核对映射和监听参数后点击 开启服务,确认运行状态,再让测试客户端访问。
- 从测试客户端按同一种类型、首地址和数量读取。
- 修改模拟值验证客户端,测试写入时再读回检查。
- 测试结束点击 停止服务,确认停止;切换页面不作为已停止的证据。
| 区域 | 对应类型 | 模拟值 |
|---|---|---|
| Holding / 4x | 保持寄存器 | 0~65535 |
| Input / 3x | 输入寄存器 | 0~65535 |
| Coil / 0x | 线圈 | 0 或 1 |
| Discrete / 1x | 离散输入 | 0 或 1 |
例如在 Holding 添加地址 0、值 123,再从客户端用功能码 3、首地址 0、数量 1 读取,应按模拟映射取得 123。这是联调操作示例,不表示本手册已启动服务或现场设备具有该映射。
TCP 服务启动后会监听本机网络接口,局域网是否能访问还取决于防火墙和网络条件。只需离线生成时无需开启服务。
端口被占用时确认占用来源或换约定测试端口;串口被其他工具打开时先结束占用。服务端模拟值与终端实际业务配置相互独立。