スクリプトVer2から履歴データを取得する

<< Click to Display Table of Contents >>

マニュアル > 監視システム構築ガイド > サーバロジックの構築 > バックグラウンドで独自のロジックを実行する(SC2) >

スクリプトVer2から履歴データを取得する

概要

ヒストリカルデータコントロールを使用する事で、スクリプトVer2からサマリアクション、ロガーアクション、ヒストリカルデータサーバアクションなどのサーバ機能を持った各アクションに接続を行い、履歴データ(時系列データ)を取得することができます。

 

使用アクション:スクリプトVer2アクション

 

 

 

サンプルのダウンロード

このページで紹介されている作成例には、サンプルが用意されています。

 

サンプルは以下からダウンロードすることができます。

 

サーバ設定ファイル:script2_sample03.txt

スクリプトファイル:script.txt

 

 

hint

サンプルで使用している各イベントやメソッドの詳細については、コントロールリファレンスを参照してください。

 

 

動作確認

Panel Serverからサンプルのサーバ設定ファイルを読み込み、アプリケーションをオンラインにしてください(黄色矢印)。

 

オンライン後、Output01にスクリプトの動作結果がログとして出力されます。

 

c_action_0090

 

 

解説

本サンプルでは、スクリプト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.取得したデータの件数、取得データの日時、取得データをログに出力します。

 

 

hint

「future」、「past」は基準時刻の指定です。「future」は未来を表し、「past」は過去を表します。これらの引数に日時を指定することで、時間範囲の指定による履歴データの取得が可能となります。

 

 

設定手順

本サンプルではロガーアクションを使用しロギングを行います。ロガーアクションによってロギングされた履歴データを、ロガーアクションのヒストリカルデータサーバ機能を介して、スクリプトから取得します。

 

アクションの設定

 

1.スクリプトVer2アクション「A01」及びロガーアクション(CSV)「A02」を設定します。
 
c_action_0088
 

2.スクリプトVer2アクション「A01」のプロパティを開き、スクリプトファイルを選択します。
 
c_action_0083

 

 

3.ロガーアクション「A02」に対してロギングの設定を行います。尚、ここではロガーアクションの設定手順の説明は割愛します。

 

 


イベント設定
 

1.1秒周期の定周期イベントを追加し、実行アクションにA01とA02の順に登録します。
 
c_action_0089
 

この設定により、1つの定周期イベントの発生タイミングで、A01、A02が順に処理されます。