画面操作のイベントを記録する

<< Click to Display Table of Contents >>

マニュアル > 監視システム構築ガイド > 主要機能の構築 > アラーム > アラームのカスタマイズ >

画面操作のイベントを記録する

概要

イベント機能では、主に、監視対象設備における運転操作の履歴を記録します。標準のイベント機能では、アラームマスタに定義されたタグに対する発生条件に基づいてイベントの監視を行いログデータとして記録しますが、そのほかにも、監視画面上からの操作内容をログデータに含めたい場合があります。例えば、監視画面上に配置されたボタンの操作が行われたことを記録したい場合は、各ボタンの操作に応じてイベント記録用のタグにON/OFF を書き込み、それらのタグをアラームマスタに登録しておくことによって操作ログとして記録する事もできます。しかしながら、この方法では画面操作の記録用にわざわざタグを用意する必要があり、システムの構築作業が煩雑になってしまいます。

 

そこで、ここでは、標準のイベント機能に対して、スクリプトを利用して画面操作のイベントログを記録するためのカスタマイズ事例について紹介します。

 

カスタマイズ内容

 

アラームマスタ(Event)の編集

バックグラウンドフォームに「リモートアラームクライアント」を張り付ける

イベントを記録するスクリプトを記述する

 

 

サンプルのダウンロード

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

 

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

 

 

 

作業手順

■アラームマスタの編集

 

1.イベント用のアラームマスタを開く

 

対象プロジェクトの以下のフォルダ配下にある「master.csv」を開いてください。

 

(プロジェクトフォルダ)\server\event\master.csv

 

 

以下は、変更前のアラームマスタの例です。

 

p_alarm_0195

 

 

2.アラームマスタを編集する

 

上記に対して、3行目に新たな行を挿入し、以下のように1行を記述してください。

 

p_alarm_0196

 

アラームID:USER

発生復帰:n

確認:n

その他の設定:ブランク(何も入力しない)

 

尚、アラームマスタをExcelで編集する際には、CSV形式で保存してください。

 

以下は、メモ帳で編集した例です。

 

p_alarm_0197

 

メモ帳で編集する場合は、他の行とカンマの数が同じになるように設定してください。

 

USER, n , n, , ,

 

 

■保存項目の追加

 

続いて、イベント用のアラームサーバーアクションの「保存項目」に設定を行います。

 

1.アラームサーバーアクションの設定画面を開く

 

Panel Serverの左ツリーからActionの下にあるEventを選択し、右クリックでプロパティを開きます。

 

p_alarm_0198

 

 

設定ダイアログから保存項目の設定を行います。

 

p_alarm_0199

 

画面上部にある「保存項目」タブをクリックします。

 

 

p_alarm_0200

 

 

画面から「追加」ボタンを3回クリックしてください。

 

すると、1回クリックするごとに新たな行が1行ずつ追加され、左記のように「[CM0]」「[CM1]」「[CM2]」が自動的に表示された状態となります。

今回の例では、保存項目に追加が必要なコメントはちょうどCM0、CM1、CM2であるため、自動的に追加された内容をそのまま利用することとします。

 

表示内容を確認し、OKボタンをクリックしてください。

 

 

この設定により、アラームのログデータに、CM0、CM1、CM2の値が含められて保存されるようになります。

 

 

hint

アラーム履歴やイベント履歴などの画面表示では、保存項目にCM0、CM1、CM2が含まれていなかった場合、アラームマスタの定義内容をもとに表示が行われます。しかしながら、今回行うカスタマイズでは、新たに追加したアラームID「USER」のアラームマスタ内での定義にCM0、CM1、CM2がいずれもブランクのため、このままではイベント履歴を表示する際に参照する値が存在しない事となります。上記の保存項目の設定画面からCM0、CM1、CM2を追加することによって、これらのコメントの内容がアラームデータに含めて保存されるようになるため、イベント履歴が正しく表示されるようなります。

 

 

■リモートアラームクライアントを張り付ける

 

続いて、イベントの監視を行っているアラームサーバに接続するためのリモートアラームクライアントを用意します。

 

通常、アラームサマリなどの画面表示では、表形式の部品である「リモートアラームグリッド」コントロールが使用されています。今回使用する「リモートアラームクライアント」コントロールは、リモートアラームグリッドから表形式の表示機能が省かれたコントロールです。今回のようにアラームの表示を行わず、バックグラウンドでアラームの状態を監視したり、アラームサーバに接続して機能を呼び出したりする場合に適しています。

 

尚、この仕組みは、システムの実行中に常に存在しているフォーム上に用意する必要があります。今回の例では「hidden」フォームを使用することとします。

 

 

1.「hidden」フォームを選択する

 

Panel Editorのワークスペースのツリーから、Logicsフォルダの下にある「hidden」を選択してください。

 

p_alarm_0201

 

hiddenフォームが選択されました。

 

p_alarm_0202

 

このフォームは標準フレームワークに最初から用意されているフォームの一つであり、システムの実行中に常にバックグラウンドで実行されるフォームです。

 

p_alarm_0203

尚、このフォームの「HiddenForm」プロパティを見てみると、左記のように「True」が設定されています。

 

このプロパティがTrueに設定されているフォームは、自動的にバックグラウンドで実行された状態となります。

 

 

 

2.hiddenフォームにリモートアラームクライアントを張り付ける

 

Panel Editorのコントロールから「リモートアラームクライアント」を選択し、hiddenフォームに張り付けてください。

 

p_alarm_0204

 

フォームに張り付けられました。

 

p_alarm_0205

 

 

3.リモートアラームクライアントのプロパティ設定

 

hiddenフォームに張り付けたリモートアラームクライアントに対し、以下のプロパティを設定してください。

 

p_alarm_0206

 

名前(Nameプロパティ):

Event

 

接続先(AlarmServerプロパティ):

 Event

 

 

尚、上記で設定する「接続先」には、Panel Server側で登録されているイベント監視用のアラームサーバーアクションの名称を指定します。

リモートアラームクライアントは上記で指定したアクションに対して接続します。

 

 

4.リモートアラームクライアントへのスクリプト記述

 

リモートアラームクライアントを選択した状態で、スクリプトページを開いてください。

 

p_alarm_0207

 

スクリプトページの左上にあるイベントのコンボボックスを開き、「Oninitialize」を選択します。

 

p_alarm_0208

 

すると、OnInitializeイベントが追加されました。

 

p_alarm_0209

 

OnInitializeイベントに、以下のコードを記述してください。

 

(記述内容)

event OnInitialize()

{

 this.Connect();

}

 

コードはイベントの「 { 」と「 } 」の間に記述します。

すべて半角で記述します。

thisの先頭にある余白表現を「字下げ」と呼びます。字下げを行うにはTabキーを押します(半角スペースを数個入力してもかまいません。全角スペースは入力しないでください)。

 

尚、上記のようにConnectを呼び出すことで、AlarmServerプロパティで指定したアラームサーバーアクションに対して接続が行われます。

 

 

■画面操作のイベントを記録する

 

続いて、フォームの編集を行います。

 

1.Panel EditorでForm01フォームを追加する

 

Panel Editorのワークスペースのツリーから、新たなフォームを追加してください。以降では、「Form01」というフォームが追加されているものとして説明します。

 

p_alarm_0210

 

また、Form01をメニューから呼び出せるようにしておく必要があります。以下はルートの _MenuConf プロパティの設定例です。

 

(_MenuConf設定例)

[グラフィック]

グラフィック,User.Form01,グラフィック1,,sys:display_24.png,T

 

[アラーム]

アラーム,_AlarmSummary._Main,アラームサマリ,,sys:alarmsummary_24.png,T

アラーム,_AlarmHistory._Main,アラーム履歴,,sys:alarmhistory_24.png,T

アラーム,_EventHistory._Main,イベント履歴,,sys:eventhistory_24.png,T

アラーム,_EventRealtime._Main,イベントリアルタイム,,sys:eventrealtime_24.png,T

 

[設定]

設定,[visualtheme],ビジュアルテーマ,,sys:visualtheme_24.png

;設定,[closeBrowser],終了,,sys:close_24.png

 

 

2.Form01フォームにボタンを配置して処理を記述する

 

Form01フォームに、ボタンコントロールを1つ張り付けてください。

 

p_alarm_0211

 

張り付けたボタンのスクリプトページを表示し、イベントのコンボボックスから「OnMouseUp」イベントを追加してください。

 

p_alarm_0212

 

OnMouseUpイベントに、以下を参考にコードを記述してください。

 

尚、このイベントは、ボタンをマウスでクリックする時(実際には、マウスボタンをクリックして離した時)に呼び出されます。

 

p_alarm_0213

 

(記述内容)

event OnMouseUp(button)

{

 ::hidden.Event.FireAlarm("USER", 1, c(0,1,2), c("ボタンが操作されました","イベント",0));

}

 

上記の処理では、リモートアラームクライアントの「FireAlarm」というメソッドを呼び出しています。この処理が実行されると、メソッドで指定したメッセージがイベントとして記録されます。

 

 

動作確認

それでは、動作を確認してみましょう。

 

Panel Serverの画面上部にあるオンライン(黄矢印)をクリックしてください。

続いて、Panel Editorの画面上部にあるブラウザ実行アイコン(緑矢印)をクリックし、Panel Browserを呼び出します。

Panel Browserが起動したら、イベント履歴を表示してください。

 

p_alarm_0214

 

イベント履歴画面を見てみると、以下のような履歴が表示された状態となっています。

 

p_alarm_0215

 

それでは、作成したボタンの動作を見てみましょう。

 

メニューから「グラフィック1」を選択してForm01を表示し、表示されたフォーム上にあるボタンを1回、クリックしてください。

 

p_alarm_0216

 

ボタンをクリックしたら、イベント履歴画面を表示し、ボタンクリックによるメッセージが表示されることを確認してください。

 

p_alarm_0217

 

引き続き、Form01に戻ってボタンを複数回クリックしてみてください。

 

p_alarm_0218

 

すると、ボタンをクリックした回数だけイベント履歴が新たに生成されました。

 

このように、スクリプトによる処理の実行によって、イベント履歴に任意のタイミングでログを記録することができるようになります。

 

 

補足説明

■FireAlarmメソッドについて

 

リモートアラームクライアント(およびリモートアラームグリッド)では、FireAlarmメソッドを呼び出すことによってスクリプトからアラームを発生させることができます。

 

FireAlarmを利用する場合、まず、アラームマスタにFireAlarm用のアラームIDを1行定義します。

今回の例では「USER」というアラームIDを使用しています。

 

この定義行では、アラームID、発生復帰:n、確認:nとし、他の列はすべてブランク(カンマのみ)としておきます。

 

p_alarm_0219

 

そして、目的のアラームサーバに接続されているリモートアラームクライアント(またはリモートアラームグリッド)を介してFireAlarmメソッドを呼び出すことによって、任意のアラームが記録されます。

 

event OnMouseUp(button)

{

 ::hidden.Event.FireAlarm("USER", 1, c(0,1,2), c("ボタンが操作されました","イベント",0));

}

 

尚、上記の例では、「::hidden.Event.FireAlarm()」と記述することで、hiddenフォーム上に配置されているリモートアラームクライアント(Event)のFireAlarmメソッドが呼び出されます。

 

 

hint

FireAlarmメソッドの引数の意味などの詳細は、「FireAlarm」に記述されています。

 

hint

スクリプトの記述は、ユーザー定義関数を使用することにより、よりスマートに記述することができるようになります。例えば、ルートやhiddenフォームのスクリプトにイベント書き出し用の関数を作成しておき、イベントを書き出したい処理の箇所からはその関数を呼び出すようにするなどの記述が可能です。

 

ユーザー定義関数に関する詳細については、「ユーザー定義関数」に記述されています。

 

■ユーザー定義関数による拡張例

 

(ルートのスクリプトにユーザー定義関数を定義)

//rootのスクリプト

function gusrFireAlarm(msg)

{

 ::hidden.Event.FireAlarm("USER", 1, c(0, 1, 2), c(msg, "イベント", 0)); //受け取ったメッセージをFireAlarmに渡す

}

 

(ボタンのスクリプトからはユーザー定義関数を呼び出す)

//ボタンのスクリプト

event OnMouseUp(button)

{

 ::gusrFireAlarm("ボタンが操作されました");  //メッセージのみを関数に渡す

}