# アドレス空間

> すべてのポイントが属する 7 つの予約された最上位、アドレスの書き方と変換のされ方、ポイントが終わってメンバーが始まる場所、絞り込みの入力欄が絞るもの、そして編集画面でアドレスを入れる 3 つの方法。

式、スクリプト、ダッシュボードのバインド、エージェントのツールが名指しできるポイントは、すべて 7 つの予約された最上位のどれかの下にあります。自分で付けた名前も必ず最上位の下にあるので、最上位そのものとぶつかることはありません。Logic のページの欄は同じ最上位を、2 つの見出しに分けて描きます。そして、ツリーが見せるものが、そのまま入力するものです。行のアドレスが、式が使う文字列そのものです。

## 7 つの最上位 {#the-seven-roots}

| 最上位 | 何を持つか | 欄での見出し | 編集する場所 |
| --- | --- | --- | --- |
| `System` | アプリケーションが自分自身について公開する 4 つの診断の値 | ほかのページから来たもの | どこでも編集しません |
| `Server` | 内蔵の OPC UA サーバーの 4 つの診断の値 | ほかのページから来たもの | [Connector](connector-opcua-server)で |
| `Connector` | 実時間のドライバー、フォルダー、機器、タグのツリー | ほかのページから来たもの | [Connector](connector) のページで |
| `Variables` | ここで定義する変数を、そのフォルダーの中に | ここで定義したもの | ここで |
| `Alarms` | ここで定義する警報の実時間の状態を、そのフォルダーの中に | ここで定義したもの | ここで（状態そのものは読み取り専用です） |
| `Process` | モデルごとのユニット。チャネル、実行の状態、生産性、コマンド、用意 | ほかのページから来たもの | [Process](process) のページで |
| `Assets` | ライブラリの画像、アイコン、色を、名前でアドレスにできる形で | ここで定義したもの、Assets の最上位として | [素材](logic-assets)のパネルで |

Actions と Triggers は欄の節ではありますが、アドレス空間の最上位ではありません。アドレスではなく識別で参照され、実時間の値も持ちません。`Assets` の最上位は、式と「参照…」の選択のために存在します。欄ではその場所をライブラリの Assets の最上位が占めるので、ツリーに同じ名前の最上位が 2 つ出ることはありません。`System` と `Server` の決まったポイント、そして `Connector` と `Process` の枝の形は、[ほかのページから来たもの](logic-from-other-pages)に並べてあります。

## アドレスの書き方 {#how-an-address-is-spelled}

アドレスは、予約された最上位を根とする、ドットで区切った区切りの並びです。`Connector.Simulated.Air.CompressedAir.HeaderPressure`、`Variables.Forno.Setpoint`、`Alarms.HighLevel`、`System.Now`、`Assets.Colors.Red` のようになります。表示の名前は自由記述のままで、アドレスは各名前を変換した区切りを使います。英数字でない文字はすべて `_` になり、数字で始まる名前は先頭に `_` が付きます（`Forno de teste` は `Forno_de_teste` に、`3rd zone` は `_3rd_zone` に、空の名前は `_` に応えます）。区切りは必ず識別子なので、ドットの形は必ず使えます。区切りは、文字列のリテラルを使った角かっこの形（`Variables["Setpoint"]`）でも書けて、評価は同じアドレスとして読みます。

ポイントが終わってメンバーの参照が始まる場所は、最上位によって変わります。`Connector` のアドレスは、ドライバーと機器の間に機器のフォルダーの段を持ちます（シリアル回線も MQTT のブローカーも段を足しません）。`Variables` と `Alarms` は名前の前にフォルダーを 3 段まで持ちます。ですからこれらの最上位では、ポイントは解決できるいちばん長い前半で、その後ろに続くものがメンバーです（`.Value`、`.State()`）。`Assets` は必ず最上位の 2 つ下です。`Process` は、ふつうのポイントで 4 つ、生産性のまとめのポイントで 6 つ、生産性の産出や手順のポイントで 7 つです。その最上位が許すより短い連なりは、不完全なアドレスとして拒否されます。

式とスクリプトの中のアドレスは静的でなければなりません。どの区切りも識別子か文字列のリテラルで、計算した値であってはいけません。`Variables[someName]` は、検証のときに「アドレスは静的でなければなりません」として拒否されます。

## アドレスの衝突 {#address-collisions}

1 つの節の 1 つの段は、そこに入れたフォルダーと定義が共有する 1 区切りの名前空間です。違うフォルダーにある `Setpoint` という名前の変数が 2 つあるのはかまいません。同じ段で `Forno` に変換される変数とフォルダーはいけませんし、`Pump 1` と `Pump_1` が並ぶのも同じです。編集画面は、入力しているそばからそういう名前を拒否し、すでにそのアドレスに応えているものを名指しします。「「Pump 1」は、すでに「Variables.Pump_1」として応答します。同じフォルダーに入れる名前は、それぞれ違う区切りに変換される必要があります。」素材も分類ごとに同じ規則に従います。自分の画像、アイコン、色のうち 2 つが同じ区切りを共有することはできませんし、区切りがシステムの項目と一致するユーザーのアイコンや色は、そのアドレスでシステムのものより優先されます。

## アドレスを入れる {#entering-an-address}

[式](logic-expressions)、条件、スクリプトにアドレスを入れる方法は 3 つあります。

- **入力する。**編集画面はアドレスの語を補完します。裸の語には最上位の名前（`Con` は `Connector` を出します）、次にそこまで入力した道すじの子を、大文字と小文字を問わない前方一致で、そしてその語がポイントを指したあとは、そのポイントの読めるメンバーを出します。候補はどれも語の全体を置き換えます。
- **参照…**は、`Assets` の最上位も含めた、すべての最上位のメンバーの段までのツリーの上に選択の画面を開きます。行を選んで**挿入**を押すか、その行をダブルクリックすると、そのアドレスがカーソルの位置に置かれます。フッターは、選んだ行が挿入する文字列を見せ、何も選んでいない間は「ダブルクリック（または「挿入」）で編集画面に追加します。」と出します。
- **ポイントから写す。**欄のどのポイントを選んでも[ポイントのパネル](logic-from-other-pages#the-point-panel)が開き、そのアドレスの項目は選んでコピーできる読み取り専用の文字列で、実時間の値、その品質、その時刻の隣にあります。変数と警報の編集画面も、名前の入力欄の下に自分のアドレスを繰り返します。

ポイントの下で、選択の画面はその読めるメンバー（`Value`、`ValueToReal()`、`State()` など）を並べます。メンバーはそれ自体のアドレスではありません。ポイントのアドレスの後ろに足すものです。[式](logic-expressions#the-read-surface-of-a-point)は、この同じ面を、それぞれのメンバーが返すものとともに並べます。

## 絞り込みの入力欄 {#the-filter-box}

欄の上の**絞り込み…**の入力欄は、名前に入力した文字を含む行だけにツリーを絞ります。大文字と小文字は問いません。ポイントは、それ自身が一致したときだけ残ります。フォルダーは、それ自身か子孫のどれかが一致したときに残り、一致したところまで開きます。Actions と Triggers の節は、名前が一致した行だけを並べます（節自身の名前が一致すれば節は一覧に残りますが、中は空です）。Assets の最上位は、名前が一致する分類だけに絞られ（`Col` と入力すると Colors が残ります）、その最上位自身の名前だけが一致したときは丸ごと出ます。名前が一致したアドレス空間の最上位は一覧に残り、展開したときに枝を読み込みます。メンバーが絞り込んだ表示に入ることはありませんし、絞り込みはその画面だけのものです。同じステーションを開いているもう 1 つのブラウザーは、自分の絞り込みを保ちます。

## アドレス空間がしないこと {#what-the-address-space-does-not-do}

無効な機器、Connector にタグが実体化されていない機器、そしてバインドのない Process のチャネルについては、何も公開しません（そのチャネルは一覧には出ますが、メンバーを差し出しません）。名前は翻訳されません。アドレスは表示の名前を変換したものなので、変数、警報、フォルダー、機器、タグ、画像の名前を変えることは、アドレスを変えることです。アプリはそれを、安全な名前の変更ですべての参照の中で書き換えます（[変数](logic-variables#name-and-address)、[機器のフォルダー](connector-folders)）。
