Modbus(モドバス)とは、米Modicon社が自社PLC用に1979年に開発した通信プロトコルで、PLCのみならず電子機器間においてもデータ受け渡しの目的で使用されています。
仕様がオープンであり、無償で利用できるなどの特徴から、産業分野のデファクトスタンダードとして広く採用されている通信プロトコルです。
Modbusスレーブ対応機器の例として、電動アクチュエータ、温度調節計といったものが挙げられます。また、Modbusマスタ機能を持つデータロガーのような機器も存在します。
Modbusプロトコルは、マスタ/スレーブ方式で、マスタが通信の起点となります。
スレーブは、マスタから要求された機能を実行し応答メッセージを返します。(図1)
 |
| 図1. マスタ/スレーブ方式 |
Modbusプロトコルには、以下2つのバージョンが存在します。
- RS-232C、RS-422、RS-485等を物理層とし、シリアルポートを用いて通信を行うバージョン。(以下、「シリアル伝送」)
- インターネットネットワーク上で利用することを目的とし、上記バージョンをTCP/IPプロトコルに拡張したバージョン。(以下、「Modbus TCP」)
シリアル伝送のバージョンは、メッセージフレーム中の値表現方法の違いで、Modbus ASCII、Modbus RTUの2種類の伝送モードに分かれます。
各伝送モード、およびModbus TCPの特徴を下表にまとめます。
| 通信モード |
特徴 |
| Modbus ASCII |
1バイトのデータを2文字のASCIIコードとして送受信を行う。電文のチェックコードはLRC法を用いる。 |
| Modbus RTU |
1バイトのデータをそのままバイナリデータをして送受信を行う。電文チェックコードはCRC法を用いる。 |
| Modbus TCP |
TCP/IP上でModbus通信を行うためのプロトコル。マスタをクライアント、スレーブをサーバとして実装し、マルチマスタのシステムを構築することが可能。Modbus ASCIIおよびModbus RTUと、チェックコードを除いたメッセージフォーマットは同一である。電文チェックは、TCP、IP、Ethernet層などのプロトコルスタックに任せるため、Modbusメッセージの中にチェックコードは含まれない。 |
|
|
表1. プロトコルの特徴
|
5-1. 通信相手との仕様取り決めの重要性
Modbusメッセージのデータに含まれる「開始アドレス」の指定方法には注意する必要があります。
ファンクション02の例では、Modbusプロトコルの規定上「開始アドレスは10001差し引いた値と指定する」となっています。
これは、Modbusプロトコルにおいて、DIのアドレスは10001から始まることを想定しており、Modbusプロトコルで0を指定すると、相手側のデバイスアドレス10001を指定したことになります。
例えば、スレーブ側をFA-M3Rで実装した場合、DIに相当する入力リレーは「X00201」といった表記であり、Modbusプロトコルの想定とは一致しません。
FA-M3Rに限らず、国内で販売されているPLCのデバイスは、Modbusプロトコルとは一致しない各社独自のアドレス体系を持っています。さらにPLCのみならずModbusに対応した電子機器も同様となります。
以上より、Modbusプロトコル実装の際には、スレーブ側機器のアドレスとModbusプロトコルのアドレスの対応付けをしっかりと取り決め、通信相手と認識を合わせておく必要があります。
5-2. 情報源は国外
ソフトウェアのデバッグ、社内試験の段階で、通信相手の実機が入手できない場合もあります。
このような場合、代わりの通信相手としてシミュレータを用いる必要がありますが、ウェブサイトで公開されているようなフリーウェアおよびシェアウェアは、ほとんどのものが海外製のものとなります。
初めて開発した事例では、通信電文レベルで規定通りの動作をしているかの確認に加え、Modbusプロトコル自体の認識に相違が無いことの確認をModbusシミュレータにて確認しました。
この際に、適切なソフトウェアを海外のウェブサイトから探し出す必要があり、国内の情報源とは違った苦労がありました。
また、プロトコル仕様に関する情報も、正式なものは英語で記述されたものしか存在せず、最低限の英語力が必要となりました。
本レポートでは、シリアル伝送バージョンの例としてModbus RTUの開発事例を取り上げました。弊社では他にModbus TCPプロトコルを使用した開発実績もございますので、またの機会にご紹介できればと考えています。