通信プロトコルとは?
Modbusとは何かを理解する前に、通信プロトコルとは何かを見ていきましょう。
通信プロトコルCommunication Protocolは、コンピュータシステム、ネットワーク機器、または異なるシステム間でデータの交換と通信を行うための規則または取り決めである。これらのプロトコルは、送信者と受信者の間で送信されるデータが正しく理解され解釈されるようにする通信の標準と仕様を定義します。
通信プロトコルには、物理層プロトコル、データリンク層プロトコル、ネットワーク層プロトコル、トランスポート層プロトコル、アプリケーション層プロトコルなどの複数のレベルが含まれ、それぞれが異なるタスクを担当します。通信プロトコルの主な側面は次のとおりです。
- データ形式:通信プロトコルは、データの符号化方法、バイト順序、データフレーム構造などを含むデータのフォーマットを規定します。これにより、転送中にデータが正しく解析および再構築されます。
- コミュニケーションの方法:プロトコルは、単一通信(一方向伝送)、半二重通信(双方が交互に伝送)、全二重通信(同時双方向伝送)を含む通信の方法を定義します。
- エラー検出とエラー訂正:通信プロトコルには、データの完全性と正確性を確保するために、送信中に発生する可能性のあるエラーを検出および修正するメカニズムが含まれます。
- フロー制御:通信プロトコルは、データの過負荷や輻輳を回避し、通信効率を向上させるためにデータフローを制御する方法を定義できます。
- 住所とID:プロトコルは、データがターゲットデバイスに正しく送信されることを保証するために、デバイスまたはノードのアドレスおよび識別子を含むことができる。
- セッション管理:一部のプロトコルでは、セッション管理は通信セッションの確立、維持、終了に使用され、通信の秩序と制御を確保する。
一般的な通信プロトコルにはI 2 C、SPI、UARTなどがありますが、Modbusはシリアル通信プロトコルです。
RS-485とRS-232とは?
Modbusを議論するとき、RS-485とRS-232がよく出てきますが、それらは何ですか?
RS-485(推奨規格485)とRS-232(推奨規格232)は、コンピュータと外部デバイス間のデータ転送に使用される2つの一般的なシリアル通信規格です。物理的および電気的特性にはいくつかの重要な違いがあります。
RS-232:- シングルポート通信:RS-232は、データ信号が送信ライン(TX)と受信ライン(RX)を含む1つの伝送ラインでのみ伝送される単一ポート通信規格です。
- 電圧レベル:RS-232は電圧レベルを使用してデータビットを表します。標準的なRS-232レベルは正と負の12Vで、正の電圧は論理0を表し、負の電圧は論理1を表します。
- 通信距離:RS-232通信は通常、より短い距離に適しており、通信距離は通常50フィート(約15 m)以下であり、通信速度は距離によって制限されます。
- ポイントツーポイントコミュニケーション:RS-232通信はポイントツーポイントであり、各接続は送信者と受信者の2つのデバイス間の通信のみをサポートします。
- 利用目的:RS-232は、コンピュータとシリアルプリンタ、モデム、シリアルマウスなどの外部機器との接続によく使用されます。短距離のポイントツーポイント通信にも使用できます。
RS-485:- 差動信号:RS-485は差動信号を使用してデータを伝送し、正(Aまたは非反転)と負(Bまたは反転)の2本の伝送ラインを備えています。この差動信号は、干渉防止性能を向上させる。
- 電圧レベル:RS-485は通常、正線の電圧が負線の電圧とほぼ等しいローレベルの差動信号を使用し、伝送ラインの干渉を低減するのに役立ちます。
- 通信距離:RS-485通信は長距離に適しており、通信速度とケーブル品質に応じて、通常数千フィート(数百メートル)の距離をカバーします。
- より多くのコミュニケーション:RS-485はマルチポイント通信に対応しており、複数のデバイスを同じ伝送ラインに接続し、同時に通信することができます。これにより、RS-485は、複数のデバイス間でデータを交換する必要がある産業用制御や計測などのアプリケーションに最適です。
- 利用目的:RS-485は、産業オートメーション、遠隔監視、ビルオートメーション、および長距離およびマルチデバイス通信を必要とするその他のアプリケーションで一般的に使用されています。差動信号設計により、干渉に強く、通信距離が長く、マルチポイント通信をサポートするため、これらの分野で広く使用されています。
詳しく知りたい場合は、お読みください:USB-TTL RS-232 RS-485 COMポートUARTの違い
USB to Serial USB to Serialは、USBインタフェースをシリアル通信インタフェースに接続するデバイスで、シリアル通信を必要とする外部デバイスにコンピュータを接続するために通常使用されます。これらのシリアルポートは、TTLシリアルポート、RS-232シリアルポートまたはRS-485シリアルポートであることができ、以下のように異なります。
- TTLポート:TTL(Transistor-Transistor Logic)シリアルポートは、ローレベル(通常、ロジック0の場合は0V、ロジック1の場合は3.3 Vまたは5 V)で通信します。組込みシステムとマイクロコントローラ間の通信に使用されます。USB-TTLシリアルポートは、ArduinoなどのTTLシリアルデバイスにコンピュータを接続するのに適しています。
- RS-232ポート:RS-232は一般的なシリアル通信規格であり、通常は正と負の12Vの電圧レベルを使用してロジック0とロジック1を表します。USB-RS-232シリアルポートは、コンピュータとシリアルプリンタ、モデムなどの古いシリアルデバイスを接続するのに適しています。
- RS-485の略。RS-485は差動信号シリアル規格で、2本の伝送ライン(AとB)を使用してデータを伝送し、一方は正の位相、もう一方は逆の位相です。干渉に強く、産業用制御や長距離通信でよく使用されるマルチポイント通信をサポートする能力を備えています。USB-RS-485シリアルポートは、産業オートメーション機器などのRS-485シリアルデバイスとコンピュータを接続するのに適しています。
- COMポート(シリアルポート):COMポートは、コンピュータ上でシリアル通信に使用される物理インタフェースであり、通常はRS-232またはRS-485規格を使用します。COMポートは通常、シリアルプリンタ、GPS受信機、データコレクタなどの外部機器を接続するために使用されます。USB COMポートは、シリアルインタフェースが内蔵されていないコンピュータに適しており、ユーザーはUSBインタフェースを介してCOMポートをエミュレートできます。
- UART(ユニバーサル非同期トランシーバ):UARTは、シリアル通信のためにパラレルデータをシリアルデータに変換する通信チップまたはモジュールです。UARTは、TTL、RS-232、RS-485などのさまざまなタイプのシリアルポートで使用できます。USB-UARTは通常、さまざまなタイプのシリアルデバイスを接続するために使用できる汎用シリアルアダプタです。

Modbusプロトコルの説明
Modbusは1979年に誕生し、最初はモディコン社(Modicon)によって開発され、後にシュナイダーエレクトリック社に買収された。Modbusは、デバイス間の通信のための共通言語を提供します。産業分野における通信プロトコルの業界標準となっており、産業用電子機器間の一般的な接続方法の1つです。Modbusは、産業界で最も広く使用されているプロトコルの1つであり、以下の利点があります。
- Modbusプロトコルはオープンで公開され、著作権フリーであり、広く適用できます。
- Modbusプロトコルは、RS 232、RS 485、TCP/IPなどのさまざまな電気インタフェースをサポートしており、ツイストペア、光ファイバー、赤外線、無線などのさまざまなメディアで伝送することができます。
- Modbusプロトコルのメッセージフレームフォーマットはシンプルでコンパクトで理解しやすいです。ユーザーは理解しやすく、メーカーは開発と統合が容易で、産業用制御ネットワークを形成しやすい。
Modbusプロトコルの応用
最も簡単に言えば、ModbusはI 2 CやSPIに似たバス通信プロトコルですが、特定のハードウェアバスに依存しません。Modbusは多くの利点があるため広く使われている。
Modbus通信プロセス
Modbusは1つのマスターマルチスレーブ通信プロトコルであることに注意することが重要です。Modbus通信では、1つのデバイスのみがリクエストを送信でき、他のスレーブデバイスはホストから送信されたリクエストデータを受信して応答します。スレーブデバイスは、I/Oセンサ、バルブ、ネットワークドライブ、またはその他のタイプなど、さまざまな周辺機器です。
測定機器です。スレーブ局は情報を処理し、Modbusを使用してデータをマスター局に送信する。つまり、Modbusの同期通信は同時に行うことはできません。ホストは一度に1つのスレーブにのみリクエストを送信でき、バス上のデータは一度に1つだけです。つまり、ホストはリクエストを送信し、スレーブは応答します。ホストがリクエストを送信しない場合、バス上でのデータ通信は行われません。
特に、Modbus通信はビジーメカニズム判定がないことに注意する必要がある。例えば、マスターがスレーブにコマンドを送信しても、スレーブが受信していないか、他のタスクを処理している場合、Modbusバスはデータの転送のみを担当し、他の調停メカニズムがないため、スレーブは時間内に応答できません。したがって、データが正常に受信されたかどうかをソフトウェアで判断する必要があります。
Modbusストレージ
スレーブはデータを保存するので、ファイル操作を実行する方法が必要です。ご存知のように、ファイルは読み取り専用(Read-Only、-R)と読み取り専用(Read-Write、-RW)に分類でき、Modbusには対応するストレージがあります。
Modbusプロトコルでは、格納されるデータ型は、ブール値と16ビットレジスタの2つの主要なタイプに分けることができます。
- ブール値:これらのデータは、IOポートレベル、ランプのオン/オフ状態などを表すことができます。
- 16ビットレジスタ:このデータは、センサの温度データを表したり、パスワードなどの情報を格納するためによく使用されます。
Modbusプロトコルは、ストレージをゾーン0、1、3、4の4つのゾーンに分割します。ゾーン1と4は読み取り可能で、ゾーン0と3は読み取り専用です。
さらに、Modbusは各ストアにアドレス範囲を割り当てます。ホストがスレーブにデータを要求するとき、スレーブにデータの開始アドレスと取得したいバイト数を教えるだけで、スレーブはホストにデータを送信することができます。
Modbusプロトコルの種類
Modbusプロトコルでは、データ転送は異なる媒体とモードを使用することができ、ASCII、RTU、TCPの3つの主要なメッセージタイプがあります。
シリアルポートの場合、Modbusプロトコルには複数のバージョンがありますが、最も一般的なものは以下の4つです。
- **Modbus-RTU**:コンパクトな16進法でデータを表現する。Modbus-RTUは、データが正しいかどうかを検出するために、データフレームに巡回冗長検査CRCを付加しています。典型的なModbus-RTUメッセージには、スレーブアドレス、機能コード、データ、CRCチェックが含まれます。
- ** Modbus-ASCI I **:データはASCIIコードで表現され、各8ビットは2つのASCII文字に変換されて送信されます。Modbus-ASCI Iにも巡回冗長検査が含まれているが、異なる検査方法を使用する。
- **Modbus-TCP**:Modbus-TCPはスレーブアドレスを必要とせず、MBAP Modbus Application Protocol over TCPヘッダを必要とする。TCPは独自のチェックサムエラー検出機能を備えているため、Modbus-TCPは追加のエラーチェックを必要としない。
- **Modbus Plus**:これは、特定の産業用アプリケーション用のModbusプロトコルの別バージョンです。
これらのバージョンの中ではModbus-RTUが最も一般的であり、Modbus-ASCIIはあまり使われていない。Modbus-RTUプロトコルについては以下で詳しく説明する。
Modbus-RTUプロトコル
Modbusメッセージフレーム構造Modbusメッセージは、ホストからスレーブに送信されるデータのフレームであり、スレーブのアドレス、ホストが実行する操作、データ、チェックコードなどの情報が含まれています。シリアルリンクでは、Modbusメッセージの形式は以下の通りです。
- ** スレーブアドレス **:各スレーブには一意のアドレスがあり、1バイトを占め、有効な範囲は通常1-247です。255はブロードキャストアドレスで、すべてのスレーブにリクエストを送信します。
- ** 関数コード **:1バイトを占有し、ホストによって送信されたリクエストの種類を表し、異なる関数コードは異なる操作に対応します。
- ** データ **:機能コードによって異なる情報が含まれていますたとえば、関数コードがクエリスレーブのデータである場合、データ部分には開始レジスタアドレスと読み出すレジスタ数が含まれます。
- ** データ転送中
データが干渉または破損する可能性があり、受信したデータが正しいかどうかを検出するためにCRC検査が使用されます。
Modbus関数コード
Modbusプロトコルは複数の機能コードを規定し、それぞれが1つの操作に対応している。Modbusは20種類もの関数コードを定義しているが、実際にはメモリへの読み書きに使用されるのは8種類だけである。以下は一般的なModbus関数コードです:
- **03**:複数のレジスタの値を読み込む。
- ** 0 6 **:単一レジスタの値を設定します。
- **16**:複数のレジスタの値を設定します。
- **01** 複数のスイッチ量入力を読み出す。
- **02**:複数のスイッチング量出力を読み出す。
- **05**:1つのスイッチング量出力を設定します。
- **15**:複数のスイッチング量出力を設定します。
- **23**:複数のレジスタの値を読み出す(拡張機能コード)。
異なる機能コードは異なる操作に対応するため、ホストはリクエストを送信する際に機能コードを指定して、スレーブに実行される操作を知らせる必要があることに注意してください。
CRCチェック
CRC巡回冗長検査は、データ転送中のエラーを検出するために使用されます。Modbusプロトコルでは、CRCチェックは2バイトを取り、16ビットのバイナリ値を含みます。CRC値は、送信装置によって計算され、データフレームに付加され、受信装置がデータを受信するときに再計算され、受信したCRCチェック値と比較される。この2つの値が等しくない場合、データ転送エラーが発生します。
CRCチェックの計算フローは次のとおりです。
1. 0 x FFFF(all 1)の16ビットレジスタをプリセットレジスタと呼びます。
2.データフレームの最初のバイトの8ビットは、CRCレジスタの下位バイトと排他的和演算され、結果はCRCレジスタに戻されます。
3. CRCレジスタを1ビット右にシフトし、最上位ビットは0で埋められ、最下位ビットはアウトされて検出されます。
4.最下位ビットが0の場合、ステップ3が繰り返されます(次のシフトが続きます)。最下位ビットが1の場合、CRCレジスタはあらかじめ設定された固定値(0 x A 0 01)で排他的になります。
5.ステップ3と4を8回シフトして完全な8ビットが処理されるまで繰り返します。
6.すべてのバイト処理が完了するまで、ステップ2 ~ 5を繰り返して次の8ビットを処理します。
7.最終的なCRCレジスタの値がCRCチェック値です。
さらに、事前計算されたテーブルを使用してCRCを計算する方法もあります。これは計算速度が速くなりますが、より大きな記憶領域が必要です。この方法はここでは詳述しない。
データの送受信例
以下では、Modbus-RTUプロトコルの送受信データの例について詳しく説明します。
1.ホストからスレーブへの読み取り操作ホスト送信メッセージの形式は以下のとおりです。
0 1 0 3 0 0 1 0 0 1 D 5 CA
解説する:
- `0x01`:スレーブのアドレス.
- `0x03`:クエリ機能,スレーブレジスタのデータを読み込む.
- `0x00 0x01`:フェッチの開始レジスタアドレスを表し,0x0001からフェッチを開始する.
- `0x00 0x01`:クエリを表すレジスタ数は1个である. Modbusはデータをレジスタに格納し、レジスタを照会して異なる変数の値を取得します。1つのレジスタアドレスは2バイトのデータに対応し、レジスタアドレスはスレーブの実際の記憶アドレスに対応する。
- `0xD5 0xCA`:巡回冗長検査CRC
スレーブ返信メッセージの形式は以下の通りです。
0 1 0 3 0 2 0 0 17 F 8 4 A
解説する:
- `0x01`:スレーブのアドレス.
- `0x03`:クエリ機能,スレーブレジスタのデータを読み込む.
- `0x02`:リターンバイト数は2个で,1つのレジスタが2バイトに対応する.
- `0 x 00 0 x 17`:レジスタの値は0 x 0017です。
- `0xF8 0x4A`:巡回冗長検査CRC。
2.ホストからスレーブへの書き込み操作ホスト送信メッセージの形式は以下のとおりです。
0 1 0 6 0 17 9 8 0 4
解説する:
- `0x01`:スレーブのアドレス.
- `0x06`:機能を修正して,スレーブレジスタのデータを修正する.
- `0 x 00 0 x 01`:変更された開始レジスタアドレスを示し、0 x 00 01 - 0 x 00 03のストレージ内容を変更することを示します。
- `0x00 0x17`変更するデータ値は0x0017です。
- `0x98 0x04`:巡回冗長検査CRC
スレーブ返信メッセージの形式は以下の通りです。
0 1 0 6 0 17 9 8 0 4
解説する:スレーブからの返信はホストからの送信と同じです。異なる場合は、エラーが発生しました。
これはModbus-RTUプロトコルの簡単な例で、ホストがデータの読み書き要求をスレーブに送信し、スレーブから応答を受信する方法を示しています。各Modbusメッセージには、スレーブアドレス、ファンクションコード、データ、CRCチェックが含まれ、信頼性の高いデータ転送を保証します。
Modbus-ASCIIプロトコル
Modbus-ASCIIプロトコルはModbus-RTUプロトコルに似ているが、メッセージ内の各バイトは2つのASCII文字として送信される。16進数の0からFは、それぞれASCII文字の0から9とAからFに対応します。
Modbus-ASCI Iプロトコルの特徴は次のとおりです。
- 各バイトはASCII文字で表されます。例えば、0 x 30~ 0 x 3 Aは0 ~ 9、0 x 41~0です。
x 46はAからFを表す。
- バイトはスペースで区切られます。
- 各メッセージは、キャリッジリターン(CR,0 x 0D)と改行(LF,0 x 0 A)で終了します。
Modbus-ASCIIのCRCチェックはModbus-RTUと同じですが、ASCII形式ではASCII文字として表現されます。
Modbus-TCPプロトコル
Modbus-TCPプロトコルは、TCP/IPネットワーク上の通信に使用されるTCP/IPプロトコルをベースとしたModbusプロトコルの変種です。Modbus-RTUやModbus-ASCIIプロトコルとは異なり、Modbus-TCPプロトコルは物理シリアルリンクを使用せず、代わりにイーサネットやWi-FiなどのTCP/IPネットワークを使用します。
Modbus-TCPプロトコルの特徴は次のとおりです。
- Modbus-TCPは標準的なTCP/IPソケット接続を使用し、物理的なシリアル通信回線を必要としません。
- Modbus-TCPメッセージは、CRCチェックを除いてModbus-RTUプロトコルメッセージと同様の構造を持つ。
- Modbus-TCPでは、データはASCII文字の代わりにバイナリ形式で転送されます。
- Modbus-TCPメッセージはTCP接続のソケットを介して送受信されます。
- Modbus-TCPはTCPポート502を使用します。
したがって、Modbus-TCPプロトコルは、現代の産業オートメーションシステムや機器で一般的に使用されるModbus-RTUやModbus-ASCI Iプロトコルよりもイーサネットベースの通信に適しています。
概要まとめ
Modbusは、Modbus-RTU、Modbus-ASCI I、Modbus-TCPを含む複数のバージョンがある産業分野の通信のための汎用プロトコルです。異なるバージョンは、異なる通信媒体やシナリオに適しています。Modbus-RTUは通常シリアル通信に使用され、Modbus-TCPはイーサネット通信に使用されます。Modbusプロトコルには、データの送受信に使用されるファンクションコード、CRCチェックなどの要素が含まれます。Modbusプロトコルを使用すると、ホストはスレーブと通信し、オートメーションおよび制御システムのためのデータの読み書きができます。
发表回复