今回はOPTO22第3話になります。前回はOPTO22 EPIC ControllerでModbus TCP経由からIOをアクセスし紹介しましたが、次はOPTO22をMQTT Protocol使用する方法を紹介しようと思います。
さ、はじめよう!
Reference Link
MQTT?
groov EPICおよびgroov RIOには、通信効率の向上とITへの依存の軽減を図るためのMQTT通信が含まれています。MQTTは、そのアーキテクチャのために、多くのIIoTアプリケーションに適したパブサブ(パブリッシュ-サブスクライブ)プロトコルです。
パブサブアーキテクチャでは、ブローカーと呼ばれる中央サーバーがすべてのデータを処理します。MQTTクライアントは、データをブローカーにパブリッシュしたり、データを取得するためにサブスクライブしたり(または両方)することができます。データをパブリッシュするクライアントは、データが変更されたときにのみ送信します。データをサブスクライブするクライアントは、データが変更されたときにのみ、ブローカーから自動的に受け取ります。
これに対して、リクエスト-レスポンス(またはポーリング-レスポンス)アーキテクチャでは、クライアントとサーバーが直接接続されている必要があります。クライアントはデータの変更を知らないため、定期的な間隔でデータを要求する必要があります。
MQTTのパブサブは、IIoTアプリケーションに対してリクエスト-レスポンスに比べて3つの主な利点があります:
- ネットワークトラフィックが全体的に削減されます。データは定期的な間隔ではなく、変更があったときにのみパブリッシュおよび送信されるためです。
- ブローカーがデータの中央ソースとなるため、サーバーは複数のクライアントに対して負荷をかける必要がありません。また、不安定な接続や低帯域幅のリモートデバイスでもデータをパブリッシュまたはサブスクライブすることができます。
groov EPICおよびgroov RIOでは、MQTTをgroov ManageからまたはIgnition/Ignition Edgeを介して使用することができます(GRV-EPIC-PR1、GRV-EPIC-PR2、およびGRV-R7-MM2001-10で利用可能)。
Exmaple
groov EPICおよびgroov RIOを介して提供される文字列ペイロードまたはSparkplug-Bペイロードを使用したMQTTトランスミッションは、オンプレミスおよびリモートのデータ通信において利点を提供します。
図では、産業地域のgroov EPICシステムが独自のI/Oおよび他のPAC、PLC、RTUを介してセンサーとアクチュエータに接続し、MQTTブローカーを通じてデータをパブリッシュおよびサブスクライブしています。
メインサイトでは、Ignition Edgeとgroov EPICもブローカーを介してデータをパブリッシュおよびサブスクライブし、データベース接続とシステムの可視化を提供しています。
MQTT Advantages
- Designed for industrial systems
- デバイスから発信される通信
- ブローカーでの集中セキュリティ管理
- データは変更時のみ例外的に報告
- 軽量データ通信
- 少ない通信リンク
- ネットワーク上のトラフィックが大幅に減少
- 断続的な接続に最適
- ブローカーはオンサイトでもオフサイトでも可能
- VPNやファイアウォールのポート開放が不要
- IT部門への依存度が低い
Getting Started with MQTT in groov Products!
Opto22のgroov EPIC®エッジプログラマブル産業用コントローラとgroov RIO®エッジI/Oは、groov Manage、Node-RED、またはInductive Automation®のIgnition Edgeを介して、MQTTデータ通信を使用する多くの方法を提供します。
Implemenation
groovMANAGE画面を開き>Data Serviceをクリックします。
Data Servicesの設定画面が表示され、その中にMQTTだけではなくOPC UA Server設定も含まれています。OPC UA Serverに関してはまた次回の記事で紹介します。
MQTT Configuration
MQTT Brokerの接続設定を変更するため、MQTT>MQTT String Configurationを開きます。
MQTT Stringの設定画面が表示されます。
Enable
最初はConfiguration>EnableにあるSlide ButtonでMQTT機能を有効します。
Group Topic
MQTT Base TopicはMyOpto22に設定しましたが、更に細かくデータを切り分けたいのであればMQTT Group Topic/MQTT Subgroup Topicを設定してください。
(こちらの設定はOptionalでEmptyでも問題ありません、いまの設定だとMyOptio22/XXX/XXXのようなTopicをBrokerに送信します)
こちらはTopicの設定Formatになります。
<Base Topic>/<Group Topic>/<Subgroup Topic>/<Device Topic>/<Tag>
<Base Topic>/<Group Topic>/<Subgroup Topic>/<Device Topic>/#
Topic paths and wildcards
次のSessionに進む前にまずTopicなどについて話しましょう。
公開したいデータを公開すると、購読者が受信するデータを形成するために、MQTTトピックパスにワイルドカードを含めることができます。ワイルドカードは文字列とSparkplugの両方で同じように機能します。利用可能なワイルドカードは、
- マルチレベルのナンバーサイン(#)
- シングルレベルのプラスサイン(+)
の2があります。
ではパブリッシャーから利用可能なトピックパスと各レベルのデータが下記があるようにします。
- opto22/manufacturing/line1
- opto22/manufacturing/line2
- opto22/shipping/line1
- opto22/shipping/line2
購読者が必要なデータを取得する方法は次のとおりです。
- 購読者はその正確なトピックパスを使用し、トピック opto22/manufacturing/line2 のデータを購読するには、購読者はその正確なトピックパスを使用します。
- マルチレベルワイルドカード # を使用しトピック内の任意のレベルのデータを購読します。たとえば、パス opto22/manufacturing/# は opto22/manufacturing、opto22/manufacturing/line1、および opto22/manufacturing/line2を購読します。
- シングルレベルワイルドカード + を使用し、1つのトピックレベルのデータを購読できます。たとえば、パス opto22/+ は opto22/manufacturing および opto22/shipping に購読しますが、opto22/、opto22/manufacturing/line1、opto22/shipping/line1 などには購読しません。このワイルドカードはトピックパスの中間でも使用できます。たとえば、opto22/+/line1 は opto22/manufacturing/line1 および opto22/shipping/line1 に購読します。
Add MQTT Broker
次はOpto22に接続するMQTT Brokerを追加します。Brokers>Add MQTT Brokerをクリックします。
MQTT Brokerの接続設定画面が表示されます。
Broker Address
Broker AddressにMQTT BrokerのIPアドレス:Port番号を入力してください。
User name
User nameやPasswordなしで接続可能な場合もありますが、Opto22はDefaultUsernameが必ず設定しないといけないので、もし接続先のBrokerがUsername/Passwordなしの場合は適当な文字列を入力してください。
Done!Brokersが追加されました。
Save
右上にあるSaveボタンで設定を保存しましょう。
Scanned Devices
MQTT関連の設定が終わったら次はScanned Devicesを設定します。Scanned Devicesはgroov CPUにインストールされているモジュールやPAC ControllerのデバイスをMQTT/OPC UA経由で公開する設定になります。
TutorialではPAC Controller関連はまだやっていませんので、まずgroov CPUにインストールされているIO モジュールから設定したいと思います。
Scanned Devices>Add Local I/O Systemをクリックしましょう。
Device Configuration画面が表示されます。
DeviceID
DeviceIDを設定する必要があり、そのIDはMQTTとOPC UAのNode IDになります。
Save
最後はSave Buttonで設定を保存しましょう。
Scanned Devicesにmyidが追加されました。
Configure
I/O Channel
次はmyid のLocal I/O Systemの設定を行います。
groovMANAGE画面からいまgroovCPUにインストールしたモジュールを一覧できます。Slot0の隣りにある”DI”ボタンをクリックしましょう。(ちなみにDI=デジタル入力、DO=デジタル出力、AI=アナログ入力)
デジタル入力モジュールの各チャンネルの状態を確認できますし、該当するChannelの名前も個別で設定できます。例としてDI0、つまりChannel0を設定するためにクリックしましょう。
該当するチャンネルの現在詳しい状態を確認でき、Configureで進みます。
Channel0の設定画面が表示されます。
Name
Name Fieldはチャンネルの名前になります。
State
Public Access>State(Read)でChannel0の状態をMQTT/OPC UA経由で公開できるかを設定できます。
State(Read)のSlide ボタンをONにすると、CounterなどChannel0の詳しい情報も設定によって公開できます。今回のTutorialではStateのみです。
Save
右上にあるSaveボタンで設定を保存します。
Done!いまDI0の名前はswitch1に変わりました。
Info
実はModule画面ではInfoのTabからチャンネルの配線図も確認できます。
Enable
Data Servicesの設定画面に戻り、Data Service Runtime>EnableボタンをクリックしData Serviceを有効にしましょう。
少々お待ち下さい…
Done!いまData ServiceのStatusはRunningに変わりました。
View the Log
もしEnableできないもしくはBrokerの接続状態を確認したいなら、Data Servie Logをクリックしてください。
Done!Brokerと繋がりました。
Result
最後はMQTT ExploerでBrokerを接続すれば、Opto22からのMQTT Messageが受信できるとわかります。