# アラーム履歴

トレーニング > 応用編 > アラーム機能 > # アラーム履歴 |

ここでは、「Panel Server側の設定」で作成したアラームサーバに接続してアラーム履歴を表示する画面を作成します。

リアルタイムアラームとの違いは、動的更新が行われない点と、日付の範囲を自由に指定してアラーム履歴を表示できる点です。具体的には、エディットボックスから開始・終了の日付を入力して検索ボタンをクリックし、指定した範囲のアラーム履歴のみを画面表示する、といった利用が可能です。アラーム履歴の表示は、リモートアラームグリッドコントロールによって行います。

アラーム履歴画面の作成

1.Panel Editorからアラーム履歴用にフォームを作成します。
新規フォームを追加し、名前を“AlarmHist”に変更してください。
フォームの名称を変更したら、ルートプロパティのDefaultFormプロパティを、“AlarmHist”に変更してください。

2.タイトルラベルを貼り付ける。
画面のタイトルとして、フォームの左上隅あたりにラベルを貼り付けます（名称は“アラーム履歴画面”などとして、フォントの大きさや色などは任意に設定してください）。
リモートアラームグリッドを貼り付ける。
フォームにリモートアラームグリッドコントロールを貼り付けます。

3.リモートアラームグリッドのプロパティ設定。
リモートアラームグリッドのプロパティページから、以下のプロパティの設定を変更します。

プロパティ | 設定内容
Name | “Alarm”
AlarmServer | “A01”　（※Panel Serverで設定したアラームサーバアクション名）
AlarmClientType | “HISTORICAL1”
AlarmLayout | アラームサマリのレイアウトを記述します。ここでは以下のとおり記述してください（※詳細はアラームマニュアルに記載されています。尚、数値（表示幅）は微調整してください）。
[ALARMID] AlarmID, 100, center [DATESTR] 日付, 120, center [TYPEJP] イベント, 110, center [CM0] メッセージ, 300, left [CM1] グループ, 100, center
AlarmTextColor | アラームの表示色を指定します。ここでは、白色を表示します。
RGB(255, 255, 255)

4.リモートアラームグリッドの初期化スクリプトを記述します。
リモートアラームグリッドのOnInitializeイベントに、アラームサーバとの接続 及び アラーム履歴情報取得を行う処理を記述します。

event OnInitialize() { this.Connect(); this.SubscribeHistorical("", 500, "future", "past"); }

| SubscribeHistoricalメソッドの第二引数には、一覧表示するアラームの最大件数を指定します。ここでは500を指定しているので、最新の500件が表示されます。 第三、第四引数には、範囲指定の開始・終了を日付で指定しますが、この引数に、“future”、“past”と指定すると、全件検索が行われます。従って、この設定の場合では、初期表示の際に最大500件までの最新情報が取得されます。

5.検索範囲指定用のエディットボックスと検索ボタンを貼り付けます。
以下のイメージを参考に、画面の上部あたりに履歴検索用のエディットボックスとボタンを配置します。
検索ボタンは範囲指定用に使用し、最新表示ボタンは履歴の最新情報を表示します。ここで、開始日付入力用のエディットボックスの名称を“FromDate”、終了日付のエディットボックスの名称を“ToDate”としてください。
各処理の実装は以降にて行います。

6.検索処理の実装します。
検索ボタンの処理を実装します。ボタンのスクリプトに、以下の処理を記述します。

event OnMouseUp(button) { parent.Alarm.CancelSubscribe(); parent.Alarm.SubscribeHistorical("", 500, parent.FromDate.Text, parent.ToDate.Text ); }

| この例ではSubscribeHistoricalメソッドに渡す最大件数として500を指定しています。もし、要件的に500件では不足する場合には、この数値の設定値を上げて下さい。または、画面上にエディットボックスを配置し、そこから入力された数値を最大件数として引数に渡すのも一つの方法です（アラームマニュアルでは、画面から行数指定する手法のサンプルが紹介されています）。

7.次に、最新表示ボタンの処理を実装します。
ボタンのスクリプトに、以下の処理を記述します。

event OnMouseUp(button) { parent.FromDate.Text = ""; parent.ToDate.Text = ""; parent.Alarm.CancelSubscribe(); parent.Alarm.SubscribeHistorical("", 500, "future", "past"); }

この処理は、初期表示時に行う表示処理と同様に、最新500件のアラームログを再表示します。（念のため、FromDateとToDateの内容も初期化しています）

8.画面切り替えボタンを作成します。
ここで、本画面とアラームサマリ、リアルタイムアラームの各画面間を行き来できるようにします。アラームサマリ、リアルタイムアラーム、アラーム履歴それぞれのフォームに、各３つのボタンが表示されるように貼り付け、「サマリ」「リアルタイム」「履歴」とします。既に２つのボタンがあるフォームには新たにボタンを追加してください。
画面の左下あたりに配置しておきます
サマリ呼び出しボタンのスクリプトに、画面を切り替える処理を記述します。

event OnMouseUp(button) { ::OpenForm("AlarmSummary"); }

リアルタイム呼び出しボタンのスクリプトに、画面を切り替える処理を記述します。

event OnMouseUp(button) { ::OpenForm("AlarmReal"); }

履歴呼び出しボタンのスクリプトに、画面を切り替える処理を記述します。

event OnMouseUp(button) { ::OpenForm("AlarmHist"); }

これで画面の作成は完了です。ここまでの作業で設定ファイルを保存してください。

動作確認

作成したアラーム履歴画面の動作を確認してみます。Panel Serverがオンライン状態で確認して下さい。

1.Panel Editorの下図のアイコンをクリックすると、Panel Browserが起動し、クライアント設定ファイルが開かれて実行されます。

2.アラーム履歴画面が表示されました。
画面上にはこれまでに操作したアラームの履歴が表示されています。
ここで、日付検索をためしてみます。
From・Toそれぞれのエディットボックスに開始・終了の日時を入力して検索ボタンをクリックしてください。
指定した範囲の履歴のみになりました。

| 日付に指定できる書式は年月日時分秒まで入力可能です。ここで、“2017/1/1”のように年月日のみを入力した場合、内部的には“2017/1/1 00:00:00”として扱われます。従って、2017/1/1の履歴のみを表示したい場合には、Fromに“2017/1/1”、Toに“2017/1/2”と入力します。

次に、最新表示をためしてみます。
最新表示ボタンをクリックしてください。
日付検索の条件がクリアされ、一覧が最新のアラーム履歴になりました。

（解説）リモートアラームグリッドの履歴表示様式

リモートアラームグリッドの表示様式は、AlarmClientTypeプロパティで指定します。履歴表示を行う場合、 “HISTORICAL1”、“HISTORICAL2”、“HISTORICAL3”の３種類の中からいずれかの様式を指定することができます。

プロパティ値 | 仕様
HISTORICAL1 | 本チュートリアルで使用した様式です。 この様式は、アラームに対する発生・復帰・確認を、それぞれ別のレコードとして表示します。
HISTORICAL2 | HISTORICAL1との違いは、１つのアラームに対する発生・復帰・確認を、１つのレコードとして表示する点です。つまり、１行に発生日付、復帰日付、確認日付を並べて表示することができます。この様式では、１つのアラームが繰り返し発生したときには以下のような動作順序となります。 1新規にアラームが発生した →新規にアラームを表示（発生日付有り、復帰日付ブランク、確認日付ブランク） 2確認無しの状態で復帰した →表示中のアラームを更新（発生日付有り、復帰日付有り、確認日付ブランク） 3確認無しの状態でもう一度アラームが発生した →①とは別のアラームを新たに表示（発生日付有り、復帰日付ブランク、確認日付ブランク） 4確認が行われた →①のアラーム（発生日付有り、復帰日付有り、確認日付有り） →③のアラーム（発生日付有り、復帰日付ブランク、確認日付有り） ※両方のアラームの確認日付には、④の日時がセットされる。
HISTORICAL3 | HISTORICAL2と同様に、１つのアラームに対する発生・復帰・確認を、１つのレコードとして表示します。HISTORICAL2との違いは、確認の表示の仕方が少し異なる点です。 1新規にアラームが発生した →新規にアラームを表示（発生日付有り、復帰日付ブランク、確認日付ブランク） 2確認無しの状態で復帰した →表示中のアラームを更新（発生日付有り、復帰日付有り、確認日付ブランク） 3確認無しの状態でもう一度アラームが発生した →①とは別のアラームを新たに表示（発生日付有り、復帰日付ブランク、確認日付ブランク） 4確認が行われた →①のアラーム（発生日付有り、復帰日付有り、確認日付は“---”になる） →③のアラーム（発生日付有り、復帰日付ブランク、確認日付有り） ※古い方のアラームの確認日付には、“---”がセットされる。

（解説）アラームのフィルタ機能

アラームサマリ、リアルタイム、履歴ともに、リモートアラームグリッドに表示するアラーム情報にはフィルタ（検索条件）を指定することができます。フィルタ条件は、SubscribeSummary()、SubscribeRealtime()、SubscribeHistorical()の各メソッドの第一引数に文字列で指定します。この引数に何も指定しないと（つまり「""」を指定すると）、フィルタ条件無しとして扱われます。フィルタ条件には、アラームフィールドに対する比較式で表現します。

例えば、コメント１が"軽故障"のアラームのみを表示したい場合には、以下のように指定します。

var filler; filter = "[CM1]==" + ::Chr(34) + "軽故障"+ ::Chr(34); this.Connect(); this.SubscribeSummary(filter);

ここで、rootメソッドの「Chr(34)」は、ダブルクォーテーションを返してくれます。「軽故障」という文字列を表すには引用符「""」で囲む必要がありますが、例えば以下のような記述ではスクリプトエラーとなってしまうので注意が必要です。

（エラーの例）

filter= "[CM1]=="軽故障""; //ダブルクォーテーションはそのまま記述できない