概要
モドバスは1980年代から長く利用されているプログラマブルロジカルコントローラー(PLC)向けのシリアル通信プロトコルです。仕様が公開され,ライセンスフリーなプロトコルのため、産業用電子機器の通信ではもっとも一般的な接続手段として、さまざまなアプリケーションで利用されています。
物理層についての定義はなく、Modbusプロトコルで定義されるのは通信プロトコルのみで、物理接続には主にEIA-485(RS485)のインフラが利用されます。シリアル接続のタイプには、Modbus ASCIIとModbus RTUの2種類があり、通信の際にはどちらのモードを使うかを選択します。一般にデータがコンパクトなバイナリー形式のRTUが利用されます。
Modbus プロトコルの開発と更新は、2004 年 シュナイダー エレクトリックが Modbus Organization に権利を譲渡して以来、Modbus Organizationによって管理されています。 Modbus Organization はModbus 準拠デバイスのユーザーとサプライヤーの団体であり、テクノロジーの継続的な使用を提唱しています
Modbusの通信はシングルマスターに対してマルチスレーブの構成で行います。1つのマスター(情報を要求する装置)だけがクエリー(通信の開始)を行うことができ、スレーブ機器(情報を提供する装置)はマスターから送られるメッセージに従い、指定された機能を実行して応答メッセージを返します。このマスターとスレーブという名称は表現が露骨なため、最近はマスター装置を情報を要求する装置としてクライアントと表現し、スレーブを情報提供する側としてサーバーと表現するようになりました。ここでは以下この表現を用います。
目次
Modbusネットワーク
Modbusネットワークに繋がるノード(サーバー)はそれぞれに固有のアドレスをもち、クライアントは指定したアドレスのサーバーに対してクエリーを送ることができるほか、ネットワークにつながる全ての機器にブロードキャストクエリーを送ることができます。ブロードキャストのメッセージの場合サーバーは指定された命令を実行するのみで応答を返しませんが、固有のアドレスに送られるメッセージの場合、つまり自分へのメッセージの場合だけ応答を返します。
標準の Modbus ネットワークには、1 つのクライアントと最大 247 のサーバーがあり、それぞれに 1 ~ 247 の一意のサーバー アドレスが割り当てられます。クライアントはサーバーに情報を書き込むこともできます。
物理接続はRS485のインフラを利用し、RS485の規定に従います。そのためツイステッドペアのケーブルでクライアントからサーバーに接続した以降はディジーチェーンで複数のサーバーをつなぐ方式になります。
コマンド(クエリー)フォーマット
Modbus は機器の監視または制御およびデータ収集 の用途でよく使用されます。 データ型の多くは、リレーの駆動に使用されるラダー ロジックなど、工場のデバイスの産業用制御に基づいて名前が付けられています。シングル ビットの物理出力はコイルと呼ばれ、シングル ビットの物理入力はディスクリート入力と呼ばれます。
クライアントがサーバーに対して通信を行う場合、サーバーの固有アドレスを指定し、またファンクションコードと呼ばれるデータテーブルを指定し、それぞれのテーブル内のアドレス空間のアドレスを指定して、データを読み取るまたは書き込む方法を取ります。
下記はシンプルなクエリーメッセージの構成です。
メッセージの種類 | サーバーID | ファンクションコード (テーブルのタイプ) | 読み取るアドレスの場所 | 読み出すレジスターの数 | エラーチェック16bit |
例 | 0x01 | 0x04 | 0x01 | 0x01 | |
解説 | サーバー個々にIDがあり、ここでデータを取得したいターゲットのIDを指定します | データを格納するテーブルは主に4種類あり、そのテーブルを指定 | テーブルそれぞれにアドレス空間があり、どこのデータを読み出すのかを指定する | レジスターを何個読み出すのか、その数を指定する |
このメッセージに対してサーバーが応答するメッセージの例
メッセージの種類 | サーバーID | ファンクションコード (テーブルのタイプ) | データサイズ. (バイト) | データ上位 | データ下位 | エラーチェック16ビット |
例 | 0x01 | 0x04 | 0x02 | 0x00 | 0xFE |
下記、Modbusテストツールで通信を行なった例