HOME > ソフテックだより > 第383号(2021年8月4日発行) 技術レポート「Modbus/TCP通信 〜「通信プロトコル支援機能」の使用〜」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第383号(2021年8月4日発行)
技術レポート

「Modbus/TCP通信 〜「通信プロトコル支援機能」の使用〜」

1. はじめに

三菱電機製PLCにてModbus/TCP通信を行う場合、Modbus/TCPユニット(QJ71MT91)を使用する以外にCPU内蔵EthernetポートやEthernetユニットを使用して通信を行うことも可能です。
今回は、「通信プロトコル支援機能」を使用してModbus通信を行う方法をご紹介します。

2. 「通信プロトコル支援機能」とは…

SLMP(SeamLess Message Protocol。MCプロトコルの4E/3Eフレームと互換)、Modbus/TCP、BACnetの3種類のパケット形式の通信に対応した機能です。
また、ユーザーが任意にパケット形式を作成することもできます。
通信プロトコル支援機能では、パケットに含まれている開始/終端文字などの固定部分は意識することなく、通信ごとに変わる部分(読み出し先のアドレス等)のみを変更して送信することができ、また、相手から返ってきたデータの処理(上下バイト入れ替え等)を自動で行うことができます。

なお、通信プロトコル支援機能で対応することができるのは、PLCがModbusクライアント(=マスタ、データをもらいに行く側)となる場合です。
Modbusサーバー(=スレーブ)として動作するには、以下のユニットが必要です。

  • Qシリーズ:Modbus/TCPユニット(QJ71MT91)
  • iQ-Rシリーズ:Ethernetユニット(RJ71EN71)
  • iQ-Rシリーズ:Ethernet/CC-LinkIE内蔵CPU(RnENCPU)

3. 対応機器

通信プロトコル支援機能が使用できるのは下記CPU、ユニットです。

  • QシリーズEthernetユニット(QJ71E71-100)
  • QシリーズCPU(QnUDV)内蔵Ethernetポート (注)QnUDEHは非対応
  • iQ-RシリーズEthernetユニット(RJ71EN71)[※]
  • iQ-RシリーズCPU(RnCPU/RnENCPU)内蔵Ethernetポート
  • iQ-RシリーズCPU(RnENCPU)ネットワーク部(Ethernet/CC-LinkIEポート)[※]
  • iQ-Fシリーズ(FX5U)内蔵Ethernetポート [※]

<補足>
[※]が付いている機器は「シンプルCPU通信機能」によるModbus/TCP通信に対応しており、通信プロトコル支援機能よりも簡単な設定でModbus/TCP通信を行うことができます。
QnUDV、Rn(EN)の内蔵EthernetポートはシンプルCPU通信機能に対応していますが、通信先としてModbus/TCP通信には対応していませんのでご注意ください。

4. 設定の流れ

通信プロトコル支援機能を使用するには、「プロトコルの設定・登録」「PLCパラメータの設定」および「プログラムの作成」が必要です。

4.1 プロトコルの設定・登録

「通信プロトコル支援機能」の設定ソフトはGX Works2またはGX Works3のメニューから起動します。

  • GX Works2
    ツール(T) - 通信プロトコル支援機能(R) - Ethernetユニット(E)... または 内蔵Ethernet(T)...
    ※内蔵EthernetはQnUDVのときのみ選択可能。
  • GX Works3
    ツール(T) - 通信プロトコル支援機能(R)
    ※その後、「Ethernetユニット」または「Ethernet内蔵CPU」の選択あり。

設定ファイルを新規に作成したあと、プロトコル番号の列にある「追加」をクリックすることでプロトコルを登録・設定することができます。
以下は、Modbusの保持レジスタ(Holding Registers)を読み出す場合の設定例です。

保持レジスタの読み出し設定
図1.  保持レジスタの読み出し設定

その後、プロトコルの要素の設定を進めていくことになります。
詳しい操作方法については、以下マニュアルをご確認ください。
・SH-080901-AC GX Works2オペレーティングマニュアル(インテリジェント機能ユニット操作編)
 → 4章 通信プロトコル支援機能 − 4.6 プロトコルを編集する

プロトコルの設定にあたって一部補足します。

(1)プロトコル設定ファイルの保管
通信プロトコル支援機能は、設定をEthernetユニットまたはCPUユニットに書き込むことで動作します。
ユニットを交換すると設定が消えてしまいますので、必ずプロトコル設定ファイル(*.epc)を保存しておき、交換後に再度書き込みを行う必要があります。
(2)プロトコルの重複使用
Modbus/TCPのプロトコルは、送信時にモジュールID(スレーブID)を指定します。
そのため、通信先の装置や機器が複数ある場合でも同じプロトコルを使用することができます。
(通信相手ごとにプロトコルを作成する必要はありません)
通信するデータが入力レジスタ、保持レジスタなど種類が異なる場合は個別に作成します。
(3)デバイス一括設定
プロトコル内に設定するデバイスに特にこだわりが無い場合は、「デバイス一括設定」(編集(E) − デバイス一括設定(I)...)で先頭アドレスを指定することで一度に設定できます。

デバイス一括設定
図2.  デバイス一括設定

4.2 PLCパラメータの設定

ネットワークパラメータでEthernetユニットを追加した上でオープン設定を行います。
以下は、QシリーズEthernetユニットの例です。

オープン設定例
図3.  オープン設定例

オープン設定は16個の枠がありますが、図3のとおり受信/送信で2つの枠を消費しますので、通信できる相手は8つまでとなる点にご注意ください。
生存確認は「確認する」「確認しない」どちらでも通信できますが、通常は「確認する」としておき、環境やシステム構成により問題が発生する場合は「確認しない」に設定します。
交信相手ポート番号はModbus/TCPの仕様として「502」(10進数)が標準となります。

4.3 プログラムの作成

通信プロトコルの実行を行うためには、「ポートのオープン」「通信プロトコルの実行」「ポートのクローズ」のプログラム作成が必要です。
「ポートのクローズ」は通信異常が発生した場合に実行し、その後「ポートのオープン」から再開するようにします。
以下は、QシリーズEthernetユニットを使用した場合のプログラム例です。
(通信処理が動作する最低限のプログラムのみ含めています)

プログラム例
図4.  プログラム例

(1)プロトコル実行条件の設定

「通信プロトコル支援機能」の設定ソフトにて指定した送信パケットのデバイスに通信条件を設定します。

  • トランザクションID
    セットした値が、受信データにそのまま含まれて返ってきます。
    常に1のままでも問題ありませんが、送信を行うたびに+1するなどしておくと、送信データと受信データの対応の組み合わせがわかりやすくなります。

  • モジュールID
    通信相手側で設定している番号を指定します。
    「スレーブID」「ユニットID」などと呼ばれることもあります。

  • 先頭レジスタ番号
    読み出したいレジスタや入力(ビット)の番号を指定します。
    例として、対象が保持レジスタの場合、“0”を指定するとアドレス40001(※)が対象となります。
     (※)Modbus機器により「400001」と6桁で表現される場合がありますが、どちらも「保持レジスタの1点目のアドレス」を指します。

  • 読出点数
    先頭レジスタ番号を基準として連続で読み出す点数を指定します。
    Modbusの仕様で、最大125点となっています。
(2)オープン状態の取得
命令のインターロックのため、Ethernetユニットよりポートのオープン状態を取得します。
(3)オープン処理
「実行タイプ/完了タイプ」は、ポートの設定をどこで指定するかを選択する設定です。
  • H0(15bit目をOFF)     …ネットワークパラメータのオープン設定の内容を使用。
  • H8000(15bit目をON) …プログラム上で設定する内容を使用。
オープン命令(ZP.OPEN)の1つ目のパラメータは、Ethernetユニットの先頭I/O番号(上位2桁)を指定していますが、使用しているCPUがハイパフォーマンスモデルQCPU(QnHCPU)のときのみダブルコーテーションで囲む必要があります。
(4)通信プロトコル実行処理
登録済みの通信プロトコルを実行します。
1回の命令実行で、最大8つまでのプロトコルを順次実行することもできます。
(5)受信済みデータ処理
受信正常時、通信プロトコル支援機能の受信パケットのデバイスから、プログラム中に使用するデバイスに転送します。
(6)クローズ処理
通信異常が発生したときや、通信を行う必要が無くなったときに実行します。
通常時は実行する必要はありません。

プログラム例では、オープン命令(ZP.OPEN)、通信プロトコル実行命令(GP.ECPRTCL)、クローズ命令(ZP.CLOSE)の先頭にある実行条件デバイス(M90∼92)は手動でONさせて実行する前提となっています。
実際に実用的なプログラムとする場合は、タイマでの定期実行や、DECO命令などを使用したステップ処理などの条件に置き換えてください。

5. 通信確認

手元に通信相手の機器が無い場合、パソコン上でModbusサーバー(=スレーブ)ソフトを起動し、通信確認を行うことができます。
様々なModbusソフトがありますが、その1つが「ModRSsim2」です。
ModRSsim2は、オープンソースソフトウェア/バージョン管理システムサイトの「SourceForge.net」からダウンロードすることが可能です。
https://sourceforge.net/projects/modrssim2/

5.1 ModRSsim2の使用方法

アプリケーション単体(ModRSsim2.exe)のみの構成となっており、インストール操作などは特に必要ありません。
また、設定も基本的には不要で、起動するとクライアント(=マスタ)からの接続待ちとなります。

ModRSsim2の外観
図5.  ModRSsim2の外観

“0”が表示されているところをダブルクリックすることでレジスタに値をセットすることができます。

5.2 複数の通信相手の確認

ModRSsim2はすべてのモジュールID(=スレーブID)に対する接続を受け付けます。
その仕様が便利な場合もありますが、PLCから複数の通信先への接続があり、それぞれ個別に模擬データを入力して確認したいときに困ります。
ModRSsim2では待ち受けのポート番号を標準の「502」から変更できますので、別のポート番号(503等)に変更し、PLCパラメータのオープン設定の「交信相手ポート番号」も合わせて変更することで、複数起動したModRSsim2に接続を振り分けることができます。

ModRSsim2 TCP/IP設定
図6.  ModRSsim2 TCP/IP設定

6. まとめ

「通信プロトコル支援機能」を利用することで、冒頭でも述べましたがプログラム上でのパケット(電文)の作成や、上下バイト入れ替えなどの処理が不要になることでプログラムの可読性が向上します。

しかし、Modbusはプロトコルとしてかなり簡素化された仕様のためパケット中の固定部分も少なく、通信プロトコル支援機能のメリットを受けにくいため、プログラム上でパケット内容を作成してソケット通信を行うほうがわかりやすい面もあります。
プロトコル支援機能を使用する場合と、使用しない場合の比較を表 1に示します。

表1.  プロトコル支援機能の使用/不使用時の比較

No. 項目 プロトコル使用 プロトコル不使用
1 プログラム作成
(プロトコル設定+ラダー)

(ラダーのみ)
2 プログラムの簡素化
(プロトコル固定部分記述なし)

(プロトコル固定部分記述あり)
3 送信/受信データ加工
(送信順、バイト入れ替え)
×
(すべてプログラムで処理)
4 受信データ解析
(必要データのみ格納)
×
(データ切り出し・変換必要)
5 保守性 ×
(設定ファイル+ラダー必要)

(ラダーのみで完結)

また、「3. 対応機器」でも挙げた「シンプルCPU通信機能」は、ポートのオープン/クローズなども不要で通信条件を登録すれば自動的にデータ送受信を行ってくれますので、対応している場合はそちらを使用するほうが良いと感じます。
同じ機能を実現するのにも色々な手段があることを把握したうえで、使い分ける必要があります。

(S.T.)

<参考資料>
・Q対応Ethernetインタフェースユニット ユーザーズマニュアル(基本編)(SH-080004-AC)
  … 第11章 通信プロトコルによるデータ交信
・QnUCPUユーザーズマニュアル(内蔵Ethernetポート通信編)(SH-080806-Y)
  … 第6章 通信プロトコルによる交信

関連ページへのリンク

関連するソフテックだより

ページTOPへ