スクリプトVer2のイベント使用例

<< Click to Display Table of Contents >>

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

スクリプトVer2のイベント使用例

概要

ここでは、スクリプトVer2のイベントの使用例について、サンプルをもとに紹介します。

 

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

 

 

 

サンプルのダウンロード

このページで紹介されている作成例は、サンプルをもとに説明します。

 

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

 

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

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

 

尚、このサンプルでは、以下のイベントの動作を確認することができます。

 

OnInitialize / OnTerminate / OnTimer / OnTagValueChanged / OnHeartBeat / OnExpressionValueChanged

 

 

hint

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

 

 

動作確認

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

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

 

c_action_0085

 

 

解説

以下に、サンプルのスクリプトファイル「script.txt」に記述されているスクリプトの処理内容を解説します。

 

1)OnInitializeイベント

 
OnInitializeイベントはオンライン実行された直後に1度だけ呼び出されるイベントです。スクリプトの初期化処理などを記述する際に使用します。

 

スクリプト例

event OnInitialize()
{
	::SvsDump("OnInitialize:" & ::SvsGetActionName());
	::AddTag(c("U01.F01.T01", "U01.F01.T02", "U01.F01.T03"));
	var vExpressionName = c("EX01","EX02");
	var vExpression = c("(U01.F01.T04 && U01.F01.T05) ||
                              U01.F01.T06" ,"U01.F01.T04 || U01.F01.T05 || U01.F01.T06");
	::AddExpression(vExpressionName, vExpression);
	::SetTimer(0, 5000, -1);
}

 

処理内容

i.SvsDumpメソッドは、Outputログにメッセージを出力するメソッドです。ここでは、OnInitializeイベントが実行されたことをログ出力しています。

ii.AddTagメソッドを用いて、使用するタグの登録を行います。

iii.AddExpressionメソッドで式の登録を行います。AddExpressionメソッドで登録した式の値が変化すると、OnExpressionValueChangedイベントが発生します。

iv.SetTimerでタイマーのセットを行います。この例では5000ミリ秒(5秒)のタイマーを、実行回数を無制限(-1)としてセットしているため、5秒周期でOnTimerイベントが繰り返し発生するようになります。

 

 

hint

SvsDumpメソッドを使用すると、Outputログに自由なメッセージを出力することができます。このメソッドはSC2のデバッグを行う上でとても役立ちます。

 

 

2)OnTerminateイベント

 
OnTerminateイベントはオフライン時に実行されるイベントです。終了時に何らかの処理を行いたい時に使用します。

 

スクリプト例

event OnTerminate()
{
	::SvsDump("OnTerminate:" & ::SvsGetActionName());
}

 

処理内容

SvsDumpメソッドで、OnTerminateイベントが発生したことをログ出力しています。

 

 

3)OnTimerイベント

 
OnTimerイベントはSetTimerメソッドでセットされたタイマーのタイムアップ時に発生します。この例ではOnInitializeイベント内でSetTimerメソッドセットした5秒周期のイベントが発生します。

 

スクリプト例

event OnTimer(timerid,counter)
{
	::SvsDump("OnTimer Id:" & ::CStr(timerid) & " counter:" & ::CStr(counter));
}

 

処理内容

SvsDumpメソッドで、OnTimerイベントが発生したことをログ出力しています。

 

 

4)OnTagValueChangedイベント

 
OnTagValueChangedイベントはAddTagで登録されたタグの値が変化したときに発生します。タグの値の変化を検出して処理を行いたい場合に使用します。

 

尚、このサンプルでは、OnInitializeイベント内で「U01.F01.T01」、「U01.F01.T02」、「U01.F01.T03」の3つのタグをAddTagで登録しているため、これらのタグのいずれかの値が変化する都度、OnTagValueChangedイベントが発生します。

 

スクリプト例

event OnTagValueChanged(tagname,value)
{
	::SvsDump("OnTagValueChanged(Tag:" & tagname & " Value:" & ::CStr(value) & ")");

	if(value){
		if(tagname == "U01.F01.T01"){
			::WriteVal("U01.F01.T03", 1);
		}else if(tagname == "U01.F01.T02"){
			::WriteVal("U01.F01.T03", 0);
		}
	}                                                 
}

 

処理内容

i.SvsDumpメソッドで、OnTagValueChangedイベントが発生したことをログ出力しています。

ii.値が変化したタグが「U01.F01.T01」だった場合、「U01.F01.T03」に1を書き込みます。また、値が変化したタグが「U01.F01.T02」だった場合、「U01.F01.T03」に0を書き込みます。

 

 

5)OnHeartBeatイベント

 
OnHeartBeatイベントはスクリプトVer2アクションが呼び出されるたびに発生するイベントです。定刻イベントなどと組み合わせて、一定の期間ごとに処理を行いたい場合に使用します。サンプルでは1秒周期でアクションが実行されるため、1秒毎にOnHeartBeatイベントが発生されます。

 

スクリプト例

event OnHeartBeat()
{
	SvsDump("OnHeartBeat:" + SvsGetActionName());
}

 

処理内容

SvsDumpメソッドで、OnHeartBeatイベントが発生したことをログ出力しています。
 

 

hint

定周期で実行させる処理をスクリプトに実装したい場合、OnHeartBeatイベントを使用する方法と、SetTimerメソッドによるOnTimerイベントを使用する方法があります。定周期処理の実装には、特別な理由が無い限り、SetTimerメソッドによるOnTimerイベントの使用を推奨します。OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されるため、実行される周期はPanel Serverのイベントから本アクションを呼び出すタイミングに依存します。一方、SetTimerを使用する場合は、周期が異なる複数のタイマーを同時に設定することができる等のメリットがあります。考え方としては、定周期的な処理の実装にはOnTimerイベントを使用し、Panel Serverの定刻イベントなどで指定した時間のタイミングにスクリプトを実行したいような場合はOnHeartBeatイベントを使用するなど、用途により選択してください。

 

 

6)OnExpressionValueChangedイベント

 
OnExpressionValueChangedイベントはAddExpressionを使用して登録した式の値に変化があったときに発生します。

 

尚、このサンプルでは、OnInitializeイベント内で「(U01.F01.T04 && U01.F01.T05) || U01.F01.T06」と、「U01.F01.T04 || U01.F01.T05 || U01.F01.T06」の2つの式の登録を行っており、これらの式の値が変化するとイベントが発生します。

 

スクリプト例

event OnExpressionValueChanged(name,value,firstevent)
{
	::SvsDump("OnExpressionValueChanged(Name:" & ::CStr(name) & 
             " Value:" & ::CStr(value) & " First:" & ::CStr(firstevent) & ")");
}

 

処理内容

SvsDumpメソッドで、OnExpressionValueChangedがどのような内容で発生したのかをログ出力しています。

 

 

 

設定手順

タグの設定

 

1.スクリプトVer2で使用するタグを追加してください。
 
ここでは例として、仮想デバイスのユニット「U01」を追加し、以下のタグが登録されているものとします。

 

U01.F01.T01

U01.F01.T02

U01.F01.T03

U01.F01.T04

U01.F01.T05

U01.F01.T06

 

 


アクションの設定

 

1.Actionを右クリックしてメニューを表示し、「追加」-「アクション」を選択します。
 
c_action_0081

 

2.スクリプトVer2アクションを追加します。
 
c_action_0082
 
ここでは例として、「A01」という名称のアクションが追加されているものとします。

 

3.追加したアクションのプロパティを開き、スクリプトファイルを選択します。
 
c_action_0083
 
尚、本来であれば、実行するスクリプトの処理記述をスクリプトファイルに事前に記述しておきます。
 
今回は例として、サンプルに含まれている「script.txt」を選択します。
 

 


イベントの設定

 

1.追加したアクションをイベントに登録します。
 

c_action_0084

 

 

ここでは例として、定周期イベントを選択し、「E01」という名称の1秒周期の定周期イベントを追加します。

 

c_action_0354

 

定周期イベント「E01」の実行アクションに、先ほど作成したスクリプトVer2アクション「A01」の呼び出しを登録します。パラメータの指定は必要ありません。

 

c_action_0355

 

この設定により、スクリプトVer2アクション「A01」が1秒周期で実行される動作となります。