QJ71E71-100でModbus/TCP【通信プロトコル支援機能使用】

三菱電機製のイーサネットユニットQJ71E71-100を使って、Modbus/TCP通信を実現するための記事です。

  • パラメータ設定
  • ラダーの作り方
  • 動作テスト

まで一つひとつ細かく解説しているので、初めての人でも安心してチャレンジしてみてください。

目次
↓これは広告です↓

準備するもの

今回のQJ71E71-100でModbus/TCP通信をおこなう際に必要な部品、ツールは下記のとおりです。

  • Ethernetインタフェースユニット
  • プログラム編集ツール
  • Modbus通信テストツール
  • LANケーブル
    • ストレート結線

Ethernetインタフェースユニット QJ71E71-100

引用元:https://www.mitsubishielectric.co.jp/fa/products/faspec/point.do?kisyu=/plcq&formNm=700005310

今回の主役であるEthernetインタフェースユニットQJ71E71-100です。

FL-netユニットやEtherNet/IPユニットではModbus通信はできないため、注意してください。

プログラム編集ツール GX-Works2

引用元:https://www.mitsubishielectric.co.jp/fa/products/cnt/plceng/smerit/gx_works2/index.html

通信プロトコル支援機能を搭載した、シーケンスプログラム編集ソフトです。

今回の検証では、このGX-Works2を使用して解説を進めていきます。

Modbus通信テストツール ModRSsim2

出典元:https://sourceforge.net/projects/modrssim2/

パソコンにModbus用サーバーを設置できるシミュレーションソフトです。

ソフトウェアを起動するだけで、Modbusサーバーとしてクライアントからの接続待ちとなります。

すべて英語なのでわかりにくいかもしれませんが、使い方は難しくありません。

LANケーブル(ストレート)

ストレート結線のLANケーブルを準備してください。

クロスケーブルには対応していません。

ハードウェアの構成

QJ71E71-100でパソコンとModbus/TCP通信をおこなうにあたって、下記のハードウェア構成で進めます。

PLCの構成

PLCの構成として、QJ71E71-100は4番スロットに装着しています。

そのため、QJ71E71-100のバッファメモリを参照する際は『U4』を指定してください。

ポイント

I/Oスロット0番に装着した場合、バッファメモリを参照する際は『U0』を指定します。

ネットワークの構成

ネットワークは、PLCとPCだけが存在するシンプルな構成で進めます。

機器名IPアドレス
PLC(QJ71E71-100)192.168.1.2
パソコン192.168.1.5
ポイント

PLCとパソコンを直結しても問題なく動作します。

QJ71E71-100のパラメータ設定

GX-Works2を使って、QJ71E71-100のパラメータ設定をおこないます。

ネットワークパラメータの設定

プロジェクトから、ネットワークパラメータ内の『Ethernet/ CC IE /MELSECNET』を開きます。

ネットワークパラメータ設定のユニット1に、下記の通り割付をおこなってください。

ネットワーク種別Ethernet
先頭I/O0040
※I/Oユニットの構成に合わせて変更可
ネットワークNo.1
グループNo.0
局番1
モードオンライン

動作設定

ユニット1の設定欄から『動作設定』をクリックし、下記の通り割り付けます。

交信データコード設定バイナリコード交信
イニシャルタイミング設定OPEN待ちにしない(STOP中交信不可)
IPアドレス設定10進数
192.168.1.2
送信フレーム設定Ethernet(V2.0)
TCP生存確認設定KeepAliveを使用
RUN中書込を許可するチェック

イニシャル設定

イニシャル設定では、データ交信用タイマ値を設定します。

ネットワーク断時のタイムアウト時間はここから設定可能です。

今回は5秒としました。

TCP ULPタイマ10(5秒)
TCP ゼロウィンドウタイマ10(5秒)
TCP 再送タイマ10(5秒)
TCP 終了タイマ10(5秒)
IP 組立タイマ5(2.5秒)
レスポンス監視タイマ設定無し(初期値)
相手先生存確認開始間隔タイマ設定無し(初期値)
相手先生存確認間隔タイマ設定無し(初期値)
相手先生存確認再送回数設定無し(初期値)
ポイント

今回の構成ではDNSサーバーのIPアドレスは設定不要です。

オープン設定

接続先相手とのコネクション設定をおこないます。

Modbus/TCPサーバーのポート番号は『502』で固定です。

項目12
プロトコルTCPTCP
オープン方式ActiveActive
固定バッファ受信送信
固定バッファ交信手順通信プロトコル通信プロトコル
ペアリングオープンペアにするペアにする
生存確認確認する確認する
自局ポート番号81928192
交信相手IPアドレス192.168.1.5192.168.1.5
交信相手ポート番号502502
ポイント

複数のModbus/TCP対応機器と通信する際は、ここに接続相手のコネクション設定を追加してください。

通信プロトコル支援機能の設定

通信プロトコル支援機能は、通信プロトコルの電文処理を簡略化する機能です。

Modbus/TCP通信で必要な、要求電文や応答電文をラダーで処理することなくデバイスに割り付けられます。

通信プロトコル支援機能は、ツール内の通信プロトコル支援機能からEthernetユニットを選択することで利用できます。

通信プロトコルの割り付け

プロトコル番号の直下にある『追加』をクリックして、プロトコルを追加します。

プロトコル追加

下記の内容でプロトコルを追加します。

種別通信プロトコルライブラリ
プロトコル番号1
メーカ汎用プロトコル
型式MODBUS/TCP
プロトコル名23: RD/WR Multi Registers
ポイント

プロトコル23: RD/WR Multi Registersは、Holding Registersの内容を読出/書込するファンクションコードです。

上記と同じ表示になったら、プロトコルの追加は完了です。

次は、各パケット(電文)のデバイスを割り付けます。

パケット設定

ここでは、先程追加したプロトコル番号1のパケットにデバイスを割り付けます。

各パケットに対して、一つひとつデイバイスを割り付けることもできますがめんどうです。

デバイス一括設定を使えば、先頭デバイスを指定するだけで自動的にデバイスを割り付けてくれます。

デバイス一括設定で、プロトコル番号1にD1000を先頭としたデバイスを割り付けます。

設定プロトコル番号範囲設定1 ー 1
先頭のデバイス番号D1000

一括でデバイスを割り付けた際の、各デバイスにおけるパケットの内容は下記のとおりです。

デバイス種別内容
D1000要求電文トランザクションID
D1001接続先モジュールID
D1002Holding Register 読出し先頭アドレス番号
D1003読出し点数(最大125ワード)
D1004Holding Register 書込み先頭アドレス番号
D1005書込み点数(最大100ワード)
D1006 -D1106書込みデバイスデータ
D1107応答電文トランザクションID
※要求電文のトランザクションIDをそのまま返信
D1108接続元モジュールID
D1109 – D1235読出しデバイスデータ
D1236応答電文
(要求電文エラー時)
トランザクションID
※要求電文のトランザクションIDをそのまま返信
D1237接続元モジュールID
D1238Modbus/TCPエラーコード

オンライン書込み

プロトコルの設定が終わったら、PLCにプロトコル情報を書き込みます。

オンラインからユニット書込みで書込み可能です。

通信方法はラダープログラム書込みと同じなので、難しくはありません。

シーケンスプログラムの作り方

設定したプロトコルを元に、シーケンスプログラムを作成します。

動作としては、

  • コネクションオープン
  • 要求電文送信
  • 要求電文受信
  • コネクションクローズ

コネクションクローズまで2~3を繰り返すことで、常時データのやり取りが可能です。

シーケンスプログラム(ラダー)

プログラムは下記の4つに分割しています。

  • 1-コネクション
    • 接続先とのコネクション、クローズ処理
  • 2-プロトコル
    • Modbus/TCP通信における要求電文の送信と応答電文の受信処理
  • 3-アラーム
    • コネクション、プロトコル、クローズ処理における異常処理
  • 4-ヒョウジ
    • 通信状態やアラームの表示処理
ポイント

プログラムをご自身の回路に導入する際は、各プログラムをひとつにまとめても問題ありません。

ただし、処理順によっては正常に動作しない可能性があるため注意が必要です。

1ーコネクション

①E71ユニットからバッファメモリを読み出す

E71ユニットからコネクション1に関するオープン情報を読み出します。

オープン完了信号はアドレスM0、オープン要求中信号はアドレスM20です。

ポイント
  • アドレスM0~M15は、コネクションオープン完了信号が占有しています。
  • アドレスM20~M35は、コネクションオープン要求中信号が専有しています。

②相手機器とのコネクション処理

デバイスB0「通信開始入力」で相手機器とのコネクションを開始します。

今回の仕様では、アドレスD1239に『0x0000』を代入してください。

ポイント
  • 0x0000:GX-Works2で設定したパラメータ設定を利用する
  • 0x8000:コントロールデータD1242~D1249の設定値を利用する

アドレスD0『コネクション番号』には1を指定します。

アドレスD1『連続実行プロトコル数』には1を設定してください。※通信プロトコル支援機能で1つしか設定していないため

各パラメータを定義したら、ZP.OPEN命令でコネクションを開始します。

設定データ内容セット側データ型
“Un”/UnE71 の先頭入出力番号(00 ~ FEH:入出力番号を 3 桁表現した場合の上位 2 桁)ユーザ文字列 /BIN16 ビット
(S1)コネクション No.(1 ~ 16) * 1BIN16 ビット
(S2)コントロールデータを格納するデバイスの先頭番号ユーザ,システムデバイス名
(D1)命令完了にて 1 スキャン ON させる自局のビットデバイスの先頭番号。異常完了時には,(D1)+1 も ON する。システムビット

③オープン処理の結果

ZP.OPEN命令の実行結果を取得します。

アドレスM1000はオープン実行完了パルス信号、アドレスM1001はオープン異常完了パルス信号です。

オープン命令が正常に完了したらプロトコル処理へ移ります。

オープン命令が異常終了した場合はアラームとし、オープン処理を中断してください。

④相手機器とのコネクションクローズ処理

アドレスB1「コネクションクローズ入力」、またはアドレスM121「コネクションクローズ異常総合」でコネクションを切断します。

コネクションをクローズする際は、ZP.CLOSE命令を使用してください。

設定データ内容セット側データ型
“Un”/UnE71 の先頭入出力番号(00 ~ FEH:入出力番号を 3 桁表現した場合の上位 2 桁)ユーザ文字列 /BIN16 ビット
(S1)コネクション No.(1 ~ 16) * 1BIN16 ビット
(S2)コントロールデータを格納するデバイスの先頭番号システムデバイス名
(D1)命令完了にて 1 スキャン ON させる自局のビットデバイスの先頭番号。異常完了時には,(D1)+1 も ON する。ビット

クローズ対象のコネクションNoは1です。

クローズ処理実行後、アドレスM1004には『クローズ命令正常完了パルス信号』、アドレスM1005には『クローズ命令異常完了パルス信号』が割り当てられます。

両信号を使って、アドレスM115『コネクションクローズ処理完了記憶』でクローズ処理終了状態を記憶してください。

アドレスM1005『クローズ命令異常完了パルス信号』がオンした場合、アラームとします。

アドレスM117『コネクションクローズ完了』には、コネクションが切断されている状態を割り当ててください。

クローズ処理を伴わない異常が発生した場合、コネクション1のオープン状態とオープン要求中からクローズ状態を判断します。

⑤クローズ処理後データリセット

コネクションのクローズが確認できたら、通信処理関係のデバイスをリセットします。

  • 通信関係の確認記憶であるアドレスM111~M116
  • Modbus/TCPのパケットに割り付けたアドレスD1000~D1236

以上の2点を、コネクションクローズ確認と同時にリセットします。

2-プロトコル

⑥要求電文の設定

サーバー(パソコン)へ送信するのに必要な要求電文のフォーマットを作成します。

各デバイスの意味と注意点は下記のとおりです。

デバイス意味設定値備考
D1001サーバー側モジュールID1
D1002読出先頭レジスタNo.0Holding Register 400001
D1003読出点数125Holding Register 400001~400126
D1004書込先頭レジスタNo.130Holding Register 400131
D1005書込点数100Holding Register 400131~400230
D1006書込データバイト数200D1005×2の値を代入※書込点数1点あたり2バイト

⑦要求電文を送信

相手機器へ要求電文を送信します。

要求電文の送信頻度は約100ミリ秒に1回です。

ポイント

実際の送信頻度は、プロトコル実行時間+スキャンタイムが加算されます。

かならず、アドレスT0に設定した頻度で送信されるわけではありません。

送信間隔を短くするほどスキャンタイムは伸びます。

相手機器との通信環境に合わせて、できるかぎり長めの時間を取ってください。

アドレスD1000『トランザクションID』へは、プロトコル実行ごとに1ずつ加算します。

実行した要求電文にIDをつけ、送信データと受信データの整合性を確認することが目的です。

送受信のトランザクションIDに相違があるとき、アラームとします。

要求電文の設定が終わったら、GP.ECPRTCL命令で要求電文を送信しましょう。

設定データ内容セット側データ型
UnE71 の先頭入出力番号(00 ~ FEH:入出力番号を 3 桁表現した場合の上位 2 桁)ユーザBIN16 ビット
n1コネクション No.(1 ~ 16)BIN16 ビット
デバイス名
n2連続実行するプロトコルの数 (1 ~ 8)BIN16 ビット
デバイス名
(S)コントロールデータを格納するデバイスの先頭番号ユーザ/システムデバイス名
(D)命令完了にて 1 スキャン ON させる自局のビットデバイスの先頭番号。異常完了時には,(D)+1 も ON する。システムビット
ポイント
  • コネクションNo.はZP.OPENで指定した値にあわせて、1を指定します。
  • 『通信プロトコル支援機能』で作成したプロトコルが1つなので、連続実行するプロトコル数は1を指定します。

⑧プロトコルの実行結果

GP.ECPRTCL命令実行後、下記のアドレスに結果が格納されます。

  • アドレスM1002:プロトコル命令送信完了パルス信号
  • アドレスM1003:プロトコル実行異常終了パルス信号

アドレスM113『プロトコル実行正常終了記憶』は、次回のプロトコル命令およびクローズ処理で利用します。

アドレスM114『プロトコル実行異常終了記憶』がオンした場合は、アラームとしてください。

3-アラーム

⑨アラーム一括リセット

アナンシェータF0~F4を、アドレスB2『異常解除入力』で一括オフします。

ポイント

アラーム取得にアナンシェータを使わない場合、この回路は不要です。

⑩アラーム発生処理

F0:QJ71E71-100ユニット異常

QJ71E71-100ユニットの内部エラーを取得しアラームとします。

F1:コネクションオープン処理異常

オープン処理に失敗したときアラームとします。

F2:プロトコル実行処理異常

プロトコル実行命令中の異常を取得し、アラームとします。

送信と受信のトランザクションIDが一致することを利用し、不一致状態が続くと異常であると判断します。

F3:コネクションクローズ処理異常

コネクションクローズ時の実行異常を取得し、アラームとします。

F4:要求電文異常

接続先の機器から要求電文に誤りがあると応答があった場合に、アラームにします。

要求電文が正しい場合、アドレスD1238『Mod受信応答側エラーコード(Err)』の値は0です。

ポイント

受信したエラーコードの詳細内容はModbusエラーコードを参照してください。

アラームまとめ

設定したアラームをまとめます。

  • M121『コネクションクローズ異常総合』
    • この異常が発生したときコネクションを強制的にクローズします。
  • M122『Modbus異常総合』
    • QJ71E71-100でのModbus/TCP通信におけるすべての異常。

QJ71E71-100ユニット内部異常リセット

ZP.ERRCLR命令にて、QJ71E71-100ユニットの内部エラーをリセットします。

リセット完了でユニット付属のCOM.ERRランプが消灯します。

設定データ内容セット側データ型
“Un”/UnE71 の先頭入出力番号(00 ~ FEH:入出力番号を 3 桁表現した場合の上位 2 桁)ユーザ文字列 /BIN16ビット
(S1)コントロールデータを格納するデバイスの先頭番号ユーザ,システムデバイス名
(D1)命令完了にて 1 スキャン ON させる自局のビットデバイスの先頭番号。異常完了時には,(D1)+1 も ON する。システムビット

4-ヒョウジ

⑫表示関係

コネクション状態や異常状態の表示をおこないます。

この回路は設計者の好みで変更してください。

動作テスト

ここからは、QJ71E71-100ユニットとパソコン間でModbus/TCP通信の動作テストをおこないます。

パソコンのIPアドレスを変更する

パソコン側のIPアドレスとサブネットマスクを変更します。

  • IPアドレス
    • 『192.168.1.5』
  • サブネットマスク
    • 『255.255.255.0』
ポイント

IPアドレスクイックチェンジャーを使えば、簡単にIPアドレスを変更できるので利用してみてください。

ModRSsim2の立ち上げ

Modbus通信テストツール『ModRSsim2』をダウンロードし、実行ファイルを開きます。

ソフトウェアが開いたら、赤枠部分の

  • I/O:Holding Regs(400000)
  • Prot:MODBUS TCP/IP

を選択して、ソフトウェアを実行したままにしておきます。

これでパソコン側の設定は終わりです。

コネクション開始

シーケンスプログラム上のアドレスB0『通信開始入力』をオンし、コネクションを開始します。

コネクションが正常に完了すると、アドレスM111『オープン命令正常完了記憶』がオンとなります。

ModRSsim2でも、左上のメッセージ欄が『Connected』となっていればコネクション成功です。

ポイント

コネクションの状態はトランザクションIDの変化でもチェックできます。

PLC側(クライアント)

パソコン側(サーバー)

PLCによる Holding Register 読出し

今回はHolding Registerの値をPLCで読み出してみます。

ModRSsim2側でHolding Register 400001~400010の値を『1~10』に変更してください。

ModRSsim2アドレスPLCアドレス設定値
400001D11101
400002D11112
400003D11123
400004D11134
400005D11145
400006D11156
400007D11167
400008D11178
400009D11189
400010D111910
ポイント

ModRSsim2でのデータ変更操作は以下の手順でおこないます。

  • 変更したいアドレスをダブルクリック
  • ポップアップウィンドウのValueに値をセットしOKをクリック

PLC側の読出しデータを確認して、D1110~D1119にModRSsim2で設定した値が反映されていれば読出し成功です。

PLCから Holding Register 書き込み

PLCからHolding Registerへ書き込みをおこないます。

書き込み可能な領域はHolding Register 400131~400230です。

今回は400131~400140にデータを書き込んでみましょう。

ModRSsim2アドレスPLCアドレス設定値
400131D100711
400132D100822
400133D100933
400134D101044
400135D101155
400136D101266
400137D101377
400138D101488
400139D101599
400140D10161100

アドレスD1007~D1016にデータをセットしたら、ModRSsim2のHolding Registerを確認しましょう。

Holding Register 400131~400230の値が、PLCで設定したデバイスの値と同じになっていれば書き込み完了です。

コネクションクローズ

シーケンスプログラムのアドレスB1『コネクションクローズ入力』をオンにしてください。

QJ71E71-100とパソコン間の通信が終了します。

ポイント

通信を再開する場合は、コネクション処理からやり直してください。

参考資料&使用ツール

今回の記事執筆にあたって参考にした資料とツールです。

参考資料

  • ソフテックだより 第383号(2021年8月4日発行)技術レポート「Modbus/TCP通信 ~「通信プロトコル支援機能」の使用~」
  • 三菱電機 Q対応Ethernetインタフェースユニットユーザーズマニュアル(基本編)
    • SH(名)-080004-AE

使用ツール

コメント

コメント一覧 (2件)

  • 現在三菱製PLC Q06UDVCPUの内蔵Ethernet通信機能で、通信プロトコル支援機能を使用し、modbusTCP通信を構築しようとしております。
    PLC側がクライアント、サーバ側が(M-duino58+※arduino Mega2560を
    搭載した簡易PLCのようなもの)を使用しております。
    PLC側はFANUCやJAKAなど産業用ロボットとの通信をModbusTCP通信を確立しており、M-duino58+側ではPCをクライアントとしては通信を確立しております。
    (M-duino58+はEthernet Sheildを搭載しており、ethernetに対応しております)
    しかし、PLCとの通信がいまだ確立できておりません。
    基本的なパラメータ設定はできていると思うのですが、オープン処理が確立できず、通信できない状況となっております。
    そこでmodbusTCP通信において、パラメータ設定のモジュールIDを
    三菱PLC側で設定しておりますが、必須なのでしょうか。
    また何か知っていることがあればご教授いただきたいです。
    よろしくお願い致します。

    • 阿部 吾郎さま、コメントありがとうございます。

      modbusTCPはスレーブ側が要求電文を送る際に、自身のモジュールIDをマスタへ伝えることで、通信先の装置や機器が複数ある場合でも同じプロトコルを使用することができます。

      そのため他の機器とモジュールIDが重複しないよう、設定しないといけません。

      今回はマスタがM-duino58+で、すでにPCがスレーブにいるため、もしかするとPCと三菱PLCのモジュールID重複がオープン処理できない理由かもしれません。

      現物を知らないため断定はできませんが、三菱PLC側のモジュールIDを変更して試してみることをおすすめします。

コメントする

CAPTCHA


目次