Modbus 工程师必备神器!RTU/TCP/ASCII message生成Parse器,效率提升 10 倍

freefree技术Resources

这篇内容可直接阅读,适合用于基础学习和Search引流。

Modbus 工程师必备神器!RTU/TCP/ASCII message生成Parse器,效率提升 10 倍缩略图
🌐 This page is not yet available in English. Showing the Chinese version. Back to Chinese page.
本文目录
  1. 1. 前言:Modbus debug的痛,工程师都懂
  2. 2. 一、核心Function:为什么工程师都说好?
  3. 3. 1.1 三种协议全覆盖
  4. 4. 1.2 Request命令生成器
  5. 5. 1.3 Responsemessage生成器
  6. 6. 1.4 messageParse器
  7. 7. 1.5 历史记录
  8. 8. 1.6 message结构可视化
  9. 9. 二、实战案例:工程师的真实使用Scene
  10. 10. 案例 1:读取temperature sensordata
  11. 11. 案例 2:批量设置变频器参数
  12. 12. 案例 3:debug上位机软件
  13. 13. 三、技术细节:工程师关心的
  14. 14. 3.1 CRC16 校验算法
  15. 15. 3.2 LRC 校验算法
  16. 16. 3.3 endianness问题
  17. 17. 3.4 Modbus TCP 的 MBAP 头
  18. 18. 四、用户反馈:工程师怎么说
  19. 19. 五、写在最后
  20. 20. 附录:使用方式

Modbus 工程师必备神器!RTU/TCP/ASCII message生成Parse器,效率提升 10 倍

还在手动计算 Modbus message?这个Tools支持 RTU/TCP/ASCII 三种协议,自动Generate request/Responsemessage,CRC/LRC 校验、messageParse、历史记录一键搞定


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

我做了 20 年Automation,太懂 Modbus debug的痛苦。

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

Scene 1:手动计算message,容易错

要Read and hold register,slave address 01,starting address 40001,quantity 10 个
你拿着计算器算:

  • slave address:01
  • function code:03
  • starting address:00 00(40001-1=40000=0x9C40,等等,不对…)
  • quantity:00 0A
  • CRC verification:???

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

Scene 2:收到message,不会Parse

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

  • 这是function code 03 的Response
  • 14 是byte count(20 byte)
  • 但每个register value是多少?
  • endianness是 AB 还是 BA?

Scene 3:三种协议,搞混了

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

一着急,用 RTU 的方式Parse TCP message,怎么都对不上

Scene 4:debug记录,找不到

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

这些痛点,我都知道。

所以,我开发了这个 Modbus message生成Parse器

它支持 RTU/TCP/ASCII 三种协议,自动Generate request/Responsemessage。

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


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

1.1 三种协议全覆盖

支持 Modbus 三种传输模式:

协议校验方式帧format适用Scene
Modbus RTUCRC16binary串口通信(RS485/RS232)
Modbus ASCIILRCASCII Text老旧设备/调制解调器
Modbus TCP无校验(TCP 保证)MBAP 头 +ADU以太网通信

一个Tools,搞定所有 Modbus debugScene。


1.2 Request命令生成器

Function说明

① 支持 12 种function code

function code名称用途
01读Coil status读取switch量输出
02读离散输入读取switch量输入
03读保持register最常用(模拟量输出)
04读输入register只读(模拟量输入)
05写单个线圈switch控制
06写单个register参数设置
0F写多个线圈批量switch控制
10写多个register批量参数设置
17读/写多个register同时读写
2B读取设备标识设备信息查询

② 参数配置

以function code 03(读保持register)为例:

slave address:01(0-247)
function code:03
starting address:0000(hexadecimal或decimal)
quantity:0010(读取 10 个register)

③ 自动生成message

输入参数后,自动生成:

RTU 模式:

01 03 00 00 00 0A C4 0B
│  │  │  │  │  │  │  │
│  │  │  │  │  │  │  └─ CRC lowbyte
│  │  │  │  │  │  └──── CRC highbyte
│  │  │  │  │  └─────── quantity低byte
│  │  │  │  └────────── quantity高byte
│  │  │  └───────────── starting address低byte
│  │  └──────────────── starting address高byte
│  └─────────────────── function code
└────────────────────── slave address

ASCII 模式:

:01030000000AFB
│            │  │
│            │  └── LRC 校验(FB)
│            └───── data部分(ASCII Coding)
└────────────────── start符(:)

TCP 模式:

00 01 00 00 00 06 01 03 00 00 00 0A
│  │  │  │  │  │  │  │  │  │  │  │
│  │  │  │  │  │  │  │  │  │  │  └─ quantity低byte
│  │  │  │  │  │  │  │  │  └─────── quantity高byte
│  │  │  │  │  │  │  │  └────────── starting address低byte
│  │  │  │  │  │  │  └───────────── starting address高byte
│  │  │  │  │  │  └──────────────── function code
│  │  │  │  │  │  └──────────────── Unit identifier(slave address)
│  │  │  │  │  └─────────────────── Length(后续byte count)
│  │  │  │  └────────────────────── Protocol Identifier(0=Modbus)
│  │  │  └───────────────────────── Transaction identifier低byte
│  │  └──────────────────────────── Transaction identifier高byte
└─────────────────────────────────── MBAP 头(7 byte)

④ 特殊function code支持

function code 05(写单个线圈):

  • switch选择:Open (ON) / Turn off (OFF)
  • 自动转换为 FF00/0000

function code 0F(写多个线圈):

  • 线圈quantity输入
  • 可视化Coil selection(圆点button)
  • ClickSwitch状态(灰=OFF,蓝=ON)
  • 自动计算byte count

function code 10(写多个register):

  • register列表(可添加多个)
  • 每个register设置:
    • address(自动计算)
    • data type(UINT16/INT16/UINT32/INT32/FLOAT)
    • endianness(AB/BA)
    • numerical value(decimal输入)
  • 自动转换为register value

1.3 Responsemessage生成器

Function说明

① 模拟设备Response

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

② 支持正常Response和Exception Response

正常Response(function code 03):

slave address:01
function code:03
byte count:20(10 个register×2)
register value:
  - Reg 0: 10(0x000A)
  - Reg 1: 20(0x0014)
  - Reg 2: 30(0x001E)
  - ...

Exception Response:

slave address:01
function code:83(03+80)
Exception Code:
  - 01:Illegal function
  - 02:Illegal data address
  - 03:Illegal data value
  - 04:Substation equipment malfunction
  - 05:认可
  - 06:从属设备忙

③ data type支持

支持多种data type,自动转换:

Typebyte count范围endianness
UINT1620-65535固定
INT162-32768~32767固定
UINT3240-4294967295AB/BA
INT324-2147483648~2147483647AB/BA
FLOAT4IEEE 754 单精度AB/BA/CDAB/BADC

示例

输入Decimal value:25.5(FLOAT Type)

自动转换为register value:

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

1.4 messageParse器

Function说明

① 粘贴message,自动Parse

收到设备返回的message,粘贴进去,自动Parse:

输入(RTU 模式):

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

自动Parse:

┌─────────────────────────────────────┐
│ slave address:01                        │
│ function code:03(读保持register)          │
│ byte count:20(0x14)                  │
│ data内容:                          │
│   Reg 0: 0x000A = 10                │
│   Reg 1: 0x000B = 11                │
│   Reg 2: 0x000C = 12                │
│   Reg 3: 0x000D = 13                │
│   Reg 4: 0x000E = 14                │
│ CRC verification:7A3B ✓(正确)            │
└─────────────────────────────────────┘

② 支持三种协议Parse

  • RTU:CRC16 校验
  • ASCII:LRC 校验
  • TCP:MBAP 头Parse

③ Error检测

  • CRC/LRC 校验Error提示
  • messageLength异常提醒
  • Illegal function码警告

1.5 历史记录

Function说明

① 自动保存

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

  • message内容
  • 生成time
  • message type(Request/Response)

② 快捷Operation

  • Copy:一键Copymessage
  • 微信分享:send给同事
  • Clear:Clear历史记录

③ Category管理

  • Request命令历史
  • Responsemessage历史
  • 分别管理,清晰明了

1.6 message结构可视化

Function说明

生成的每个message,都附带结构Parse:

示例(RTU Request):

┌─────────────────────────────────────┐
│ message结构Parse                        │
├─────────────────────────────────────┤
│ slave address (Slave Address): 01        │
│ function code (Function Code): 03          │
│ starting address (Start Address): 0000      │
│ quantity (Quantity): 000A               │
│ CRC verification (CRC Check): C40B          │
└─────────────────────────────────────┘

示例(TCP Request):

┌─────────────────────────────────────┐
│ message结构Parse                        │
├─────────────────────────────────────┤
│ Transaction identifier (Transaction ID): 0001   │
│ Protocol Identifier (Protocol ID): 0000      │
│ Length (Length): 0006                 │
│ Unit identifier (Unit ID): 01            │
│ function code (Function Code): 03          │
│ starting address (Start Address): 0000      │
│ quantity (Quantity): 000A               │
└─────────────────────────────────────┘

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

案例 1:读取temperature sensordata

Scene

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

传统方式

  1. 查手册:保持register address 40001-40010
  2. 手动计算message:
    • slave address:01
    • function code:03
    • starting address:40001-1=40000=0x9C40
    • quantity:10=0x000A
    • CRC verification:手动算或用Online Tools
  3. 用Serial Port DebuggingAssistantsend
  4. 收到Response,手动Parse

耗时:15-20 分钟

使用Tools后

  1. Open the tool,选择 Modbus RTU
  2. 输入参数:
    • slave address:01
    • function code:03
    • starting address:9C40
    • quantity:10
  3. Click”Generate request命令”
  4. Copymessage,send
  5. 收到Response,粘贴到Parse器
  6. 自动Parse出 10 个temperature值

耗时:2-3 分钟

效率提升:6-10 倍


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

Scene

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

传统方式

  1. 逐个参数写单个register(function code 06)
  2. 写 20 次,每次计算message
  3. 容易出错,重复劳动

使用Tools后

  1. 选择function code 10(写多个register)
  2. 添加 20 个register:
    • address:自动计算
    • data type:选择
    • numerical value:输入
  3. 一次生成message
  4. send,Complete

耗时:从 1 小时 → 5 分钟


案例 3:debug上位机软件

Scene

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

使用Tools

  1. 用Responsemessage生成器
  2. 设置模拟data
  3. Generate responsemessage
  4. send给上位机
  5. 验证程序逻辑

好处

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

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

3.1 CRC16 校验算法

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

// CRC16 计算(低byte在前)
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; // 低byte在前
}

示例

message:01 03 00 00 00 0A
CRC:C4 0B(低byte在前)
完整: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;
}

示例

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

3.3 endianness问题

32 位data(UINT32/INT32/FLOAT)的endianness:

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

Tools支持自动转换:

  • 选择endianness
  • 输入Decimal value
  • 自动转换为register value

3.4 Modbus TCP 的 MBAP 头

Modbus TCP message结构:

┌─────────────────────────────────────┐
│ MBAP 头(7 byte)                   │
├─────────────────────────────────────┤
│ Transaction identifier(2 bytes)                │
│ Protocol Identifier(2 bytes)=0              │
│ Length(2 bytes)                      │
│ Unit identifier(1 byte)=slave address       │
├─────────────────────────────────────┤
│ PDU(function code + data)                │
└─────────────────────────────────────┘

示例

00 01 00 00 00 06 01 03 00 00 00 0A
│  │  │  │  │  │  │  │  │  │  │  │
│  │  │  │  │  │  │  │  │  │  │  └─ quantity低byte
│  │  │  │  │  │  │  │  │  └─────── quantity高byte
│  │  │  │  │  │  │  │  └────────── starting address低byte
│  │  │  │  │  │  │  └───────────── starting address高byte
│  │  │  │  │  │  └──────────────── function code
│  │  │  │  │  │  └──────────────── Unit identifier
│  │  │  │  │  └─────────────────── Length(6 byte)
│  │  │  │  └────────────────────── Protocol Identifier(0=Modbus)
│  │  │  └───────────────────────── Transaction identifier低byte
│  │  └──────────────────────────── Transaction identifier高byte
└─────────────────────────────────── MBAP 头

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

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

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

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

“支持三种协议,不用SwitchTools了。特别是 TCP 的 MBAP 头,以前老是搞混,现在自动生成,不会错。”

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

“Responsemessage生成器很好用,模拟从站设备测试 PLC 程序,无需真实设备,开发效率提高很多。”

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

“历史记录Function很实用,昨天调好的message,今天直接Copy,不用重新算。微信分享也很方便,发给同事一起debug。”


五、写在最后

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

而是为了解放人力。

让工程师不再手动计算message,不再记复杂的公式,不再为 CRC verification发愁。

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

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

Tools不是敌人,而是帮手。

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

希望这个Tools能帮到More同行。


附录:使用方式

使用方式 1:微信扫码

 

Modbus 工程师必备神器!RTU/TCP/ASCII message生成Parse器,效率提升 10 倍插图

使用方式 2:微信Search

Search”Modbus debugAssistant”


关于Author

20 年Automation经验,待过设备厂商、集成商、甲方。

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

欢迎交流:


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

转发给More电气工程师,一起用Tools提效!

技术术语(共 12 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用binaryCoding和CRC check
Modbus TCP基于以太网的Modbus协议变体,使用TCP/IP传输
Modbus ASCII使用ASCII字符传输的Modbus协议,以冒号开头、CR/LF结尾
RS485工业常用的差分串行通信标准,支持多点通信
RS232点对点串行通信标准,常用于短距离设备通信
function codeModbusfunction code指定读/写OperationType,如01读线圈、03读保持register
registerModbus register存储data单元,分线圈/离散输入/保持/输入register四类
PLC可编程逻辑控制器,Automation控制的核心设备
串口计算机与外部设备进行串行通信的物理接口
传感器将物理量转换为电信号的检测装置
线圈Modbus位可读写data,address从00001开始
保持registerModbus 16位可读写data,address从40001开始
来源/Tools信息 —— 点击展开
来源 Modbus Chinese Network(modbus.cn) —— China leadingModbus通信协议技术社区 Category 设备register手册 字数 6005 字 · 阅读约 16 分钟 更新 2026-06-30 永久链接 https://www.modbus.cn/41694.html
Recommended Tool: Modbus Debug Assistant WeChat Mini Program
Modbus Chinese Network官方推出的Modbus DebuggingTools,支持 Modbus RTU/TCP 实时通信debug、register读写、线圈控制、data监控和message分析。 无需安装,微信Search「Modbus DebuggingAssistant」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇Resources用于真实项目?

进入Tools中心进行messageParse、CRC verification和设备debug,或Submit requirements获取选型与接入建议。

工程师member

把这篇文章变成可执行的debugResources

开通后可使用高级messageParse、Resources包Download、Code Example、工程案例和优先Technical Support,适合真实项目交付。

高级Tools不限次
Resources包与代码包
Complete Engineering Case Library
优先Technical Support入口

发表回复

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