OPC UAを使用したIoTデータ取得

# はじめに
Siemens社のPaaS（Platform as a Service）であるMindSphereへセキュリティが確保された信頼性の高いインダストリ4.0の標準通信プロトコルであるOPC UAを用いてデータのアップロードモデルについて検討しました。

# 機器構成
当社二酸化炭素濃度モニタリングシステムにおいてPaaSのゲートウェイ（MindConnectNano）へOPC UAを用いてセンサーデータをアップロードします。今回は弊社取り扱いのSiemensのPLCを用いておりますが、OPC UA対応の他社PLCでも同様にデータのアップロードが可能です。複数ベンダーのデータを1つのPaaSに集約することで今まで可視化、分析のできなかったIoTデータを1つのプラットフォームで扱うことができるようになります。図１に機器構成を示します。
![図1構成(OPCUA).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/39a0d480-98a9-d21c-daac-5fe7fdf8c3e1.png)

# OPC UA概要
OPC UAの概要は以下の通りです。
・概要
　OPC UA（OPC Unified Architecture）は2007年に発表されたイーサネットベースの通信規格
　OPC協議会が標準規格としての開発と維持を管理
　制御機器から大規模な上位情報系ネットワークへの情報転送を目的として開発
・特徴
　OSに依存しないイーサネットベース（TCP/IP）の通信規格
　暗号化や電子証明書といったセキュリティレベルの高い通信
　マルチベンダー対応
　汎用性の高い情報モデル構造
・普及
　多くの標準化団体と提携が進んでいる
　多くの産業界が標準採用化に向けて推進中
　Industry 4.0の標準通信規格として指定されている
　中国、韓国でも産業用通信の国家標準として登録されている

# OPC UA機能
　変数アクセス/情報モデル構造
![OPCUA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/6d2f2f92-3e31-f953-658e-2645387b1294.png)

# デモ機設定
①OPC UAサーバー
Siemens ET200SP PLCがOPC UAサーバーとなります。
OPC UAサーバーの有効化は簡単です。プログラミングソフトであるTIAポータルから当該プロジェクトを開きCPUのプロパティを開きます。左側のメニューバーからOPC UA-> サーバーをクリックしOPC UAサーバーの有効化にチェックを入れます。図2に設定画面を示します。
![MS-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/5ee6c35f-b097-5ad5-3e6d-ea1d28a5f61b.png)

②OPC UAクライアント
MindConnectNanoがOPC UAクライアントとなります。
OPC UAクライアントの設定はMiindSphere上で行います。
MindSphereにアクセスし該当するMindConnectNanoアセットを開き（図3)、Connectivity-> MindConnectNanoの↗をクリックします。
![MS-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/a56e6719-f93d-60a8-4b82-e0e85d914889.png)
図4の設定画面が開きますので、Enter Edit Modeをクリックします。
![MS-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/510aa186-e7e1-3cc7-a18c-325f5ec4d10f.png)
Add new Datasourceをクリックします。データソースとはデータの格納されているデバイスのことで、今回の例ではOPC UAサーバーであるPLCを指します。
![MS-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/fed3b868-8222-0680-8ee8-606c5256abbf.png)
図5は新規データソースの設定画面です。各々のパラメーターの内容を表1に示します。
![MS-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/5869a383-371e-5484-f0e2-abeaf09814a5.png)
図5においてデータソースの設定を入力後、Acceptをクリックするとデータソースが追加され図6の画面に遷移します。
次にデータポイントを追加します。データポイントとは各センサーのデータがデータソース(PLC)のどこに格納されているかを示すものです。
Add Datapointをクリックすると設定画面が開きます。
![MS-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/5f92d45b-2fef-5877-0458-3d9e8c289840.png)
図7がデータポイントの設定画面です。各々のパラメータの内容を表2に示します。
![MS-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/213a4578-a267-0368-55de-bdc28dc122e1.png)
![MS-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/06712888-357c-3e6b-c278-5429d1686dfd.png)
![MS-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/2025a056-652b-1743-b4fd-3920f7b24cac.png)
データソースの入力が終わったら、Acceptをクリックと図8の画面が開きます。データポイントが追加されていることを確認してSaveをクリックし、Apply Shangesをクリックします。
![MS-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/faea5e48-aa7b-6968-3fa8-5761486d7a5f.png)
次にアセットを作成します。アセットとはMindSphereでデータを保存する場所を指します。さらにアセットはアスペクトの集合体で形成されており、アスペクトは各データ(バリアブル)の集合体で形成されます。
例えば、温湿度センサー、二酸化炭素濃度センサー、酸素濃度センサーがあったとした場合、温度、湿度、二酸化炭素濃度、酸素濃度をバリアブルとし、温湿度センサー、二酸化炭素濃度センサー、酸素濃度センサーをアスペクト、これらのアスペクトの集合体をEnivironmentアセットに構成するようなことができます。
図9にアセット、アスペクト、バリアブルの概念図を示します。
![MS-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/0d9349a5-70dc-7140-59e7-7f672621b468.png)
今回の例ではEnvironmentアセットの配下にCO2_Concentrationバリアブルから成るCO2アスペクトを作成します。
MindSphereのホーム画面に戻り、AssetManager -> Library -> Aspect Typesをクリックします。
![MS-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/20d67202-307e-0b41-561d-b7ef855cdc24.png)
Create Aspectをクリックし、以下の画面でAspect NameにCO2と入力し、Add variableをクリックします。
![MS-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/10119f88-0870-df91-b261-8d5a9b617072.png)
VariavlesのNameにCO"_COncentration、Unitにppm、Data typeにDoubleを入力しSaveをクリックします。
![MS-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/bb5a35c6-0121-733f-8736-35753e7b81c1.png)
CO2アスペクトが作成されます。次にLibrary -> Asset Typesをクリックします。
![MS-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/abd8fff7-8021-8452-f1d7-f83219aa512d.png)
Create typeをクリックします。
![MS-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/ea7a5d7f-e451-3a11-452d-db50b90dcd95.png)
Typeはアセットのフォーマットの定義です。ここでは、Environment Typeという名前でTypeを作成します。
NameにEnvironment Typeと入力しAspectの+をクリックします。
![MS-28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/b08030e3-9244-5e7f-3f51-8af4b9eec623.png)
Browse Aspectsをクリックします。
![MS-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/42ad3da4-9fe8-02dc-25e9-4180fc7cba3a.png)
CO2アスペクトのチェックボックスにチェックを入れ、Addをクリックします。
![MS-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/bfa6e2ae-6f58-9264-6727-88ccc5d2432f.png)
CO2アスペクトが追加されていることを確認しSaveをクリックします。
![MS-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/9876142f-5987-02ea-bca8-3706cfc57ec2.png)
Environment Typeが作成されます。Assetをクリックします。
![MS-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/16c9478d-56b6-187d-c8db-aea40186e5f2.png)
Create assetをクリックします。
![MS-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/ca19674a-0426-5511-bd97-e3dd7f598e8a.png)
Environment Typeを選択しCreateをクリックします。
Environmentアセットを作成します。NameにEnvironmentと入力しSaveをクリックします。
![MS-39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/67e6fc60-fc6c-04c2-df1f-132a578bf05e.png)
Environmentアセットが作成されました。
![MS-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/7f805671-c963-bbc7-472e-19c9a69d4661.png)
最後にデータソース、データポイントとアセットの紐づけ（マッピング）を行います。これを行うことでMindSphere上のデータの保存先が確定されます。
MindConnectNanoのアセット画面にアクセスしView Datamappingsをクリックします。
![MS-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/a26e66df-9b0b-6056-ae8c-9937c1c2d1bf.png)
該当データソースのLink Variableをクリックします。
![MS-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/1608f004-8bc0-8fac-680a-234fe0cf8e28.png)
作成したCO2_ConcentrationバリアブルのLink Variableをチェックし、Acceptをクリックします。
![MS-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/1b608c62-656c-0e44-f7b2-571be69af545.png)
マッピングされていることを確認します。
![MS-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/02a50893-d3e4-3b85-5e80-c48c4dcc844e.png)
データが取得できるとデータポイントのインディケーターが灰色→緑色に変化します。
![MS-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/1d51fc17-b005-723d-98bb-db48ad89ca64.png)
MindSphereの可視化アプリケーションOperations Insightで可視化したグラフを図30に示します。
![MS-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2745875/a5a41c02-4bcc-6ef9-dcc2-ad6d0d357d7a.png)
# おわりに
インダストリ4.0で標準通信プロトコルとして使用されているOPC UAでPaaSへセンサーデータをアップロードしました。
ベンダーに縛られないプロトコルとなりますので、Siemens社以外のPLCにも拡張可能となります。

※SiemensおよびMindSphereは、Siemensの登録商標または商標です