A must-have tool for Modbus engineers! RTU/TCP/ASCII message generation parser, efficiency increased by 10 times

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

A must-have tool for Modbus engineers! RTU/TCP/ASCII message generation parser, efficiency increased by 10 times缩略图

A must-have tool for Modbus engineers! RTU/TCP/ASCII message generation parser, efficiency increased by 10 times

Byte order of 32-bit data (UINT32/INT32/FLOAT):


前言:Modbus 调试的痛,工程师都懂

我做了 20 年工业自动化,太懂 Modbus 调试的痛苦。

你是不是也经常遇到这些情况?

场景 1:手动计算报文,容易错

要读取保持寄存器,从站地址 01,起始地址 40001,数量 10 个
你拿着计算器算:

  • 从站地址:01
  • 功能码:03
  • 起始地址:00 00(40001-1=40000=0x9C40,等等,不对...)
  • 数量:00 0A
  • CRC 校验:???

算了一半,客户打电话来,回来忘了算到哪了
重新算,CRC 算出来不对
再算,还是不对...

场景 2:收到报文,不会解析

设备返回:01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E xx xx
你盯着看:

  • 这是功能码 03 的响应
  • 14 是字节数(20 字节)
  • 但每个寄存器值是多少?
  • 字节序是 AB 还是 BA?

场景 3:三种协议,搞混了

  • RTU 用 CRC 校验
  • ASCII 用 LRC 校验
  • TCP 有 MBAP 头

一着急,用 RTU 的方式解析 TCP 报文,怎么都对不上

场景 4:调试记录,找不到

昨天调好的报文,今天找不到了
问同事要,同事说"我也忘了"
重新算,又花 1 小时

这些痛点,我都知道。

所以,我开发了这个 Modbus 报文生成解析器

它支持 RTU/TCP/ASCII 三种协议,自动生成请求/响应报文。

不用手动计算,不用记公式,点几下就生成。


一、核心功能:为什么工程师都说好?

1.1 三种协议全覆盖

支持 Modbus 三种传输模式:

协议校验方式帧格式适用场景
Modbus RTUCRC16二进制串口通信(RS485/RS232)
Modbus ASCIILRCASCII 文本老旧设备/调制解调器
Modbus TCP无校验(TCP 保证)MBAP 头 +ADU以太网通信

一个工具,搞定所有 Modbus 调试场景。


1.2 请求命令生成器

功能说明

① 支持 12 种功能码

功能码名称用途
01读线圈状态读取开关量输出
02读离散输入读取开关量输入
03读保持寄存器最常用(模拟量输出)
04读输入寄存器只读(模拟量输入)
05写单个线圈开关控制
06写单个寄存器参数设置
0F写多个线圈批量开关控制
10写多个寄存器批量参数设置
17读/写多个寄存器同时读写
2B读取设备标识设备信息查询

② 参数配置

以功能码 03(读保持寄存器)为例:

从站地址:01(0-247)
功能码:03
起始地址:0000(十六进制或十进制)
数量:0010(读取 10 个寄存器)

③ 自动生成报文

输入参数后,自动生成:

RTU 模式:

01 03 00 00 00 0A C4 0B
│  │  │  │  │  │  │  │
│  │  │  │  │  │  │  └─ CRC 低字节
│  │  │  │  │  │  └──── CRC 高字节
│  │  │  │  │  └─────── 数量低字节
│  │  │  │  └────────── 数量高字节
│  │  │  └───────────── 起始地址低字节
│  │  └──────────────── 起始地址高字节
│  └─────────────────── 功能码
└────────────────────── 从站地址

ASCII 模式:

:01030000000AFB
│            │  │
│            │  └── LRC 校验(FB)
│            └───── 数据部分(ASCII 编码)
└────────────────── 起始符(:)

TCP 模式:

00 01 00 00 00 06 01 03 00 00 00 0A
│  │  │  │  │  │  │  │  │  │  │  │
│  │  │  │  │  │  │  │  │  │  │  └─ 数量低字节
│  │  │  │  │  │  │  │  │  └─────── 数量高字节
│  │  │  │  │  │  │  │  └────────── 起始地址低字节
│  │  │  │  │  │  │  └───────────── 起始地址高字节
│  │  │  │  │  │  └──────────────── 功能码
│  │  │  │  │  │  └──────────────── 单元标识符(从站地址)
│  │  │  │  │  └─────────────────── 长度(后续字节数)
│  │  │  │  └────────────────────── 协议标识符(0=Modbus)
│  │  │  └───────────────────────── 事务标识符低字节
│  │  └──────────────────────────── 事务标识符高字节
└─────────────────────────────────── MBAP 头(7 字节)

④ 特殊功能码支持

功能码 05(写单个线圈):

  • 开关选择:打开 (ON) / 关闭 (OFF)
  • 自动转换为 FF00/0000

功能码 0F(写多个线圈):

  • 线圈数量输入
  • 可视化线圈选择(圆点按钮)
  • 点击切换状态(灰=OFF,蓝=ON)
  • 自动计算字节数

功能码 10(写多个寄存器):

  • 寄存器列表(可添加多个)
  • 每个寄存器设置:
    • 地址(自动计算)
    • 数据类型(UINT16/INT16/UINT32/INT32/FLOAT)
    • 字节序(AB/BA)
    • 数值(十进制输入)
  • 自动转换为寄存器值

1.3 响应报文生成器

功能说明

① 模拟设备响应

用于测试上位机软件(如组态王、WinCC)或 PLC 程序。

② 支持正常响应和异常响应

正常响应(功能码 03):

从站地址:01
功能码:03
字节数:20(10 个寄存器×2)
寄存器值:
  - Reg 0: 10(0x000A)
  - Reg 1: 20(0x0014)
  - Reg 2: 30(0x001E)
  - ...

异常响应:

从站地址:01
功能码:83(03+80)
异常码:
  - 01:非法功能
  - 02:非法数据地址
  - 03:非法数据值
  - 04:从站设备故障
  - 05:认可
  - 06:从属设备忙

③ 数据类型支持

支持多种数据类型,自动转换:

类型字节数范围字节序
UINT1620-65535固定
INT162-32768~32767固定
UINT3240-4294967295AB/BA
INT324-2147483648~2147483647AB/BA
FLOAT4IEEE 754 单精度AB/BA/CDAB/BADC

示例

输入十进制值:25.5(FLOAT 类型)

自动转换为寄存器值:

  • Reg 0: 0x41CC(高 16 位)
  • Reg 1: 0x0000(低 16 位)

1.4 报文解析器

功能说明

① 粘贴报文,自动解析

收到设备返回的报文,粘贴进去,自动解析:

输入(RTU 模式):

01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E 7A 3B

自动解析:

┌─────────────────────────────────────┐
│ 从站地址:01                        │
│ 功能码:03(读保持寄存器)          │
│ 字节数:20(0x14)                  │
│ 数据内容:                          │
│   Reg 0: 0x000A = 10                │
│   Reg 1: 0x000B = 11                │
│   Reg 2: 0x000C = 12                │
│   Reg 3: 0x000D = 13                │
│   Reg 4: 0x000E = 14                │
│ CRC 校验:7A3B ✓(正确)            │
└─────────────────────────────────────┘

② 支持三种协议解析

  • RTU:CRC16 校验
  • ASCII:LRC 校验
  • TCP:MBAP 头解析

③ 错误检测

  • CRC/LRC 校验错误提示
  • 报文长度异常提醒
  • 非法功能码警告

1.5 历史记录

功能说明

① 自动保存

每次生成的报文自动保存,包含:

  • 报文内容
  • 生成时间
  • 报文类型(请求/响应)

② 快捷操作

  • 复制:一键复制报文
  • 微信分享:发送给同事
  • 清空:清除历史记录

③ 分类管理

  • 请求命令历史
  • 响应报文历史
  • 分别管理,清晰明了

1.6 报文结构可视化

功能说明

生成的每个报文,都附带结构解析:

示例(RTU 请求):

┌─────────────────────────────────────┐
│ 报文结构解析                        │
├─────────────────────────────────────┤
│ 从站地址 (Slave Address): 01        │
│ 功能码 (Function Code): 03          │
│ 起始地址 (Start Address): 0000      │
│ 数量 (Quantity): 000A               │
│ CRC 校验 (CRC Check): C40B          │
└─────────────────────────────────────┘

示例(TCP 请求):

┌─────────────────────────────────────┐
│ 报文结构解析                        │
├─────────────────────────────────────┤
│ 事务标识符 (Transaction ID): 0001   │
│ 协议标识符 (Protocol ID): 0000      │
│ 长度 (Length): 0006                 │
│ 单元标识符 (Unit ID): 01            │
│ 功能码 (Function Code): 03          │
│ 起始地址 (Start Address): 0000      │
│ 数量 (Quantity): 000A               │
└─────────────────────────────────────┘

二、实战案例:工程师的真实使用场景

案例 1:读取温度传感器数据

场景

  • 设备:某品牌温度变送器
  • 通信:RS485(Modbus RTU)
  • 需求:读取 10 个通道的温度值

传统方式

  1. 查手册:保持寄存器地址 40001-40010
  2. 手动计算报文:
    • 从站地址:01
    • 功能码:03
    • 起始地址:40001-1=40000=0x9C40
    • 数量:10=0x000A
    • CRC 校验:手动算或用在线工具
  3. 用串口调试助手发送
  4. 收到响应,手动解析

耗时:15-20 分钟

使用工具后

  1. 打开工具,选择 Modbus RTU
  2. 输入参数:
    • 从站地址:01
    • 功能码:03
    • 起始地址:9C40
    • 数量:10
  3. 点击"生成请求命令"
  4. 复制报文,发送
  5. 收到响应,粘贴到解析器
  6. 自动解析出 10 个温度值

耗时:2-3 分钟

效率提升:6-10 倍


案例 2:批量设置变频器参数

场景

  • 设备:某品牌变频器
  • 通信:Modbus RTU
  • 需求:批量设置 20 个参数

传统方式

  1. 逐个参数写单个寄存器(功能码 06)
  2. 写 20 次,每次计算报文
  3. 容易出错,重复劳动

使用工具后

  1. 选择功能码 10(写多个寄存器)
  2. 添加 20 个寄存器:
    • 地址:自动计算
    • 数据类型:选择
    • 数值:输入
  3. 一次生成报文
  4. 发送,完成

耗时:从 1 小时 → 5 分钟


案例 3:调试上位机软件

场景

  • 开发组态王/WinCC 项目
  • 需要模拟 Modbus 从站设备
  • 测试上位机程序逻辑

使用工具

  1. 用响应报文生成器
  2. 设置模拟数据
  3. 生成响应报文
  4. 发送给上位机
  5. 验证程序逻辑

好处

  • 无需真实设备
  • 可模拟各种异常
  • 提高开发效率

三、技术细节:工程师关心的

3.1 CRC16 校验算法

Modbus RTU 使用 CRC16(循环冗余校验):

// CRC16 计算(低字节在前)
function calcCRC16(bytes) {
  let crc = 0xFFFF;
  for (let i = 0; i < bytes.length; i++) {
    crc ^= bytes[i];
    for (let j = 0; j < 8; j++) {
      if (crc & 0x0001) {
        crc = (crc >> 1) ^ 0xA001;
      } else {
        crc >>= 1;
      }
    }
  }
  return crc; // 低字节在前
}

示例

报文:01 03 00 00 00 0A
CRC:C4 0B(低字节在前)
完整:01 03 00 00 00 0A C4 0B

3.2 LRC 校验算法

Modbus ASCII 使用 LRC(纵向冗余校验):

// LRC 计算
function calcLRC(bytes) {
  let sum = 0;
  for (let i = 0; i < bytes.length; i++) {
    sum += bytes[i];
  }
  const lrc = ((~sum) + 1) & 0xFF;
  return lrc;
}

示例

报文:01 03 00 00 00 0A
LRC:FB
完整::01030000000AFB

3.3 字节序问题

32 位数据(UINT32/INT32/FLOAT)的字节序:

字节序名称示例(0x12345678)
ABBig Endian12 34 56 78
BALittle Endian34 12 78 56
CDABMixed56 78 12 34
BADCMixed78 56 34 12

工具支持自动转换:

  • 选择字节序
  • 输入十进制值
  • 自动转换为寄存器值

3.4 Modbus TCP 的 MBAP 头

Modbus TCP 报文结构:

┌─────────────────────────────────────┐
│ MBAP 头(7 字节)                   │
├─────────────────────────────────────┤
│ 事务标识符(2 字节)                │
│ 协议标识符(2 字节)=0              │
│ 长度(2 字节)                      │
│ 单元标识符(1 字节)=从站地址       │
├─────────────────────────────────────┤
│ PDU(功能码 + 数据)                │
└─────────────────────────────────────┘

示例

00 01 00 00 00 06 01 03 00 00 00 0A
│  │  │  │  │  │  │  │  │  │  │  │
│  │  │  │  │  │  │  │  │  │  │  └─ 数量低字节
│  │  │  │  │  │  │  │  │  └─────── 数量高字节
│  │  │  │  │  │  │  │  └────────── 起始地址低字节
│  │  │  │  │  │  │  └───────────── 起始地址高字节
│  │  │  │  │  │  └──────────────── 功能码
│  │  │  │  │  │  └──────────────── 单元标识符
│  │  │  │  │  └─────────────────── 长度(6 字节)
│  │  │  │  └────────────────────── 协议标识符(0=Modbus)
│  │  │  └───────────────────────── 事务标识符低字节
│  │  └──────────────────────────── 事务标识符高字节
└─────────────────────────────────── MBAP 头

四、用户反馈:工程师怎么说

反馈 1:自动化工程师(5 年经验)

"以前手动算 Modbus 报文,经常算错。现在用这个工具,点几下就生成,CRC 自动计算,太方便了!效率至少提升 5 倍。"

反馈 2:电气工程师(10 年经验)

"支持三种协议,不用切换工具了。特别是 TCP 的 MBAP 头,以前老是搞混,现在自动生成,不会错。"

反馈 3:PLC 工程师(8 年经验)

"响应报文生成器很好用,模拟从站设备测试 PLC 程序,无需真实设备,开发效率提高很多。"

反馈 4:调试工程师(3 年经验)

"历史记录功能很实用,昨天调好的报文,今天直接复制,不用重新算。微信分享也很方便,发给同事一起调试。"


五、写在最后

我做这个工具,不是为了取代工程师。

而是为了解放人力。

让工程师不再手动计算报文,不再记复杂的公式,不再为 CRC 校验发愁。

让大家把时间花在更有价值的事情上:

  • 系统架构设计
  • 控制逻辑优化
  • 现场问题解决

工具不是敌人,而是帮手。

善用工具的工程师,会淘汰不用工具的工程师。

希望这个工具能帮到更多同行。


附录:使用方式

使用方式 1:微信扫码

 

A must-have tool for Modbus engineers! RTU/TCP/ASCII message generation parser, efficiency increased by 10 times插图

使用方式 2:微信搜索

搜索"Modbus 调试助手"


关于作者

20 年工业自动化经验,待过设备厂商、集成商、甲方。

现专注于工业物联网、边缘计算、智能控制。

欢迎交流:


如果觉得有用,欢迎 点赞 + 在看 + 转发 支持一下!

转发给更多电气工程师,一起用工具提效!

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.