Modbus RTUデータ構造の詳細

無料無料技术资料

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

Modbus RTUデータ構造の詳細

Modbus RTUプロトコルとは?

Modbus RTUプロトコルは、プログラマブル·ロジック·コントローラPLCとコンピュータ間のデータ交換を可能にする通信の形態である。電子機器はModbusプロトコルを使用してシリアル回線で情報を交換できます。

ビル管理システムの建設(BMS)や産業オートメーションシステム(IAS)に広く受け入れられ、広く使用されています。その使いやすさ、信頼性、オープンソースであり、あらゆるデバイスやアプリケーションで無料で使用できます。

このプロトコルは1979年にModicon®がプログラマブルロジックコントローラ用に開発·リリースした。マスター/スレーブアーキテクチャを使用して構築され、RS 232/RS 485/RS 422プロトコルを使用するシリアルデバイスをサポートします。Modbusは、複数の計測機器や制御機器が中央コントローラやシステムに信号を送信してデータを収集·分析する場合によく使用されます。産業用オートメーションおよび監視制御およびデータ収集(SCADA)システムは、一般的にModbusプロトコルを使用します。

Modbus RTUとは?

Modbus RTUは、オリジナルのModbus仕様で定義されている2つの伝送モードの1つです。Modbus RTUとASCI Iの2つのモードは、RS 232、RS 485、およびRS 422プロトコルをサポートするシリアルデバイス用に設計されています。Modbus RTUの特徴は、バイナリエンコーディングと強力なCRCエラーチェックを使用することです。Modbus RTUはModbusプロトコルの実装であり、産業用アプリケーションや自動化された生産施設で最も一般的に使用される。

Modbus RTUの仕組み

Modbusプロトコルは、基本的に電子デバイスからのリクエストとレスポンスを処理するシステムです。マスター/スレーブアーキテクチャは、スレーブによって応答されるマスター要求とともに使用されます。

Modbus RTUマスターとは?

Modbus RTUマスターは、接続されたスレーブデバイスから情報を要求する中央デバイスです。自動生産システムの中央コントローラは、Modbus RTUマスターとして機能することができます。Modbusの実装にはマスターサーバがある。マスタはスレーブから情報を取得し、スレーブのレジスタに書き込むこともできます。

Modbus RTUスレーブとは?

Modbus RTUスレーブは、マスタの要求に応答するデバイスです。情報転送を開始できず、マスターからのリクエストに応答するまでホールドモードになります。

Modbusプロトコルの中核は、PDU(ComponentProtocol Data Unit)と呼ばれるものである。PDUは機能コードとデータで構成されており、Modbus伝送モードに関係なく一貫して構築できます。機能コードは、プライマリ·ステーションが要求するデータを指定します。

Modbus RTU伝送モードでは、追加情報がPDUの周りにラップされ、完全なアプリケーションデータユニットADUが作成されます。信号ストリームと機能コードの前に、Modbus RTUモードでは、要求を満たすべきスレーブデバイスを識別するために1バイトのスレーブIDが送信されます。PDUには2バイトのCRCが付加され、正しい数のバイトが送受信されるようになります。

Modbusデバイスは、デバイス間の通信を容易にする4つのデータシートをサポートする。これらは、ディスクリート入力、ディスクリート出力(コイル)、入力レジスタ、およびホールドレジスタです。レジスタは異なる機能を実行し、すべてのデバイスに含まれません。場合によっては、保持レジスタのみがI / O機能に使用されます。

エリアは訪問する。サイズは説明する。
ショップ型入力読み取り専用1つの入力として使用
コイル出力リーディング/ライティング1つの分散制御のため
入力レジスタ。読み取り専用16位。入力するために
レジスタを保持する。リーディング/ライティング16位。入力、出力、設定データなど、さまざまなものに使用されます。

機能コードは、マスターがスレーブIDで指定されたスレーブとどのように対話するかを示します。送信された関数コードに応じて、マスターはスレーブのレジスタの1つを読み取り、または書き込みます。

スレーブ局が要求に含まれるエラーを含むパケットを受信すると、エラーコードを返します。不正な機能要求、スレーブがアクセスできない不正なレジスタアドレスの指定、スレーブがビジーまたは故障していることを示すメッセージなどの問題に対しては、エラーコードが返されます。

Modbus RTUでは、通信を開始する際に、ボーレート、文字形式(8ビットのパリティなしなど)、スレーブIDなどのパラメータを知るか定義する必要があります。これらのパラメータが一致しないと、通信の試みは失敗します。

Modbus RTUデータパケットについて詳しく説明しましょう。

フレーム構造

フレーム構造=アドレス+機能+データ+検証

アドレス:addressは1バイトを占め、范囲0 〜 255、そのうち有効范囲は1 〜 247であり、その他の特殊な用途、例えば255はブロードキャストアドレスである(ブロードキャストアドレスはすべてのアドレスに応答することで、通常は2つのデバイスのアドレスと同じく要求される)。

関数コードの特徴1バイトを占有すると、機能コードの意味は、このコマンドが何をするかを知ることです。例えば、スレーブデータをクエリすることができ、データを変更することもできるので、異なる機能コードは異なる機能に対応します。

データは関数コードによって異なる構造があり、以下の例で説明されています。

検証済み。:データが間違っていないことを保証するために、これを増やして、次に前のデータを計算してデータが一致しているかどうかを見て、一致している場合、このフレームデータが正しいことを説明して、私は再び返信します;もし違う場合、あなたのデータが伝送する時に問題が発生したことを説明して、データが正しくないので、捨てます。

関数コード0 3と0 6で詳しく説明します。

ファンクションコード0x03読み取り

ホスト送信:01 03 00 00 01 84 0A
次の投稿:0 1 0 3 0 2 19 98 B 2 7E


では、この一組のデータは何を意味するのでしょうか。

上の構造図から、ホストが送信するデータはおおよそ、アドレス:address+関数コードの特徴+データは+検証済み。;

解析は以下の通りです。

データ解析の送信

Modbus RTUデータ構造の詳細插图
0 1-アドレス、つまりあなたのセンサーのアドレス
0 3-機能コード、0 3はクエリ機能を表し、センサのデータをクエリします。
0 0 0-クエリの開始レジスタアドレスを表す。クエリは0 x 0000から開始します。以下、Modbusはデータをレジスタに格納し、レジスタを照会することで異なる変数の値を取得し、1つのレジスタアドレスは2バイトのデータに対応します。
00 01-レジスタを検索しました。前の00 00を結合すると、0から始まる1つのレジスタ値を問い合わせることを意味します
84 0A -巡回冗長検査、最初のバイトから84の前までのmodbusの検査式。

データ解析の返信

Modbus RTUデータ構造の詳細插图1
0 1-アドレス、つまりあなたのセンサーのアドレス
0 3-機能コード、0 3はクエリ機能を表し、センサのデータをクエリします。ここで注意すべきことは、スレーブに送信された機能コードに注意することです。スレーブは同じ機能コードを返さなければなりません。
02 - 代表后面データ的バイト数,所以上说,一个レジスタ有2个バイト,所以后面的バイト数肯定是2* 问合せ的レジスタ;
19 98-レジスタの値は19 98で、送信されたデータと組み合わせると、0 1レジスタの値は19 98です。
B2 7E-巡回検査

基本的な流れ:

送信:スレーブのアドレス+何をする関数コード+チェックしたいレジスタのアドレス+チェックしたいレジスタのアドレスの数+チェックコード

Re:スレーブのアドレス+ホストから送信された関数コード+ホストに送信されるデータのバイト数+データ+チェックコード

関数コード0 x 0 6(書き込み)

従机のデータを変更したらではこの合意はあるのか、答えはYes!

ホスト送信:01 06 00 00 01 48 0A
スレーブからの返信01 06 00 00 00 01 48 0A

データ解析の送信

Modbus RTUデータ構造の詳細插图2
01-ホストクエリするスレーブアドレス
06-コード、06は単一のレジスタ
0 0 0-変更の開始レジスタアドレスを表します。説明は0 x 0000から始まります。
00 01-代表修正的値为00 01.結合前的00 00,意味就是修正0号レジスタ値为00 01;
480A-巡回冗長検査、最初のバイトから48の前までのmodbusの検査式

データ解析の返信

Modbus RTUデータ構造の詳細插图3
01-スレーブはホスト自身のアドレスに戻り,これがホストがチェックするスレーブであることを説明する
06-機能コードは、単一のレジスタ機能を修正することを代表して、ホストは何の機能コードを発行し、スレーブは何の機能コードを返さなければならない;
0 0 0-変更の開始レジスタアドレスを表します。説明は0 x 0000です。
00 01-代表修正的値为00 01.結合前的00 00,意味就是修正0号レジスタ値为00 01;
480A-巡回冗長検査、最初のバイトから48の前までのmodbusの検査式

共通機能コードの詳細

共通機能コード表

関数コードの特徴名前はデータ型役割は
0x01リードコイルレジスタビット·ビット論理コイルのセットの現在の状態(ON/OFF)を取得する
0x02ディスクリート入力レジスタの読み取りビット·ビット一組のスイッチ入力の現在の状態(ON/OFF)を取得する
0x03リードホールドレジスタ整数、浮動小数点、文字1つまたは複数の保持レジスタで現在のバイナリ値を取得する
0x04読み取り入力レジスタ整数、浮動小数点1つまたはの入力レジスタにおけるのバイナリ値の取得
0x05単一コイルレジスタの書き込みビット·ビットロジックコイルのオンオフ状態を強く設定する
0x06単一保持レジスタの書き込み整数、浮動小数点、文字特定のバイナリ値を保持レジスタにロードする
0x0F複数のコイルレジスタを書き込むビット·ビット連続ロジックコイルのオンオフを強制する
0x10複数の保持レジスタを書き込む整数、浮動小数点、文字具体的なバイナリ値を连続した一列のホールドレジスタにする

01H-リードコイル

1)説明:スレーブコイルレジスタの読み取り、ビット操作、単一または複数の読み取り;
(2)指示の送信:
スレーブアドレスビット0 x 0 1、レジスタ開始アドレス0 x 0 0 23、レジスタ終了抵抗0 x 0 0 3 8、合計21個のコイルが読み出されると仮定します。合意書は以下の通り。

Modbus RTUデータ構造の詳細插图4

(3)回答:
リターンデータの各ビットはコイル状態に対応して、1-ON、0-OFF、次の図のように;

Modbus RTUデータ構造の詳細插图5

上記の表では、データ1はコイル状態0 x 0 0 23 - 0 x 0 0 2 aを表し、データ1の最下位ビットは最下位アドレスのコイル状態を表し、リトルエンディアンモードと理解することができます。

data2は、アドレス0 x 0 0 2 b-0 x 0 0 3 3のコイル状態を表します。

Modbus RTUデータ構造の詳細插图6

データ3は、アドレス0 x 0 0 3 4 - 0 x 0 0 3 8のコイル状態を表し、8ビット未満、バイトのハイパディングは0です。

Modbus RTUデータ構造の詳細插图7

02H-離散入力ステータスの読み取り

1):読み取り離散入力レジスタ、ビット操作、単一または複数の読み取り、プロトコル類似機能コード0 X 0 1プロトコル、ここで省;

03H-読み取り保持レジスタ

1)説明:レジスタの読み取り、バイト命令操作、単一または複数の読み取り。
2)命令の送信:
スレーブアドレス0 x 0 1、保持レジスタ開始アドレス0 x 0 0 3 2、2つの保持レジスタを読み込む

Modbus RTUデータ構造の詳細插图8

3)応答:

Modbus RTUデータ構造の詳細插图9

データストアの順序

Modbus RTUデータ構造の詳細插图10

04H-読み取り入力レジスタ

1)説明:入力レジスタの読み取り、バイト命令操作、単一または複数の読み取り。
2)送信命令:同03H;
3)答え:0 3 H。

0 5 H-シングルコイルを書く

1)説明:単一コイル、ビット操作、1つだけ書き込み可能、0 x ff 00を書き込むとコイル状態をONにし、0 x 0000を書き込むとコイル状態をOFFにします。
2)命令の送信:
0 x 0 0 3 2コイルをオンに設定します。

Modbus RTUデータ構造の詳細插图11

3)応答:
命令の送信;

0 6 H-単一の保持レジスタを書き込む

1)説明:単一の保持レジスタ、バイト命令操作、1つだけ書き込むことができます。
2)命令の送信:
0 x 0 0 32レジスタを0 x 1232に書き込む。

Modbus RTUデータ構造の詳細插图12

3)応答:命令の送信;

0 F-複数のコイルを書く

1)説明:複数のコイルレジスタを書き込みます。データ領域のビット値が“1”の場合、要求されたコイルの状態がONであることを示し、ビット値が“0”の場合、状態はOFFです。
2)命令の送信:
コイルアドレスは0 x 0 4 a 5で、12個のコイルを書きます。

Modbus RTUデータ構造の詳細插图13

上の図では、DATA1は0 x 0cです。

Modbus RTUデータ構造の詳細插图14

DATA2は0 x 0 2で、8ビット未満で、バイトの上位パディングは0です。

Modbus RTUデータ構造の詳細插图15

3)応答:

Modbus RTUデータ構造の詳細插图16

10H-複数の保持レジスタを書き込む

1)説明:複数の保持レジスタ、バイト命令操作、複数の書き込みが可能です。
2)命令の送信:
レジスタの開始アドレスを0 x 0 0 34に保持し、2つのレジスタに4バイトのデータを書き込みます。

Modbus RTUデータ構造の詳細插图17

3)応答:

Modbus RTUデータ構造の詳細插图18
この資料を実際のプロジェクトに活用しませんか?

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

エンジニア会員

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

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

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

发表回复

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