Modbus

Modbus通信プロトコルの概要



Modbusは、1979年にModicon社が[プログラマブルロジックコントローラ]向けに開発したシリアル通信プロトコルです。現在では、産業用電子機器間の通信においてデファクトスタンダードとして広く普及しています。その理由は、以下の通りです。

仕様の公開と無料利用:誰でも自由に利用できるオープンなプロトコルです。
容易な実装:比較的容易に実装できるため、様々な機器への導入が容易です。
ベンダー非依存性:データの転送方法にベンダー特有の制約が少ないため、異なるベンダーの機器でも互換性が高いです。
多数機器接続:同じネットワーク上に多数の機器を接続して通信できます。例えば、複数のセンサーから取得した温度や湿度データなどを一括してコンピュータに送信できます。

Modbusは、[SCADA]システムにおいて、監視用コンピュータと遠隔端末装置(RTU)間の通信に頻繁に使用されています。

プロトコルのバージョン



Modbusプロトコルには、主に以下の3種類のバージョンがあります。

1. Modbus RTU: シリアル通信用のバージョンで、データのコンパクトなバイナリ表現を用います。巡回冗長検査(CRC)チェックサムを用いてデータの完全性を確認します。
2. Modbus ASCII: シリアル通信用のバージョンで、人間が読みやすいASCII文字列でデータを表します。水平冗長検査(LRC)チェックサムを用います。
3. Modbus/TCP: イーサネットなどのTCP/IPネットワーク上で動作するバージョンです。チェックサムは下位層に任せます。

これらのバージョンは、データモデルとファンクションコールは共通ですが、データのエンコーディングと伝送方法が異なります。Modbus Plusという高速な独自拡張バージョンもありますが、専用のコプロセッサが必要となります。

通信と機器



Modbusネットワーク上の各機器には、一意なアドレスが割り当てられます。シリアル通信とModbus Plusでは、マスターノードだけがコマンドを発行できます。Modbus/TCPでは、任意のノードがコマンドを発行できますが、通常は1つのマスターノードがコマンドを発行します。Modbusコマンドには、対象機器のアドレスが含まれており、指定された機器だけがコマンドを実行します。ブロードキャストコマンドも存在します。コマンドにはチェックサムが含まれており、データの完全性を確認できます。

基本的なModbusコマンドとしては、レジスタの値の読み書き、I/Oポートの読み書きなどが可能です。Modbusは単純なプロトコルであるため、様々なモデムやゲートウェイ、専用機器が存在し、有線だけでなく無線通信やSMS/GPRSによる実装も可能です。ただし、無線通信ではレイテンシやタイミングを考慮する必要があります。

実装上の注意点



Modbusの実装は、公式規格からの逸脱が多く見られます。そのため、異なるベンダーの機器間で互換性の問題が生じる可能性があります。よく見られる違いは以下の通りです。

データ型: 浮動小数点、32ビット整数、8ビットデータ、混合データ型など、データ型の扱いに違いがあります。
プロトコル拡張: 16ビットスレーブアドレス、32ビットデータサイズ、ワードの並び順など、プロトコル自体を拡張している場合があります。

Modbusの制約



Modbusは1970年代に設計されたため、以下の制約があります。

データ型の制限: PLCが扱えるデータ型しかサポートしていません。
データの説明不足: レジスタ値の意味(例えば、温度を表すなど)を記述する標準的な手段がありません。
例外処理の不足: マスタースレーブ型プロトコルであるため、スレーブ機器が例外を報告する仕組みが不足しています。
アドレス数の制限: 1つのデータリンクで扱えるアドレス数は最大247個に制限されています。
* 連続転送: データ転送は連続的でなければなりません。

これらの制約を理解した上で、Modbusプロトコルを使用する必要があります。

オープンソース実装



Modbusプロトコルは、様々なプログラミング言語でオープンソース実装が公開されています。C言語、C#、Java、Perl、Rubyなど、多くの言語でライブラリやアプリケーションが利用可能です。これらの実装を利用することで、Modbus対応機器との通信を容易に実現できます。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。