<< Click to Display Table of Contents >> マニュアル > 監視システム構築ガイド > サーバロジックの構築 > バックグラウンドで独自のロジックを実行する(SC2) > スクリプトVer2から履歴データを取得する |
概要
ヒストリカルデータコントロールを使用する事で、スクリプトVer2からサマリアクション、ロガーアクション、ヒストリカルデータサーバアクションなどのサーバ機能を持った各アクションに接続を行い、履歴データ(時系列データ)を取得することができます。
使用アクション:スクリプトVer2アクション
サンプルのダウンロード
このページで紹介されている作成例には、サンプルが用意されています。
サンプルは以下からダウンロードすることができます。
サーバ設定ファイル:script2_sample03.txt
スクリプトファイル:script.txt
サンプルで使用している各イベントやメソッドの詳細については、コントロールリファレンスを参照してください。 |
動作確認
Panel Serverからサンプルのサーバ設定ファイルを読み込み、アプリケーションをオンラインにしてください(黄色矢印)。
オンライン後、Output01にスクリプトの動作結果がログとして出力されます。
解説
本サンプルでは、スクリプトVer2アクションを「A01」、ロガー(CSV)アクションを「A02」として登録しています。ロガーアクションによって仮想デバイスのU01.F01.SD0000からSD0009までの10点のタグのロギングを行いつつ、ロガーが生成した時系列のログデータを、スクリプトによって5秒周期で取得してOutputログに表示を行います。
以下に、スクリプトからヒストリカルデータサーバ機能にアクセスして履歴データを取得する方法について説明します。
1)初期処理
初期処理はOnInitializeイベントで行います。ここで重要なポイントとしては、初期処理の中で「new」演算子を使用し、HistoricalDataコントロールオブジェクトの生成を行う点です。
スクリプト例
event OnInitialize() { ::SvsDump("OnInitialize:" + ::SvsGetActionName()); objHistData = new HistoricalData; objHistData.HDSRequestType = "RAWDATA"; objHistData.AddField(c("A02.U01_F01_SD0000","A02.U01_F01_SD0001", "A02.U01_F01_SD0002","A02.U01_F01_SD0003","A02.U01_F01_SD0004")); this.SetTimer(0, 5000, -1); }
処理内容
i.new演算子を使用し、HistoricalDataコントロールのオブジェクトを生成します。
ii.HDSRequestTypeプロパティに「RAWDATA」を指定します。「RAWDATA」とすることで、各行のデータの時刻がすべて同じ生データを取得することができるようになります。
iii.AddFieldメソッドで取得するデータソースを指定します。この例ではロガーアクション「A02」を介して時系列データを取得するため、「A02.U01_F01_SD0000」のようにロガーアクションに定義されているフィールドを指定します。
iv.SetTimerでタイマーのセットを行います。セットしたタイマーのタイムアップ時にOnTimerイベントが発生します。ここでは、無制限で5秒周期のタイマーをセットします。
2)ヒストリカルデータ取得処理
ヒストリカルデータの取得はOnTimerイベント内で行います。HistoricalDataコントロールを介して時系列データを取得し、Outputログへ出力します。
スクリプト例
event OnTimer(timerid,counter) { ::SvsDump("OnTimer Id:" + ::CStr(timerid) + " counter:" + ::CStr(counter)); var vCount, vDateTime, vData; if(!objHistData.ReadHistoricalData("future", T, "past", T, 10, vCount, vDateTime, vData)){ ::SvsDump("Fail to read historical data. Msg:" + objHistData.GetLastError()); return; } ::SvsDump("Count:" + ::CStr(vCount)); ::SvsDump("DateTime:" + ::CScript(vDateTime)); ::SvsDump("Data:" + ::CScript(vData)); }
処理内容
i.ログデータ(時系列データ)の取得は、HistoricalDataコントロールのReadHistoricalDataメソッドで行います。メソッドの引数で取得したいデータの範囲を指定します。ここでは例として「future」~「past」と指定して全データの検索を行いますが、最大レコード数を10としているため、取得できるデータは直近の10件となります。また、データ取得に失敗した場合は、GetLastErrorメソッドを使用して、エラー内容をログに出力します。
ii.取得したデータの件数、取得データの日時、取得データをログに出力します。
「future」、「past」は基準時刻の指定です。「future」は未来を表し、「past」は過去を表します。これらの引数に日時を指定することで、時間範囲の指定による履歴データの取得が可能となります。 |
設定手順
本サンプルではロガーアクションを使用しロギングを行います。ロガーアクションによってロギングされた履歴データを、ロガーアクションのヒストリカルデータサーバ機能を介して、スクリプトから取得します。
アクションの設定
1.スクリプトVer2アクション「A01」及びロガーアクション(CSV)「A02」を設定します。
2.スクリプトVer2アクション「A01」のプロパティを開き、スクリプトファイルを選択します。
3.ロガーアクション「A02」に対してロギングの設定を行います。尚、ここではロガーアクションの設定手順の説明は割愛します。
イベント設定
1.1秒周期の定周期イベントを追加し、実行アクションにA01とA02の順に登録します。
この設定により、1つの定周期イベントの発生タイミングで、A01、A02が順に処理されます。