# スクリプトVer2の記述例

マニュアル > サーバ作成ガイド > アクション編 > アクションの応用 > スクリプトVer2 > # スクリプトVer2の記述例 |

概要

ここでは、スクリプトVer2の記述例とアクションの利用例を説明します。SC2構文は定義されたイベントをトリガにして、記述されたスクリプトを実行させていきます。本サンプルは、SC2構文で使用できる基本的な各種イベントが定義されており、どのような状態でイベントが発生し、記述したスクリプトが実行されるかを確認することができます。

サンプルでは、

OnInitialize/OnTerminate/OnTimer/OnTagValueChanged/OnHeartBeat/OnExpressionValueChanged

イベントの実行を確認することができます。

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

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

| OnHeartBeatイベントはイベントによりアクションが実行される毎に必ず呼び出されます。尚、定周期的な処理を実装する場合には、SetTimerメソッドによるOnTimerイベントの使用を推奨します。SetTimerには、複数のタイマーを同時に起動する、個々の周期を設定できるなどのメリットがあります。例えば、定周期的な処理はOnTimerイベントを使用し、定刻イベントなどでスクリプトを実行したい場合は、OnHeartBeatイベントを使用するといった使い分けをしてください。

| OnTimerイベントは、ScriptVer2アクションがイベントにより呼ばれた時に、条件（OnTimerで設定した周期が経過している）を満たしていた場合に実行されます。例えば、イベントの周期：10秒　OnTimerの周期：11秒と指定している場合、最初の実行から11秒後にOnTimerの処理がされるのではなく、下記のようにイベントでScriptVer2が再び呼ばれた段階で、処理が実行されます。 1.初回実行（0秒）→OnTimerのカウント開始。 2.イベントで1度目の実行（10秒経過）→周期は11秒なので、条件が不成立の為まだ処理はされない。 3.OnTimerの周期経過（11秒経過）→ScriptVer2は呼び出されていない為まだ実行されない。 4.イベントで2度目の実行（20秒経過）→OnTimerの設定周期を超えている為、条件が成立し、処理が実行される。 イベント毎にOnTimerの処理を行いたい場合は、イベントの周期よりも短い周期をOnTimerの周期とする必要があります。

設定手順

タグ設定

1.スクリプトVer2で使用するタグを追加してください。

アクション設定

1.Actionを右クリックして表意されるメニューから、「追加」-「アクション」を選択します。

2.スクリプトVer2を選択して、追加します。

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

イベント設定

1.追加したアクションをイベントに登録します。定周期/定刻/タグのイベントのうち、使用方法に該当するイベントを選択し、アクションを登録してください。定周期でスクリプトを実行したい場合は、定周期イベントを選び、定刻でバッチ処理のようなことを行いたい場合は、定刻イベントを選んでください。また、タグの値をトリガにして実行したい場合は、タグイベントを選んでください。

| スクリプトの実体は、スクリプト用の外部ファイルを用意することになるため、アクションの設定自体は、スクリプトのファイルを選択するのみです。

解説

スクリプトの定義ファイルに記述されているスクリプトについて説明します。ここでは、スクリプトを実行するためのトリガとなる各イベントについて主に説明します。

1)OnInitializeイベント
OnInitializeイベントはオンライン化した直後に実行されるイベントです。初期化処理など、初期処理を行う際に使用します。

スクリプト例

    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メソッドは、OutPutLogにメッセージを出力するメソッドです。ここでは、OnInitializeイベントが実行されたことをログ出力しています。

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

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

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

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

スクリプト例

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

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

3)OnTimerイベント
OnTimerイベントはSetTimerでセットされたタイマーのタイムアップ時にOnTimerイベントが発生されます。定周期的な処理を行いたい場合に使用します。

スクリプト例

    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つのタグを登録しているので、いずれかのタグの値が変化することで、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秒周期でアクションが実行されるため、１秒毎にOnHeartBeatイベントが発生されます。

スクリプト例

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

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

6)OnExpressionValueChangedイベント
OnExpressionValueChangedイベントはAddExpressionを使用して登録した式の値に変化があったときに発生します。
OnInitializeイベントで、式の登録を行っているため、登録された式の値が変化するとイベントが発生します。

スクリプト例

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

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

動作確認

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