Modbus エンジニア必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍

freeFree Technical Resource

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

Modbus エンジニア必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍

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 RTUCRC16binarySerial port communication(RS485/RS232)
Modbus ASCIILRCASCII Text老旧デバイス/调制解调器
Modbus TCP検証なし。(TCP Guarantee)MBAP 头 +ADUイーサネット通信

一个工具,搞定すべての Modbus デバッグ场景。


1.2 リクエスト命令ジェネレーター

功能説明

① サポート 12 機能コードの種類

function codeName用途
01read coil status読み取り开关量出力
02read discrete inputs読み取り开关量入力
03read holding registersmost common(模拟量出力)
04read input registers読み取り専用(模拟量入力)
05write single coilスイッチ制御
06write single register参数設定
0Fwrite multiple coils批量スイッチ制御
10write 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:从属デバイスビジー

③ データ型サポート

サポート多种データ型,自动转换:

Typebyte count範囲endianness
UINT1620-65535固定
INT162-32768~32767固定
UINT3240-4294967295AB/BA
INT324-2147483648~2147483647AB/BA
FLOAT4IEEE 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 个通道的温度值

传统方式

  1. マニュアルを参照。:レジスタアドレスを保持 40001-40010
  2. 手動計算报文:
    • slave address:01
    • function code:03
    • starting address:40001-1=40000=0x9C40
    • Quantity:10=0x000A
    • CRC verification:手动算或用オンライン工具
  3. 用シリアルデバッグアシスタント送信
  4. 收到レスポンス,手动解析

耗时:15-20 分

使用工具后

  1. Open the tool,Choice Modbus RTU
  2. 入力参数:
    • slave address:01
    • function code:03
    • starting address:9C40
    • Quantity:10
  3. Click"リクエスト生成命令"
  4. コピー报文,send
  5. 收到レスポンス,貼り付け到解析器
  6. 自动解析出 10 个温度值

耗时:2-3 分

效率提升:6-10 倍


案例 2:批量設定周波数変換器参数

Scenarios

  • device:某ブランド周波数変換器
  • Communication:Modbus RTU
  • 需求:批量設定 20 个参数

传统方式

  1. 逐个参数単一レジスタの書き込み(function code 06)
  2. 写 20 次,每次計算报文
  3. 容易出错,重复劳动

使用工具后

  1. 選択機能コード 10(write multiple registers)
  2. 追加 20 Registers:
    • address:自动計算
    • data type:Choice
    • numerical value:入力
  3. 一次生成报文
  4. send,Complete

耗时:从 1 小时 → 5 分


案例 3:デバッグトップマシン软件

Scenarios

  • 开发キング·ビュー/WinCC 项目
  • 需要模拟 Modbus スレーブデバイス
  • 测试トップマシン程序逻辑

使用工具

  1. 用レスポンス报文ジェネレーター
  2. 設定模拟データ
  3. 生成レスポンス报文
  4. 送信给トップマシン
  5. 验证程序逻辑

好处

  • 无需真实デバイス
  • シミュレート可能各种異常
  • 提高开发效率

三、技术细节:エンジニア关心的

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)的バイトオーダー:

endiannessNameexample(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 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扫码

 

Modbus エンジニア必备神器!RTU/TCP/ASCII 报文生成解析器,效率提升 10 倍イラスト

使用方式 2:WeChat Search

Search"Modbus Debugging Assistant"


について著者

20 年工业自動化经验,待过デバイス厂商、集成商、甲方。

现专注于産業用IoT、边缘計算、スマートコントロール。

欢迎交流:

  • 📧 Email:support@modbus.cn
  • 💬 WeChat群:扫码追加アシスタント入群

もし觉得有用,欢迎 いいね + 在看 + 转发 サポート一下!

转发给もっと見る电气エンジニア,一起用工具提效!

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 *.