# 発生記録

> 試験対象について監視する条件です。モデルのチャネルを使った JavaScript の式で書き、実行の間か常時、判定されます。

**発生記録**は、試験対象が書き留めるに値することをした、と記録します。警報がプラントと設備を見張るのに対して、発生記録は手順のものです。その変わり目は、それを観測した実行記録とともに残り、あわせて Events のページの永続する発生記録の時系列にも入ります。条件はモデルのチャネルを使った JavaScript の式 1 つで、両方の変わり目でデバウンスされ、読み取ったものの品質で判定を止められます。発生記録は Process > モデル > モデル > 段取り > **発生記録**の下にあり、**レシピと判定の編集**の権限が要ります。

## 発生記録のフォルダー {#the-occurrences-folder}

**発生記録**の行を選ぶとフォルダーのページが開き（「試験対象について監視する条件です。変わり目はどれも、当てはまるときは実行記録とともに残り、あわせて発生記録の履歴にも入ります。」）、発生記録 1 件につき 1 枚のカードが名前順に並びます。カードを押すとそれが開き、X が取り除きます。1 件もないときは「まだ発生記録がありません。追加してください。」と出ます。

| 指令 | 何をするか | 灰色になるとき（状況） | 描かれないとき（ロール） |
| --- | --- | --- | --- |
| **発生記録**（詳細のバー、フォルダーを選んだとき。右クリック**発生記録を追加**） | `発生記録 <n>` を足します。重大度は警告、手順の実行中に監視、有効、メッセージなし、条件は空です。行はそのグループに足され、そこで強調表示されて見える位置までスクロールされます。開くのはそのカードです。 | どれか 1 つのユニットが実行に占められているとき、またはランタイムが停止しているとき。 | レシピと判定の編集がないとき。 |

## 発生記録のページ {#the-occurrences-page}

見出しには名前と、重大度のピル（その重大度の色）が載り、発生記録が切のときは**無効**のピルも載ります。その下には 2 種類の注意が立ちます。

- 保存された条件が検査を通らないときの注意書きです（下書きはそれでも保存されます。何が誤っているかは、この注意書きが言います。下を参照）。
- 実時間の条件を評価できなかったユニット 1 台につき 1 本の**式を評価できません**の通知バーで、「`<unit>`: `<error>`」と書かれます。ユニットの診断は、同じ誤りにつき 1 度だけ書かれ、評価がまた通ったときに消えます。

### 識別と動作 {#identity--behavior}

| 項目 | 何であるか | 値 / 既定 | 効果 |
| --- | --- | --- | --- |
| **名前** | 発生記録の名前です。ツリーの行、実行記録ファイルの中のイベントの名札、Events の時系列、レポートで使われます。 | 自由な文字。作成時は `発生記録 <n>` です。 | 行の名前と、手順の一覧での呼び名が変わります。 |
| **重大度** | 発生 1 回の重さです。選択欄は、それぞれの選択肢を、そのピルが持つことになる色で見せます。 | **情報**、**警告**（既定）、**重大**。 | 発生記録が並ぶところではどこでも、ピルと発生区間に色を付けます。実行の間、警告か重大の発生記録が発生すると、アプリが隠れているか最小化されている間は、オペレーティングシステムの通知も求めます。情報はウィンドウの中にとどまります。 |
| **監視するとき** | 条件を判定する時機です。 | **手順の実行中**（既定）。それを監視する手順の実行が動いている間だけ、記録された行の上で判定します。**常時**。実行の外でも、ユニットのバインドを実時間で読む背後の監視が判定します。 | 「常時」の発生記録には、それを監視する手順が要りません。「手順の実行中」の発生記録は、それにチェックを付けた手順だけが判定します。 |
| **発生の遅延（ms）** | **発生**が確定するまでに、条件が真であり続けなければならない長さです。サンプルの細かさが分解能になります。 | ミリ秒の数。既定は 0 です。この欄は負の数を受け取りません。入力は拒まれ、欄の下の注意書きがそれを伝え、前の値が戻ります。 | 立ち上がりの変わり目をデバウンスします。 |
| **復帰の遅延（ms）** | **解除**が確定するまでに、条件が偽であり続けなければならない長さです。 | 同じです。既定は 0 です。 | 立ち下がりの変わり目をデバウンスします。 |
| **有効** | そもそもこの発生記録を監視するかどうかです。 | 既定は入です。 | 無効の発生記録は、実行の中でも外でも決して監視されず、開始を止めることも決してありません。 |
| **メッセージ** | 発生とともに記録され、知らされる文です。 | 自由な文字。既定は空です。 | どの変わり目にも付いて、実行記録ファイルと診断ログに入ります。 |

### 条件 {#condition}

「ブール値を返す JavaScript の式を 1 つ書きます。」カードには、コードの編集欄と、使ってよい参照の一覧（「使えるチャネルの参照：Channels.Ch_1、Channels.Outlet_temperature、…」）と、次の但し書きが載ります。「実行の間、条件は記録したデータログの列を読みます。「常時」の監視は、ユニットのバインドを実時間で読みます。書き方の誤り、見つからない参照、評価時の失敗は、偽や信号の喪失として扱わずに、ここに表示します。」

チャネルは `Channels.<identifier>` として参照します。識別子はチャネルの名前を整えたもので、英数字は残り、それ以外の文字は `_` になり、数字で始まる名前は前に `_` が付きます。`Channels` はモデルのチャネルだけを持ち、ほかは何も持たないので、`Math`、`isNaN`、`true` という名前のチャネルも正しいチャネル名であり、JavaScript の大域のものを隠しません。存在して品質のよい `NaN` はデータであり、`isNaN(Channels.Pv)` で調べられます。例：`Channels.Outlet_temperature > 80`、`Channels.Door_open && Channels.Heater_on`。

下書きは入力しながら、各チャネルの型の見本の値に対して検査され、見出しの下の注意書きが、何が通らないかを言います。

| 注意書き | 意味 |
| --- | --- |
| 「書き方の誤り：…」 | 式が構文として読めません。 |
| 「チャネルの参照「Channels.X」は、このモデルにありません。」 | 参照がどのチャネルも指していません。 |
| 「複数のチャネルが「Channels.X」に対応しています。」 | 2 つのチャネル名が同じ識別子になります。チャネルの表でどちらかの名前を変えてください。 |
| 「条件はブール値を返す必要がありますが、`<type>` を返しました。」 | 式が、真でも偽でもないものを返しています。 |
| 「評価の誤り：…」 | 式が例外を投げます。 |

正しくない条件も、下書きとしては保存されます。それはほかの場所に効きます。有効で、検査を通らず、手順に監視されている（その手順でチェックが付いている、または「常時」で監視される）発生記録は、その手順の開始を止め、手順のページに「発生記録「`<name>`」は成り立ちません。…」と出ます。正しくない「常時」の発生記録は、実行の外の監視を始めず、代わりに、ここに見える診断を 1 つ残します。読み取りのたびに繰り返しはしません。

評価は毎回、制限された処理系で走ります（500 ミリ秒の上限、文の数の上限、メモリの上限）。ですから、走り去る式が失敗させるのは自分の評価であって、ステーションではありません。

## 発生記録がどう判定されるか {#how-an-occurrence-is-judged}

実行の間、条件はデータログが記録する行の上で判定されるので、手順のデータログが記録しないチャネルは、条件から使えません。そういうチャネルを使う発生記録を監視する手順や、監視しておきながら何も記録しない手順は、自分のページでも開始でも拒まれます。その発生記録は決して判定されないからで、注意書きがそれを名指します。実行の外では、「常時」の発生記録を、ユニットのバインドを実時間で読む監視が判定します。どちらの判定器も、参照するチャネルのどれかが取得できない間は、最後に確定した状態を保ちます。判定を止めるのは値の欠測か品質の悪さだけで、存在して品質のよい値は（`NaN` も含めて）判定できるデータです。判定器は 4 つの遷移を記録します。**発生**（発生の遅延のあと）、**解除**（復帰の遅延のあと）、**取得不可**（参照するチャネルが信号を失いました）、**回復**（参照するチャネルがすべて戻りました。条件はまた判定され、当てはまる遅延が数え直しになります）です。

実行の間、どの遷移もまず実行記録ファイルに書かれ、それから実行の文脈とともに [Events](events-occurrences) のページの永続する記録簿へ写されます。実行の外では、監視が記録簿だけに書きます。実行を開始すると、そのユニットの実行外の判定器は捨てられ、実行から出ると新しいものが作られるので、観測されていない境目をまたいで発生が持ち越されることはありません。名前、メッセージ、重大度の編集は、あとの変わり目にだけ効きます。条件、遅延、監視するとき、有効かどうかの編集は、新しい観測を始めます。

発生区間（発生から復帰まで。信号を失っていた区間は別に数えます）は、アプリがそれを見せるところではどこでも、その変わり目から導かれます。操作パネルの発生記録のカード、Events のページ、履歴、レポートです。発生区間の継続時間は、永続した 2 つの変わり目の間隔そのものなので、発生の遅延を含まず、復帰の遅延を含みます。時計が動き出すのは、条件が発生の遅延の分だけすでに続いたあとであり、止まるのは復帰の遅延が走り終わって復帰が書かれたときだけです。それが、レポートが第三者に渡す数字です。

## 発生記録がどこで使われるか {#where-an-occurrence-is-used}

手順のページには**この手順の実行中に監視する発生記録**というカードがあり、「`<n>` 件を監視」のピルと、モデルの発生記録 1 件につき 1 つのチェックが名前順に並びます。チェックを付けると、その手順の実行の間、それが監視されます。**常時**で監視される発生記録は、それと関わりなく見張っているので、チェックは要りません。モデルに発生記録が 1 件もないときは「このモデルにはまだ発生記録がありません。モデルの「発生記録」で追加してください。」と出ます。[手順](process-procedures)を参照してください。

チャネルの名前を変えると、モデルのすべての条件の中の、そのチャネルの `Channels.<identifier>` の参照が書き換わります。文字列、注釈、別のものの上にある同じ名前の性質には触れません。

## 発生記録を削除 {#remove-occurrence}

**発生記録を削除**は、発生記録を選んだときの詳細のバーの危険のまとまり、その右クリックのメニュー、そしてフォルダーのページのカードの X にあります。先に尋ね（「発生記録を削除」、「モデルからこの発生記録を削除します。」）、それにチェックを付けていたすべての手順から、その発生記録の監視を外します。レシピと判定の編集が要り、エンジニアリングロックの下とランタイムの停止中は灰色になります。

## 発生記録がしないこと {#what-an-occurrence-does-not-do}

- 警報ではありません。確認されることはなく、優先度を持たず、タグを見張りません。プラントの警報は [Logic](logic-alarms) のページにあります。
- 何も起こしません。発生は記録され、知らされるだけです。アクションもラベルもレポートも、それに結び付いていません。
- モデルのチャネル以外は何も読めません。タグも、変数も、ほかのモデルも読めません。
- ユニットごとに違う判定をすることもありません。1 つの条件がすべてのユニットに効き、そのユニット自身のバインドか、記録された行の上で判定します。
