Dr.Sum Data Funnel OPC UA Agent でデータを投入してみた

#1. はじめに

Dr.Sum Data Funnelは「データ収集」する場合、以下の３つの方法（プロトコル）に対応しています。
　・MQTT
　・HTTP
　・OPC UA

また、クライアントからコマンドを実行することで、定期的に生成されるデータファイル（CSVファイルまたはJSONファイル）を入力データとすることもできます。

今回の記事ではOPC UAプロトコルを利用するDr.Sum Data Funnel OPC UA Agentを使用してデータ投入をしてみたいと思います。

Dr.Sum Data Funnelの概要、またはデータファイルでの連携については「[Dr.Sum Data FunnelでCSVファイルを連携してみた](https://qiita.com/LuiLui/items/ae0ce6b36a68ee134fed)」の記事を参考にして下さい。

#2. Dr.Sum Data Funnel OPC UA Agentとは

Dr.Sum Data Funnel OPC UA Agentを利用するには、どのOPC UAサーバーからどのようなデータを取得するのか、などを設定します。この設定を「OPC UAタスク」と言います。このOPC UAタスクを画面またはコマンドから実行することで、データがDr.Sum Data Funnel Message Brokerにパブリッシュされます。
※Dr.Sum Data Funnel OPC UA Agentでのデータの投入についての詳細は以下のマニュアルを参照下さい。

https://cs.wingarc.com/manual/drsum/5.6/ja/UUID-0db5a37f-810c-7f33-f0fc-a1d0f14ca74e.html

#3. OPC UAタスクの作成
Dr.Sum Data Funnel OPC UA Agentをインストールしたホストで、Windowsのスタートメニューから［Dr.Sum Data Funnel 5.6］に含まれる［OPC UA Agent Client］を選択します。
［Dr.Sum Data Funnel OPC UA Agent］画面の左上のメニューから［ファイル］－［新規作成］を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/c9ad35a3-0ce4-e422-3a3b-ad01192724bd.png)

OPC UAタスクの詳細画面で、タスク名称、接続先、ユーザー名、パスワードを設定して「値を取得する」にチェックを入れて「取得ノードの選択」をクリックします。
※OPC UAサーバーに関しては別途準備する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/a6fed5c6-bf81-b631-a685-8f73644a5a5a.png)


取得ノードの選択画面で取得したい情報ににチェックを入れます。
ここでは「UsedMemory」にチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/8dff9b4b-70bd-46d9-449c-3201c54b2673.png)

MQTTトピックは任意で設定します。
ここでは「opc_topic」と指定します。MQTTトピックは後続のパイプライン定義で使用します。
「テストデータの取得」をクリックしてテストデータを取得します。
出力されたテキストデータをコピーします。後続のテーブル化の設定で使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/6ce07b9e-28a1-e494-f8ca-3d4caf8f7a3d.png)

※テストデータの例
####[{"nodeId":"ns=1;s=VendorServerInfo/UsedMemory","value":"198767","sourcetime":"2021/10/19 15:23:19.839","servertime":"2021/10/19 15:23:19.839","taskName":"opc_topic"}]


#4. パイプライン定義の作成
任意の名前でパイプライン定義を作成し、以下を設定して「テーブル化の設定」をクリックします。
実行種別：ストリーム
データタイプ：JSON
MQTTトピック：opc_topic
トリガー間隔：1秒
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/30e00d87-b998-684f-6637-73da16de6423.png)

「データを入力して推定」を選択して、赤枠部分に例で表示したJSON形式のテキスト
[{"nodeId":"ns=1;s=VendorServerInfo/UsedMemory","value":"198767","sourcetime":"2021/10/19 15:23:19.839","servertime":"2021/10/19 15:23:19.839","taskName":"opc_topic"}]
を張り付けて「推定」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/6d97ff09-5d07-a3d0-7e7f-324574fa86d6.png)

OPC UA Agent経由でデータを取得した場合、データ部分が「PAYLOAD」という項目で一括りにされてしまうため、複数レコードに展開する必要があります。
「データを入力して推定画面」で以下の設定をすることで「PAYLOAD」という項目で一括りにされていた項目が展開されますので、そのまま「ＯＫ」ボタンを押します。
①複数レコードに展開を選択します。
②複数行に展開するパスの候補を抽出を選択します
③展開の対象項目（PAYLOAD）を選択します。
④「推定」ボタンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/f621091d-41db-0988-a6b9-8bc11688e1d7.png)

「時刻関連項目設定」画面で分析用日時項目を「ARRIVEDTIME」に指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/34d57a73-f2e9-55f9-a1a6-e4493da430f3.png)

「Dr.Sumに出力」画面で出力先を設定してパイプライン定義を保存します。
※「テーブルの作成SQLをクリップボードにコピー」ボタンを押すとCREATE文がコピーされるので、必要に応じてDr.Sum 側にテーブルを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/6783cca7-76eb-5d17-8577-023c18e5e32d.png)

作成したパイプライン定義を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/1e0b75eb-2c52-5812-2dae-af3b96553b82.png)

#5. OPC UAタスクを実行してデータを投入する
作成したOPC UAタスクを［Dr.Sum Data Funnel OPC UA Agent］画面またはコマンドラインから実行します。
OPC UAタスクを実行すると、OPC UAサーバーからデータを取得し、Dr.Sum Data Funnel Message Brokerにデータをパブリッシュします。

###画面から実行する
［Dr.Sum Data Funnel OPC UA Agent］画面の一覧で、実行したいOPC UAタスクを選択し、ツールバーにあるタスクの実行ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/84a2dd57-0ae0-b529-d3e7-603af56b05ac.png)


Dr.Sum Data Funnel OPC UA Agent経由でDr.Sumにデータが格納されたことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/434840f6-dbb9-4346-be23-280d61cf5fd2.png)

###コマンドラインから実行する
OPC UAエージェント起動コマンド（opcua_task_run）を実行します。
以下の例では5秒毎にOPC UAタスクを定期実行するスクリプトをPowerShellで作成しています。

```task_loop.ps1
cd C:\DrSumDataFunnel56\OpcuaAgent\cmd\JPN
while ($true) {
  .\opcua_task_run.bat 1
  Start-Sleep -s 5
}
```
Dr.Sum Data Funnel OPC UA Agent経由で5秒毎にDr.Sumにデータが格納されたことを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1569715/1054fe96-df86-2830-356e-cf533c0d5ec2.png)

※OPC UAタスクを実行するコマンドの詳細は以下のマニュアルを参照下さい。

https://cs.wingarc.com/manual/drsum/5.6/ja/UUID-232aa1df-ee73-898d-e024-5000337dc1d3.html

#まとめ
Dr.Sum Data Funnel OPC UA Agentを利用してOPCサーバーからJSON形式で取得したデータをMQTTでDr.Sum Data Funnel Message Brokerにパブリッシュします。Dr.Sum Data Funnel ServerでJSON形式のデータをテーブル化してDr.Sumにデータ投入する一連の流れをご理解いただけたと思います。

ウイングアーク1st社のホームページからDr.Sum Data Funnelハンズオンの申込ができるようです。興味がある方はぜひ申込してみてください！