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+関数コードの特徴+データは+検証済み。;
解析は以下の通りです。
データ解析の送信

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の検査式。データ解析の返信

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データ解析の送信

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

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個のコイルが読み出されると仮定します。合意書は以下の通り。

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

上記の表では、データ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のコイル状態を表します。

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

02H-離散入力ステータスの読み取り
1):読み取り離散入力レジスタ、ビット操作、単一または複数の読み取り、プロトコル類似機能コード0 X 0 1プロトコル、ここで省;
03H-読み取り保持レジスタ
1)説明:レジスタの読み取り、バイト命令操作、単一または複数の読み取り。
2)命令の送信:
スレーブアドレス0 x 0 1、保持レジスタ開始アドレス0 x 0 0 3 2、2つの保持レジスタを読み込む

3)応答:

データストアの順序

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コイルをオンに設定します。

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

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

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

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

3)応答:

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

3)応答:

发表回复