「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
ソフテックだより第133号「PLCでModbus 通信〜横河電機社製での実装例〜」および第155号「PLCでModbus TCP通信〜横河電機社製での実装例〜」にて、横河電機社製でのModbus通信の実装例を紹介しました。
今回はその続編として、三菱電機社・オムロン社・キーエンス社・横河電機社4社のModbus通信の比較を行いましたので、紹介致します。
第133号の技術レポート「PLCでModbus 通信〜横河電機社製での実装例〜」で説明されておりますが、改めてModbusとは何かを説明致します。
米Modicon社が自社PLC用に開発した通信プロトコルです。仕様が公開されて、仕様が比較的容易で制約が少ないことなどから、PLCのみのならず、機器間接続で広く使われているプロトコルです。
Modbus通信にはシリアル通信のModbusRTU及びModbusASCII、TCP/IP通信のModbus/TCPがあります。
いずれもデータモデルやファンクションコールは共通であり、カプセル化が異なるだけとなります。
Modbus RTUモードにて通信する場合のユニット構成を下記に示します。 各社の主なPLCシリーズを参考に比較致します。
三菱電機社 | オムロン社 | キーエンス社 | 横河電機社 | ||
---|---|---|---|---|---|
Fシリーズ | Qシリーズ | CS1シリーズ CJ2シリーズ |
KVNanoシリーズ | KV-5000/3000シリーズ | FA-M3Rシリーズ |
FX3U-485A DP-MB | QJ71MB91 | CS1W-SCB□ CS1W-SCU□ CJ1W-SCU□ |
増設カセットにて対応 (コネクタはKV-NC20L) |
KV-L21V | ModbusRTU通信対応ユニットはありません。 (ModbusTCPのみ対応) |
表1.Modbus通信対応ユニット一覧
各社とも対応ユニットが提供されておりますので、接続に困ることはありません。
ただし、横河電機社FA-M3RはModbusRTU通信に対応したユニットは発売されておりません。そのため、ソフテックだより第133号のようにユーザープログラムで処理する必要があります。
また、各社ともにRTUモードの場合はマスタ/スレーブ両方対応可能ですが、ASCIIモードを使用する場合、キーエンス社及びオムロン社はマスタのみの対応となります。
各社で準備するPLCプログラムの構成を説明致します。
なお、マスタ側からスレーブに対して、書込み・読出しのプログラムを実行する命令を用意する必要がありますが、スレーブ側はパラメータを準備するだけでプログラムを用意する必要はありません。
Fシリーズでは、スレーブに対しての書込みや読み出しの命令は「ADPRW」の命令で実装することができます。「ADPRW」命令の詳細は以下の通りです。
図1. ADPRW命令
「ADPRW」命令には、複数のファンクションコードが存在しており、利用する命令ごとにファンクションコードを設定し、それに応じたパラメータを設定する必要があります。
Fシリーズでは、1部の処理を除いて「ADPRW」命令で対応できるため、簡単にModbus通信を実装することができます。
Qシリーズ(QJ71MB91)では、以下の専用命令を使います。
各命令の詳細は以下の通りです。
図2.MBRW命令
図3.MBREQ命令
Qシリーズでも、Fシリーズ同様容易にModbus通信を実装する事ができます。
オムロン社製PLCでは、命令をModbus通信プロトコル用に変換する必要があります。
その場合、変換する際はFINSコマンド(※1)を使います。
コマンド命令の詳細は以下のとおりになります。
図4. FINSコマンド命令
Modbus RTU関連のFINSコマンドコードは”2804HEX”と決まっております。
そこから、Modbus RTU関連のコマンドを送り通信します。
Modbus RTU関連のコマンドを以下に紹介します。
項目 | 設定値 |
---|---|
Modbus RTUへの変換 | 2804HEX |
Modbus RTUへの変換スレーブアドレス | 02HEX |
ファンクションコード(10HEX=データ書込み) | 10HEX |
書込みデータのレジスタ | 0002HEX |
書込みデータのレジスタ個数 | 0001HEX |
添付データのバイト数 | 0200HEX |
表2.Modbus RTU関連のコマンド
オムロン社製PLCでは、Modbus通信をするためにコマンドをModbus通信用のコマンドに変換する必要があり、その分プログラムが複雑になるため、Modbus通信を実装するには多少敷居が高いという印象です。キーエンス社製PLCでは、はじめにユニット設定で、動作モードを「Modbusマスタモード」に設定する必要があります。
後は、DM先頭番号を設定する事によって、決められるアドレスに必要なデータを書込み、コマンド送信要求のリレーをONする事で、コマンドが送信されます。
代表的なアドレスについて以下に紹介いたします。
DM先頭番号 | +1 | スレーブ局番の設定 |
---|---|---|
+2 | ファンクションコード 01H:コイル読出し 05H:コイル1点書込み |
|
+6 | データ格納単位 | |
+7 | 読出し先頭アドレス | |
+8 | 読出し点数 | |
+9 | 書込み先頭アドレス | |
+10 | 書込み点数 |
表3.代表的なアドレス一覧
キーエンス社製PLCでは、特殊なコマンドは使用しません。
他社製PLCと比べてプログラムの構成が違い先頭のアドレスを準備する必要がありますが、その後はすでに処理するアドレスが決まっています。
そのため、Modbus通信は、必要な処理をするためのアドレスの使い方を理解していれば、すぐにプログラムを実装することができ簡単だと思います。
今回、各社製PLCでのModbus RTU通信の比較をしてみた結果、個人的に使いやすいと感じたものは、三菱電機社製PLCのFシリーズです。
三菱電機社製PLCに慣れ親しんでいるというのもありますが、一番の理由として、ほとんどの処理を「ADPRW」命令でまかなえるため、複雑にプログラムを準備する必要がないためです。
最後になりますが、本レポートでは、三菱電機社製PLC(Fシリーズ/Qシリーズ)、キーエンス社製PLC、オムロン社製PLCでのModbus RTU通信を紹介しておりますが、弊社では第133号及び第155号で紹介している横河電機社製PLCによるModbus通信プロトコルを利用した開発実績もございます。他にも様々な通信ソフトウェア開発の経験がございますので、またの機会にご紹介できればと思います。
(M.T.)
関連ページへのリンク
関連するソフテックだより