Modbus エンジニア必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍
还在手動計算 Modbus message?这个工具サポート RTU/TCP/ASCII 三种协议,自動生成されるリクエスト/レスポンス报文,CRC/LRC check、message parsing、履歴一键搞定
前言:Modbus デバッグ的痛,エンジニア都懂
我做了 20 年工业自動化,太懂 Modbus デバッグ的痛苦。
你是ではない也经常遇到这些情况?
Scenarios 1:手動計算报文,容易错
要リードホールドレジスタ,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 算出来正しくない
再算,まだ正しくない...
Scenarios 2:收到报文,不会解析
Chapter 6:
01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E xx xx
你盯着看:
- 这是機能コード 03 的レスポンス
- 14 是Bytesの数(20 byte)
- 但すべてのレジスタ。值是多少?
- バイトオーダー是 AB まだ BA?
Scenarios 3:三种协议,搞混了
- RTU 用 CRC verification
- ASCII 用 LRC check
- TCP 有 MBAP 头
一着急,用 RTU 的方式解析 TCP message,怎么都对不上
Scenarios 4:デバッグ记录,找不到
昨天调好的报文,今天找不到了
问同事要,同事说"我也忘了"
重新算,又花 1 小时
这些痛点,我都知道。
所以,我开发了这个 Modbus 报文生成解析器。
它サポート RTU/TCP/ASCII 三种协议,自動生成されるリクエスト/レスポンス报文。
不用手動計算,不用记公式,点几下就生成。
一、核心功能:なぜか。エンジニア都说好?
1.1 三种协议全カバー
サポート Modbus 3つの伝送モード:
| Protocol | チェック方式 | フレーム形式 | 適用可能なシーン |
|---|---|---|---|
| Modbus RTU | CRC16 | binary | Serial port communication(RS485/RS232) |
| Modbus ASCII | LRC | ASCII Text | 老旧デバイス/调制解调器 |
| Modbus TCP | 検証なし。(TCP Guarantee) | MBAP 头 +ADU | イーサネット通信 |
一个工具,搞定すべての Modbus デバッグ场景。
1.2 リクエスト命令ジェネレーター
功能説明:
① サポート 12 機能コードの種類
| function code | Name | 用途 |
|---|---|---|
| 01 | read coil status | 読み取り开关量出力 |
| 02 | read discrete inputs | 読み取り开关量入力 |
| 03 | read holding registers | most common(模拟量出力) |
| 04 | read input registers | 読み取り専用(模拟量入力) |
| 05 | write single coil | スイッチ制御 |
| 06 | write single register | 参数設定 |
| 0F | write multiple coils | 批量スイッチ制御 |
| 10 | write multiple registers | 批量参数設定 |
| 17 | 读/write multiple registers | 同时読み書き |
| 2B | 読み取りデバイス标识 | デバイス信息查询 |
② 参数設定
以機能コード 03(read holding registers)为例:
slave address:01(0-247) function code:03 starting address:0000(十六进制或十进制) Quantity:0010(read 10 Registers)
③ 自動生成される报文
入力参数后,自動生成される:
RTU モード:
01 03 00 00 00 0A C4 0B │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ CRC lowbyte │ │ │ │ │ │ └──── CRC highbyte │ │ │ │ │ └─────── 数量低バイト数 │ │ │ │ └────────── 数量ハイバイト │ │ │ └───────────── 開始アドレス低バイト数 │ │ └──────────────── 開始アドレスハイバイト │ └─────────────────── function code └────────────────────── slave address
ASCII モード:
:01030000000AFB │ │ │ │ │ └── LRC check(FB) │ └───── データ部分(ASCII Coding) └────────────────── 起始符(:)
TCP モード:
00 01 00 00 00 06 01 03 00 00 00 0A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 数量低バイト数 │ │ │ │ │ │ │ │ │ └─────── 数量ハイバイト │ │ │ │ │ │ │ │ └────────── 開始アドレス低バイト数 │ │ │ │ │ │ │ └───────────── 開始アドレスハイバイト │ │ │ │ │ │ └──────────────── function code │ │ │ │ │ │ └──────────────── Unit identifier(slave address) │ │ │ │ │ └─────────────────── Length(后续Bytesの数) │ │ │ │ └────────────────────── Protocol Identifier(0=Modbus) │ │ │ └───────────────────────── トランザクション識別子低バイト数 │ │ └──────────────────────────── トランザクション識別子ハイバイト └─────────────────────────────────── MBAP 头(7 byte)
④ 特殊機能コードのサポート
function code 05(write single coil):
- 开关選択:Open (ON) / Turn off (OFF)
- 自动转换为 FF00/0000
function code 0F(write multiple coils):
- コイルの数入力
- 可视化コイル選択(圆点按钮)
- Click切换ステータス(灰=OFF,蓝=ON)
- 自动計算Bytesの数
function code 10(write multiple registers):
- レジスタリスト(可追加多个)
- 每个レジスタの設定:
- address(自动計算)
- data type(UINT16/INT16/UINT32/INT32/FLOAT)
- endianness(AB/BA)
- numerical value(十进制入力)
- 自动转换为レジスタの値
1.3 レスポンス报文ジェネレーター
功能説明:
① 模拟デバイスレスポンス
用于测试トップマシン软件(如キング·ビュー、WinCC)或 PLC 程序。
② サポート普通の反応和異常な応答
普通の反応(function code 03):
slave address:01 function code:03 byte count:20(10 Registers×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:从属デバイスビジー
③ データ型サポート
サポート多种データ型,自动转换:
| Type | byte count | 範囲 | endianness |
|---|---|---|---|
| UINT16 | 2 | 0-65535 | 固定 |
| INT16 | 2 | -32768~32767 | 固定 |
| UINT32 | 4 | 0-4294967295 | AB/BA |
| INT32 | 4 | -2147483648~2147483647 | AB/BA |
| FLOAT | 4 | IEEE 754 单精度 | AB/BA/CDAB/BADC |
example:
入力十进制值:25.5(FLOAT Type)
自动转换为レジスタの値:
- 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
自动解析:
┌─────────────────────────────────────┐ │ slave address:01 │ │ function code:03(read holding registers) │ │ byte count:20(0x14) │ │ データ内容: │ │ Reg 0: 0x000A = 10 │ │ Reg 1: 0x000B = 11 │ │ Reg 2: 0x000C = 12 │ │ Reg 3: 0x000D = 13 │ │ Reg 4: 0x000E = 14 │ │ CRC verification:7A3B ✓(correct) │ └─────────────────────────────────────┘
② サポート三种协议解析
- RTU:CRC16 check
- ASCII:LRC check
- TCP:MBAP 头解析
③ エラー检测
- CRC/LRC 検証エラー提示
- 报文長さ異常提醒
- 違法な機能コード警告
1.5 履歴
功能説明:
① 自动保存
每次生成的报文自动保存,包含:
- 报文内容
- 生成时间
- message type(Request/Response)
② 快捷操作
- Copy:ワンクリックコピー。报文
- WeChatシェア:送信给同事
- Clear:クリア履歴
③ カテゴリ管理
- リクエスト命令历史
- レスポンス报文历史
- 分别管理,清晰明了
1.6 报文構造可视化
功能説明:
生成的每个报文,都附带構造解析:
example(RTU Request):
┌─────────────────────────────────────┐ │ 报文構造解析 │ ├─────────────────────────────────────┤ │ slave address (Slave Address): 01 │ │ function code (Function Code): 03 │ │ starting address (Start Address): 0000 │ │ Quantity (Quantity): 000A │ │ CRC verification (CRC Check): C40B │ └─────────────────────────────────────┘
example(TCP Request):
┌─────────────────────────────────────┐ │ 报文構造解析 │ ├─────────────────────────────────────┤ │ 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 │ └─────────────────────────────────────┘
二、実践案例:エンジニア的真实使用シーン
案例 1:読み取り温度センサーデータ
Scenarios:
- device:某ブランド温度变送器
- Communication:RS485(Modbus RTU)
- 需求:read 10 个通道的温度值
传统方式:
- マニュアルを参照。:レジスタアドレスを保持 40001-40010
- 手動計算报文:
- slave address:01
- function code:03
- starting address:40001-1=40000=0x9C40
- Quantity:10=0x000A
- CRC verification:手动算或用オンライン工具
- 用シリアルデバッグアシスタント送信
- 收到レスポンス,手动解析
耗时:15-20 分
使用工具后:
- Open the tool,Choice Modbus RTU
- 入力参数:
- slave address:01
- function code:03
- starting address:9C40
- Quantity:10
- Click"リクエスト生成命令"
- コピー报文,send
- 收到レスポンス,貼り付け到解析器
- 自动解析出 10 个温度值
耗时:2-3 分
效率提升:6-10 倍
案例 2:批量設定周波数変換器参数
Scenarios:
- device:某ブランド周波数変換器
- Communication:Modbus RTU
- 需求:批量設定 20 个参数
传统方式:
- 逐个参数単一レジスタの書き込み(function code 06)
- 写 20 次,每次計算报文
- 容易出错,重复劳动
使用工具后:
- 選択機能コード 10(write multiple registers)
- 追加 20 Registers:
- address:自动計算
- data type:Choice
- numerical value:入力
- 一次生成报文
- send,Complete
耗时:从 1 小时 → 5 分
案例 3:デバッグトップマシン软件
Scenarios:
- 开发キング·ビュー/WinCC 项目
- 需要模拟 Modbus スレーブデバイス
- 测试トップマシン程序逻辑
使用工具:
- 用レスポンス报文ジェネレーター
- 設定模拟データ
- 生成レスポンス报文
- 送信给トップマシン
- 验证程序逻辑
好处:
- 无需真实デバイス
- シミュレート可能各种異常
- 提高开发效率
三、技术细节:エンジニア关心的
3.1 CRC16 チェック算法
Modbus RTU 使用 CRC16(循环冗余チェック):
// CRC16 result(低バイト数前に)
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; // 低バイト数前に
}
example:
message:01 03 00 00 00 0A CRC:C4 0B(低バイト数前に) complete:01 03 00 00 00 0A C4 0B
3.2 LRC チェック算法
Modbus ASCII 使用 LRC(纵向冗余チェック):
// LRC result
function calcLRC(bytes) {
let sum = 0;
for (let i = 0; i < bytes.length; i++) {
sum += bytes[i];
}
const lrc = ((~sum) + 1) & 0xFF;
return lrc;
}
example:
message:01 03 00 00 00 0A LRC:FB complete::01030000000AFB
3.3 バイトオーダー問題
32 ビット·データ(UINT32/INT32/FLOAT)的バイトオーダー:
| endianness | Name | example(0x12345678) |
|---|---|---|
| AB | Big Endian | 12 34 56 78 |
| BA | Little Endian | 34 12 78 56 |
| CDAB | Mixed | 56 78 12 34 |
| BADC | Mixed | 78 56 34 12 |
工具サポート自动转换:
- 選択バイトオーダー
- 入力十进制值
- 自动转换为レジスタの値
3.4 Modbus TCP 的 MBAP 头
Modbus TCP 报文構造:
┌─────────────────────────────────────┐ │ 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) │ └─────────────────────────────────────┘
example:
00 01 00 00 00 06 01 03 00 00 00 0A │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ 数量低バイト数 │ │ │ │ │ │ │ │ │ └─────── 数量ハイバイト │ │ │ │ │ │ │ │ └────────── 開始アドレス低バイト数 │ │ │ │ │ │ │ └───────────── 開始アドレスハイバイト │ │ │ │ │ │ └──────────────── function code │ │ │ │ │ │ └──────────────── Unit identifier │ │ │ │ │ └─────────────────── Length(6 byte) │ │ │ │ └────────────────────── Protocol Identifier(0=Modbus) │ │ │ └───────────────────────── トランザクション識別子低バイト数 │ │ └──────────────────────────── トランザクション識別子ハイバイト └─────────────────────────────────── MBAP 头
四、用户反馈:エンジニア怎么说
反馈 1:自動化エンジニア(5 年经验)
"以前手动算 Modbus message,经常算错。现在用这个工具,点几下就生成,CRC 自动計算,太方便了!效率至少提升 5 倍。"
反馈 2:电气エンジニア(10 年经验)
"サポート三种协议,不用切换工具了。特别是 TCP 的 MBAP 头,以前老是搞混,现在自動生成される,不会错。"
反馈 3:PLC エンジニア(8 年经验)
"レスポンス报文ジェネレーター很好用,模拟スレーブデバイス测试 PLC 程序,无需真实デバイス,开发效率提高很多。"
反馈 4:デバッグエンジニア(3 年经验)
"履歴功能很实用,昨天调好的报文,今天直接コピー,不用重新算。WeChatシェア也很方便,发给同事一起デバッグ。"
五、写在最后
我做这个工具,ではない为了取代エンジニア。
而是为了解放人力。
让エンジニア不再手動計算报文,不再记复杂的公式,不再为 CRC verification发愁。
让大家把时间花在更有价值的事情上:
- 系统架构设计
- 控制逻辑优化
- 现场問題解決
工具ではない敌人,而是帮手。
善用工具的エンジニア,会淘汰不用工具的エンジニア。
希望这个工具能帮到もっと見る同行。
附录:使用方式
使用方式 1:WeChat扫码

使用方式 2:WeChat Search
Search"Modbus Debugging Assistant"
について著者
20 年工业自動化经验,待过デバイス厂商、集成商、甲方。
现专注于産業用IoT、边缘計算、スマートコントロール。
欢迎交流:
- 📧 Email:support@modbus.cn
- 💬 WeChat群:扫码追加アシスタント入群
もし觉得有用,欢迎 いいね + 在看 + 转发 サポート一下!
转发给もっと見る电气エンジニア,一起用工具提效!
Leave a Reply