Modbusとは何ですか?
Modbusは、ModiconRによって1979年に発行されたModiconによって開発されたシリアル通信プロトコルで、プログラマブルロジックコントローラー(PLC)で使用します。簡単に言えば、電子機器間でシリアル回線を介して情報を送信するために使用される方法です。情報を要求するデバイスはModbusマスターと呼ばれ、情報を提供するデバイスはModbusスレーブです。標準のModbusネットワークには、1つのマスターと最大247のスレーブがあり、それぞれに1から247までの一意のスレーブアドレスがあります。マスターはスレーブに情報を書き込むこともできます。
公式のModbus仕様は、 modbus.org/specs.php にあります。
それは何のために使われますか?
Modbusはオープンプロトコルです。つまり、メーカーはロイヤルティを支払うことなく機器を無料で組み込むことができます。これは業界の標準的な通信プロトコルになり、現在、産業用電子デバイスを接続するための最も一般的に利用可能な手段です。多くの業界の多くのメーカーで広く使用されています。Modbusは通常、計装および制御デバイスからメインコントローラーまたはデータ収集システム(温度と湿度を測定して結果をコンピューターに伝達するシステムなど)に信号を送信するために使用されます。Modbusは、監視制御およびデータ取得(SCADA)システムで監視コンピューターをリモート端末装置(RTU)に接続するためによく使用されます。Modbusプロトコルのバージョンは、シリアル回線(ModbusRTUおよびModbusASCII)およびイーサネット(Modbus TCP)用に存在します。
それはどのように機能しますか?
Modbusは、デバイス間のシリアル回線を介して送信されます。最も簡単なセットアップは、マスターとスレーブの2つのデバイスのシリアルポートを接続する単一のシリアルケーブルです。
![]()
>
データは、ビットと呼ばれる一連の1と0として送信されます。各ビットは電圧として送信されます。ゼロは正の電圧として送信され、1は負の電圧として送信されます。ビットは非常に迅速に送信されます。通常の伝送速度は9600ボー(ビット/秒)です。
問題のトラブルシューティングを行うときは、送信されている実際の生データを確認すると役立つ場合があります。1と0の長い文字列は読みにくいため、ビットは16進数で結合されて表示されます。4ビットの各ブロックは、0から Fまでの16文字のいずれかで表され ます。
0000 = 0 0100 = 4 1000 = 8 1100 = C 0001 = 1 0101 = 5 1001 = 9 1101 = D 0010 = 2 0110 = 6 1010 = A 1110 = E 0011 = 3 0111 = 7 1011 = B 1111 = F 8ビット(バイトと呼ばれる)の各ブロックは、00から FFまでの256文字のペアの1つで表され ます。
ASCIIは、情報交換のためのAmerican StandardCodeの略です。4ビットごとに組み合わせて0から Fまでの16文字の16文字のいずれかで表すことができるのと同じように、 8ビットごと(バイトごと)を組み合わせて、一般的なキーボード文字を含む256文字のASCII文字の1つで表すことができます。たとえば、ASCII文字の値の一部は...
decimal
(base10)binary
(base2)Hex
(base16)ASCII
(base256)0 0000 0000 00 null 1 0000 0001 01 " 34 0010 0010 22 # 35 0010 0011 23 $ 36 0010 0100 24 % 47 0010 1111 2F / 48 0011 0000 30 0 49 0011 0001 31 1 56 0011 1000 38 8 57 0011 1001 39 9 58 0011 1010 3A : 64 0100 0000 40 @ 65 0100 0001 41 A 66 0100 0010 42 B 89 0101 1001 59 Y 90 0101 1010 5A Z 91 0101 1011 5B [ 95 0101 1111 5F _ 96 0110 0000 60 ` 97 0110 0001 61 a 122 0111 1010 7A z 123 0111 1011 7B { 174 1010 1110 AE 255 1111 1111 FF 情報は、スレーブデバイスの4つの異なるテーブルに保存されます。
2つのテーブルはオン/オフの離散値(コイル)を格納し、2つのテーブルは数値(レジスタ)を格納します。コイルとレジスタにはそれぞれ読み取り専用テーブルと読み取り/書き込みテーブルがあります。各テーブルには9999個の値があります。
各コイル又は接触が1ビットであるとの間でデータのアドレスを割り当て 0000および 270E。
各レジスタは、1ワード= 16ビット= 2バイトであり、また、間のデータアドレスを持ち 0000および 270E。
コイル/レジスタ番号 データアドレス タイプ テーブル名 1-9999 0000 to 270E Read-Write ディスクリート出力コイル 10001-19999 0000 to 270E Read-Only ディスクリート入力接点 30001-39999 0000 to 270E Read-Only アナログ入力レジスタ 40001-49999 0000 to 270E Read-Write アナログ出力保持レジスタ コイル/レジスタ番号は、実際のメッセージには表示されないため、場所の名前と考えることができます。データアドレスはメッセージで使用されます。
たとえば、最初の保持レジスタ番号40001のデータアドレスは 0000です。
これら2つの値の違いは、オフセットです。
各テーブルには異なるオフセットがあります。1、10001、30001および40001。ネットワーク内の各スレーブには、1?247の一意のユニットアドレスが割り当てられます。マスターがデータを要求すると、マスターが送信する最初のバイトはスレーブアドレスです。このようにして、各スレーブは最初のバイトの後でメッセージを無視するかどうかを知ることができます。
マスターから送信される2番目のバイトは機能コードです。この番号は、どのテーブルにアクセスするか、およびテーブルからの読み取りとテーブルへの書き込みのどちらを行うかをスレーブに指示します。
Function Code Action Table Name 01 (01 hex) Read ディスクリート出力コイル 05 (05 hex) Write single ディスクリート出力コイル 15 (0F hex) Write multiple ディスクリート出力コイル 02 (02 hex) Read ディスクリート入力接点 04 (04 hex) Read アナログ入力レジスタ 03 (03 hex) Read アナログ出力保持レジスタ 06 (06 hex) Write single アナログ出力保持レジスタ 16 (10 hex) Write multiple アナログ出力保持レジスタ CRCは巡回冗長検査の略です。これは、エラー検出のためにすべてのmodbusメッセージの最後に追加される2バイトです。メッセージのすべてのバイトは、CRCの計算に使用されます。また、受信デバイスはCRCを計算し、送信デバイスからのCRCと比較します。メッセージの1ビットでも正しく受信されない場合、CRCが異なり、エラーが発生します。
これは、最大16バイトのメッセージ用のスプレッドシートCRC計算機です。
コピーをダウンロードするには、右クリックして[対象をファイルに保存...]を選択します。この表のリンクをたどって、要求と応答の例を確認してください。
データアドレス Read Write Single Write Multiple ディスクリート出力コイル FC01 FC05 FC15 Discrete Input Contacts 1xxxx FC02 NA NA Analog Input Registers 3xxxx FC04 NA NA Analog Output Holding Registers 4xxxx FC03 FC06 FC16 たとえばFC03レジスタ40108が含まれていることを示して AE41を
16ビットに変換した 1110 0100 0001 1010
グレート!しかし、それはどういう意味ですか?まあ、それはいくつかのことを意味する可能性があります。レジスタ40108は、これらの16ビット・データ・タイプのいずれかとして定義することができる: A 16ビットの符号なし整数(0?65535の整数)は 40108に含まれるレジスタAE41 = 44609(小数点への変換ヘクス) 16ビット符号付き整数(-32768から32767の間の整数) AE41 = -20927 (ラップが、その場合にオーバー32767次に65536を引くこと小数点への変換ヘクス) A two character ASCII string (2 typed letters) AE41 = A A discrete on/off value (this works the same as 16-bit integers with a value of 0 or 1. The hex data would be 0000 or 0001) Register 40108 could also be combined with 40109 to form any of these 32-bit data types: A 32-bit unsigned integer (a number between 0 and 4,294,967,295) 40108,40109 = AE41 5652 = 2,923,517,522 A 32-bit signed integer (a number between -2,147,483,648 and 2,147,483,647) AE41 5652 = -1,371,449,774 これは、4バイトまたは2ワードの入力用のスプレッドシート IEEE浮動小数点計算機です。 コピーをダウンロードするには、右クリックして[対象をファイルに保存...]を選択します。 4文字のASCII文字列(4入力された文字) AE41 5652 =RAVRより多くのレジスタを組み合わせて、より長いASCII文字列を形成できます。各レジスタは、2つのASCII文字(2バイト)を格納するために使用されます。
バイトと語順とは何ですか?
Modbus仕様は、データがレジスタに格納される方法を正確に定義していません。したがって、一部のメーカーは、最初に上位バイトを格納して送信し、次に下位バイトを格納するために、機器にmodbusを実装しました。(41 より前のAE)。 あるいは、他の人は最初に下位バイトを格納して送信します(AEの 前に41)。
レジスタは32ビットのデータ型を表すために結合される場合、同様に、一部のデバイスは、(第2の最初のレジスタの上位16ビット(上位ワード)と残りの下位ワードを格納AE41 前5652)その他(逆の操作を行いながら5652を 前AE41)
受信デバイスがそれを予期する方法を知っている限り、バイトまたはワードがどの順序で送信されるかは問題ではありません。
たとえば、数値2,923,517,522が32ビットの符号なし整数として送信される場合、これらの4つの方法のいずれかに配置できます。
AE415652 上位バイト先行 上位ワード先行「ビッグエンディアン」 としても知られています 5652AE41 上位バイト先行 下位ワード先行 41AE5256 下位バイト先行 上位ワード先行 525641AE 下位バイト先行 下位ワード先行「リトルエンディアン」modbusマップは
- データが何であるか(たとえば、圧力や温度の読み取り値)
- データが保存される場所(テーブルとデータアドレス)
- データの保存方法(データタイプ、バイト)を定義するスレーブデバイスの単なるリストです。および単語の順序)
一部のデバイスは、製造元によって定義された固定マップで構築されています。他のデバイスでは、オペレーターがニーズに合わせてカスタムマップを構成またはプログラムできます。
ModbusASCIIとModbusRTUの違いは何ですか?
ここでは、これら2つのモードの違いについて説明し ます。
アナログ出力保持レジスタの範囲は40001?49999であるため、9999を超えるレジスタは存在できないことを意味します。通常、これはほとんどのアプリケーションで十分ですが、より多くのレジスタが有益な場合があります。
データアドレスへのレジスタ40001 49999への対応 0000へ 270E。残りのデータアドレス270Fから FFFFを利用すると、 6倍以上のレジスタを使用でき、合計で65536になります。これは、40001から105536までのレジスタ番号に対応します。
多くのmodbusソフトウェアドライバー(マスターPC用)は40001から49999の制限で記述されており、スレーブデバイスの拡張レジスタにアクセスできません。また、多くのスレーブデバイスは、拡張レジスタを使用したマップをサポートしていません。ただし、一方で、一部のスレーブデバイスはこれらのレジスタをサポートしており、一部のマスターソフトウェアは、特にカスタムソフトウェアが作成されている場合に、これらのレジスタにアクセスできます。
通常、スレーブアドレスの定義には1バイトが使用され、ネットワーク上の各スレーブには一意のアドレスが必要なため、ネットワーク上のスレーブの数は256に制限されます。modbus仕様で定義されている制限はさらに低く、247です。
この制限を超えるために、アドレスに2バイトを使用するようにプロトコルを変更できます。マスターとスレーブはすべて、この変更をサポートする必要があります。2バイトのアドレス指定により、ネットワーク内のスレーブ数の制限が65535に拡張されます。
デフォルトでは、SimplyModbusソフトウェアは1バイトのアドレス指定を使用します。255より大きいアドレスが入力されると、ソフトウェアは自動的に2バイトのアドレス指定に切り替わり、2バイトのアドレス指定が手動でオフになるまで、すべてのアドレスに対してこのモードのままになります。
Enron Modbus には、イベントや履歴データを移動するためのコマンドが含まれています
Enron Modbusは、EnronCorporationによって開発された標準のModiconmodbus通信プロトコルを変更したものです。
詳細については、 Enron Modbus を参照してください。
このページをお読みになりましたら、ぜひコメントをお寄せください。
info@simplymodbus.ca に電子メールを送信し、 何が役に立ったか、どのトピックを追加、拡張、または明確化できるかをお知らせください。