AWS IoTでOPC UA(産業用のデータ)を使ってみました。
クラウド(AWS)でOPC UAの情報を収集できています。
実際に接続した事例をもとに、環境構築の手順を一から紹介します。
AWSでOPC UAの使い方!Greengrassで接続してみた
AWSにOPC UAで接続することが出来ました。
クラウドで産業用データを収集できています。
テストとして、ラズベリーパイ上のデータをOPC UA経由でAWSに送信しています。
OPC UAサーバーはPythonで作成して、ゲートウェイはAWS greengrassを使っています。
どちらもラズパイ上で環境構築出来て、誰でも同様にテストすることが可能です。
AWSでOPC UAの使い方に関して、一から説明していきます。
下記動画でも実際のテストの様子を紹介していますので、是非一緒にご覧ください。
クラウドで産業用データを解析できます
AWSにOPC UAで接続することにより、クラウド上で産業用データを扱えるようになります。
莫大な産業用のセンサやモジュールのデータを整理・解析可能です。
※今回はテスト的に1つのデバイスのデータを取得しています。
今回のテスト構成としては下記形です。
- OPC UAサーバー…ラズベリーパイ+Python
- OPC UAゲートウェイ…ラズベリーパイ+AWS IoT Greengrass
- クラウド…AWS(IoT Sitewise)
片方のラズパイをOPC UAサーバーとして、もう一つの方でAWSへのゲートウェイにします。
AWS IoT SiteWiseというサービスでOPC UA(産業用データ)を確認します。
SiteWiseの使い方に関しては下記記事でも紹介しています。
OPC UAはクラウド無しでも使えます
今回のテストではOPC UAでクラウド(AWS)と接続することが目的です。
ただし、クラウド無しの機器・デバイス間の通信にもOPC UAは使用できます。
特定の通信プロトコル(フィールドバス)を超えてデータ収集することが可能です。
下記記事でEtherCATやPROFINETのデータをOPC UAで管理している例を紹介しています。
PythonでIoT!Raspberry Piで産業用のデータ収集してみた
AWSが初めての方は
今回紹介するAWSとOPC UAを接続する方法は、各設定・環境構築が(かなり)手間です。
AWS初めての方には少し難易度が高いかと思われます。
最初は下記記事のようにラズパイでAWS接続のテストすることをおすすめします。
AWSにラズパイを接続!GPIOの信号をクラウドに送信してみた
MQTTでAWSと通信する方法もあります
今回OPC UAを使用していますが、他にもAWSと産業用データを受け渡す方法は数多くあります。
紹介している手法はあくまで一例ということをご了承下さい。
下記記事ではMQTTというPub/Subのメッセージ型プロトコルで通信しています。
OPC UAより軽量にAWSと通信することが可能です。
AWS IoTとPLCの事例!ゲートウェイ無しで接続してみた
AWS IoT Greengrassをセットアップする
最初にAWSとOPC UAを繋げるゲートウェイを作成していきます。
ゲートウェイ用のAWS IoT Greengrassをラズパイにダウンロード・インストールします。
OPC UAに接続するだけならば、特にLamda関数の設定までは必要ありません。
ラズパイ上にてGreengrassを起動できるまで、各自でセットアップをお願いします。
Greengrass V2ではなくV1で実施しています
最新のGreengrassはバージョン2(V2)となっています。
ただし2021/3時点ではOPC UAに接続する方法がバージョン1(V1)しか見つけれませんでした。
そのため今回はGreengrass V1(クラシック)で実施しています。
ラズパイでGreengrass V1で動かす方法に関しては、既にネット上に多くの記事があります。
下記Qiita記事・AWS公式のドキュメントが非常に参考になりました。
https://qiita.com/ikeponsu/items/62a3bc788b5ab2669629
https://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/gg-device-start.html
東京リージョンは対応していません(2021/3時点)
2021/3時点では、東京のリージョンはOPC UA(AWS IoT SiteWise)に対応していません。
※リージョン…データセンターの場所
Greengrassも対応しているリージョンでセットアップする必要があります。
2021/3時点では下記のどれかで対応する必要がありました。
筆者は米国東部(バージニア北部)us-east-1で実施しています。
- 米国東部(バージニア北部)
- 米国西部(オレゴン)
- アジアパシフィック(シンガポール)
- アジアパシフィック(シドニー)
- 欧州(フランクフルト)
- 欧州(アイルランド)
(追記)2021/10から東京リージョンでもサービスが開始されたようです。
AWS IoT SiteWiseのconnectorを追加する
ゲートウェイ用のGreenglassにOPC UAに対応したコネクタを追加します。
下記のAWS公式の記事に従って、進めていくことを強く推奨します。
https://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/configure-gateway.html
また下記AWS公式のYoutubeも参考になりました。
How to Get Started with AWS IoT SiteWise - OPC UA and Gateway Configuration (2/4)
下記の多くの手順が合って、適当にやっていたら何回も失敗しました。
- JAVAのリンク
- Sitewise用のディレクトリの作成・権限追加
- IAMポリシーやロールの作成・紐づけ
- コネクタの追加
手順を守らないでデプロイすると下記のようにエラーが発生します。
実際のエラーのログの一例を残しておきます。
SiteWiseのコネクタを追加してデプロイする
公式の手順に従って進めていくと、終盤でAWS IoT SiteWiseのコネクタを追加します。
最後にデプロイが成功すればOPC UAとAWSを繋げるゲートウェイが完成します。
OPC UAサーバーはPythonで作成
OPC UAサーバーに関してもラズパイ+Pythonで作成しています。
今回クラウドにはラズパイのCPUクロック・CPU温度・カウントアップ値を送ります。
テストのレベルでのOPC UAサーバーはラズパイで作成するのが一番簡単と思われます。
Linuxの環境で無線も搭載しているので、簡単にサーバーの環境を作れます。
またPythonも最初からインストールされていますので、プログラムするのも楽です。
下記記事でPythonのライブラリ含めて詳細を紹介しています。
Pythonのプログラム
実際に使用したプログラムは下記となります。
カウントアップ値がdoubleですが、CPUクロック・温度はString(文字列)となっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import sys sys.path.insert(0, "..") import time from opcua import ua, Server from subprocess import getoutput if __name__ == "__main__": # setup our server server = Server() server.set_endpoint("opc.tcp://192.168.100.125:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our nodes objects = server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 6.7) myvar.set_writable() # Set MyVariable to be writable by clients myclock = myobj.add_variable(idx, "MyClock", "") mythermal = myobj.add_variable(idx, "MyThermal", "") # starting! server.start() try: count = 0 while True: time.sleep(1) count += 0.1 myvar.set_value(count) # CPUクロックを取得する clock = getoutput('vcgencmd measure_clock arm') myclock.set_value(clock) # CPU温度を取得する thermal = getoutput('vcgencmd measure_temp') mythermal.set_value(thermal) finally: #close connection, remove subcsriptions, etc server.stop() |
AWS IoT SiteWiseの設定
OPC UAサーバーとゲートウェイは完成しましたので、残りのAWS側を設定します。
ゲートウェイとモデル・アセットの設定を行います。
今回はOPC UAで設定しますが、Modbus TCP・EtherNet/IPでも可能ということです。
AWS IoT SiteWiseのゲートウェイの設定
ゲートウェイの設定に関しては下記のAWS公式の手順通り進めていけばOKです。
https://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/config-opcua-source-console.html
また下記AWS公式のYoutubeも参考になりました。
How to Get Started with AWS IoT SiteWise - Asset Modeling and Metrics (3/4)
今回のテストで実施したゲートウェイの設定例を紹介しておきます。
OPC UAのデータの収集方法によって変わりますので、あくまで一例の旨をご了承ください。
今回のテストではSourcesの設定を追加したのみです。
設定としては下記です。特に言及していない箇所はデフォルト設定です。
セキュリティモードなどは無しでテスト用となっています。
- (デバイスの)名前…raspberrypi_test_opcua_server(適当です)
- ローカルエンドポイント…opc.tcp://192.168.100.125:4840/freeopcua/server/
- メッセージのセキュリティモード…なし
- 認証の設定…なし-認証なし
- (プロパティの)名前…test(適当です)
- Scan mode…Subscribe(Pollでも動作確認しました)
- Scan rate…500
ローカルエンドポイントに関してはIPアドレス・OPC UAサーバーで異なります。
各自で設定した値を入力してください。
今回はOPC UAサーバーのPythonで設定した値となっています。
AWS IoT SiteWise モデルの設定
モデルの設定では、AWS IoT SiteWise側での変数を定義します。
モデル名は適当にraspberrypi_test_modelとしました。基本的にはデフォルトです。
「測定の定義」の箇所だけ、名前とデータ型を入力しました。
名前は適当で、データ型はOPC UAサーバーからの変数に合わせています。
浮動小数点は「ダブル」にして、文字列は「文字列」としています。
AWS IoT SiteWise アセットの設定
AWSのアセットの設定では、OPC UAの変数までのマッピングをします。
下記のAWS公式の手順が参考になりました。
https://docs.aws.amazon.com/ja_jp/iot-sitewise/latest/userguide/connect-data-streams.html
アセット名も適当でraspberrypi_test_assetとしています。
「測定」の項目でOPC UAサーバーのObject直下のアドレスを入力します。
今回の例では下記の設定にしています。
- count(カウントアップ値)…/MyObject/MyVariable
- Temp(CPU温度)…/MyObject/MyThermal
- Frequency(CPU周波数)…/MyObject/MyClock
OPC UAサーバーのアドレスを把握したい場合
OPC UAサーバーのアドレスを確認したい場合はクライアントソフトが便利です。
UaExpertなどのソフトを使って確認しておくことをおすすめします。
クライアントソフトのUaExpertの使い方に関しては下記記事で紹介しています。
OPC UAクライアントのフリーソフトUaExpertを使ってみた
AWS IoT SiteWise のアセットで測定する
これまでの設定が正常に出来ていれば、AWS側でOPC UAの値が測定可能となります。
AWS IoT SiteWiseのアセットの項目で「測定」のタブがあります。
「最新の値」の箇所にOPC UAのデータが更新されます。
AWSでラズベリーパイのOPC UAサーバーの変数を確認できています。
AWSとOPC UAの接続テスト
これまでに設定した方法で、接続テストした一連の流れを紹介します。
冒頭でも紹介しましたが、下記動画で実際のテストの様子を紹介しています。
是非一緒にご覧ください。
AWS IoT SiteWiseを開いておく
AWS IoT SiteWiseのアセットの「測定」でOPC UAの変数を確認しておきます。
OPC UAサーバーを起動する
片方のラズパイでPythonのプログラムを実行してOPC UAサーバーを起動します。
AWS IoT Greengrassを起動する
残り片方のラズパイでゲートウェイを起動します。
下記コマンドのようにラズパイ上でGreengrassを起動します。
OPC UAの変数を確認する
最初に開いておいたAWSの画面でOPC UAサーバーからの変数を確認します。
これでAWSとOPC UAが無事接続できていることを確認出来ました。
AWS IoT SiteWiseのモニター機能
AWS IoT SiteWiseにはモニター機能があり、OPC UAのデータ整理・解析できます。
SiteWiseのモニターに関しては下記記事で紹介しています。是非一緒にご覧ください。
まとめ
今回はAWSとOPC UAの接続に関して紹介させていただきました。
記事をまとめますと下記になります。
ラズベリーパイ(raspberry pi)でAWSとOPC UAのテスト環境は構築可能です。
皆様もぜひ試してみてください。
コメント