# スクリプトVer2で履歴データ取得

マニュアル > サーバ作成ガイド > アクション編 > アクションの応用 > スクリプトVer2 > # スクリプトVer2で履歴データ取得 |

概要

SC2構文はHistoricalDataコントロールを使用することで、ヒストリカルデータサーバから時系列データを取得することができます。

この機能のサンプルは、以下からご利用頂けます。

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

設定手順

本サンプルではロガーアクションを使用しロギングを行います。そのロギングされたデータを、ロガーアクションが持っているヒストリカルデータサーバ機能を利用して、SC2構文から取得を行います。

アクション設定

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

2.追加したアクション「A01」のプロパティを開き、スクリプトファイルを選択します。スクリプトファイルの記述方法は、後述の解説を参考にして下さい。

イベント設定

1.定周期イベントを追加し、A01とA02を順に処理するように登録を行います。

解説

ここでは、ヒストリカルデータからのデータ取得方法を説明します。

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メソッドで取得したいフィールドを指定します。ここではロガーアクションが持つヒストリカルデータサーバから時系列データを取得するため、ロガーアクションに定義されているフィールドを指定します。

iv.SetTimerでタイマーのセットを行います。セットしたタイマーのタイムアップ時にOnTimerイベントが発生します。ここでは、無制限で5秒周期のタイマーをセットします。

2)ヒストリカルデータ取得処理
ヒストリカルデータの取得はOnTimerイベント内で行います。まず、HistoricalDataコントロールを使用し、時系列データを取得し、OutPutLogへ出力します。

スクリプト例

    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.ReadHistoricalDataメソッドで時系列データの取得を行います。メソッドの引数で取得したいデータの範囲を指定します。ここでは「future」～「past」と指定し、全データの検索を行います。ただし、最大レコード数を10としているため、取得できるデータは10件となります。また、データ取得に失敗した場合は、GetLastErrorメソッドを使用して、エラー内容をログ出力します。

ii.取得したデータを、取得データ数、取得データの日付、取得データの順にログ出力します。

| 「future」、「past」は基準時刻の指定です。「future」は未来を表し、「past」は過去を表します。

動作確認

アプリケーションをオンラインにしてください（黄色矢印）。オンライン後、OutPutLogにスクリプトの動作結果がログとして出力されます。