# ユニットのアドレス空間

> ユニットが Process.Model.Unit の下に公開するすべてのポイントと、その型と意味、どのポイントが書き込める指令か、そして Logic のスクリプトがそこから何を読めるかを説明します。

どのユニットも、自分の実行のデータを `Process.<Model>.<Unit>` の下のふつうの [Logic](logic) のアドレスとして公開するので、ダッシュボード、Logic の式、組み込みの OPC UA サーバー、エージェントは、余計な配管なしにそこへ届きます。この枝は、Logic のページの「ほかのページから来たもの」の下（[ほかのページから](logic-from-other-pages)）と、どのアドレスの選択欄でもたどれます。モデル、ユニット、チャネル、メタデータの項目、判定、判定基準の名前を変えると、対応するアドレスが置き換わり、実時間の文字の参照も書き換わります。記録されたファイルは、書かれたときの名前を固定したまま保ちます。区切りは整えられた名前です。「Climatic chamber」というモデルの「ユニット 1」というユニットは、`Process.Climatic_chamber.ユニット_1` として指されます。

| 枝 | 何を公開するか | 書き込めるか |
| --- | --- | --- |
| `Channels.<Channel>` | 各チャネルの、バインドされた実時間の値です。型はチャネルが宣言したとおりです。 | 書き込める役目のチャネル（書き込みのみ、または読み書き）は、書き込みの経路を通して書き込めるポイントです。実行が持っている信号源は、ほかのすべての書き手を拒みます。 |
| `Procedure.<point>` | 実行の状態で、ポイント 1 つにつき 1 つのスカラーです（下の表）。 | いいえ。 |
| `Commands.<command>` | `Start`、`Hold`、`Resume`、`Stop`、`Abort`、`Comment` です。 | はい。書き込むと送り出されます（下の表）。 |
| `Next.<point>` | 次の開始が使う用意の場所です。 | 手で入れるメタデータの項目だけです。 |
| `LastRun.<point>` | そのユニットが最後に終えた実行の記録です（[LastRun](#lastrun)）。 | いいえ。 |
| `Productivity.Today.<branch>` と `Productivity.Rolling.<branch>` | それぞれの期間についての、そのユニットの生産性の投影です。 | いいえ。 |

## チャネル {#channels}

チャネルのポイントは、そのユニットのバインドの裏にある値を、そのチャネルのデータ型に投影して読みます。チャネルがバインドされていないときや、その信号源が取得できないときは、欠測として読まれます。Logic のスクリプトの中では、そのポイントは、バインドされたタグや変数の読み取り専用の型付きの投影であって、タグそのものでは決してありません。`Value`、`ValueObject`、`ValueRaw`、`ValueScaled`、`ValueCalibrated`、`ValueLimited`、`ValueRounded`、変換の `ValueToBool()`、`ValueToInteger()`、`ValueToReal()`、`ValueToString()`、`ValueToDateTime()`、品質の `State()`、時刻印の `SourceTimeStamp()` と `ApplicationTimeStamp()`、`Refresh()`、`Name`、`EngineeringUnit` です。値の経路の要素が答えるのはタグのバインドのときです。変数のバインドは、値とアプリケーションの時刻印を答えます。

## 手順 {#procedure}

どのポイントも実時間の実行から計算され、良好な品質で読まれます。言うことのないポイントは、欠測として読まれます。

| ポイント | 型 | 意味 |
| --- | --- | --- |
| `Status` | 文字 | ユニットが確保されていて実行がまだないときは `Preparing`、何も持っていないときは `Idle`、そうでなければ実行の状態、つまり `Running`、`Held`、`Saving`、`Completed`、`Aborted`、`Failed` です。 |
| `Running` | ブール | 厳密に実行中の状態だけです。準備、一時停止中、保存中、終了処理では、決して真になりません。 |
| `Busy` | ブール | 占められている区間の全体です。確保、実行中、一時停止中、保存中、そして実行記録ファイルの最後の閉じまでです。 |
| `Verdict` | 文字 | `Ok`、`Nok`、`Indeterminate`、`None` です。画面や印刷したラベルがどんな言葉で示していても、値は大文字と小文字まで含めてこのとおりなので、比較は `Process.<Model>.<Unit>.Procedure.Verdict == "Nok"` と書きます。判断された根拠は、実行が終わったあとも、次の実行が始まるまで読めるままです。 |
| `Mode` | 文字 | 動いている実行の方式で、`Instant`、`Temporal`、`Controlled` です。単発の指令（スナップショット、その場で判定）も答えます。待機のときは欠測です。 |
| `ActiveProcedure` | 文字 | 動いている実行の名前です（「手順 · ユニット」）。待機のときは欠測です。 |
| `SegmentIndex` | 整数 | 時間のプロファイルの今の区間で、0 から数えます。プロファイルがないときは欠測です。 |
| `CycleIndex` | 整数 | 今のサイクルで、0 から数えます。待機のときは欠測です。 |
| `CycleCount` | 整数 | その実行のサイクルの総数です（1 回きりなら 1）。待機のときは欠測です。 |
| `Cycle` | 文字 | サイクルのある実行では「2 / 10」です。サイクルのない実行では欠測なので、バインドされた表示は、誤解を招く 1 回きりではなく、欠測の印を見せます。 |
| `FailedCycles` | 整数 | ここまでに不合格と判断されたサイクルです。サイクルのない実行では欠測です。 |
| `SamplesEvaluated`、`SamplesOut`、`SamplesUnavailable`、`SamplesInvalid` | 整数 | 判定の根拠の計数で、判定の仕組みがまとめて更新します。判断された根拠がないときは欠測です。 |
| `Elapsed` | 小数 | 実行が始まってからの秒数です。待機のときは欠測です。 |
| `StartedAt` | 日付と時刻 | 動いている実行が始まった時刻です。待機のときは欠測です。 |
| `Metadata.<Field>` | 文字 | モデルのメタデータの項目ごとに 1 つのポイントで、進行中の実行が開始のときに固定した値です。待機のときと、その実行が尋ねない項目では欠測です。空のまま残した項目は空のテキストとして読まれます。開始のときに呼び出されるアクションが、始まる実行から読むのはこれです。`Next.<Field>` が示すのは、すでにその次の実行だからです。 |

## 指令 {#commands}

指令のポイントを読むと「今これを実行できるか」が答えられるので、バインドされたボタンは自分を使えなくします。書き込むと、その指令が実行のコンソールを通して送り出され、書き込んだ面を出どころとして診断ログに残り、押した人の識別情報とともに記録されます。指令はサービスの呼び出しであって、待ち行列に入るポイントの書き込みでは決してありません。

| ポイント | 真を読むとき | 書き込むと |
| --- | --- | --- |
| `Start` | ユニットが忙しくなく、ランタイムが操作を受け付けていて、インターロックが正常で、手順が用意されているとき。 | 用意した手順を、用意したメタデータで開始します。 |
| `Hold` | 実行が実行中で、その手順が時間指定のとき。 | 時間の幅を凍らせます。 |
| `Resume` | 実行が一時停止中で、インターロックが正常のとき。 | 一時停止を解きます。 |
| `Stop` | 実行が実行中のとき。 | 実行を完了として終えます。 |
| `Abort` | 実行が実行中か一時停止中のとき。 | 実行を中止として終えます。 |
| `Comment` | 決してありません。このポイントに読み取りはありません。 | 書いた文を、動いている実行へのコメントとして追記します。ユニットが待機しているときは、そのユニットの直近に終わった実行への実行後のメモとして追記します。実行が 1 つもないユニットは拒み（「このユニットには、コメントを付ける実行記録がありません。」）、空の文も同じく拒まれます。 |

ステーションが書き込みを拒んでいる間（ランタイムの停止）、どの指令も偽を読みます。

## 次の開始 {#next}

| ポイント | 型 | 意味 |
| --- | --- | --- |
| `Next.Procedure` | 文字 | 用意した手順の名前です。ここでは読み取り専用です。用意はユニットの操作パネルの実行のカードで行います。 |
| `Next.<Field>` | 文字 | 用意した手順が尋ねるメタデータの項目 1 つにつき 1 つのポイントです。ユニットを用意し直すと、この枝は形を変え、別の手順の項目は欠測を読みます。手で入れる項目（文字か数値）は書き込める用意のポイントで、それにバインドした入力のコンポーネントが書くのがこれです。連番の項目は、カウンターが今なら組み立てるであろう識別子の読み取り専用の予測で、読んでもそれが確保されることは決してありません。 |

用意はステーション全体のもので、記憶の中にあり、一時的です。アプリケーションが立ち上がると解け、開始が消すのではなく使い切ります。

## 生産性 {#productivity}

2 つの期間があります。`Today`（現地の真夜中から）と `Rolling`（モデルかユニットが宣言した時間の幅）で、それぞれに 3 つの枝があります（[生産性](process-productivity)）。

| 枝 | ポイント | 型 |
| --- | --- | --- |
| `Summary` | `ProductivityPercent`、`YieldPercent`、`TypicalElapsedSeconds` | 小数。分母ができるまでは欠測です。 |
| `Summary` | `Finalized`、`OK`、`NOK`、`Indeterminate`、`Unclassified`、`Aborted`、`Failed` | 整数の計数です。 |
| `Outputs.<key>` | `Quantity`、`RatePerHour` | 小数。名前付きの数量 1 つにつき 1 つの鍵、モデルが数量を宣言していないときは、生産する手順 1 つにつき 1 つの鍵です。 |
| `Procedures.<key>` | `Quantity`、`RatePerHour` と、上のまとめのポイント | 上と同じで、生産する手順ごとです。 |

鍵は、変わらない識別子と固定された生産の単位から作られ、表示名からは作られないので、名前を変えても式が動くことは決してありません。どのポイントも読み取り専用で、その投影は履歴の索引から読まれ、実行記録ファイルからは決して読まれません。

## LastRun {#lastrun}

そのユニットが最後に終えた実行の記録です。どの実行だったか、どう終わったか、作業者が開始のときに何を入れたか、そして判定基準がそれぞれどうだったかを持ちます。完了のときに呼び出される Logic のアクションが読むのはこれで（[アクション](process-actions#logic-action-commands)）、ほかの使い手も同じように読みます。最後の 1 個を見せる画面、警報、ステーションのサーバーです。そのユニットの記録された実行はすべて数えます。失敗した実行も、スナップショットやその場で判定も含みます。取り込んだ実行は決して数えません。

| ポイント | 型 | 意味 |
| --- | --- | --- |
| `RunId` | 文字 | 実行の識別子です。 |
| `Procedure` | 文字 | 実行が記録した手順の名前です。 |
| `Status` | 文字 | `Completed`、`Aborted`、`Failed` のどれかで、この綴りのままです。 |
| `Verdict` | 文字 | `Ok`、`Nok`、`Indeterminate`、`None` のどれかで、`Procedure.Verdict` と同じ綴りです。失敗した実行は `None` と読まれます。 |
| `StartedAt`、`FinishedAt` | 日付と時刻 | 実行が始まった時刻と終わった時刻です。 |
| `Elapsed` | 小数 | 開始から終わりまでの秒数です。 |
| `CycleCount` | 整数 | 実行のサイクル数です（1 回だけの通しなら 1）。 |
| `FailedCycles` | 整数 | 不合格と判断されたサイクルです。 |
| `Metadata.<Field>` | 文字 | モデルのメタデータの項目ごとに 1 つのポイントで、実行が開始のときに固定した値です。その実行が尋ねなかった項目は欠測です。空のまま残した項目は空のテキストとして読まれます。 |
| `Evaluations.<Evaluation>.<Criterion>.<point>` | 下の表のとおり | モデルの判定ごとに 1 つのフォルダー、その下に判定基準ごとに 1 つのフォルダーがあり、判定基準の名前で、名前がなければ見ているチャネルの名前で呼ばれます。 |

判定基準はそれぞれ、判断されたすべてのサイクルを畳み込んだ 1 つの結果を持ちます。そのため、1 回だけの通しでも 100 サイクルの実行でも、アドレスは同じです。

| ポイント | 型 | 意味 |
| --- | --- | --- |
| `Outcome` | 文字 | `Ok`、`Nok`、`Indeterminate` のどれかで、この綴りのままです。不合格のサイクルが 1 つでもあれば `Nok`、そうでなく判定不能のサイクルが 1 つでもあれば `Indeterminate`、どちらもなければ `Ok` です。 |
| `Passed` | ブール | `Outcome` が `Ok` のときだけ真です。 |
| `Value` | 小数 | 見ているチャネルの測定値です。範囲の中で最後に評価されたサンプルで、1 点の方式では判断されたサンプルです。値を測った一番新しいサイクルのものです。 |
| `MinValue`、`MaxValue` | 小数 | すべてのサイクルを通して評価された、一番小さい値と一番大きい値です。 |
| `Limits` | 文字 | 記録されたとおりの上下限で、たとえば `5 .. 45` です。 |
| `WorstExcursion` | 小数 | すべてのサイクルを通して、限界を越えた一番大きな距離です。 |
| `FailedCycles` | 整数 | この判定基準を不合格と判断したサイクルです。 |

この枝の形はモデルから来ていて、最後の実行の形から来ることはありません。カタログのメタデータの項目すべて、そしてすべての判定のすべての判定基準がポイントになるので、そのどれかを名指しするスクリプトは、どの実行の前でも、別の判定で判断する手順を実行したあとでも、検証を通ります。

| 状況 | ポイントが読むもの |
| --- | --- |
| そのユニットの実行がまだ 1 つも終わっていない | どのポイントも、品質の悪い欠測です。 |
| 実行が終わる | 新しい記録で、ユニットの `Procedure.Status` が実行の終わりを告げる前に、もう入っています。 |
| そのユニットの別の実行が進んでいる | その実行が終わるまで、前の記録のままです。 |
| アプリケーションが起動し直す | そのユニットが最後に終えた実行を、起動の少しあとにその実行記録ファイルから読み直したものです。読み終わるまでは欠測です。 |
| 最後の実行が判断しなかった判定基準（別の判定のもの、またはあとで加えたもの） | どのポイントも欠測です。 |
| 名前が同じに読める 2 つの判定、または 2 つの判定基準 | 何もありません。アドレスはどちらにも結び付かず、判定のページがそう伝えます（[判定](process-evaluations#names-are-addresses)）。 |

メタデータの項目、判定、判定基準、または名前のない判定基準が見ているチャネルの名前を変えると、このページのほかの名前の変更と同じように、これらのアドレスが移ります。

## スクリプトが何をしてよいか {#what-a-script-may-do}

Logic の変数、警報、アクションのスクリプトは、ここにあるものをすべて**読め**ます。チャネルの値、実行の状態、指令が今できるかどうか、用意した値、最後の実行、生産性のポイントです。指令を送り出すことも、用意の項目に書き込むことも、コメントを追記することもできません。それらの書き込みは、はっきりした指令の使い手のものです。操作パネル、ダッシュボードのボタンと入力、ユニットの自動化、そしてエージェントのツールです。

チャネルのポイントは[チャネル](#channels)の型付きの投影として読まれます。ここにあるほかのポイントは、後ろに `.Value` を付けない、そのままの値として読まれます。変数とはここが違います。

```js
if (Process.Oven_soak.Oven_1.LastRun.Verdict === "Ok") {
  Variables.Last_serial = Process.Oven_soak.Oven_1.LastRun.Metadata.Serial;
}
```
