Modbusエンジニアは必須! RTU/TCP/ASCIIメッセージ生成パーサ、10 倍効率的
Modbusメッセージを手動で計算する?RTU/TCP/ASCI Iの3つのプロトコルをサポートし、リクエスト/レスポンスメッセージ、CRC/LRCチェック、メッセージParse、履歴をワンクリックで自動生成します。
前の記事:Modbusデバッグの痛み、エンジニアは知っている
私は産業オートメーションに20年間携わってきましたが、Modbusデバッグの痛みをよく知っています。
あなたもよくありますか?
シナリオ1:手動でメッセージを計算するとエラーが発生しやすい
保持レジスタを読み出すには、スレーブアドレス01、開始アドレス40001、Quantity 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パケットをParseしてもうまくいかない
シナリオ4:デバッグレコード、見つかりません
昨日用意した伝言が,今日は見つからなかった
同僚に尋ねると、“私も忘れていました。
再計算して1時間かかる
この痛みはminかっています
そこでこれを開発しましたModbusメッセージ生成パーサ。
サポートします。RTU/TCP/ASCIIの3つのプロトコルリクエスト/レスポンスの自動生成。
手動計算も数式もなく、数回で生成されます。
コア機能:なぜエンジニアは良いと言うのか?
1.1 3つの協定をカバー
Modbusは3つの伝送モードをサポートする。
| 協定の締結 | 検証方式の検証 | フレーム形式 | 適用可能なシーン |
|---|---|---|---|
| Modbus RTU | CRC16 | Binaryシングル | シリアルCommunicationRS485/RS232 |
| Modbus ASCII | LRC | ASCIIテキスト | 古いデバイス/モデム |
| Modbus TCP | 検証なしTCP保証 | MBAPヘッダ+ADU | イーサネットCommunication |
すべての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の数 | 範囲は | バイトエンディアン |
|---|---|---|---|
| UINT16 | 2 | 0-65535 | 固定された |
| INT16 | 2 | -32768~32767 | 固定された |
| UINT32 | 4 | 0-4294967295 | AB/BA |
| INT32 | 4 | -2147483648~2147483647 | AB/BA |
| FLOAT | 4 | IEEE 75 4単精度 | AB/BA/CDAB/BADC |
例:例:
10进値を入力します25.5 FLOAT型
レジスタ値への変换:
- Reg 0 0 x 41CC(上位16ビット)
- Reg 1 0x0000(下位16ビット)
1.4メッセージパーサー
機能の説明:
①メッセージ貼り付け、自動解析
デバイスから返されたメッセージを受信し、貼り付けて自動的にParseします。
入力(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履歴書の作成
機能の説明:
①自動保存
生成されたメッセージは自動的に保存されます。
- メッセージの内容
- 時間の生成
- メッセージの種類(リクエスト/レスポンス)
②迅速なOperation
- レプリケーションメッセージをコピーする。
- マイクロシェア。同僚に送る。
- 空にする:履歴の消去
③分類管理について
- 要求コマンド履歴
- 応答の履歴
- 別々の管理、明確。
1.6メッセージ構造の可視化
機能の説明:
生成された各メッセージには構造解析が含まれます:
例(RTUリクエスト):
������������� │メッセージ構造のParse │ │ │ ├─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┤ │スレーブアドレスSlave Address 01 │ │ │ “ファンクションコード”Function Code 03 │ │ │ 開始アドレスStart Address 0000 │ │ │ “Quantity”Quantity 000A │ │ │ CRCチェックCRC Check C40B │ │ │ └─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
例TCP要求
������������� │メッセージ構造のParse │ │ │ ├─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┤ トランザクション識別子Transaction ID 0001 │ │ │ │プロトコル識別子Protocol ID 0000 │ │ │ 長さLength 0006 │ │ │ “ユニット識別子”Unit ID 01 │ │ │ “ファンクションコード”Function Code 03 │ │ │ 開始アドレスStart Address 0000 │ │ │ “Quantity”Quantity 000A │ │ │ └─ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ┘
第二に、実際のケース:エンジニアの実際の使用シナリオ
ケース1:temperatureセンサデータの読み取り
シーンはこちら:
- 機器:ブランドのtemperatureトランスミッタ
- CommunicationRS485 Modbus RTU
- 需要10チャネルの温度値の読み取り
伝統的な方法:
- チェックマニュアル:保持レジスタアドレス40001-40010
- 手動計算メッセージ:
- 駅からのアドレス:0 1
- 機能コード:0 3
- 開始アドレス:40001-1=40000= 0 x 9 C 40
- Quantity:10= 0 x 000A
- CRCチェック:手動またはオンラインツール
- シリアルポートデバッグアシスタントで送信
- 応答を受信し、手動で解決
時間がかかる15-20分。
ツールの使用後:
- Modbus RTUを選択する
- 入力パラメータ:
- 駅からのアドレス:0 1
- 機能コード:0 3
- アドレス:9 C 40
- 背番号は10。
- “要求コマンドの生成”をクリックします。
- コピー、送信。
- 応答を受信し、パーサーに貼り付けます
- 10個のtemperatureを自動的にParse
時間がかかる2-3分。
効率の向上6 〜 10回
ケース2:周波数コンバータのパラメータを一括設定する
シーンはこちら:
- 機器:ブランドの周波数変換器
- Communication:Modbus RTU
- 需要20個のパラメータを一括設定
伝統的な方法:
- パラメータごとに単一のレジスタを書き込む(関数コード0 6)
- 20回、毎回計算します。
- ミスや重複作業
ツールの使用後:
- 選択機能コード10(複数のレジスタを書き込む)
- 20個のレジスタを追加:
- アドレス:自動計算
- データ型:選択
- タグ:Input
- メッセージの生成。
- 送信、完了。
時間がかかる1時間から5分
ケース3:ソフトウェアのデバッグ
シーンはこちら:
- King View/Win CCプロジェクトの開発
- アナログModbusスレーブデバイスが必要
- ホストプログラム論理のテスト
ツールの使用:
- Response Message Generatorについて
- シミュレーション·データの設定
- 応答メッセージの生成
- 上位機に送信
- 検証プログラムの論理
利点は:
- 本物の装備なし
- 様々な異常をシミュレートできる
- 開発効率の向上
技術的な詳細:エンジニアが気にする
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 |
|---|---|---|
| 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 |
自動変換をサポートするツール:
- エンディアンの選択
- 10進値の入力
- レジスタ値への変换
3.4 Modbus TCPのMBAPヘッダ
Modbus TCPメッセージ構造:
������������� │ MBAPヘッダ(7バイト) │ │ │ ├─────────────────────────────────────┤ │トランザクション識別子(2バイト) │ │ │ │プロトコル識別子(2バイト)=0 │ │ │ │の長さ(2バイト) │ │ │ ユニット識別子(1バイト)=スレーブアドレス │ │ │ ├─────────────────────────────────────┤ │ PDU(機能コード+データ) │ │ │ └─────────────────────────────────────┘
例:例:
0 0 0 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ― ― ― ― ― ― ― ― ― │ │ │ │ │ │ │ │ │ │ │ │---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- │ │ │ │ │ │ │ │ │ │ │ │---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ┃ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── │ │ │ │ │ │ │ │ │ │ │ │---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ― ― ― ― ― ― ―長さ(6バイト) │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── ── │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │ │トランザクション識別子ハイバイト 3---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ユーザーフィードバック:エンジニアが言うこと
フィードバック1:オートメーションエンジニア(経験5 year)
以前はModbusメッセージを手動で計算していました。今、このツールを使用して、数回クリックすると、CRCが自動的に計算され、とても便利です!効率は少なくとも5 倍です。"
フィードバック2:電気エンジニア(経験10 year)
“ツールを切り替えることなく、3つのプロトコルをサポートします。特にTCP MBAPヘッダは、以前は混乱していましたが、現在は自動的に生成され、間違いはありません。"
フィードバック3:PLCエンジニア(経験8 year)
応答メッセージジェネレータは非常に使いやすく、ステーション機器テストPLCプログラムをシミュレートし、実際の機器を必要とせず、開発効率が大幅に向上します。"
フィードバック4:デバッグエンジニア(経験3 year)
履歴機能は非常に実用的で、昨日調整されたメッセージは、再計算せずに今日直接コピーされます。WeChat共有も非常に便利で、同僚とデバッグします。"
5.最後に書く
エンジニアを置き換えるためではありません
人間を解放するためです
エンジニアが手動でメッセージを計算したり、複雑な数式を覚えたり、CRCチェックを心配したりする必要はありません。
より価値のあることに時間を費やす:
- システムアーキテクチャ設計
- 制御ロジック最適化
- 現場での問題解決
道具は敵ではなく、ヘルパーです。
ツールを使うエンジニアはツールを使わないエンジニアを排除します
このツールがより多くの人々を助けることを願う。
付録:利用方法
使用方法1:マイクロチップ

方法2:マイクロ検索
Modbusデバッグアシスタントの検索
著者について
産業オートメーションの20 yearの経験、機器メーカー、インテグレーター、甲。
産業用モノのインターネット、エッジコンピューティング、インテリジェント制御に焦点を当てています。
交換へようこそ:
- Centeraメールボックス:support@modbus.cn
- サブグループ:アシスタントを追加する
役に立つなら歓迎します。見る+見る+送る応援して!
より多くの電気エンジニアに転送し、ツールを一緒に改善!
Leave a Reply