MODBUSバス制御システムの技術的特徴
MODBUS通信プロトコルは産業用フィールドバス通信プロトコルであり、デバイスコントローラが認識して使用できる情報フレーム構造を定義し、物理層メディアとは独立しており、さまざまなネットワークタイプでホストすることができます。
MODBUSプロトコルは、通信参加者を“マスター”Masterと“スレーブ”Slaveと定義し、データとメッセージの通信はマスター/スレーブモードに従い、それが標準MODBUSネットワークに適用されると、メッセージは直接転送される。
MODBUSバスネットワーク内の各スマートデバイスは非同期シリアルバスを介して接続され、1つのコントローラのみがマスターとして機能し、残りのスマートデバイスがスレーブとして機能します。
コマンド/レスポンス通信の形態を採用し、マスタは要求を発行し、スレーブは要求に応答してデータやステータス情報を送り返し、スレーブは自分で情報を送信することはできません。
MODBUSプロトコルによって定義された様々な情報フレームフォーマットは、マスターコントローラがスレーブデバイスにアクセスするプロセス、スレーブが応答する方法、および伝送エラーのチェックと報告を記述します。ネットワーク内の各スレーブデバイスには一意のアドレスが割り当てられている必要があり、アドレス要件を満たすスレーブデバイスのみがマスターからのコマンドに応答します。
MODBUSバスシステムは、開発コストが低く、使いやすく、現在では多くの産業用コントローラ、PLC、インバータ、ディスプレイなどがMODBUS通信インタフェースを備えているため、通信規格として認識されています。
MODBUSバスを使用すると、異なるメーカーの制御機器を産業ネットワークに簡単に接続して集中監視することができます。
MODBUSはもともとPLC通信用に設計され、24種類のバスコマンドを介してPLCと外部との間の情報交換を実現します。これらのバスコマンド対応の通信は主にAI/AO、DI/DOのデータ転送を含む。
しかし、これらのコマンドのほんの一部を使用し、残りのコマンドに反応しないMODBUSデバイスの制御はあまりありません。
MODBUS通信形式
MODBUSプロトコルは、RTU Remote Terminal UnitとASCIIの2つの伝送モードを定義している。
RTUモードでは1バイトの情報が8ビット文字として送信されるのに対し、ASCIIモードでは2つのASCII文字として送信され、例えば“20”を送信するとRTUモードでは“00100000”となりますが、ASCIIモードでは“00110010”+“00110000”(ASCII文字の“2”と“0”)となります。
同じデータを送信する場合、RTUモードはASCI Iモードの約2倍の効率があります。
一般的に、データ量が少なく、主にテキストの場合はASCIIを使用し、通信データ量が大きく、バイナリ値の場合はRTUモードを使用します。
マスタは、一度に1つまたはすべてのスレーブに通信要求(または命令)を送信することができ、マスタは、メッセージフレームのアドレスフィールドを介してスレーブをゲートする。
親局が送信するメッセージフレームの内容と順序は、スレーブアドレス、機能コード、データフィールドデータ開始アドレス、データ量、データ内容、CRCチェックコードであり、スレーブ局が応答する情報内容と順序は、親局情報フレームとほぼ同じである。
MODBUSは通信機能コードに加えて、エラーコードも定義し、エラー情報をフラグします。エラーコードを受信した後、
間違った理由は適切な処置を取る。スレーブが応答するデータ内容は、機能コードに基づいて応答し、例えば機能コード03はスレーブ装置に保持レジスタの内容を読み出すことを要求する。
CRCチェックの実装
MODBUS通信のRTUモードでは、情報フレームの最後の2バイトがCRC(Cyclic RedundancyCheck)コードを渡すために使用されることが規定されている。
送信側は、情報フレーム内のアドレスフィールド、機能コード、データフィールドのすべてのバイトを所定の方法でシフトし、XOR(排他的OR)計算を行うことで、2バイトのCRCコードを得、CRCチェックコードを含む情報フレームを連続ストリームとして送信します。
受信側は、情報フレームを受信したときに同じ方法で計算し、結果を受信したCRCコードの2バイトと比較し、一致すれば通信が正しいとみなし、そうでなければ通信が間違っているとみなし、スレーブはCRCエラー応答を送信します。
RTUモードは一般的にCRC-16冗長検査方式を採用し、CRC-16の検査コードは16ビット(2バイト)で、ローバイトが前面に、ハイバイトが背面に設定されます。
CRCチェックを実装するには、CRCチェックの定義式に従って計算するか、プログラム内にCRCチェック値テーブルを確立する2つの方法があります。
前者をプログラムで使用する方が容易であり、ここではCRC生成X16+X15+X2+1を用いる必要がある。
このに対応する符号组は18005H 16进数であり、最上位ビットを取り除くと、対応する16ビットの剰余は8005Hであり、すなわちCRC-16定数である。
CRC-16検証手順は以下のとおりです。
CRCレジスタの各ビットは1にプリセットされます。レジスタ値は8ビットの情報フレームデータと異なる和を取り、結果はレジスタに保存されます。CRCレジスタはハイからローにシフトされ、最上位ビット(MSB)の位置にゼロが補われ、最下位ビット(LSB、シフト後にシフトされます。
1の場合、レジスタはCRC-16定数と排他和されます。そうでなければ、LSBがゼロの場合、排他和は必要ありません。上記のハイからローへのシフトを8回繰り返し,最初の8ビットデータの処理が完了し,この時点でレジスタの値が次の8ビットデータと異和して前と同様に8回シフトする.
すべての文字処理が完了すると、CRCレジスタ内の値が最終的なCRC値となります。CRCがメッセージに追加されると、まずローバイト、次にハイバイトが追加されます。
リンク特性
MODBUS規格の物理層はRS-232シリアル通信モードを使用することができますが、長距離通信ではRS-422またはRS-485がしばしば使用されます。マルチポイント通信の場合、RS-485モードのみが使用されるため、RTUモードのMODBUSシステムはシールド付きツイストペアを使用し、通信距離は最大1000mです。1つのバスに最大31台のスレーブデバイスを構成できます。
伝送ライン上の情報交換は半二重であり、同時に情報を送信できるデバイスは1つだけであり、マスタは次のコマンドを送信する前にスレーブの応答を待ち、ラインの競合を回避します。
RTUモードの伝送フォーマットは1データビット、2ストップビット、パリティビットなしです。通信データのセキュリティ性は、制御パラメータCRC-16コードによって保証される。RTU受信装置は、受信文字間の経過時間に依存してフレームの開始を判断し、3文字半の時間が経過しても新しい文字がない場合、またはフレームが完了しない場合、受信装置はフレームを放棄し、次の文字を新しいフレームの開始に設定します。
发表回复