シュナイダー社のPLCモディコンの通信方式に対応した[モドバスPLC ]ノードと[モドバスPLC A&E]ノードを使用した、エッジアプリの作成を学びます。

シュナイダー社のPLC、モディコンの通信方式であるモドバス通信は、上位機器への標準的な通信手段として仕様も公開されており、シュナイダー社以外の様々な計測制御機器にも採用されています。モドバスPLCの通信方式に対応した[モドバスPLC ]ノードと[モドバスPLC A&E]ノードは、このモドバス通信に対応した通信を行い、モディコンPLCを始め、各社のPLCやリモートI/O、ロボットコントローラなど様々なモドバス通信対応機器からのデータを取得できます。

モドバス通信には、シリアル通信を使用する「Modbus/ASCII」、「Modbus/RTU」と、TCP/IP通信を利用する「Modbus/TCP」があり、[モドバスPLC ]ノードと[モドバスPLC A&E]ノードで利用する[モドバス通信]設定ノードはいずれの通信方式にも対応しています。

以下の記述では、モドバス通信の基本仕様を理解いただいていることを前提としております。ネット上には、様々なメーカのモドバス通信対応機器の解説が公開されています。必要に応じて検索・確認ください。ウィキペディアの一般的な解説は、

https://ja.wikipedia.org/wiki/Modbus

にあります。

また安全性を考慮し、今のところデータの書き込み機能は搭載しておりませんので、このノードを使用してシーケンサの内部データを書き換えることはできません。

では、データの取得方法を学んでいきましょう。

ノードの選択

他のセンサ・制御機器のノードと同様、[モドバスPLC]ノードと[モドバスPLC A&E]ノードも[iaCloud devices]カテゴリーにあります。見つけにくい場合は、ノードを検索ウインドウに「モドバス」と入力すると簡単に見つかります。下図のフローは、本項で作成するフローです。

[モドバス通信]設定ノード

[モドバスPLC ]ノードと[モドバスPLC A&E]ノードをダブルクリックしプロパティ設定ウインドウを開くと、一番上に「通信ノード」とあり、モドバス通信の設定ノードを選択する必要があります。この[モドバス通信ノード]は、接続するモドバス対応機器の通信ポート一つに対して、一つの[モドバス通信ノード]を追加し、それを複数の[モドバスPLC ]ノードと[モドバスPLC A&E]ノードで使用できます。既存の[モドバス通信ノード]がある場合は、それを選択します。最初は存在しないので、鉛筆マークボタンから新規作成し、追加します。

[モドバス通信ノード]には基本的なプロパティとして、以下の二つのプロパティがあり、必要なデータアクセスの状況により設定をします。通常はデフォオルトのままとしてください。

共通プロパティ

  • 通信周期:[通信ノード]がシーケンサと通信をし、取得すべきデータ全部を更新する周期です。1秒以上で設定ください。デフォルトは5秒です。
  • 連続読出数:[通信ノード]は、シーケンサのデバイスを連続読出しで読出しますがその連続数です。デフォルトは64ワードです。
  • 連続読出限定:読出しデバイスに設定されていないデバイスにアクセスしないようにすることができます。通常チェックなしです。

通信設定

このモドバス通信設定ノードは、シリアル通信を使用する「Modbus/ASCII」、「Modbuc/RTU」と、TCP/IP通信を利用する「Modbus/TCP」に対応していますので、必要に応じて選択してください。

モドバス通信機器に設定したパラメータを、[通信ノード]に設定します。モドバス通信対応機器それぞれで、設定項目の名称などが異なる可能性があります。ご注意ください

  • MOdbusTCP
    • Netアドレス:接続するモドバス対応機器のIPアドレスを設定します。
    • ポート番号:接続するモドバス対応機器が使用するポート番号を設定します。(通常は、502が使われます。)
    • ユニット番号:モドバス通信機器によってきまります。(通常は255です。)
  • ModbusRTU
    ここでの設定にないパラメータは、、ストップビット: 1、チェックサム: 有効、で固定です。モドバス通信対応機器の設定をこれに合わせてください。
    • ポート:シリアル通信ポートです。例えばラズパイに、USBシリアル通信ドングルが挿入されていると、選択肢の中にそれが現れます。
    • ボーレート:シリアル通信の速度です。モドバス通信対応機器側の設定と合わせてください。
    • パリティ:シリアル通信のパリティビット仕様です。モドバス通信対応機器側の設定と合わせてください。
  • ModbusASCII
    • ModbusRTUと同じ設定となります。

[モドバスPLC]ノード

以下の説明では、モディコンPLC M221「TM221CE16U」をイーサネットで接続し使用しています。PLCには以下のデバイスを、操作するラダープログラムを作成し動作させています。

  • %M200 〜 207(モドバスアドレスIS200〜207):ランダムに変化するビット情報8点
  • %MD102(モドバスアドレスHR102/103): 1秒ごとにカウントアップするカウンタ。60秒でゼロクリア。
  • %MD104(モドバスアドレスHR104/105): 1秒ごとにカウントアップするカウンタ。600秒でゼロクリア。
  • %MD106(モドバスアドレスHR106/107): 1秒ごとにカウントアップするカウンタ。1時間でゼロクリア。
  • %MD108(モドバスアドレスHR108/109): 1秒ごとにカウントアップするカウンタ。24時間でゼロクリア。
  • %MW200 〜207(モドバスアドレスHR200〜207): 固定の文字列。(8ワードのShiftJIS)

モドバス通信対応機器によって、その内部デバイス(内部メモリ・変数)とモドバス通信アドレスとの対応が異なります。上記の例はモディコンPLCのケースですが、それぞれのモドバス通信対応機器のモニュアルを参照しモドバスアドレスへの対応表を確認ください。

オブジェクト設定

次の「データの設定」タブで設定したデータをia-cloudオブジェクトにまとめて、メッセージ出力する際のプロパティを設定します。

  • 定期収集周期:
    データ項目の設定で設定されたデータ一式を定期的にia-cloudオブジェクトとして送出する周期を、秒単位で設定します。これは[通信ノード]で設定した下位の通信周期とは異なり、ia-cloudオブジェクトを送出する周期です。送出する時点での最新値を出力します。
  • 非同期収集有り:
    収集周期以外に、データに変化があった場合にia-cloudオブジェクトを送出するオプションです。設定されたデータ項目のどれかに変化があった場合、ia-cloudオブジェクト全体を出力します。
  • objectキー:ia-cloudオブジェクトにつけるユニークなキー文字列です。
  • objectの説明:ia-cloudオブジェクトにの任意の説明です。この説明も都度、ia-cloudオブジェクトに内包されて送出されます。

データ設定

ia-cloudオブジェクトとして送出する、データ項目を設定します。データ項目は、取得するデータ形式と、そのデータを保持しているシーケンサのデバイスとそのデバイス番号で設定します。

モドバス通信では、データをモドバスアドレスに対応させてアクセスします。[モドバス通信]ノードで扱うモドバスアドレスは、

  • ファンクションコード1:コイル
  • ファンクションコード2:IS
  • ファンクションコード3:HR
  • ファンクションコード4:IR

の4種類です。モドバス通信機器のそれぞれの機種ごとに、利用できるモドバスアドレスの範囲が異なります。以下の設定で、接続中のモドバス通信機器に存在しないモドバスアドレスを読み出すと、通信エラーが発生しデータの取得ができないことがあります。

  • データ構造型:任意のデータ型名称を付けられますが、空欄にはできません。通常、デフォルトのままで使用ください。
ビット

モドバス通信機器のビット情報を読み、そのON/OFF状態を表すデータを取得します。ビット情報は、1ビットの場合、true/falseの論理値で、複数ビットの場合は、論理値の配列で出力されます。

  • データ名称:
    データに付与する名称。オブジェクト内でユニークであること。
  • ファンクションコード:
    対象のモドバスアドレスを表す文字列。(コイル・IS・HR・IR)
    HR・IRの場合は、値が0の時false、それ以外の時true
  • アドレス:
    読み出すアドレス番号(複数ビットの場合は、先頭のデバイス番号)。
  • ビット数:
    読出す連続のビット数
  • 正論理/負論理:
    ビットの論理的評価。正論理:1 → true・0 → false、負論理: 1 → false・0 → true
数値
  • データ名称:
    データに付与する名称。オブジェクト内でユニークであること。
  • ファンクションコード:
    対象のモドバスアドレスを表す文字列。(HR・IR)
  • モドバスアドレス:
    読み出すモドバスアドレス番号(2ワードデータの場合は、先頭の番号)。
  • ワード長:
    読出すデータのワード長。(1word:1ワードデータ、2wl:2ワードの下位ワード先頭、2wb:2ワードの上位ワード先頭)
  • データ形式:
    読み出すデータの符号形式。(符無:符号なし2進数、符付:符号付き2の補数形式、BCD:BCD形式)
  • ゼロ・倍率:
    取得したデータにつけるオフセットと倍率。(dataValue = 読み値 x 倍率 + ゼロ となります。)
  • 単位:
    データに付与する単位:MKS単位系で記述することが推奨されています。
数値列
  • データ名称:
    データに付与する名称。オブジェクト内でユニークであること。
  • ファンクションコード:
    対象のモドバスアドレスを表す文字列。(HR・IR)
  • モドバスアドレス:
    読み出すモドバスアドレス番号。
  • 数値列の長さ:
    読み出す数値列の数値の数。
  • ワード長:
    読出すデータのワード長。(1word:1ワードデータ、2wl:2ワードの下位ワード先頭、2wb:2ワードの上位ワード先頭)
  • データ形式:
    読み出すデータの符号形式。(符無:符号なし2進数、符付:符号付き2の補数形式、BCD:BCD形式)
文字列
  • データ名称:
    データに付与する名称。オブジェクト内でユニークであること。
  • ファンクションコード:
    対象のモドバスアドレスを表す文字列。(HR・IR)
  • モドバスアドレス:
    読み出すモドバスアドレス番号。
  • ワード数:
    文字列が格納されているデバイスのワード数。(文字数ではなく、エンコードによってワード数は変化するので注意。)
  • エンコード
    読み出す文字列の符号化形式。(シフトJIS(sJIS)、EUC-JP(EUCjp)、UTF-8(UTF8) のいずれか)

以下の設定例では、IS200〜207の8ビットのON/OFF信号と、HR106の1秒カウントデータ(1時間リセット)、HR200〜207の文字列データを取得し送出する設定になっています。

[モドバスPLC A&E]ノード

以下の説明では、モディコンPLC M221「TM221CE16U」をイーサネットで接続し使用しています。PLCには以下のデバイスを、操作するラダープログラムを作成し動作させています。

  • %M101(モドバスアドレスIS101):10分間に1回、50秒間onする、アラームテスト信号
  • %M102(モドバスアドレスIS102):1時間に1回、500秒間onする、アラームテスト信号
  • %M103(モドバスアドレスIS103):1日に1回、1,000秒間onする、アラームテスト信号
  • %M104(モドバスアドレスIS104):1日に1回、300秒間onする、アラームテスト信号
オブジェクト設定

次の「データの設定」タブで設定した警保やイベント情報をia-cloudオブジェクトにまとめて、メッセージ出力する際のプロパティを設定します。

  • 定期収集周期:
    データ項目の設定で設定された警報やイベント情報を定期的にia-cloudオブジェクトとして送出する周期を、秒単位で設定します。これは[通信ノード]で設定した下位の通信周期とは異なり、ia-cloudオブジェクトを送出する周期です。送出する時点での最新値を出力します。
  • 非同期収集有り:
    収集周期以外に、警報やアラーム状態に変化があった場合にia-cloudオブジェクトを送出するオプションです。通常チェックありで使用します。
  • objectキー:ia-cloudオブジェクトにつけるユニークなキー文字列です。
  • objectの説明:ia-cloudオブジェクトにの任意の説明です。この説明も都度、ia-cloudオブジェクトに内包されて送出されます。

データ設定

a-cloudオブジェクトとして送出する、データ項目を設定します。データ項目は、取得するデータ形式と、そのデータを保持しているシーケンサのデバイスとそのデバイス番号で設定します

  • データ構造型:ia-cloud仕様で規定される、Alarm&Eventデータモデル固定です。
アラーム&イベント設定
  • ファンクションコード:
    対象のモドバスアドレスを表す文字列。(コイル・IS・HR・IR)
    HR・IRの場合は、値が0の時false、それ以外の時true
  • アドレス:
    読み出すアドレス番号(複数ビットの場合は、先頭のデバイス番号)。
  • 論理:
    ビットの論理的評価。正論理:1 → true・0 → false、負論理: 1 → false・0 → true
  • A&Eコード:
    警報やイベントを表す番号やコード。(一般に警報番号(数字以外もOK)を設定することを想定しています。)
  • A&Eの説明
    警報やイベントの内容を表す文字列。(一般に警報メッセージを設定することを想定しています。)

以下の設定例では、IS101(10分間に一度、50秒間発生するテストアラーム信号)を設定しています。アラーム発生時の他、10秒毎に状態を送出しています。

ia-cloudへの格納

ノードの選択の項で示したフローでは、[モドバスPLC ]ノードと[モドバスPLC A&E]ノードの出力メッセージをia-cloud接続ノードに接続して、ia-cloudサービスへのデータ格納を実施しています。

ia-cloud接続ノードの設定は、他のデータ収集ノードとの接続と同一です。一度どこかで、ia-cloudサービスの接続URLとID・パスワードを保持する設定ノード[接続先CCS]をお作成した場合は、それを流用して設定が可能です。ia-cloudサービスが、どの[ia-cloud接続]ノードからの接続かを認識できるように「データソースのユニークキー」を設定しておきます。

設定完了後[デプロイ]ボタンを押すと、[ia-cloud接続]ノードはia-cloudサービスへの接続を行い成功すると[ia-cloud接続]ノードのステータスが「接続済み」となります。また、定期収集や非同期収集のタイミングで[モドバスPLC ]ノードと[モドバスPLC A&E]ノードからデータが[ia-cloud接続]ノードへ送られると、ia-cloudサービスへのデータ格納を行い、[ia-cloud接続]ノードのステータスが「要求完了」となります。また、[debug]ノードを[ia-cloud接続]ノードに接続しておくと、ia-cloudサービスが応答したメッセージを確認することも可能です。

カウンタのグラフ表示

サンプルで示したフローは、モドバスPLCのデータで直接ダッシュボードのグラフ表示をします。この左下の[モドバスPLC ]ノードでは

  • HR102/103: 1秒ごとにカウントアップするカウンタ。60秒でゼロクリア。
  • HR104/105: 1秒ごとにカウントアップするカウンタ。600秒でゼロクリア。

を収集しています。これを[データ抽出]ノードで、データ名称「1分リセット」「10分リセット」のデータを抽出し、標準ダッシュボードの[chart]ノードでグラフ化します。

[chart]ノードの使用法について、「ダッシュボードアプリの作成入門編」を参照ください。とりあえず、赤枠のグラフのタイトル設定と、データ凡例の表示の設定をしておきましょう。以上の設定でデプロイし、ダッシュボードを表示すると、10秒毎に1秒カウントデータがグラフ表されます。データは、1分毎と10分毎にゼロリセットされる為、下図のような鋸波上のグラフが見られます。