# Lo spazio degli indirizzi di un'unità

> Ogni punto che un'unità pubblica sotto Process.Model.Unit, il suo tipo e il suo significato, quali punti sono comandi scrivibili e che cosa uno script di Logic può leggerne.

Ogni unità pubblica i dati delle proprie prove come normali indirizzi [Logic](logic) sotto
`Process.<Model>.<Unit>`, così le dashboard, le espressioni di Logic, il server OPC UA incorporato e
l'agente vi arrivano senza alcun collegamento in più. Il ramo si sfoglia nella pagina Logic sotto "Da
altre pagine" ([Da altre pagine](logic-from-other-pages)) e in ogni selettore di indirizzo.
Rinominare un modello, un'unità, un canale, un campo di metadati, una valutazione o un criterio
sostituisce gli indirizzi corrispondenti e riscrive i riferimenti testuali vivi; i file registrati conservano i nomi congelati
come erano quando sono stati scritti. I segmenti sono i nomi depurati: un'unità di nome "Unità 1" del
modello "Climatic chamber" si indirizza come `Process.Climatic_chamber.Unità_1`.

| Ramo | Che cosa espone | Scrivibile |
| --- | --- | --- |
| `Channels.<Channel>` | Il valore collegato dal vivo di ciascun canale, tipizzato come il canale dichiara. | Un canale scrivibile (ruolo Sola scrittura oppure Lettura e scrittura) è un punto scrivibile attraverso l'unico punto di scrittura; una sorgente tenuta da una prova rifiuta ogni altro scrittore. |
| `Procedure.<point>` | Lo stato della prova, uno scalare per punto (tabella qui sotto). | No. |
| `Commands.<command>` | `Start`, `Hold`, `Resume`, `Stop`, `Abort` e `Comment`. | Sì: scrivere dispaccia il comando (tabella qui sotto). |
| `Next.<point>` | L'area di preparazione che il prossimo Avvio consuma. | Soltanto i campi di metadati manuali. |
| `LastRun.<point>` | La registrazione dell'ultima prova che l'unità ha concluso ([LastRun](#lastrun)). | No. |
| `Productivity.Today.<branch>` e `Productivity.Rolling.<branch>` | La proiezione di produttività dell'unità per ciascun periodo. | No. |

## Canali {#channels}

Un punto di canale legge il valore che sta dietro il collegamento dell'unità, proiettato sul tipo di
dato del canale, e si legge come vuoto quando il canale non è collegato oppure la sua sorgente non è
disponibile. In uno script di Logic il punto è una proiezione tipizzata in sola lettura del tag o
della variabile collegati, mai il tag stesso: `Value`, `ValueObject`, `ValueRaw`, `ValueScaled`,
`ValueCalibrated`, `ValueLimited`, `ValueRounded`, le conversioni `ValueToBool()`,
`ValueToInteger()`, `ValueToReal()`, `ValueToString()` e `ValueToDateTime()`, la qualità `State()`, i
timbri `SourceTimeStamp()` e `ApplicationTimeStamp()`, `Refresh()`, `Name` e `EngineeringUnit`. I
membri della catena di conversione rispondono per un collegamento a un tag; un collegamento a una
variabile risponde con il valore e con il timbro dell'applicazione.

## Procedure {#procedure}

Ogni punto è calcolato dalla prova viva e si legge con buona qualità; un punto che non ha nulla da
dire si legge come vuoto.

| Punto | Tipo | Significato |
| --- | --- | --- |
| `Status` | Testo | `Preparing` mentre l'unità è riservata e non esiste ancora alcuna prova, `Idle` mentre nulla la possiede, altrimenti lo stato della prova: `Running`, `Held`, `Saving`, `Completed`, `Aborted`, `Failed`. |
| `Running` | Booleano | Esattamente lo stato in marcia; mai vero per la preparazione, la sospensione, il salvataggio o la finalizzazione. |
| `Busy` | Booleano | L'intero tratto occupato: riserva, marcia, sospensione, salvataggio e chiusura finale del file della prova. |
| `Verdict` | Testo | `Ok`, `Nok`, `Indeterminate` oppure `None`, scritti esattamente così, qualunque parola mostrino l'interfaccia o un'etichetta stampata: un confronto si scrive `Process.<Model>.<Unit>.Procedure.Verdict == "Nok"`. L'evidenza giudicata resta leggibile dopo la fine della prova finché non ne parte un'altra. |
| `Mode` | Testo | Il modo della prova attiva, `Instant`, `Temporal` oppure `Controlled`; anche un comando singolo (istantanea, valuta adesso) si dichiara. Vuoto quando l'unità è inattiva. |
| `ActiveProcedure` | Testo | Il nome della prova attiva ("Procedura · Unità"). Vuoto quando l'unità è inattiva. |
| `SegmentIndex` | Intero | Il segmento attuale del profilo temporale, numerato da 0. Vuoto senza un profilo. |
| `CycleIndex` | Intero | Il ciclo attuale, numerato da 0. Vuoto quando l'unità è inattiva. |
| `CycleCount` | Intero | Il totale dei cicli della prova (1 per un passaggio solo). Vuoto quando l'unità è inattiva. |
| `Cycle` | Testo | "2 / 10" per una prova ciclica; un vuoto quando la prova non è ciclica, così una lettura collegata mostra il segno di vuoto invece di un passaggio unico che ingannerebbe. |
| `FailedCycles` | Intero | I cicli giudicati non conformi fino a qui. Vuoto quando la prova non è ciclica. |
| `SamplesEvaluated`, `SamplesOut`, `SamplesUnavailable`, `SamplesInvalid` | Intero | I contatori di evidenza della valutazione, aggiornati in modo atomico dal motore di valutazione. Vuoti senza evidenza giudicata. |
| `Elapsed` | Decimale | I secondi da quando la prova è partita. Vuoto quando l'unità è inattiva. |
| `StartedAt` | Data e ora | Quando è partita la prova attiva. Vuoto quando l'unità è inattiva. |
| `Metadata.<Field>` | Testo | Un punto per campo di metadati del modello: il valore che la prova in corso ha congelato all'Avvio. Vuoto quando l'unità è inattiva e per un campo che quella prova non chiede; un campo lasciato in bianco si legge come testo vuoto. È ciò che un'azione avviata all'Avvio legge della prova che comincia, dato che `Next.<Field>` mostra già la successiva. |

## Comandi {#commands}

Leggere un punto di comando risponde alla domanda "questo si può eseguire adesso", così un Pulsante
collegato si disabilita da solo; scriverlo dispaccia il comando attraverso la console delle prove,
registrato a diario con la sorgente della superficie che scrive e annotato con l'identità di chi ha
premuto. Un comando è una chiamata di servizio, mai una scrittura di punto messa in coda.

| Punto | Si legge vero quando | Scrivere |
| --- | --- | --- |
| `Start` | L'unità non è occupata, il runtime accetta operazioni, l'interblocco è Normale ed è preparata una procedura. | Avvia la procedura preparata con i metadati preparati. |
| `Hold` | Una prova è in marcia e la sua procedura è Temporale. | Congela la finestra. |
| `Resume` | Una prova è sospesa e l'interblocco è Normale. | Toglie la sospensione. |
| `Stop` | Una prova è in marcia. | Termina la prova come Completata. |
| `Abort` | Una prova è in marcia oppure sospesa. | Termina la prova come Interrotta. |
| `Comment` | Mai: il punto non ha lettura. | Aggiunge il testo scritto come commento alla prova attiva, oppure come nota dopo la prova sull'ultima prova terminata dell'unità quando questa è inattiva. Un'unità senza alcuna prova rifiuta ("L'unità non ha alcuna prova da commentare."), e così fa un testo vuoto. |

Ogni comando si legge falso mentre la stazione rifiuta le scritture (il runtime fermo).

## Next {#next}

| Punto | Tipo | Significato |
| --- | --- | --- |
| `Next.Procedure` | Testo | Il nome della procedura preparata. Qui è in sola lettura: la preparazione si fa sulla scheda Prova del pannello di unità. |
| `Next.<Field>` | Testo | Un punto per ogni campo di metadati che la procedura preparata richiede; il ramo cambia forma quando l'unità viene preparata di nuovo, e un campo di un'altra procedura si legge come vuoto. Un campo manuale (di testo o numerico) è un punto di preparazione scrivibile, che è ciò che scrive un componente Ingresso collegato a esso. Un campo sequenziale è una previsione in sola lettura dell'identificatore che il contatore comporrebbe adesso; leggerlo non lo riserva mai. |

La preparazione vale per tutta la stazione, sta in memoria ed è transitoria: si azzera all'avvio
dell'applicazione ed è consumata, non cancellata, dall'Avvio.

## Produttività {#productivity}

Due periodi, `Today` (dalla mezzanotte locale) e `Rolling` (la finestra dichiarata sul modello oppure
sull'unità), ciascuno con tre rami ([Produttività](process-productivity)):

| Ramo | Punti | Tipo |
| --- | --- | --- |
| `Summary` | `ProductivityPercent`, `YieldPercent`, `TypicalElapsedSeconds` | Decimale; un vuoto finché non esiste il denominatore. |
| `Summary` | `Finalized`, `OK`, `NOK`, `Indeterminate`, `Unclassified`, `Aborted`, `Failed` | Conteggi interi. |
| `Outputs.<key>` | `Quantity`, `RatePerHour` | Decimale; una chiave per quantità con un nome proprio, oppure per procedura produttiva quando il modello non dichiara alcuna quantità. |
| `Procedures.<key>` | `Quantity`, `RatePerHour` e i punti di riepilogo qui sopra | Come sopra, per procedura produttiva. |

Le chiavi derivano dall'id stabile e dall'unità di misura dell'uscita congelata, non dal nome
visualizzato, così una rinomina non sposta mai un'espressione. Ogni punto è in sola lettura, e la
proiezione è letta dall'indice degli storici, mai dai file delle prove.

## LastRun {#lastrun}

La registrazione dell'ultima prova che l'unità ha concluso: quale era, come è finita, che cosa
l'operatore ha inserito all'Avvio e come è andato ciascun criterio. È ciò che legge un'azione Logic
avviata al Completamento ([Azioni](process-actions#logic-action-commands)), e ogni altro consumatore
la legge allo stesso modo: una schermata che mostra l'ultimo pezzo, un allarme, i server della
stazione. Conta ogni prova registrata dell'unità, anche una non riuscita e un'Istantanea o un Valuta
adesso; una prova importata non conta mai.

| Punto | Tipo | Significato |
| --- | --- | --- |
| `RunId` | Testo | L'identificativo della prova. |
| `Procedure` | Testo | Il nome della procedura come la prova lo ha registrato. |
| `Status` | Testo | `Completed`, `Aborted` o `Failed`, scritti esattamente così. |
| `Verdict` | Testo | `Ok`, `Nok`, `Indeterminate` o `None`, scritti come in `Procedure.Verdict`; una prova non riuscita si legge `None`. |
| `StartedAt`, `FinishedAt` | Data e ora | Quando la prova è partita e quando è finita. |
| `Elapsed` | Decimale | I secondi dall'avvio alla fine. |
| `CycleCount` | Intero | I cicli della prova (1 per un passaggio unico). |
| `FailedCycles` | Intero | I cicli giudicati non conformi. |
| `Metadata.<Field>` | Testo | Un punto per campo di metadati del modello: il valore che la prova ha congelato all'Avvio. Un campo che la prova non ha chiesto si legge vuoto, senza valore; un campo lasciato in bianco si legge come testo vuoto. |
| `Evaluations.<Evaluation>.<Criterion>.<point>` | Come sotto | Una cartella per valutazione del modello e, sotto, una per criterio, con il nome del criterio, o con quello del suo canale quando non ne ha uno. |

Ogni criterio porta un esito, ripiegato su tutti i cicli in cui è stato giudicato, così l'indirizzo
è lo stesso per un passaggio unico e per una prova di cento cicli:

| Punto | Tipo | Significato |
| --- | --- | --- |
| `Outcome` | Testo | `Ok`, `Nok` o `Indeterminate`, scritti esattamente così: un ciclo non conforme dà `Nok`, altrimenti un ciclo indeterminato dà `Indeterminate`, altrimenti `Ok`. |
| `Passed` | Booleano | Vero solo quando `Outcome` è `Ok`. |
| `Value` | Decimale | Il valore misurato del canale osservato: l'ultimo campione valutato della finestra, in modo Un solo punto quello giudicato, dal ciclo più recente che ne ha misurato uno. |
| `MinValue`, `MaxValue` | Decimale | Il valore valutato più basso e il più alto, su tutti i cicli. |
| `Limits` | Testo | I limiti come sono stati registrati, ad esempio `5 .. 45`. |
| `WorstExcursion` | Decimale | La distanza più grande oltre un limite, su tutti i cicli. |
| `FailedCycles` | Intero | I cicli che hanno giudicato questo criterio non conforme. |

Il ramo ha la forma del modello, mai la forma dell'ultima prova: ogni campo di metadati del catalogo
e ogni criterio di ogni valutazione è un punto, così uno script che ne nomina uno supera la
validazione prima di qualsiasi prova, e dopo una prova di una procedura che ha giudicato secondo
un'altra valutazione.

| Situazione | Che cosa leggono i punti |
| --- | --- |
| Nessuna prova dell'unità è ancora finita | Vuoto con cattiva qualità, in ogni punto. |
| Una prova finisce | La nuova registrazione, già al suo posto prima che `Procedure.Status` dell'unità dica che la prova è finita. |
| Un'altra prova dell'unità è in corso | La registrazione precedente, finché quella prova non finisce. |
| L'applicazione si riavvia | L'ultima prova conclusa dell'unità, riletta dal suo file poco dopo l'avvio; vuoto finché non è letta. |
| Un criterio che l'ultima prova non ha giudicato (di un'altra valutazione, o aggiunto dopo) | Vuoto in ogni punto. |
| Due valutazioni, o due criteri, i cui nomi si leggono uguali | Niente: l'indirizzo non si risolve in nessuno dei due, e la pagina della valutazione lo dice ([Valutazioni](process-evaluations#names-are-addresses)). |

Rinominare un campo di metadati, una valutazione, un criterio o il canale di un criterio senza nome
sposta questi indirizzi come ogni altra ridenominazione di questa pagina.

## Che cosa può fare uno script {#what-a-script-may-do}

Gli script di variabile, di allarme e di azione di Logic possono **leggere** tutto ciò che sta qui: i
valori dei canali, lo stato della prova, la prontezza dei comandi, i valori preparati, l'ultima prova
e i punti di produttività. Non possono dispacciare un comando, scrivere un campo di preparazione o
aggiungere un commento; quelle scritture appartengono ai consumatori espliciti dei comandi: i
pannelli di esercizio, i Pulsanti e i Campi di immissione delle dashboard, l'automazione
dell'unità e gli strumenti dell'agente.

Un punto di canale si legge come la proiezione tipizzata di [Canali](#channels); ogni altro punto
qui si legge come il suo valore semplice, senza `.Value` dopo, a differenza di una variabile:

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