# 警報

> 警報の編集画面。識別とアドレス、条件、優先度、知らせ方、ディレイ、メッセージ、確認を持つ動作のカード、状態の帯、状態の移り変わり、知らせ方、そして確認とすべて確認。

警報は 1 つのブール値の条件を見張り、確認の状態の移り変わりを進めます。ですから、意味のあった条件が誰にも見られないまま来て去ることはありません。Logic の欄の Alarms の最上位で警報を選ぶか、そのフォルダーまたは節の最上位の表でその行の**開く**を押すと、その編集画面が開きます（新規… > 新しい警報で作った警報は開かれず、その表で強調表示されます。[作成と複製](logic#creating-and-copying)を参照）。読むには **Logic の表示**、編集するには **Logic の構成**、確認するには **Logic の操作**が必要です。

見出しは、警報の印（警報が発生中の間は鳴っている姿）、名前、「このステーションが見張る条件です。条件が続いている間、警報は自分を知らせ、確認されるのを待ちます。」の行、今の状態のピル（正常、発生中・未確認、発生中・確認済み、復帰・未確認）、そして警報が切られている間は**無効**のピルを見せます。入力の欄には識別、条件、動作が、右側の帯には状態が入ります。

## 識別 {#identity}

| 項目 | 意味 | 受け付ける値と既定 | 効果 |
| --- | --- | --- | --- |
| 名前 | 表示の名前です。それを変換した区切りが、`Alarms` の下のアドレスになります。 | 自由記述。新しい警報は `AlarmN` です。 | [変数の名前](logic-variables#name-and-address)と同じ安全な名前の変更で確定します。付いてくる参照の予告が出て、Enter か入力欄から離れることで確定し、「警報の名前を変え、参照 N 件を更新しました。」と伝えます。名前を変えても、実時間の状態と確認待ちはそのまま残ります。ぶつかる名前は、その場で拒否されます。 |
| アドレスの行 | `Alarms.<folders>.<segment>` で、名前の下に繰り返されます。 | 読み取り専用。 | 式とスクリプトは、これを通じてその警報の状態を読みます（`Alarms.HighLevel.IsActive`）。 |
| 説明（任意） | 自由記述です。 | 空です。 | ありません。 |

## 条件 {#condition}

条件のカードは[スクリプトの編集画面](logic-expressions#the-script-editor)そのもので、次の助言が付きます。「アドレス空間の上に書く、ブール値を返す 1 つの JavaScript の式です。例：Connector.Simulated.Pump.Temp.ValueToReal() > Variables.SetpointHigh.ValueToReal()。条件からほかの警報を参照することはできません。」条件は[式の規則](logic-expressions)にすべて従います。読み取り専用の式 1 つ、静的なアドレス、品質の関門、250 ms の上限です。タグ、両方の種類の変数、Process のポイント、Assets、診断の値は参照できますが、`Alarms.*` は決して参照できませんし、ブール値を返さなければなりません（「条件はブール値になる必要がありますが、「…」になりました。」）。ある周期で評価できなかった条件（参照しているポイントが悪い、欠けている、空である）は不確かさです。状態の移り変わりは、最後の状態をそのまま保ちます。

## 動作 {#behavior}

| 項目 | 意味 | 受け付ける値と既定 | 効果 |
| --- | --- | --- | --- |
| 優先度 | 重さです。 | 重大、高、中（既定）、低。選択肢はそれぞれ、その重さの色で描かれます。 | ツリーの点、すべてのまとめ、スナックバーのカード、記録、ステータスバーの表示に出ます。共有する印では、待っているもののうちいちばん重い優先度が勝ちます。 |
| 知らせ方 | 常に出ているステータスバーの表示のほかに、発生をどう知らせるかです。 | 常駐（既定）、時限、ステータスバー。この項目のツールチップは「発生をどう知らせるかです。常駐 = 確認されるか正常に戻るまでスナックバーを出す、時限 = スナックバーを数秒だけ出す、ステータスバー = ステータスバーの表示だけ。」です。 | 「知らせ方の出方」を見てください。 |
| オンディレイ（ms） | 警報が上がるまでに、条件が真であり続けなければならない長さです。 | 0 以上の整数。0 ならすぐに上がります。 | 100 ms のロジックの周期の分解能で、続いたと観測できた時間です。 |
| オフディレイ（ms） | 警報が復帰するまでに、条件が偽であり続けなければならない長さです。 | 0 以上の整数。0 ならすぐに復帰します。 | 分解能は同じです。 |
| メッセージ（発生中に表示、任意） | 知らせが運ぶ文字列です。 | 自由記述。空です。 | カードとシステムの通知は「`<Message>`（優先度）」と読みます。メッセージがなければ「`<Priority>` の警報が発生中です。」です。 |
| 確認を必要とする：復帰した警報も、操作者が確認するまでラッチしたまま残ります | 発生が応答を求めるかどうかです。 | 既定はオンです。 | オフのとき、警報はまっすぐ発生中・確認済みに上がり、まっすぐ正常に復帰します。知らせはしますが、ラッチもしませんし、待ちもしません。 |

負のディレイや読み取れないディレイは、保存されている値をそのままにし、「ディレイは 0 以上の整数にしてください（ms 単位。分解能は 100 ms のロジックの周期です）。」と出します。ディレイは、続いたと**観測できた**時間です。条件を評価できない間は、両方のディレイの時計が振り出しに戻るので、見えていなかった時間が上がることにも復帰することにも数えられることはありません。

条件、ディレイ、確認を必要とする、有効の印のどれかを変えて保存すると、状態の移り変わりは正常に戻ります（別の規則のときの古い状態は、嘘になるからです）。この戻しは出どころを構成として記録され、その警報のスナックバーのカードを閉じます。名前、説明、優先度、メッセージ、知らせ方を変えたときや、その警報を別のフォルダーに入れ直したときは、状態がそのまま残ります。

## 状態の帯 {#the-state-rail}

状態は、今の状態を言葉で、「優先度：`<priority>`」、**発生時刻**（条件が続いていない間は横線）と**最後の遷移**（一度も状態が変わる前は横線）、そして「すべての遷移がイベントのページと、残り続ける警報の履歴に出ます。警報の状態はアドレス空間にあり、式やスクリプトから Alarms.X.IsActive のように読めます。」という覚え書きを見せます。Alarms の最上位のパネルは、すべての警報を、値の列の「`<state>` · `<priority>` · `<when>` から」とともに並べ、行ごとに**確認**のボタンを置きます。

## 状態の移り変わり {#the-state-machine}

| 状態 | 意味 |
| --- | --- |
| 正常 | 条件が偽で、待っているものは何もありません。 |
| 発生中、未確認 | 条件が真で、まだ確認されていません。 |
| 発生中、確認済み | 条件が真で、確認済みです（あるいは、その警報がそもそも確認を求めません）。 |
| 復帰、未確認 | 未確認のまま条件が正常に戻りました。操作者が確認するまでラッチしたまま残ります。 |

オンディレイの間ずっと真であり続けた条件は、正常か復帰・未確認から発生中・未確認へ警報を上げます（確認を必要とするがオフなら、まっすぐ発生中・確認済みへ）。オフディレイの間ずっと偽であり続けた条件は、それを復帰させます。すでに確認済みなら正常へ、そうでなければ復帰・未確認へです。確認は、発生中・未確認を発生中・確認済みへ動かし、ラッチを外して正常へ戻します。ロジックの周期は、100 ms ごとにロジックのキューの上で、まず変数を、次に警報を評価します。警報の状態は記憶の中にあります。再起動のあとは、どの状態の移り変わりも正常から始まり、最初の周期が実時間の条件から現実を導き直すので、ラッチや確認待ちが再起動をまたぐことはありません。すべての遷移は、その起こり（ロジックの周期、確認、保存での戻し、無効化、削除）が何であっても記録され、[イベント](events-alarms)のページの、残り続ける警報の履歴に残ります。

## 知らせ方の出方 {#annunciation}

シェルのステータスバーは、件数と、待っているもののうちいちばん重い重さを常に運びます（[ウィンドウ](app-window)）。そのほかは、知らせ方の種類が決めます。

| 知らせ方 | 振る舞い |
| --- | --- |
| 常駐 | 上がったときにスナックバーのカードを出します。表題はその警報の名前で、色は優先度に従い（重大はエラー、高と中は警告、低は情報）、未確認の間は**確認**を、そして**警報を開く**を運びます。警報が確認されるか正常に戻るまで残ります。復帰・未確認のラッチは、それを画面に残したままにしますし、上がり直せば置き換わります。 |
| 時限 | 同じカードで、8 秒後にひとりでに消えます。 |
| ステータスバー | カードもシステムの通知も出ません。ステータスバーの表示だけです。 |

カードを手で消すことは、確認ではありません。ウィンドウが通知領域に隠れているか最小化されている間、常駐と時限の発生は、同じ文字列でシステムの通知も出します。

## 確認する {#acknowledging}

確認は操作のコマンドで、その警報が目に入るところならどこでもできます。開いている警報の上の**確認**の動詞、Alarms の最上位の上の**すべて確認**、Alarms の最上位のパネルの各行の**確認**のボタン、警報の行の右クリックの**確認**、スナックバーのカードの**確認**、[イベント](events-alarms)のページ、ダッシュボードの[警報バー](component-alarm-banner)、そしてエージェント（MCP として記録されます）です。どの確認もロジックのキューに乗り、その出どころとともに記録され、その警報のカードを閉じます。

どこに出るときも、応える相手があるところにだけ答えが差し出されます。正常か、すでに確認済みの警報は、その動詞をその場に残したまま灰色にし、「この警報は、応答を待っていません。」と述べます。待っているものが何もない登録の上での**すべて確認**は、「応答を待っている警報はありません。」と述べます。そして操作ログ帯は、動いたものだけを認めます。何も変えない答えを押したときは同じ文を伝え、「確認しました。」とは決して言いません。誰もしていない操作者の行いを残すステーションの記録は、しばらく手の届かない動詞よりも悪いからです。

| コマンド | 何をするか | 灰色になるとき | 描かれないとき |
| --- | --- | --- | --- |
| 確認 | 開いている警報を確認します。操作ログ帯は「確認しました。」と伝えます。 | 正常か、すでに確認済みのときは「この警報は、応答を待っていません。」。読み取り専用の間は「ランタイム停止中」。 | ロールが Logic の操作を持たないとき。 |
| すべて確認 | 待っているものがあるすべての警報を、1 つのキューの項目で確認します。操作ログ帯は「すべての警報を確認しました。」と伝えます。 | 待っているものが何もないときは「応答を待っている警報はありません。」。読み取り専用の間は「ランタイム停止中」。 | ロールが Logic の操作を持たないとき。 |
| 有効化／無効化 | 有効の印を切り替えます。無効にすると、状態の移り変わりが正常に戻り、評価が止まります。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |
| 複製 | その警報を、空いている名前で Alarms の最上位に写し、開かずに最上位の表で強調表示します（[作成と複製](logic#creating-and-copying)を参照）。複製は正常から始まります。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |
| 警報を削除 | 「「X」を削除しますか？警報が取り除かれます。 この操作は元に戻せません。」と尋ね、先に状態の移り変わりを戻してから（知らせがその警報より長生きしないように）取り除きます。`Alarms.X` への参照は、解決できなくなります。 | ステーションがロックされているか読み取り専用のとき。 | ロールが Logic の構成を持たないとき。 |

## 使っている場所 {#used-by}

フォームの列の下にある「使っている場所」のカードは、この警報を読み取る、ステーションの中のすべてを並べます。名前を変えたり削除したりする前に、何がこの警報に頼っているかが分かります。警報を選んだときと、名前を変えたあとにもう一度読み取られます。

| 種類 | 場所 | 名前 |
| --- | --- | --- |
| Modbus サーバー | 空 | 警報の状態の 1 つを提供する [Modbus サーバー](connector-modbus-server)のレジスターマップの行で、レジスターの種類とレジスター番号で示します（`Coil 0`） |
| OPC UA サーバー | 空 | この警報を提供する OPC UA サーバーの[提供するノード](connector-opcua-served-nodes)の行：いつも読み取りのみ |
| MQTT 発行 | ブローカー | この警報を発行する、ブローカーの[発行のカード](driver-mqtt#the-publish-card)の行のトピック |
| 変数、アクション | 空 | テキストで警報のメンバーの 1 つ（`Alarms.HighLevel.IsActive`）を読んでいる式の変数やアクションで、しまわれているフォルダーも添えて示します |
| ダッシュボード | そのダッシュボード | アドレスのプロパティでこの警報を名指ししている部品 |

条件がほかの警報を読むことはないので、警報は並びません。サーバーの行は警報を変わらない識別で持ちます。名前を変えても同じ警報を提供し続け、削除すると行は残って、失ったものを名指しします。ブローカーの行も同じで、トピックはそのままです。読み取っている間、カードには「参照を読み取っています…」と出ます。何も使っていないときは「この警報を使っているものは、ステーションの中にありません。」、読み取りに失敗したときは「参照を読み取れませんでした」と**もう一度試す**が出て、空の一覧には決してなりません。カードは読むだけです。編集画面を開けるどのロールにも見え、ステーションがロックされている間も見えて、コマンドは何もありません。

## 警報がしないこと {#what-alarms-do-not-do}

条件が表しているもの以外のヒステリシスや不感帯はありませんし、棚上げも、音も、スクリプトからの確認も、再起動をまたぐ状態の保存もありませんし、警報が無効な間やランタイムが止まっている間は評価もしません。警報は Process の発生記録ではありません。そちらは [Process](process-occurrences) のページで設定し、判定します。
