Modbusエンジニアは必須! RTU/TCP/ASCIIメッセージ生成パーサ、10 倍効率的

無料無料技术资料

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

Modbusエンジニアは必須! RTU/TCP/ASCIIメッセージ生成パーサ、10 倍効率的

Modbusエンジニアは必須! RTU/TCP/ASCIIメッセージ生成パーサ、10 倍効率的

Modbusメッセージを手動で計算する?RTU/TCP/ASCI Iの3つのプロトコルをサポートし、リクエスト/レスポンスメッセージ、CRC/LRCチェック、メッセージ解析、履歴をワンクリックで自動生成します。


前の記事:Modbusデバッグの痛み、エンジニアは知っている

私は産業オートメーションに20年間携わってきましたが、Modbusデバッグの痛みをよく知っています。

あなたもよくありますか?

シナリオ1:手動でメッセージを計算するとエラーが発生しやすい

保持レジスタを読み出すには、スレーブアドレス01、開始アドレス40001、数量 10個
計算機を使って:

  • 駅からのアドレス:0 1
  • 機能コード:0 3
  • 開始アドレス:0 0 0 0(40001-1=40000= 0 x 9 C 40など、正しくない。
  • サイズ:0 0 A
  • CRCチェック????

半分計算した後、顧客から電話があって、戻ってきてどこを数えたか忘れた
再計算、CRCは正しくない
再算,まだ正しくない。。。。。

シナリオ2:メッセージを受信しても解決しない

機器の返却:01 03 14 00 0A 00 0B 00 0C 00 0D 00 0E xx xx
見てください:

  • これはコード03の応答です。
  • 14はバイト数(20バイト)
  • 各レジスタの値は何ですか?
  • エンディアンはABかBAか?

シナリオ3:3つの合意、混乱

  • RTUによるCRCチェック
  • ASCII LRCチェック
  • TCPはMBAPヘッダを持つ。

RTU方式でTCPパケットを解析してもうまくいかない

シナリオ4:デバッグレコード、見つかりません

昨日用意した伝言が,今日は見つからなかった
同僚に尋ねると、“私も忘れていました。
再計算して1時間かかる

この痛みは分かっています

そこでこれを開発しましたModbusメッセージ生成パーサ。

サポートします。RTU/TCP/ASCIIの3つのプロトコルリクエスト/レスポンスの自動生成。

手動計算も数式もなく、数回で生成されます。


コア機能:なぜエンジニアは良いと言うのか?

1.1 3つの協定をカバー

Modbusは3つの伝送モードをサポートする。

協定の締結検証方式の検証フレーム形式適用可能なシーン
Modbus RTUCRC16Binaryシングルシリアル通信RS485/RS232
Modbus ASCIILRCASCIIテキスト古いデバイス/モデム
Modbus TCP検証なしTCP保証MBAPヘッダ+ADUイーサネット通信

すべてのModbusデバッグシナリオを処理する1つのツール。


1.2コマンドビルダーのリクエスト

機能の説明:

12種類の機能をサポート。

関数コードの特徴名前は目的は
01コイル状態の読み取り読み取りスイッチ量出力
02離散入力の読み取り読み取りスイッチ量入力
03リードホールドレジスタ最もよく使用されるアナログ出力
04読み取り入力レジスタ読取り専用シミュレーション入力
05シングルコイルを書く。スイッチ制御
06単一レジスタの書き込みパラメータの設定
0F複数のコイルを書く。バッチスイッチ制御
10複数のレジスタを書く。バッチパラメータ設定
17複数のレジスタの読み取り/書き込み同時に読む。
2BデバイスIDの読み取りデバイス情報クエリ

②パラメータ設定

関数コード03(リードホールドレジスタ)を例にとると:

駅からのアドレス:0 1(0- 24 7)
機能コード:0 3
開始アドレス0000(16進数または10進数)
数:0010(10レジスタを読み込む)

③メッセージの自動生成

パラメータを入力すると、次のように自動的に生成されます。

RTUモード:

0 1 0 3 0 0 0 0 0 A C 4 0 B
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ ― ― ― ― CRCローバイト
│ │ │ │ │ │ ── ── ── ── ── ── CRCハイバイトCRC
│ │ │ │ │ │ │ ── ── ── ── ― ― ― ― ― ― ―
│ │ │ │ │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
│ │ │ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
│ │ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥ ‥アドレスハイバイト
│--------------------機能コード
ゞ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ASCIIモード:

0103000000AFB
│ │ │            │ │ │ │
│ │ │            LRC検証(FB)
│ │ │            WIT----データ部分(ASCIIコード)
└ ── ── ── ── ── ── ── ── ──起始符(:)

TCPモード:

0 0 0
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ― ― ― ― ― ― ― ― ―
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┃ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│ │ │トランザクション識別子ハイバイト
8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888

④ 特殊機能コードのサポート

関数コード05(単一コイルを書き込む):

  • スイッチの選択:ON/OFF
  • FF00/0000に自動変換

関数コード0F(複数のコイルを書き込む):

  • コイル数量入力
  • コイル选択を视覚化するドットボタン
  • タップ切り替え状態(グレー =オフ、ブルー =オン)
  • バイト数の自動計算

関数コード10(複数のレジスタを書き込む):

  • レジスタリスト(追加可能)
  • 各レジスタの設定:
    • 住所(自動計算)
    • データ型UINT16/INT16/UINT32/INT32/FLOAT
    • エンディアンAB/BA
    • 数値10進入力
  • レジスタ値への変换

1.3応答メッセージジェネレータ

機能の説明:

①アナログ機器の応答

ホストコンピュータソフトウェア(Kingview、Win CCなど)またはPLCプログラムのテストに使用されます。

正常応答と異常応答のサポート

通常の応答(関数コード0 3):

駅からのアドレス:0 1
機能コード:0 3
バイト数:20(10レジスタ×2)
レジスタの値:
  - Reg 0 10 0x000A
  - Reg 1 20 0x0014
  - Reg 2 30 0x001E
  - ...

異常な反応:

駅からのアドレス:0 1
機能コード:83(0 3 +80)
異常なコード:
  - 0 1.違法な機能
  - 0 2:違法なデータアドレス
  - 0 3:違法なデータ値
  - 0 4:スレーブ機器の故障
  - 0 5.承認
  - 0 6:デバイスがビジー

データ型のサポート

のデータ型をサポートし、

タイプの種類Bytesの数範囲はバイトエンディアン
UINT1620-65535固定された
INT162-32768~32767固定された
UINT3240-4294967295AB/BA
INT324-2147483648~2147483647AB/BA
FLOAT4IEEE 75 4単精度AB/BA/CDAB/BADC

例:例:

10进値を入力します25.5 FLOAT型

レジスタ値への変换:

  • Reg 0 0 x 41CC(上位16ビット)
  • Reg 1 0x0000(下位16ビット)

1.4メッセージパーサー

機能の説明:

①メッセージ貼り付け、自動解析

デバイスから返されたメッセージを受信し、貼り付けて自動的に解析します。

入力(RTUモード):

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

自動解析:

�������������
アドレス:0 1。                        │ │ │
機能コード:0 3(読み取り保持レジスタ)          │ │ │
サイズ:20(0 x 14)                  │ │ │
│データの内容:                          │ │ │
│ │ │   Reg 0 0x000A = 10                │ │ │
│ │ │   Reg 1 0x000B = 11                │ │ │
│ │ │   Reg 2 0x000C = 12                │ │ │
│ │ │   Reg 3 0x000D = 13                │ │ │
│ │ │   Reg 4 0x000E = 14                │ │ │
CRCチェック:7 A 3 B ✓(正しい)            │ │ │
└─────────────────────────────────────┘

3つのプロトコルをサポートする。

  • 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. 手動計算メッセージ:
    • 駅からのアドレス:0 1
    • 機能コード:0 3
    • 開始アドレス:40001-1=40000= 0 x 9 C 40
    • 数量:10= 0 x 000A
    • CRCチェック:手動またはオンラインツール
  3. シリアルポートデバッグアシスタントで送信
  4. 応答を受信し、手動で解決

時間がかかる15-20分。

ツールの使用後:

  1. Modbus RTUを選択する
  2. 入力パラメータ:
    • 駅からのアドレス:0 1
    • 機能コード:0 3
    • アドレス:9 C 40
    • 背番号は10。
  3. “要求コマンドの生成”をクリックします。
  4. コピー、送信。
  5. 応答を受信し、パーサーに貼り付けます
  6. 10個の温度を自動的に解析

時間がかかる2-3分。

効率の向上6 〜 10回


ケース2:周波数コンバータのパラメータを一括設定する

シーンはこちら:

  • 機器:ブランドの周波数変換器
  • 通信:Modbus RTU
  • 需要20個のパラメータを一括設定

伝統的な方法:

  1. パラメータごとに単一のレジスタを書き込む(関数コード0 6)
  2. 20回、毎回計算します。
  3. ミスや重複作業

ツールの使用後:

  1. 選択機能コード10(複数のレジスタを書き込む)
  2. 20個のレジスタを追加:
    • アドレス:自動計算
    • データ型:選択
    • タグ:Input
  3. メッセージの生成。
  4. 送信、完了。

時間がかかる1時間から5分


ケース3:ソフトウェアのデバッグ

シーンはこちら:

  • King View/Win CCプロジェクトの開発
  • アナログModbusスレーブデバイスが必要
  • ホストプログラム論理のテスト

ツールの使用:

  1. Response Message Generatorについて
  2. シミュレーション·データの設定
  3. 応答メッセージの生成
  4. 上位機に送信
  5. 検証プログラムの論理

利点は:

  • 本物の装備なし
  • 様々な異常をシミュレートできる
  • 開発効率の向上

技術的な詳細:エンジニアが気にする

3.1 CRC16チェック

Modbus RTUはCRC16(巡回冗長検査)を使用する。

// CRC16計算(下位バイトが先)
function calcCRC16 bytes {
  let crc = 0 x FFFF;
  for let i = 0; i b.; i++{
    crc ^=バイト[i];
    for let j = 0; j 8; j++{
      if crc 0x0001 {
        crc = crc1 ^ 0xA001;
      (エルゼ)
        CRC = 1;
      }
    }
  }
  return crc; //下位バイトが先行
}

例:例:

メッセージ:0 1 0 3 0 0 0 0 0 0 A
CRC C 4 0B下位バイトが前面
フルサイズ:0 1 0 3 0 0 0 0 0 A C 4 0B

3.2 LRC検証アルゴリズム

Modbus ASCIIはLRC(垂直冗長検査)を使用します。

// LRC計算
function calcLRC bytes {
  sum = 0;
  for let i = 0; i b.; i++{
    sum +=バイト[i];
  }
  const lrc =~sum + 1 0xFF;
  LRCを返します
}

例:例:

メッセージ:0 1 0 3 0 0 0 0 0 0 A
タグ:FB
フル01030000000AFB

3.3バイトオーダー問題

32ビットデータUINT32/INT32/FLOATのエンディアン

バイトエンディアン名前は例0 x 12345678
ABBig Endian12 34 56 78
BALittle Endian34 12 78 56
CDABMixed56 78 12 34
BADCMixed78 56 34 12

自動変換をサポートするツール:

  • エンディアンの選択
  • 10進値の入力
  • レジスタ値への変换

3.4 Modbus TCPのMBAPヘッダ

Modbus TCPメッセージ構造:

�������������
│ MBAPヘッダ(7バイト)                   │ │ │
├─────────────────────────────────────┤
│トランザクション識別子(2バイト)                │ │ │
│プロトコル識別子(2バイト)=0              │ │ │
│の長さ(2バイト)                      │ │ │
ユニット識別子(1バイト)=スレーブアドレス       │ │ │
├─────────────────────────────────────┤
│ PDU(機能コード+データ)                │ │ │
└─────────────────────────────────────┘

例:例:

0 0 0
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ― ― ― ― ― ― ― ― ―
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┃ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──
│ │ │ │ │ │ │ │ │ │ │ │----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ― ― ― ― ― ― ―長さ(6バイト)
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ──
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│ │ │トランザクション識別子ハイバイト
3---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ユーザーフィードバック:エンジニアが言うこと

フィードバック1:オートメーションエンジニア(経験5 年)

以前はModbusメッセージを手動で計算していました。今、このツールを使用して、数回クリックすると、CRCが自動的に計算され、とても便利です!効率は少なくとも5 倍です。"

フィードバック2:電気エンジニア(経験10 年)

“ツールを切り替えることなく、3つのプロトコルをサポートします。特にTCP MBAPヘッダは、以前は混乱していましたが、現在は自動的に生成され、間違いはありません。"

フィードバック3:PLCエンジニア(経験8 年)

応答メッセージジェネレータは非常に使いやすく、ステーション機器テストPLCプログラムをシミュレートし、実際の機器を必要とせず、開発効率が大幅に向上します。"

フィードバック4:デバッグエンジニア(経験3 年)

履歴機能は非常に実用的で、昨日調整されたメッセージは、再計算せずに今日直接コピーされます。WeChat共有も非常に便利で、同僚とデバッグします。"


5.最後に書く

エンジニアを置き換えるためではありません

人間を解放するためです

エンジニアが手動でメッセージを計算したり、複雑な数式を覚えたり、CRCチェックを心配したりする必要はありません。

より価値のあることに時間を費やす:

  • システムアーキテクチャ設計
  • 制御ロジック最適化
  • 現場での問題解決

道具は敵ではなく、ヘルパーです。

ツールを使うエンジニアはツールを使わないエンジニアを排除します

このツールがより多くの人々を助けることを願う。


付録:利用方法

使用方法1:マイクロチップ

 

Modbusエンジニアは必須! RTU/TCP/ASCIIメッセージ生成パーサ、10 倍効率的插图

方法2:マイクロ検索

Modbusデバッグアシスタントの検索


著者について

産業オートメーションの20 年の経験、機器メーカー、インテグレーター、甲。

産業用モノのインターネット、エッジコンピューティング、インテリジェント制御に焦点を当てています。

交換へようこそ:

  • Centeraメールボックス:support@modbus.cn
  • サブグループ:アシスタントを追加する

役に立つなら歓迎します。見る+見る+送る応援して!

より多くの電気エンジニアに転送し、ツールを一緒に改善!

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注