Modbus 工程师必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍

还在手动计算 Modbus 报文?这个工具支持 RTU/TCP/ASCII 三种协议,自动生成请求/响应报文,CRC/LRC 校验、报文解析、历史记录一键搞定


前言: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:微信扫码

 

Modbus 工程师必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍插图1

使用方式 2:微信搜索

搜索”Modbus 调试助手”


关于作者

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

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

欢迎交流:


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

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

相关新闻

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

cloud@modbus.cn

QQ
微信