「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
SCADAやPLCなどの間の通信仕様には様々なプロトコルが存在します。
先日、通信プロトコルとしてOPC UA通信を用いたヒストリカルデータの収集や解析を行うソフトウェアの開発案件に携わる機会がありました。
そこで今回のソフテックだよりではOPC UA通信によるHAについてご紹介させていただきます。
OPCとは、異なるメーカーのデバイス間での安全で信頼性のあるデータ交換を目的とした運用を行うための標準規格です。
現在OPC Classicとして知られ、製造、建設、エネルギーなど様々な業界で適応されています。
OPC UAとは、OPC Unified Architectureの略称でありOPC Classicの機能を拡張可能なフレームワークに統合した、さらに優れた性能のサービス指向アーキテクチャです。
2011年10月には国際基準IEC62541に登録されています。
OPC UAでは以下のような情報モデルが定義されています。
今回はこれらの中のHA(Historical Access)についてご紹介させていただきます。
(※1)OPC Classicを指してOPC DAと呼ぶこともあるため混同しないように注意が必要です。
OPC UAクライアントがサーバーのヒストリカルデータにアクセスする際に使用する構造体を2つ紹介します。
OPC UAでは他にもアクセスするデータの種類に合わせた構造体が用意されており、それらを活用して様々なヒストリカルデータを扱うことが可能です。
ReadRawModifiedDetailsでは次の項目を設定することができます。
表1. ReadRawModifiedDetails構造体
パラメータ | データ型 | 概要 |
---|---|---|
IsReadModified | Boolean | true:Modified Valuesを収集 false:Raw Valuesを収集 |
StartTime | UtcTime | 要求するデータの開始時刻 |
EndTime | UtcTime | 要求するデータの終了時刻 |
NumValuesPerNode | Counter | 各ノードから1度に読み取る最大データ数 |
ReturnBounds | Boolean | 境界のデータを要求するかどうか |
IsReadModifiedを設定することで、変更前の生データを収集するか変更後のデータを収集するかを変更できます。
例えば、Unified Automation社の提供する.NET SDKでは、IsReadModifiedをそれぞれtrueとfalseに設定したHistoryReadModifiedメソッドとHistoryReadRawメソッドが実装されています。
StartTime、EndTimeはどちらか一方のみの指定でもデータ収集可能です。
終了時刻のみを指定した場合は、終了時刻から逆順にヒストリカルデータが収集されます。
このとき、収集するデータ数はNumValuesPerNodeで指定した数だけ収集します。
StartTime、EndTimeの両方を指定し、指定範囲内にあるデータをすべて収集したい場合はNumValuesPerNodeに0を指定することで収集可能となります。
また、StartTime、EndTimeの境界のデータを収集するかどうかをReturnBoundsというBooleanで変更することができます。
ReturnBoundsにtrueと設定した際に、境界点にデータが存在しなければBadBoundNotFoundというステータスとタイムスタンプがデータとして得られます。
また、サーバーの設定によって指定時刻付近のデータを境界値として取得する場合もあります。
OPC UAクライアントソフトであるUaExpertを活用しました。
UaExpertとはUnified Automation社が無償で提供するOPC UAクライアントソフトウェアです。
まずUaExpertを起動して、OPC UAサーバーに接続します。
次にメニューバーのDocument欄からHistoryTrendViewを追加します。
図1. メニューバーからDocumentを選択
図2. HistoryTrendViewを追加
最後にヒストリカルデータを持つノードをドラッグアンドドロップで追加することでHA機能を利用することができます。
図3. ヒストリカルデータをドラッグアンドドロップ
HistoryTrendView画面からStartTimeとEndTimeを指定します。
メニューバーのSettings>Configure UaExpertから、HistoryPlugin.NumValuesPerNodeとHistoryPlugin.ReadModified、HistoryPlugin.ReturnBoundsの値を変更することができます。
図4. パラメータ設定ウィンドウ
今回はReturnBoundsを変更することで得られるヒストリカルデータがどのように変化するかを実践します。
ReturnBounds以外のパラメータは変えずにNumValuesPerNodeには0を指定し、範囲内のすべてのデータを取得します。
まず、ReturnBoundsをtrueに設定した際の実行結果を下記に示します 。
図5. ReturnBounds = trueの実行結果
開始時刻、終了時刻のデータも含めてそれぞれ12件のデータを収集することができました。
次にReturnBoundsをfalseに設定した際の実行結果を下記に示します。
図6. ReturnBounds = falseの実行結果
先程の結果と比べて、開始時刻と終了時刻のデータを除いたそれぞれ10件のデータを収集しています。
このようにReturnBoundsの設定によって境界値を収集するかどうかを変更することができました。
また境界値もNumValuesPerNodeで指定する収集データ数に含まれるため必要なデータを得るためにはどのようなパラメータを設定すればよいのかを考慮する必要があります。
今回はOPC UA通信プロトコルによるHA機能についてご紹介させていただきました。
OPC UA通信について勉強し始めた際、パラメータ設定について特に迷う部分が多く検証などを重ねていました。
私自身まだまだ勉強中の身ですが、備忘録もかねて勉強した内容を記事にしています。今回の記事がOPC UAを活用する際に少しでも参考になれば幸いです。
最後までお読みいただきありがとうございました。
(M.N.)
関連ページへのリンク
関連するソフテックだより