# Lo spazio degli indirizzi

> Le sette radici riservate sotto cui vive ogni punto, come si scrive e si ripulisce un indirizzo, dove finisce un punto e comincia un membro, che cosa restringe la casella di filtro, e i tre modi per immettere un indirizzo in un editor.

Ogni punto che un'espressione, uno script, un collegamento di dashboard o uno strumento dell'agente può nominare vive sotto una delle sette radici riservate. I nomi dell'operatore vivono sempre sotto una radice, quindi non si scontrano mai con le radici stesse. La colonna della pagina Logic disegna le stesse radici, divise sotto due intestazioni, e quello che l'albero mostra è esattamente quello che si scrive: l'indirizzo di una riga è il testo che un'espressione usa.

## Le sette radici {#the-seven-roots}

| Radice | Che cosa contiene | Intestazione nella colonna | Modificata |
| --- | --- | --- | --- |
| `System` | Quattro diagnostiche che l'applicazione pubblica su sé stessa | Da altre pagine | In nessun posto |
| `Server` | Quattro diagnostiche del server OPC UA integrato | Da altre pagine | Nel [Connector](connector-opcua-server) |
| `Connector` | L'albero vivo di driver, cartelle, dispositivi e tag | Da altre pagine | Nella pagina [Connector](connector) |
| `Variables` | Le variabili che definisci qui, nelle loro cartelle | Definiti qui | Qui |
| `Alarms` | Lo stato vivo degli allarmi che definisci qui, nelle loro cartelle | Definiti qui | Qui (lo stato in sé è in sola lettura) |
| `Process` | Le unità di ogni modello: canali, stato della prova, produttività, comandi, preparazione | Da altre pagine | Nella pagina [Process](process) |
| `Assets` | Immagini, Icone e Colori della libreria, indirizzabili per nome | Definiti qui, sotto la radice Assets | Nei pannelli [Risorse](logic-assets) |

Actions e Triggers sono sezioni della colonna ma non radici dello spazio degli indirizzi: sono referenziati per identità, non per indirizzo, e non portano alcun valore in tempo reale. La radice `Assets` esiste per le espressioni e per il selettore Sfoglia…; nella colonna il suo posto è preso dalla radice Assets della libreria, così l'albero non mostra mai due radici con quel nome. I punti fissi di `System` e di `Server`, e la forma dei rami `Connector` e `Process`, sono elencati in [Da altre pagine](logic-from-other-pages).

## Come si scrive un indirizzo {#how-an-address-is-spelled}

Un indirizzo è fatto di segmenti separati da punti, radicati in una radice riservata: `Connector.Simulated.Air.CompressedAir.HeaderPressure`, `Variables.Forno.Setpoint`, `Alarms.HighLevel`, `System.Now`, `Assets.Colors.Red`. I nomi visualizzati restano testo libero; l'indirizzo usa il segmento ripulito di ogni nome: ogni carattere che non è una lettera o una cifra diventa `_`, e un nome che comincia con una cifra riceve un `_` iniziale (`Forno de teste` risponde a `Forno_de_teste`, `3rd zone` a `_3rd_zone`, un nome vuoto a `_`). I segmenti sono sempre identificatori, quindi la forma con i punti funziona sempre; un segmento si può anche scrivere tra parentesi quadre con un valore stringa, `Variables["Setpoint"]`, e il valutatore lo legge come lo stesso indirizzo.

Dove finisce il punto e comincia l'accesso a un membro dipende dalla radice. Gli indirizzi `Connector` portano i livelli di cartella del dispositivo tra il driver e il dispositivo (una linea seriale o un broker MQTT non aggiunge livelli), e `Variables` e `Alarms` portano fino a tre livelli di cartella prima del nome, quindi sotto queste radici il punto è il prefisso più lungo che si risolve e ciò che segue è un membro (`.Value`, `.State()`). `Assets` è sempre due segmenti sotto la radice; `Process` ne ha quattro per un punto ordinario, sei per un punto di riepilogo di produttività e sette per un punto di uscita di produttività o di procedura. Una catena più corta di quanto la sua radice ammetta viene rifiutata come indirizzo incompleto.

Gli indirizzi nelle espressioni e negli script devono essere statici: ogni segmento un identificatore o un valore stringa, mai un valore calcolato. `Variables[someName]` viene rifiutato alla convalida con « Addresses must be static ».

## Collisioni di indirizzo {#address-collisions}

Un livello di una sezione è un unico spazio di nomi di segmento, condiviso dalle cartelle e dalle definizioni archiviate lì. Due variabili chiamate `Setpoint` in cartelle diverse vanno bene; una variabile e una cartella che allo stesso livello si riducono entrambe a `Forno` no, e nemmeno `Pump 1` e `Pump_1` fianco a fianco. Gli editor rifiutano un nome simile mentre lo si scrive, nominando ciò che risponde già all'indirizzo: « 'Pump 1' risponde già a 'Variables.Pump_1'. I nomi archiviati in una stessa cartella devono ridursi a segmenti distinti. » Le risorse seguono la stessa regola dentro ogni categoria: due immagini, icone o colori dell'operatore non possono condividere un segmento, e un'icona o un colore utente il cui segmento coincide con una voce di sistema la sostituisce all'indirizzo.

## Immettere un indirizzo {#entering-an-address}

Tre modi per immettere un indirizzo in un'[espressione](logic-expressions), in una condizione o in uno script:

- **Scriverlo.** L'editor completa i simboli dell'indirizzo: i nomi delle radici per un simbolo nudo (`Con` propone `Connector`), poi i figli del percorso scritto fino a quel punto, confrontati per prefisso senza distinguere maiuscole e minuscole, e i membri leggibili di un punto appena il simbolo nomina un punto. Ogni candidato sostituisce il simbolo intero.
- **Sfoglia…** apre un selettore sull'albero, fino al livello dei membri, di ogni radice, radice `Assets` compresa. Seleziona una riga e premi **Inserisci**, oppure fai doppio clic su di essa, per mettere il suo indirizzo al punto di inserimento. Il piede mostra il testo che la riga selezionata inserisce, oppure « Doppio clic (o Inserisci) per aggiungere all'editor. » mentre non c'è nulla di selezionato.
- **Copiarlo da un punto.** Selezionare un punto qualsiasi nella colonna apre il [pannello del punto](logic-from-other-pages#the-point-panel), il cui campo Indirizzo è testo in sola lettura che si può selezionare e copiare, accanto al valore in tempo reale, alla sua qualità e alla sua marca temporale. Un editor di variabile o di allarme riporta il proprio indirizzo sotto il campo Nome.

Sotto un punto, il selettore elenca i suoi membri leggibili (`Value`, `ValueToReal()`, `State()` e così via). Un membro non è un indirizzo a sé: è ciò che aggiungi all'indirizzo del punto. [Espressioni](logic-expressions#the-read-surface-of-a-point) elenca quella stessa superficie, con ciò che ogni membro restituisce.

## La casella di filtro {#the-filter-box}

La casella **Filtra…** sopra la colonna restringe l'albero alle righe il cui nome contiene il testo scritto, senza distinguere maiuscole e minuscole. Un punto sopravvive solo quando corrisponde; una cartella sopravvive quando corrisponde lei o un suo discendente, e si apre fino alle corrispondenze. Le sezioni Actions e Triggers elencano solo le righe il cui nome corrisponde (il loro nome tiene la sezione elencata, ma vuota); la radice Assets si restringe alle categorie il cui nome corrisponde (scrivere `Col` lascia Colors, il nome che mostra la riga dell'albero) e arriva intera quando corrisponde solo il proprio nome; una radice dello spazio degli indirizzi il cui nome corrisponde resta elencata e carica il suo ramo quando la espandi. I membri non fanno mai parte della vista filtrata, e il filtro appartiene solo alla propria finestra: un altro browser sulla stessa stazione tiene il proprio.

## Che cosa non fa lo spazio degli indirizzi {#what-the-address-space-does-not-do}

Non pubblica nulla per un dispositivo disabilitato, per un dispositivo i cui tag non sono materializzati nel Connector, o per un canale di Process senza collegamento (un canale simile resta elencato ma non offre membri). I nomi non vengono tradotti: l'indirizzo è il nome visualizzato ripulito, quindi rinominare una variabile, un allarme, una cartella, un dispositivo, un tag o un'immagine è un cambio di indirizzo, che l'applicazione riscrive in ogni riferimento con la ridenominazione sicura ([Variabili](logic-variables#name-and-address), [Cartelle dei dispositivi](connector-folders)).
