HOME > ソフテックだより > 第443号(2024年2月7日発行) 技術レポート「OPC UA通信によるHA(Historical Access)」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第443号(2024年2月7日発行)
技術レポート

「OPC UA通信によるHA(Historical Access)」

1. はじめに

SCADAやPLCなどの間の通信仕様には様々なプロトコルが存在します。
先日、通信プロトコルとしてOPC UA通信を用いたヒストリカルデータの収集や解析を行うソフトウェアの開発案件に携わる機会がありました。
そこで今回のソフテックだよりではOPC UA通信によるHAについてご紹介させていただきます。

2. OPC

2-1. OPCとは

OPCとは、異なるメーカーのデバイス間での安全で信頼性のあるデータ交換を目的とした運用を行うための標準規格です。
現在OPC Classicとして知られ、製造、建設、エネルギーなど様々な業界で適応されています。

2-2.  OPC UAとは

OPC UAとは、OPC Unified Architectureの略称でありOPC Classicの機能を拡張可能なフレームワークに統合した、さらに優れた性能のサービス指向アーキテクチャです。
2011年10月には国際基準IEC62541に登録されています。

2-2-1. OPC UAの情報モデル

OPC UAでは以下のような情報モデルが定義されています。

  • DA(Data Access)(※1)
    離散データやアナログデータなど様々なデータにアクセスするためのモデルです。基本的なデータのやり取りが可能です。
  • AC(Alarm and Conditions)
    アラーム管理と状態のモニタのためのモデルです。工場での異常発生などの情報の通信に使用されます。
  • HA(Historical Access)
    ヒストリカルデータやヒストリカルイベントにアクセスするためのモデルです。計測結果の履歴やイベント発生履歴などを確認する際に使用します。
  • Prog(Program)
    プログラムの実行を操作、監視するためのモデルです。計測開始や停止などの操作の実行を指示します。

今回はこれらの中のHA(Historical Access)についてご紹介させていただきます。

(※1)OPC Classicを指してOPC DAと呼ぶこともあるため混同しないように注意が必要です。

3. OPC UAのHA機能

3-1. HA機能でできること

OPC UAクライアントがサーバーのヒストリカルデータにアクセスする際に使用する構造体を2つ紹介します。

  • ReadRawModifiedDetails
    変更の加えられていないヒストリカルデータ(Raw Values)や、ヒストリカルデータに格納後にデータの値の置き換えや削除・追加などの変更が行われたデータ(Modified Values)を収集する際に用いられます。サーバーごとに変更とみなす操作を設定できます。
  • ReadEventDetails
    サーバーのイベント履歴を収集する際に用いられます。

OPC UAでは他にもアクセスするデータの種類に合わせた構造体が用意されており、それらを活用して様々なヒストリカルデータを扱うことが可能です。

3-2. ReadRawModifiedDetails構造体

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というステータスとタイムスタンプがデータとして得られます。
また、サーバーの設定によって指定時刻付近のデータを境界値として取得する場合もあります。

4. OPC UA通信によるHAの実践

OPC UAクライアントソフトであるUaExpertを活用しました。
UaExpertとはUnified Automation社が無償で提供するOPC UAクライアントソフトウェアです。

4-1. 基本準備

まずUaExpertを起動して、OPC UAサーバーに接続します。
次にメニューバーのDocument欄からHistoryTrendViewを追加します。

メニューバーからDocumentを選択
図1. メニューバーからDocumentを選択

HistoryTrendViewを追加
図2. HistoryTrendViewを追加

最後にヒストリカルデータを持つノードをドラッグアンドドロップで追加することでHA機能を利用することができます。

ヒストリカルデータをドラッグアンドドロップ
図3. ヒストリカルデータをドラッグアンドドロップ

HistoryTrendView画面からStartTimeとEndTimeを指定します。
メニューバーのSettings>Configure UaExpertから、HistoryPlugin.NumValuesPerNodeとHistoryPlugin.ReadModified、HistoryPlugin.ReturnBoundsの値を変更することができます。

パラメータ設定ウィンドウ
図4. パラメータ設定ウィンドウ

4-2. ReturnBounds設定

今回はReturnBoundsを変更することで得られるヒストリカルデータがどのように変化するかを実践します。
ReturnBounds以外のパラメータは変えずにNumValuesPerNodeには0を指定し、範囲内のすべてのデータを取得します。
まず、ReturnBoundsをtrueに設定した際の実行結果を下記に示します 。

ReturnBounds = trueの実行結果
図5. ReturnBounds = trueの実行結果

開始時刻、終了時刻のデータも含めてそれぞれ12件のデータを収集することができました。
次にReturnBoundsをfalseに設定した際の実行結果を下記に示します。

ReturnBounds = falseの実行結果
図6. ReturnBounds = falseの実行結果

先程の結果と比べて、開始時刻と終了時刻のデータを除いたそれぞれ10件のデータを収集しています。
このようにReturnBoundsの設定によって境界値を収集するかどうかを変更することができました。
また境界値もNumValuesPerNodeで指定する収集データ数に含まれるため必要なデータを得るためにはどのようなパラメータを設定すればよいのかを考慮する必要があります。

5. おわりに

今回はOPC UA通信プロトコルによるHA機能についてご紹介させていただきました。
OPC UA通信について勉強し始めた際、パラメータ設定について特に迷う部分が多く検証などを重ねていました。
私自身まだまだ勉強中の身ですが、備忘録もかねて勉強した内容を記事にしています。今回の記事がOPC UAを活用する際に少しでも参考になれば幸いです。
最後までお読みいただきありがとうございました。

(M.N.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ