# 検証

> 構成の健全さを見るページ。手順、ロジック、ダッシュボード、サーバーとブローカーの一覧で何を調べるか、報告しうるすべての指摘とその言い回し、行が何を開くか、ナビゲーションバーのバッジ、そしてここで何も修復しない理由です。

検証のページは、ステーションが足場にできないものを並べます。チャネルのバインド、インターロック、自動化の項目、Logic の式、スクリプト、条件、そしてステーションがもう持っていないタグ、変数、手順、アドレスを指しているダッシュボードのコンポーネント、編集画面が拒否する書き方をしている Logic の式、スクリプト、条件、さらに、設定どおりでは実行が書類を出せない Process のアクション、そして実行の開始が拒否する手順です。ナビゲーションバーのいちばん下の**検証**の項目で、**検証の表示**の権限を持つ識別情報に対して開き、`/validation` で答えます。どの指摘も 1 つの文なので、全幅で描かれる、たどるページです。これは状態バーのランタイムの稼働状態と兄弟です。あちらはステーションが読めているかを言い、こちらは構成がまだ解決するかを言います。

ステーションがデータを渡す一覧（OPC UA サーバーの一覧、Modbus サーバーのレジスターマップ、MQTT ブローカーの発行の一覧）の行のうち、信号源が削除されたものも並べます。そうした行は一覧に残り、何も提供も発行もしません。

このページは報告します。修復は決してしません。行は、その不具合を持つエディターを、それを抱えている実体の上で開きます。修復はそこでのあなたの編集です。

## 状態のカード {#the-status-card}

いちばん上のカードは、構成についてのこのページの答えのすべてであり、きれいなステーションが告げられる唯一の場所です。

| 状態 | 点 | 表題 | 詳しく |
|---|---|---|---|
| きれい | 緑 | 直すものはありません | 手順、Logic、ダッシュボード、ステーションが提供・発行するもののすべての参照が解決し、どの手順も開始でき、どのアクションも出すのに必要なものがそろっています。 |
| 指摘あり | 黄 | 直すもの *N* 件（1 件のときは「1 件」） | ここでは何も直しません。行を押すと、その不備を抱えている対象の編集画面が開きます。 |

このカードは、このページの唯一の指令**再検査**を持ちます（ツールチップ：「いま、構成の全体をもう一度検査します。何かが変わるたびに、この一覧は自分でも読み直します。」）。スキャンが動いている間は灰色になります。同じものを見つけたスキャンは一覧をそのままにするので、結果は状態バーの操作ログ帯で伝えます。「再検査が終わりました：直すものはありません。」、「再検査が終わりました：直すもの *N* 件。」、または「再検査に失敗しました：*理由*」です。

再スキャンが要ることは、めったにありません。検証はステーションの上で常に動いており、それが読む面のどれかに変更のかたまりがあると、その 750 ミリ秒後に自分で調べ直します。読む面は、Connector の機器、回線、タグ、Process のモデル、資産、Logic の変数、アクション、警報、ダッシュボード、ラベルのテンプレート、レポートの様式です。ページとナビゲーションバーのバッジは、その結果に従います。Connector が機器を出し入れしている最中（ドライバーの更新、機器の追加）にかかったスキャンは、Connector が落ち着いてから取り直します。機器が動いている途中だというだけで、参照が壊れていると言われることは決してありません。

ステーションがデータを渡す 3 つの一覧も読みます。OPC UA サーバー、Modbus サーバー、ブローカーの発行のカードで行を追加、編集、削除したときも、行が名指すタグ、変数、警報、コマンドを削除したときも、同じように再スキャンします。

## グループ {#the-groups}

指摘は、それを抱える面ごとに、決まった順で並びます。中身のないグループは描かれないので、ダッシュボードの不具合が 1 つだけのステーションには、グループが 1 つだけ出ます。

| グループ | 指摘の種類 | 表題の下の行 |
|---|---|---|
| Process | バインド（チャネルのバインド、インターロック、自動化）、手順とそれが構える発生記録、アクションの書類 | *N* 件。このステーションにもうないタグ、変数、手順を指しているチャネルのバインド、インターロック、ユニットの自動化と、開始が拒否する手順と、いまの設定のままでは実行が文書を出せないアクションです。 |
| Logic | 式の変数、アクション、警報 | *N* 件。解決しなくなったアドレスを読んでいる、またはその編集画面が拒否する書き方をしている式、アクションのスクリプト、警報の条件です。 |
| ダッシュボード | コンポーネント | *N* 件。解決しなくなったアドレスをプロパティが指しているコンポーネントです。描かれはしますが、何も読みません。 |
| Connector | OPC UA サーバーの一覧、Modbus サーバーのレジスターマップ、MQTT ブローカーの発行の一覧の行 | *N* 件。信号源が削除された、OPC UA サーバーの一覧、Modbus サーバーのレジスターマップ、MQTT ブローカーの発行の一覧の行です。一覧には残りますが、何も提供も発行もしません。 |

## 1 行 {#a-row}

どの行も 1 つの指摘で、何も開かずに、何についての話かを言います。

- 種類を表す記号です。Process のバインドにはユニット、アクションの書類には印刷の印、手順には書かれた構成の印、発生記録には旗の印、Logic の木の変数、アクション、警報の印、コンポーネントにはダッシュボードの印が付きます。
- 実体の**名前**、続いて、名前が言わないことを型が言うときはその**型**（システムインテグレーターが名前を付けなかったコンポーネントは種類に戻るので、行が「メーター メーター」と読めることはありません）、続いて、場所があるときは「*場所* の中」です。
- 指摘です。相手を名指す項目なら「*項目* が `参照` を指していますが、それはもうありません。」と、参照を等幅で書きます。ランタイムが使えない項目なら「*項目*：*何がおかしいか*。」です。
- 右側の矢印です。行は何かを開きます。行のツールチップと読み上げ名は、文の全体に、押した先がどこかを添えたものです（「Process でユニットを開く」、「Process でアクションを開く」、「Process で手順を開く」、「Process で発生記録を開く」、「編集画面でコンポーネントを開く」、「Logic で変数を開く」、「Logic でアクションを開く」、「Logic で警報を開く」）。
- サーバーの一覧の行では、記号は Connector の木がその一覧を持つもの（OPC UA サーバー、Modbus サーバー、MQTT ブローカー）に描く印で、押した先はツールチップの最後が言うところです（「OPC UA サーバーで行を開く」、「Modbus サーバーで行を開く」、「MQTT ブローカーのページで行を開く」）。

## スキャンが出しうるすべての指摘 {#every-finding-the-scan-can-produce}

下の言い回しは、このページ自身のものです。チャネルのバインドは信号源の鍵を保存しているので、その行は、もう解決しない鍵を名指します。インターロック、自動化の信号源、返しは、操作者が読むことのない識別情報を保存しているので、その行は、それを表示する代わりに、タグや変数が削除されたことを言います。

### Process：チャネルのバインド {#process-channel-bindings}

型は「チャネルのバインド」、名前はチャネルの名前（または「（削除されたチャネル）」）、場所は「*モデル* · *ユニット*」です。モデルのチャネルの画面を、そのユニットの上で開きます。

| 項目 | 言い回し |
|---|---|
| タグ | 保存されたタグの鍵を指していますが、それはもうありません |
| 変数 | 保存された変数の鍵を指していますが、それはもうありません |

### Process：インターロック {#process-interlocks}

型は「インターロック」、名前はユニットの名前、場所は「*モデル* · *ユニット*」です。ユニットは、実際に観測しているもの、つまり自分の信号源か、モデルに従うときはモデルの既定で判断されます。モデルの自動化の画面を、そのユニットの上で開きます。

| 項目 | 言い回し |
|---|---|
| 信号源 | モデルに従っていますが、そのモデルの既定はブール値の信号源を指していません。 |
| 信号源 | ブール値の信号源が設定されていません。 |
| 信号源 | タグと変数の両方が選ばれています。 |
| タグ | 設定されていたタグが削除されました。 |
| タグ | DateTime のタグはブール値に変換できません。（Guid と ByteString のタグも同じです） |
| 変数 | 設定されていた変数が削除されました。 |
| 変数 | 日時の変数はブール値に変換できません。（画像、アイコン、色の変数も同じです） |

最初の 3 つは、モデルの停止インターロックが有効なときにだけ報告されます。

### Process：自動化 {#process-automation}

型は「自動化」、名前はユニットの名前、場所は「*モデル* · *ユニット*」です。判断されるのは**有効な**自動化だけです。切ってあるものは何も動かさないので、一覧から退きます。モデルの自動化の画面を、そのユニットの上で開きます。

| 項目 | 言い回し |
|---|---|
| コマンド | 開始の信号源が設定されていません。 |
| 手順 | 固定の手順が使えません。（固定の選択のとき） |
| 選択 | 整数の信号源についての、信号源の指摘（下にあります） |
| 選択コード *n* | 削除された手順を選んでいます。 |
| *開始*指令の信号源、*停止*指令の信号源など、指令の信号源ごとに 1 つ | ブール値の信号源についての、信号源の指摘 |
| メタデータ | 対応付けが、削除された手順か項目を埋めようとしています。 |
| メタデータ「*項目*」 | 信号源の指摘（数値の項目には数値、それ以外にはブール値、整数、実数、文字、日付）、または、この項目は自動生成に対応していません。 |
| 返し「準備完了」、返し「進行中」、返し「選択済みコード」、返し「指令の結果」 | 書き込む先のタグが削除されました。／書き込む先のタグは書き込みできません。／ブール値のタグが必要です。（準備完了、進行中）／整数のタグが必要です。（選択済みコード、指令の結果） |

信号源の指摘は次のどれかです。「信号源が設定されていません。」、「タグと変数の両方が選ばれています。」、「読み取る先のタグが削除されました。」、「読み取る先のタグは読み取りできません。」（タグが無効か書き込み専用のとき）、「ここでは *型* のタグは使えません。」、「読み取る先の変数が削除されました。」、「ここでは *型* の変数は使えません。」。合うかどうかは、その項目の役目に従います。ブール値の信号源にはブール値のタグか変数が要り、整数の信号源には整数の型が、数値の信号源には整数か実数の型が、メタデータの信号源にはブール値、整数、実数、文字、日付のいずれかの型が要ります。

### Process：手順 {#process-procedures}

型は「手順」、名前は手順の名前、場所はモデルの名前です。この判断は実行の開始が通るのと同じ関門を通るので、この一覧が動かせると言う手順は、装置が受け付ける手順です。手順自身のページを開きます。

| 項目 | 言い回し |
|---|---|
| 組み立て | 判定は、記録した行に対して行います。この手順は判定を持っていますが、データログがありません。 |
| 組み立て | 発生記録「*名前*」は、記録したサンプルを監視します。この手順はこれを有効にしていますが、データログがありません。 |
| 組み立て | 実行するものがありません。この手順は、データログもレシピも参照していません。 |
| 組み立て | 即時の方式には、即時のレシピが必要です。レシピなしでもかまいません。時間のプロファイルには、1 つの時点がありません。 |
| 組み立て | 制御ありの方式には、即時のレシピが必要です。レシピなしでもかまいません。設定値は開始時に、安全な状態は停止時に書き込みます。 |
| 組み立て | 時間指定の方式には、長さが必要です。長さを決めてください。 |
| 組み立て | 時間指定の方式には、時間指定のレシピが必要です。レシピなしでもかまいません。即時の設定には、時間の流れがありません。 |
| 組み立て | レシピのプロファイル（*N* ms）は、時間範囲（*M* ms）より長くなっています。 |
| 組み立て | 発生記録「*名前*」は「Channels.*チャネル*」を監視しますが、この手順のデータログはそれを記録しません。 |
| 組み立て | 完了した実行が生産に何を足すかについての拒否、または狙った先のチャネルに届かないレシピの値についての拒否で、それを持つエディター自身の言い回しです。 |

### Process：発生記録 {#process-occurrences}

型は「発生記録」、名前は発生記録の名前、場所はモデルの名前です。読むのは手順が構える発生記録だけで、いくつの手順が構えても 1 回だけ読みます。条件は 1 つで、直す場所も 1 つだからです。発生記録自身のページを開きます。

| 項目 | 言い回し |
|---|---|
| 条件 | 条件自身の拒否で、発生記録のエディターの言い回しです。このモデルにないチャネルの参照、読み取れない条件、ブール値以外を返す条件、あるいは同じ名前に行き着く 2 つのチャネルです。これも英語で書かれます。 |

それ自体は成り立つのに判定できない条件は、その手順のデータログが見ているチャネルを外しているからであり、その手順の指摘になります。データログは手順自身の選択だからです。

### Process：アクションの書類 {#process-action-paperwork}

型は「アクション」、名前はアクションの名前、場所はモデルの名前です。この判断は、アクション自身のページが「確認が必要」の知らせを描くのに使うものと同じなので、そちらで整っているとされたアクションは、ここでも整っています。アクション自身のページを開きます。

| 項目 | 言い回し |
|---|---|
| コマンド | 指令を追加してください。このアクションはまだ何も出しません。 |
| 指令 *n* · 開始時のラベル、指令 *n* · 完了時のレポートなど | その指令についての最初の注意、続いて、ほかにもあるときは「（このコマンドには、ほかに *k* 件あります）」です。注意をいくつも抱えた指令も、1 つのページで行う 1 つの修復なので、1 行です。 |

1 つの指令が抱えうる注意を、修復する順に並べます。

- 完了時の総合判定を 1 つ以上選んでください。（完了時の指令で、総合判定に 1 つも印が付いていないとき）
- レポートを選んでください。／選んだレポートはもうありません。
- ラベルのテンプレートを選んでください。／テンプレートを外したか、削除しました。保存した対応付けは残ります。／選んだ共通テンプレートはもうありません。
- 選んだテンプレートには、まだプリンターの指令がありません。実行がこの指令に届く前に、書くか取り込んでください。
- テンプレートの差し込み項目を読み取れません：*誤り*
- `{{marker}}` には信号源が必要です。／`{{marker}}` が 2 回以上対応付けられています。
- `{{marker}}`：信号源を選んでください ／ この信号源は開始時には使えません ／ このモデルのメタデータ一覧から項目を選んでください ／ このモデルのいずれかの判定から判定基準を選んでください ／ 0 から数えるサイクルを 0 から *n* までで明示してください ／ この日付と時刻の信号源から小数桁を外してください ／ この数値の信号源には既定の書式を使ってください ／ 小数桁は 0 から 9 までです ／ この文字の信号源から数値と日付の書式を外してください
- `{{marker}}` は今のテンプレートから削除されました。保存した対応付けも消してください。

### Logic {#logic}

場所はありません。Logic の種類は最上位だからです。解決しないアドレスごとに 1 行で、アドレスは式が書くとおりに書きます。調べるのは式の変数だけです。内部値の変数には、読むべき式がありません。テキストのアドレスがすべて解決するときは、そのテキストを編集画面と同じように判定し、編集画面が拒否するテキストは 1 行になり、編集画面のメッセージそのものが言い回しになります。`!Variables.Start` として保存した警報は 「「Variables.Start」は値ではなくポイントそのものです。条件として使うと常に真とみなされます。Variables.Start.ValueToBool() で値を読んでください。」になります。この判定は、現在の値を使った編集画面の試しの評価を含まないので、行が読み取りとともに出たり消えたりすることはありません。空のテキストは並べません。まだ書かれていない定義だからです。

| 型 | 項目 | 言い回し |
|---|---|---|
| 式の変数 | 式 | `address` を指していますが、それはもうありません |
| アクション | スクリプト | `address` を指していますが、それはもうありません |
| 警報 | 条件 | `address` を指していますが、それはもうありません |
| 式の変数 | 式 | 編集画面がそのテキストを拒否するときのメッセージ ([検証が拒否するもの](logic-expressions#what-validation-refuses)) |
| アクション | スクリプト | 編集画面がそのテキストを拒否するときのメッセージ ([検証が拒否するもの](logic-actions#what-validation-refuses)) |
| 警報 | 条件 | 編集画面がそのテキストを拒否するときのメッセージ ([検証が拒否するもの](logic-expressions#what-validation-refuses)) |

### ダッシュボード {#dashboards}

型はエディターが呼ぶコンポーネントの種類（メーター、折れ線グラフ、数値…）、名前はコンポーネントに入力した名前、なければその見出し、それもなければエディターが導き出すものです。場所はダッシュボードの名前です。アドレスの項目ごとに 1 行なので、値と色が削除された 2 つのポイントを読んでいるコンポーネントは、修復 2 件になります。

| 項目 | 言い回し |
|---|---|
| アドレス、色のポイント、系列 2 › アドレス、そしてその種類のほかのすべてのアドレスの項目です。どの項目も、エディターのプロパティのパネルが付けるラベルで書かれます（入れ子の一覧は、その道筋として読めます） | `address` を指していますが、それはもうありません |

読むのはアドレスの項目だけで、しかも根から書かれ、少なくとも 1 つの区切りを持つアドレスとして解釈できる値だけです。「Process.Press 1.Temperature」を抱えたテキストは文字であって参照ではないので、決して報告されません。同じ項目の同じアドレスは 1 つの指摘です。Process のモデルの上で定義された画面は飛ばします。それらはユニットの置き場所を通してチャネルをバインドするので、ユニットがその画面を開くまで、どのポイントもそのアドレスに答えないからです。

### Connector {#connector}

OPC UA サーバーの一覧、Modbus サーバーのレジスターマップ、MQTT ブローカーの発行の一覧の行は、信号源（タグ、変数、警報、OPC UA サーバーでは機器のコマンドも）をその識別情報で持ちます。名前を変えても壊れず、削除されると、失ったものの名前を示したまま行が残ります。そうした行はここに並び、それは自分の表で見つからないと示される行と同じです。ステーションにまだあるが選べない信号源（無効なタグ、無効な機器のタグ、どのレジスターも運べない型の変数）は並べません。何が締め出しているかは、その行の項目が言います。行が保存しているのはオペレーターが読むことのない識別情報なので、それを表示する代わりに、どの種類の信号源がなくなったかを言います。

| 型 | 名前 | 場所 | 項目 | 言い回し |
|---|---|---|---|---|
| 提供するノード | 見つからないタグ、見つからない変数、見つからない警報、見つからないコマンド | OPC UA サーバー | 信号源 | 提供していたタグが削除されました。/ 提供していた変数が削除されました。/ 提供していた警報が削除されました。/ 提供していたコマンドが削除されました。 |
| レジスターマップの行 | マップが読むとおりの行の場所（レジスターの種類とレジスター） | Modbus サーバー | 信号源 | 提供していたタグが削除されました。/ 提供していた変数が削除されました。/ 提供していた警報が削除されました。 |
| 発行するトピック | 行のトピック | ブローカーの名前 | 信号源 | 発行していたタグが削除されました。/ 発行していた変数が削除されました。/ 発行していた警報が削除されました。 |

このページは何も削除も変更もせず、各サーバーはその行についてそれまでどおりにふるまいます。OPC UA サーバーはその行について何も提供せず、Modbus サーバーはそのレジスターを読むクライアントに例外 04 で答え、ブローカーはそのトピックに保持した最後のメッセージを持ち続けます。修復はその行のカードで行います。別の信号源を選ぶか、行を削除します。

## 行が何を開くか {#what-a-row-opens}

| 種類 | 開くもの | どこに着くか |
|---|---|---|
| コンポーネント | 編集の状態のダッシュボード（`/d/{dashboard}?edit=true&focus={component}`） | そのコンポーネントを選び、その性質を出した状態です。アドレスはそこで入力し直します。編集にはダッシュボードの編集の権限が要ります。それがなければ、ダッシュボードは閲覧のために開きます。 |
| チャネルのバインド | Process のワークスペース（`/process?focus={unit}&screen=channels`） | モデルのチャネルの画面で、そのユニットの行が選ばれ、その上のフォルダーはすべて開かれています。 |
| インターロック、自動化 | Process のワークスペース（`/process?focus={unit}&screen=automation`） | モデルの自動化の画面で、そのユニットの行が選ばれています。 |
| アクションの書類 | Process のワークスペース（`/process?focus={action}&screen=action`） | 列の中の、そのアクション自身のページです。 |
| 手順 | Process のワークスペース（`/process?focus={procedure}&screen=procedure`） | 列の中の、その手順自身のページです。 |
| 発生記録 | Process のワークスペース（`/process?focus={occurrence}&screen=occurrence`） | 列の中の、その発生記録自身のページです。 |
| 式の変数、アクション、警報 | Logic のページ（`/logic?focus={id}`） | その実体がエディターで選ばれ、アドレス空間のその部分が開かれています。 |
| 提供するノード、レジスターマップの行、発行するトピック | Connector（`/connector?focus={row}`） | 木で OPC UA サーバー、Modbus サーバー、またはブローカーが選ばれ、その提供するノード、レジスターマップ、発行のカードで行が選ばれて、表の下にその項目が開いています。そこで別の信号源を選ぶか、行を削除します。 |

開くと不具合の上に着きます。編集については、着いた先のページが自分の権限を当てはめます（Process の画面では Process の管理、Logic では Logic の構成、Connector では Connector の構成）。ページが着いたときにもう解決しない実体（その間に削除されたもの）は無視され、ページはいつもどおりの場所に開きます。

## ナビゲーションバーのバッジ {#the-rail-badge}

ナビゲーションバーの検証の項目には、修復が必要な項目の数を入れた注意のピルが付きます。99 を超えると「99+」になり、構成がきれいな間はピルが付きません。この数は検証自身のもので、ページが従うのと同じ再スキャンによって背後で最新に保たれるので、このページを開いていなくても、どのページで編集しても動きます。このページを開いたときと、このページで再スキャンしたときも数は更新されるので、ピルが一覧と違う数を示すことはありません。

## このページが決してしないこと {#what-the-page-never-does}

- 何も修復しません。バインドの張り直しも、削除も、名前の変更もしません。どの行も「開く」であり、行にほかの操作はなく、まとめての操作もありません。
- ランタイムを判断することは決してありません。通信していない機器は状態バーの稼働状態の話であって、ここの指摘ではありません。存在していて品質の悪い値を読むタグへの参照は、解決します。
- 無効な自動化、モデルの上で定義された画面、アドレスに見える自由な文字、内部値の変数、そして同じアクションの指令の 2 つ目以降の注意は、決して報告しません（あとどれだけそのページで待っているかは、数が言います）。
- どの手順も構えていない発生記録は決して読まず、いくつの手順が構えていても同じ発生記録を二度は並べません。条件が 1 つなら修復も 1 つです。
- Connector が移り変わっている最中には決して調べません。待ってから、一度だけ測ります。
- どの画面でも、ステーションのウィンドウでもブラウザーでも同じ一覧で、開いてよいどの識別情報にとっても同じです。権限が守るのはページであって、その行ではありません。
- ランタイムが停止している間は、ほかのページと同じように一時停止の知らせに場所を譲ります。バッジは最後の数を保ちます。
- サーバーの一覧の行を削除することも、サーバーがその行をどう扱うかを変えることも決してありません。ステーションにまだあるが選べない信号源（無効なタグ、どのレジスターも運べない型の変数）を並べることも決してありません。それはその行のカード自身が言います。
