1. Modbusの概要
Modicon(現在のシュナイダーエレクトリックのブランド)が1979 年に発明したModbusは、産業現場で使用される世界初の本格的なバスプロトコルです。ModBusネットワークは、プログラマブルコントローラとインテリジェント端末を備えたコンピュータを公衆回線またはローカル専用回線で接続した産業用通信システムです。システムアーキテクチャにはハードウェアとソフトウェアの両方が含まれます。さまざまなデータ収集やプロセス監視に適用できます。イーサネットベースの分散アプリケーションでModbusをより良く普及させ、促進するために、シュナイダーはModbusプロトコルのすべての権をIDA(Interface for Distributed Automation)組織に移管し、Modbus-IDA組織を設立し、Modbusの将来の発展の基礎を築きました。
中国では、Modbusは国家標準となっており、専門的な仕様文書を持っています。興味のある人は、関連文書を参照することができます。GB/T19582-2008文書名:Modbusプロトコルに基づく産業オートメーションネットワーク仕様
主に以下の3つの部分があります。
GB/T 195 8 2.1 -2008 Part 1:Modbus Application Protocol(英語版)
GB/T 195 8 2.2 -2008 Part 2:シリアルリンク上のModbusプロトコル実装ガイド
GB/T 1958 2.3 -2008 Part 3:Modbus Protocol Implementation Guide to TCP/IP
2. Modbusプロトコル概要
Modbusはマスター-スレーブ通信プロトコルであり、データリンク層のプロトコルに属し、プロトコル自体には特定のハードウェア要件は含まれません。Modbusプロトコルを使用する一般的な物理インタフェースは、RS-485、RS 232、USARTなどの通信リンクにあります。Modbusプロトコルでは、一度に1つのホストのみがバスに接続され、複数のスレーブがバスに接続され、通信はホストによってのみ開始され、スレーブが応答することができます。スレーブからの通信はアクティブに開始できません。
3、Modbusマスタ·スレーブ通信モード
ホストとスレーブ間の通信には、ブロードキャスト通知モードとユニキャストポイントツーポイントモードの2つのモードがあります。
3.1、ユニキャストポイントツーポイントモード
ホストはスレーブの明示的なアドレスに従って対応するスレーブにアクセスし、スレーブはホストからの要求を受け取り、要求を処理した後、チャンスからホストに一つの応答を返し、一つの通信を完了する。このモードでは、Modbusトランザクションはホストからのリクエストとスレーブからのレスポンスの2つのメッセージで構成されます。バス上では、各スレーブは一意のスレーブアドレス(1 ~ 247)を持つ必要があります。これにより、他のノードから独立してアドレス指定されます。
3.2放送通知モード。
ホストはバスにブロードキャストコマンドを介してリクエストを送信し、すべてのスレーブはホストからブロードキャストメッセージを受信します。ホストがブロードキャストしたリクエストに対して、スレーブは応答せずに返されます。すべてのスレーブはホストのブロードキャストモード機能を受信する必要があります。注:アドレス0は、ホストが個々のスレーブにデータをブロードキャストするために特別に使用されます。
Modbusアドレス規則
Modbusアドレス空間には256の異なるアドレスがある。下の図のように:

アドレス0はブロードキャストアドレスです。すべてのスレーブはブロードキャストアドレスを認識する必要がある。Modbusホスト自体にはアドレスがなく、スレーブのみがアドレスを持つ必要があります。アドレスはModbusシリアルバス上で一意でなければなりません。248~255は予約用アドレスとして使用する。
5. Modbusのフレーム形式
Modbusのフレームフォーマットは、選択したモードによって異なるフレームフォーマットも異なります。
5.1 RTUモデル。
RTUモードでのフレームフォーマットは以下の通りです。

Modbus RTUフレームの長さは最大256バイトです。RTUモードの各バイト(11ビット)の形式は、 :8ビットのバイトごとに2つの4ビット16进文字を含む0 9、A Fバイトあたりのビットストリーム1.スタート地点8データビット、最初に最下位ビットを送信1ビットがパリティとして1ストップで。偶数検证が必要であり、他のモード(奇数検证、无検证)も使用できる。他の製品との互換性を最大限に高めるために、無検証モードのサポートも推奨されます。デフォルト検証モードモードモードは偶数検証である必要があります。注:無検証を使用するには、2つの停止ビットが必要です。RTUでは、各文字またはバイトが次の順序で送信されます(左から右へ)。
LSB最下位ビットLSB. . .最上位ビットMSB


5.1.1 RTUモードでの通信
Modbusメッセージは、送信デバイスによって既知の開始タグと終了タグを持つフレームとして構築されます。これにより、デバイスはメッセージの開始時に新しいフレームを受信し、メッセージが終了するタイミングを知ることができます。不完全なメッセージを検出でき、結果としてエラーフラグを設定する必要があります。RTUモードでは、メッセージフレームは少なくとも3.5文字の時間のアイドル間隔によって区別される。

メッセージフレーム全体を連続した文字ストリームとして送信する必要があります。2文字間の空き間隔が1.5文字時間を超える場合、メッセージフレームは不完全とみなされ、受信ノードによって破棄されるべきです。

RTUモードでデータを受信する場合、t 1.5とt 3.5の間隔要件があるため、一般的に高い通信レートではCPU負荷が大きくなります。したがって、通信レートが19200 bps以下の場合は、これら2つのタイミングを厳密に遵守する必要があります。19200 bpsを超える場合は、2つの固定値を使用する必要があります。推奨される文字間のタイムアウト時間(t 1.5)は750μs、フレーム間のタイムアウト時間(t 1.5)は1.750 msです。以下の図は、RTU伝送モードの状態図を示しています。“主ノード”と“子ノード”の異なる角度は、同じ図に示されています

上記の状態図の説明
1)“初期”状態から“アイドル”状態への遷移には、t3.5のタイムアウトが必要であるこれはフレーム間遅延を保証する
2)“アイドル”状態は、処理すべきメッセージの送受信がない正常な状態です。
RTUモードでは、非アクティブな伝送間隔が3.5文字に達すると、通信リンクは“アイドル”状態とみなされます。
4)リンクがアイドル状態のとき、リンク上で検出された送信の文字はフレームの開始として認識される。リンクが“アクティブ”になります。その後、リンク上の文字転送がない時間がt 3.5に達すると、フレームの終了として認識されます。
5)フレームの終了を検出した後、CRC計算と検査を完了する。次に、アドレスフィールドを分析して、フレームがこのデバイスに送信されるかどうかを決定し、送信されない場合は破棄します。受信処理時間を短縮するために、アドレスフィールドはフレーム全体の終了を待たずに受信時に解析できます。したがって、CRC計算は、フレームがノードにアドレス指定されているとき(ブロードキャストフレームを含む)のみ実行される必要がある。
5.1.2 RTUモードでのCRCチェック
RTUモードには、全メッセージ内容に対して実行される巡回冗長検査(CRC − Cyclical Redundancy Checking)アルゴリズムに基づく誤り検査フィールドが含まれる。CRCフィールドはメッセージ全体の内容を検査します。このチェックは、パケットパリティの有無にかかわらず実行されます。CRCは2つの8ビットバイトからなる16ビット値を含む。CRCフィールドは、メッセージの最後のフィールドとしてメッセージの後に付加される。計算後、最初にローバイト、次にハイバイトが付加される。CRCハイワードセクションは、送信されたメッセージの最後のサブセクションです。メッセージに付加されるCRCの値は、送信デバイスによって計算されます。受信デバイスは、メッセージを受信するとCRC値を再計算し、計算結果を実際に受信したCRC値と比較します。2つの値が等しくない場合、エラーです。CRCの計算は、16ビットレジスタの1つのプリロードから始まる。そして,メッセージ中の連続する8つのセグメントを後続の計算にかける.文字内の8つのデータビットのみがCRCを生成する演算に関与し、開始ビット、停止ビット、およびチェックビットはCRC計算に関与しません。CRCの生成中、各8 'ビット文字はレジスタ内の値と異なる和を持つ。その后、は、最下位ビット()方向に1ビットシフト(Shift)し、最上位ビット()位置はゼロに満たされる。次に、LSBを抽出してチェックします。LSBが1の場合、レジスタ内の値は固定プリセット値と異なります。LSBが0の場合、例外和は行われません。このプロセスは、8回のシフトが完了するまで繰り返されます。最後の(8回目の)シフトと関連する操作が完了した後、次の8ビットバイトはレジスタの現在値と排他的になり、上記と同じように8回繰り返されます。すべてのサブノードが演算されたときに得られるレジスタの最終値はCRCです。
5.2 ASCII転送モード
ModbusシリアルリンクのデバイスがASCIIモードで通信するように設定されている場合、メッセージ内の各8ビットバイトは2つのASCII文字で送信されます。このモードは、通信リンクやデバイスがRTUモードのタイミング管理に適合しない場合に一般的に使用されます。ASCIIのフレーム形式は次のとおりです。

例えば、NDMPバイト0X5Bは、2つの文字0x35と0x42 ASCIIエンコード0x35 =“5”、0x42 =“B”としてエンコードされる。注意1つのサブセクションに2文字が必要なため、このモードはRTUよりも効率的ではありません。
ASCIIモードの各バイト(10ビット)の形式は、16进数、ASCII文字0-9、A ~ Fです。1.スタート地点7データビット、最初に最下位ビットを送信1ビットがパリティとして1ストップで。偶数検证が必要であり、他のモード(奇数検证、无検证)も使用できる。他の製品との互換性を最大限に高めるために、無検証モードのサポートも推奨されます。デフォルト検証モードモードモードは偶数検証である必要があります。注:無検証を使用するには、2つの停止ビットが必要です。文字はどのようにシリアル転送されますか各文字またはバイトはこの順序で送信されます左から右へ。
LSB最下位ビットLSB. . .最上位ビットMSB


5.2.1 ASCIIのメッセージ。
ASCIIモードでは、メッセージはフレームの開始と終了を区別する特殊文字を使用します。メッセージは、コロンASCII 16進3Aで始まり、キャリッジリターン-改行CR LFペアASCII 16進0Dと0Aで終わる必要があります。注記LF文字は、特定のModbusアプリケーションコマンド(Modbus Application Protocol Specification参照)によって変更することができる。すべてのドメインについて、転送可能な文字は16進数0 9 A F ASCIIエンコードです。デバイスの連続監視バス上の“マーク”文字。この文字を受信すると、各デバイスはフレームの最後まで続く文字をデコードします。メッセージ内の文字間の時間間隔は1秒にもなります。より大きな間隔がある場合は、受信デバイスはエラーが発生したとみなします。特に注意:各文字サブセクションは2文字でエンコードする必要があります。したがって、ModbusアプリケーションレベルでのASCIIモードとRTUモードの互換性を確保するために、ASCIIデータフィールドの最大データ長(2 × 252)は、RTUデータフィールド(252)の2倍である。当然ながら、Modbus ASCIIフレームの最大サイズは513文字です。ASCIIメッセージフレームの要求は、以下の状態図にまとめられています。“主ノード”と“子ノード”の異なる角度は、同じ図に示されています

上記の状態図のいくつかの説明1“アイドル”状態は、処理するメッセージを送受信しない正常な状態です。2“”文字を受信する度に、新しいメッセージのを示す。メッセージの受信中に文字が受信された場合、現在のローカルメッセージは不完全とみなされ、破棄されます。新しい受信バッファが再割り当てされる。3)フレームの終了を検出した後、LRCの計算と検証を完了します。次に、アドレスフィールドを分析して、フレームがこのデバイスに送信されるかどうかを決定し、送信されない場合は破棄します。受信処理時間を短縮するために、アドレスフィールドはフレーム全体の終了を待たずに受信時に解析できます。
5.2.2 ASCIIのLRC検証
ASCIIモードでは、メッセージ内容全体に対して実行される、LRC − Longitudinal Redundancy Checkingアルゴリズムに基づくエラーチェックフィールドが含まれる。LRCドメイン検定には、開始“コロン”と終了CRLFペアのテキスト全体の内容は含まれません。このチェックは、パケットパリティの有無にかかわらず実行されます。LRCフィールドは、8ビットのバイナリ値を含むサブセクションです。LRC値は送信デバイスによって計算され、LRCがメッセージに添付されます。受信デバイスは、メッセージを受信するとLRCの値を再計算し、計算結果を実際に受信したLRCの値と比較します。2つの値が等しくない場合、エラーです。LRCの計算は、メッセージ中の連続する8ビットバイトすべてを加算し、任意のキャリーを無視して、その2の補数を求める。チェックは、開始“コロン”と終了CRLFペアを除くASCIIメッセージフィールド全体に対して実行されます。ASCIIモードでは、LRCの結果は2バイトのASCII符号化され、ASCIIモードのメッセージフレームの最後のCRLFの前に置かれる。
6. Modbusの例外コード
MODBUS取引の一般的な処理手順

サーバがリクエストを処理すると、適切なMODBUSサーバトランザクションを使用してMODBUSレスポンスが確立されます。処理結果に応じて、次の2種類の応答を確立できます。
1)正しいMODBUSレスポンス:レスポンス関数コード=リクエスト関数コード
2)Modbusの例外応答
3)処理中に発見されたエラーに関する情報をクライアントに提供するために使用されます。
応答機能コード=リクエスト機能コード+0 x 80;
5)エラーの原因を示す例外コードを提供します。
7. Modbusの機能コード
7.1機能コードの種類
Modbusの機能は、パブリック機能コード、ユーザー定義機能コード、予約機能コードの3つに分けることができます。

公開関数コード:すでに定義されている関数コード。
ユーザー定義機能コード:ユーザー定義機能コードは2つあります。范囲は65 ~ 72および100 ~ 110です。
予約済み機能コード:特別な状況で使用され、公衆使用には無効な機能コード。
7.2公開機能コード。
Modbusの共通関数コードの定義は以下の通りである。

7.2.1コイル操作

例えば、コイルの内容を読みます。スレーブアドレスは11Hであり、コイルレジスタのアドレスは0013H、终了アドレスは0037Hである。合計37個のコイルレジスタを照会する必要があり、ホストが送信するRTUフレームは以下のとおりです。

スレーブが応答するデータフレームは次のとおりです。

解析コイル0013Hからコイル001AHのはCDHで、バイナリ値は11001101で、このバイトの最高バイトはコイル001AHで、最 低ワードノットはコイル0013Hです。各コイル状態は、データ内容毎に対応する。1はON、0はOFF。コイル001AHからコイル0013Hのは、それぞれ以下のとおりです。

7.2.2保持レジスタ操作機能コード

(1)複数の保持レジスタを書き込む
の保持レジスタを书き込むと例:スレーブアドレスは11Hです。保持レジスタの実アドレスは0001Hであり、レジスタの终了アドレスは0002Hである。合計2つのレジスタにアクセスする.保持レジスタ0001Hの内容は000AHであり、保持レジスタ0002Hの内容は0102Hである。
ホストが要求するRTUフレームデータは以下のとおりです。


マシンから返される応答は次のとおりです。

(2)リードホールドレジスタ
リードホールドレジスタは、03Hコードを使用する。例:スレーブアドレスは11Hです。保持レジスタのアドレスは006、终了アドレスは006DHである。
ホストが送信するRTU要求フレームは以下のとおりです。


従机からの応答は以下の通り。

发表回复