Modbus

ModbusはModicon社が1979年、同社のプログラマブルロジックコントローラ (PLC) 向けに策定したシリアル通信プロトコルである。産業界におけるデ・ファクト標準の通信プロトコルとなり、現在では産業用電子機器を接続する最も一般的手段となっている。Modbusが他の通信プロトコルより普及した理由は以下の通りである。
Modbusは同じネットワークに多数の機器を接続して通信可能である。例えば、温度と湿度を測定するシステムがその測定結果をコンピュータと通信するといった使い方がある。ModbusはSCADAシステムにおける監視コンピュータと遠隔端末装置 (RTU) の接続に使われることが多い。
プロトコルのバージョン.
Modbusプロトコルには、シリアルポート向けバージョン、イーサネットその他のインターネット・プロトコル・スイートをサポートしたネットワーク向けバージョンがある。
Modbus機器の多くはシリアルのEIA-485物理層上で通信する。
シリアルコネクションは2種類あり、数値データの表現が異なり、プロトコルの詳細も若干異なる。Modbus RTU はデータのコンパクトなバイナリ表現である。Modbus ASCII は人間が読める表現で、より冗長である。これらはいずれもシリアル通信を用いる。RTUフォーマットではコマンドやデータに巡回冗長検査 (CRC) チェックサムが付き、ASCIIフォーマットは水平冗長検査 (LRC) チェックサムを用いる。各ノードはRTUを使うかASCIIを使うかが設定されており、異なるフォーマット同士では通信できない。
TCP/IP（例えばイーサネット）上のコネクションでは、より新しい Modbus/TCP を使う。こちらではチェックサムは下位層に任せている。
データモデルとファンクションコールはこれら3種類のプロトコルで同一である。カプセル化方式だけが異なる。
拡張バージョンである Modbus Plus (Modbus+ or MB+) もあるが、Modicon 社の独自仕様である。高速なHDLC風トークンローテーションを扱うために専用のコプロセッサを必要とする。撚り線対で1Mbit/sの通信を行い、レベルトリガではなくエッジトリガで通信する。Modbus Plus をコンピュータに接続するには特殊なインタフェースが必要であり、一般にISAやPCIやPCMCIAの専用カードを使う。
通信と機器.
Modbusを使って通信する各機器には一意なアドレスが与えられる。シリアルおよびMB+のネットワークでは、マスターとされたノードだけがコマンドを発行できる。イーサネットでは任意のノードがコマンドを発行できるが、一般に唯一のマスターノードがコマンドを発行する。Modbusコマンドには、それを実行させたい機器のModbusアドレスが含まれている。指定された機器だけがそのコマンドを実行し、他の機器はたとえ受信しても何もしない（ただし、ブロードキャスト型のコマンドもある）。Modbusコマンドにはチェック情報が含まれ、受信したコマンドが壊れていないことを確認できる。基本Modbusコマンドは、RTUに対してそのレジスタの1つの値を変更させたり、I/Oポートの読み書きをさせたりできる。さらに機器に対してそのレジスタ内の値を送り返させることができる。
Modbusは非常に単純なプロトコルでコピー規格もあるため、これをサポートするモデムやゲートウェイは多数存在する。また、Modbusプロトコル専用の機器も存在する。有線だけでなく無線通信による実装や、SMSやGPRSによる実装もある。そのような設計では、高レイテンシとタイミングを考慮する必要がある。
実装.
ほとんど全ての実装において、公式の規格からの逸脱が見られる。したがって、異なるベンダーの機器同士では正しく通信できない可能性がある。違いがよく見られるのは以下の点である。