# L'espace d'adressage de l'unité

> Chaque point qu'une unité publie sous Process.Model.Unit, son type et son sens, quels points sont des commandes inscriptibles, et ce qu'un script Logic peut y lire.

Chaque unité publie ses données d'essai comme des adresses [Logic](logic) ordinaires sous
`Process.<Model>.<Unit>`, donc les tableaux de bord, les expressions Logic, le serveur OPC UA
embarqué et l'agent y accèdent sans aucune tuyauterie supplémentaire. La branche se parcourt sur la
page Logic sous « Venus d'autres pages »
([Depuis d'autres pages](logic-from-other-pages)) et dans chaque sélecteur d'adresse. Renommer un
modèle, une unité, une voie, un champ de métadonnées, une évaluation ou un critère remplace les
adresses correspondantes et réécrit les références textuelles vivantes ; les fichiers enregistrés gardent les noms figés au
moment où ils ont été écrits. Les segments sont les noms assainis : une unité nommée « Unité 1 » du
modèle « Climatic chamber » s'adresse `Process.Climatic_chamber.Unité_1`.

| Branche | Ce qu'elle expose | Inscriptible |
| --- | --- | --- |
| `Channels.<Channel>` | La valeur liée en direct de chaque voie, typée comme la voie le déclare. | Une voie inscriptible (rôle Écriture seule ou Lecture et écriture) est un point inscriptible par le canal d'écriture ; une source qu'un essai détient refuse tout autre écrivain. |
| `Procedure.<point>` | L'état de l'essai, un scalaire par point (tableau ci-dessous). | Non. |
| `Commands.<command>` | `Start`, `Hold`, `Resume`, `Stop`, `Abort` et `Comment`. | Oui : écrire distribue la commande (tableau ci-dessous). |
| `Next.<point>` | La zone de préparation que le prochain démarrage consomme. | Les champs de métadonnées manuels seulement. |
| `LastRun.<point>` | L'enregistrement du dernier essai que l'unité a terminé ([LastRun](#lastrun)). | Non. |
| `Productivity.Today.<branch>` et `Productivity.Rolling.<branch>` | La projection de productivité de l'unité pour chaque période. | Non. |

## Voies {#channels}

Un point de voie lit la valeur derrière la liaison de l'unité, projetée vers le type de donnée de la
voie, et se lit comme une lacune quand la voie n'est pas liée ou que sa source est indisponible. Dans
un script Logic, le point est une projection typée en lecture seule du tag ou de la variable liés,
jamais le tag lui-même : `Value`, `ValueObject`, `ValueRaw`, `ValueScaled`, `ValueCalibrated`,
`ValueLimited`, `ValueRounded`, les conversions `ValueToBool()`, `ValueToInteger()`, `ValueToReal()`,
`ValueToString()` et `ValueToDateTime()`, la qualité `State()`, les horodatages `SourceTimeStamp()`
et `ApplicationTimeStamp()`, `Refresh()`, `Name` et `EngineeringUnit`. Les membres de la chaîne de
conversion répondent pour une liaison de tag ; une liaison de variable répond la valeur et
l'horodatage applicatif.

## Procédure {#procedure}

Chaque point est calculé depuis l'essai en direct et se lit avec une bonne qualité ; un point qui n'a
rien à dire se lit comme une lacune.

| Point | Type | Signification |
| --- | --- | --- |
| `Status` | Texte | `Preparing` tant que l'unité est réservée et qu'aucun essai n'existe encore, `Idle` tant que rien ne la détient, sinon l'état de l'essai : `Running`, `Held`, `Saving`, `Completed`, `Aborted`, `Failed`. |
| `Running` | Booléen | Strictement l'état En cours ; jamais vrai pour la préparation, la suspension, l'écriture ou la finalisation. |
| `Busy` | Booléen | Toute la durée d'occupation : la réservation, En cours, Suspendu, Écriture et la fermeture finale du fichier d'essai. |
| `Verdict` | Texte | `Ok`, `Nok`, `Indeterminate` ou `None`, écrits exactement ainsi, quel que soit le mot qu'affichent l'interface ou une étiquette imprimée : une comparaison s'écrit `Process.<Model>.<Unit>.Procedure.Verdict == "Nok"`. La preuve jugée reste lisible après la fin de l'essai jusqu'au démarrage du suivant. |
| `Mode` | Texte | Le mode de l'essai actif, `Instant`, `Temporal` ou `Controlled` ; une commande unique (instantané, évaluer maintenant) le rapporte aussi. Lacune au repos. |
| `ActiveProcedure` | Texte | Le nom de l'essai actif (« Procédure · Unité »). Lacune au repos. |
| `SegmentIndex` | Entier | Le segment actuel du profil temporel, numéroté à partir de 0. Lacune sans profil. |
| `CycleIndex` | Entier | Le cycle actuel, numéroté à partir de 0. Lacune au repos. |
| `CycleCount` | Entier | Le nombre total de cycles de l'essai (1 pour un passage unique). Lacune au repos. |
| `Cycle` | Texte | « 2 / 10 » pour un essai cyclique ; une lacune quand l'essai n'est pas cyclique, pour qu'un relevé lié montre la marque de lacune au lieu d'un passage unique trompeur. |
| `FailedCycles` | Entier | Les cycles jugés non conformes jusqu'ici. Lacune quand l'essai n'est pas cyclique. |
| `SamplesEvaluated`, `SamplesOut`, `SamplesUnavailable`, `SamplesInvalid` | Entier | Les compteurs de preuve de l'évaluation, mis à jour d'un bloc par le moteur d'évaluation. Lacune sans preuve jugée. |
| `Elapsed` | Décimal | Les secondes depuis le démarrage de l'essai. Lacune au repos. |
| `StartedAt` | Date et heure | Quand l'essai actif a démarré. Lacune au repos. |
| `Metadata.<Field>` | Texte | Un point par champ de métadonnées du modèle : la valeur que l'essai en cours a figée au démarrage. Lacune au repos et pour un champ que cet essai ne demande pas ; un champ laissé vide se lit comme un texte vide. C'est ce qu'une action déclenchée au démarrage lit de l'essai qui commence, puisque `Next.<Field>` montre déjà le suivant. |

## Commandes {#commands}

Lire un point de commande répond « ceci peut-il s'exécuter maintenant », donc un Bouton lié se
désactive tout seul ; l'écrire distribue la commande par la console d'essai, journalisée avec la
source de la surface qui écrit et enregistrée avec l'identité de qui a pressé. Une commande est un
appel de service, jamais une écriture de point mise en file.

| Point | Se lit vrai quand | Écrire |
| --- | --- | --- |
| `Start` | L'unité n'est pas occupée, le runtime accepte les opérations, le verrouillage est normal et une procédure est préparée. | Démarre la procédure préparée avec les métadonnées préparées. |
| `Hold` | Un essai est En cours et sa procédure est Temporelle. | Fige la fenêtre. |
| `Resume` | Un essai est Suspendu et le verrouillage est normal. | Lève la suspension. |
| `Stop` | Un essai est En cours. | Termine l'essai en Terminé. |
| `Abort` | Un essai est En cours ou Suspendu. | Termine l'essai en Interrompu. |
| `Comment` | Jamais : le point n'a aucune lecture. | Ajoute le texte écrit comme commentaire à l'essai actif, ou comme note post-essai sur le dernier essai terminé de l'unité quand elle est au repos. Une unité sans aucun essai refuse (« L'unité n'a aucun essai à commenter. »), et un texte vide aussi. |

Chaque commande se lit fausse tant que la station refuse les écritures (le runtime arrêté).

## Préparation {#next}

| Point | Type | Signification |
| --- | --- | --- |
| `Next.Procedure` | Texte | Le nom de la procédure préparée. En lecture seule ici : la préparation se fait sur la carte Essai du volet d'unité. |
| `Next.<Field>` | Texte | Un point par champ de métadonnées que la procédure préparée demande ; la branche se reforme quand l'unité est préparée de nouveau, et un champ d'une autre procédure se lit comme une lacune. Un champ manuel (texte ou numérique) est un point de préparation inscriptible, ce qu'écrit un composant Saisie qui lui est lié. Un champ séquentiel est une prédiction en lecture seule de l'identifiant que le compteur composerait maintenant ; le lire ne le réserve jamais. |

La préparation vaut pour toute la station, vit en mémoire et est passagère : elle se réinitialise au
démarrage de l'application et elle est consommée, non effacée, par le démarrage.

## Productivité {#productivity}

Deux périodes, `Today` (depuis minuit local) et `Rolling` (la fenêtre déclarée sur le modèle ou sur
l'unité), chacune avec trois branches ([Productivité](process-productivity)) :

| Branche | Points | Type |
| --- | --- | --- |
| `Summary` | `ProductivityPercent`, `YieldPercent`, `TypicalElapsedSeconds` | Décimal ; une lacune tant que le dénominateur n'existe pas. |
| `Summary` | `Finalized`, `OK`, `NOK`, `Indeterminate`, `Unclassified`, `Aborted`, `Failed` | Des comptes entiers. |
| `Outputs.<key>` | `Quantity`, `RatePerHour` | Décimal ; une clé par quantité nommée, ou par procédure productive quand le modèle ne déclare aucune quantité. |
| `Procedures.<key>` | `Quantity`, `RatePerHour` et les points de résumé ci-dessus | Comme ci-dessus, par procédure productive. |

Les clés dérivent de l'identifiant stable et de l'unité de mesure figée, non du nom affiché, donc un
renommage ne déplace jamais une expression. Chaque point est en lecture seule, et la projection est
lue depuis l'index d'historique, jamais depuis les fichiers d'essai.

## LastRun {#lastrun}

L'enregistrement du dernier essai que l'unité a terminé : lequel c'était, comment il s'est terminé,
ce que l'opérateur a saisi au démarrage et comment chaque critère s'est conclu. C'est ce que lit une
action Logic déclenchée à la fin ([Actions](process-actions#logic-action-commands)), et tout autre
consommateur le lit de la même façon : un écran qui montre la dernière pièce, une alarme, les
serveurs de la station. Chaque essai enregistré de l'unité compte, y compris un essai en échec et un
instantané ou une évaluation immédiate ; un essai importé ne compte jamais.

| Point | Type | Signification |
| --- | --- | --- |
| `RunId` | Texte | L'identifiant de l'essai. |
| `Procedure` | Texte | Le nom de la procédure tel que l'essai l'a enregistré. |
| `Status` | Texte | `Completed`, `Aborted` ou `Failed`, écrits exactement ainsi. |
| `Verdict` | Texte | `Ok`, `Nok`, `Indeterminate` ou `None`, écrits comme pour `Procedure.Verdict` ; un essai en échec se lit `None`. |
| `StartedAt`, `FinishedAt` | Date et heure | Quand l'essai a démarré et quand il s'est terminé. |
| `Elapsed` | Décimal | Les secondes du démarrage à la fin. |
| `CycleCount` | Entier | Les cycles de l'essai (1 pour un passage unique). |
| `FailedCycles` | Entier | Les cycles jugés non conformes. |
| `Metadata.<Field>` | Texte | Un point par champ de métadonnées du modèle : la valeur que l'essai a figée au démarrage. Un champ que l'essai n'a pas demandé se lit comme une lacune ; un champ laissé vide se lit comme un texte vide. |
| `Evaluations.<Evaluation>.<Criterion>.<point>` | Comme ci-dessous | Un dossier par évaluation du modèle et, dessous, un par critère, au nom du critère, ou à celui de sa voie quand il n'en a pas. |

Chaque critère porte un résultat, replié sur tous les cycles où il a été jugé, donc l'adresse est la
même pour un passage unique et pour un essai de cent cycles :

| Point | Type | Signification |
| --- | --- | --- |
| `Outcome` | Texte | `Ok`, `Nok` ou `Indeterminate`, écrits exactement ainsi : un cycle non conforme donne `Nok`, sinon un cycle indéterminé donne `Indeterminate`, sinon `Ok`. |
| `Passed` | Booléen | Vrai seulement quand `Outcome` vaut `Ok`. |
| `Value` | Décimal | La valeur mesurée de la voie surveillée : le dernier échantillon évalué de la fenêtre, en mode Un seul point celui qui est jugé, du cycle le plus récent qui en a mesuré un. |
| `MinValue`, `MaxValue` | Décimal | La plus petite et la plus grande valeur évaluée, sur tous les cycles. |
| `Limits` | Texte | Les limites telles qu'elles ont été enregistrées, comme `5 .. 45`. |
| `WorstExcursion` | Décimal | Le plus grand écart au-delà d'une limite, sur tous les cycles. |
| `FailedCycles` | Entier | Les cycles qui ont jugé ce critère non conforme. |

La branche a la forme du modèle, jamais celle du dernier essai : chaque champ de métadonnées du
catalogue et chaque critère de chaque évaluation est un point, donc un script qui en nomme un est
validé avant tout essai, et après un essai d'une procédure qui a jugé selon une autre évaluation.

| Situation | Ce que lisent les points |
| --- | --- |
| Aucun essai de l'unité ne s'est encore terminé | Une lacune de mauvaise qualité, pour chaque point. |
| Un essai se termine | Le nouvel enregistrement, en place avant que le `Procedure.Status` de l'unité dise que l'essai est terminé. |
| Un autre essai de l'unité est en cours | L'enregistrement précédent, jusqu'à la fin de cet essai. |
| L'application redémarre | Le dernier essai terminé de l'unité, relu dans son fichier peu après le démarrage ; une lacune jusqu'à ce qu'il soit lu. |
| Un critère que le dernier essai n'a pas jugé (d'une autre évaluation, ou ajouté depuis) | Une lacune pour chaque point. |
| Deux évaluations, ou deux critères, dont les noms se lisent pareil | Rien : l'adresse ne se résout vers aucun des deux, et la page de l'évaluation le dit ([Évaluations](process-evaluations#names-are-addresses)). |

Renommer un champ de métadonnées, une évaluation, un critère ou la voie d'un critère sans nom déplace
ces adresses comme tout autre renommage de cette page.

## Ce qu'un script peut faire {#what-a-script-may-do}

Les scripts de variable, d'alarme et d'action de Logic peuvent **lire** tout ce qui est ici : les
valeurs de voie, l'état de l'essai, la disponibilité des commandes, les valeurs préparées, le
dernier essai et les points de productivité. Ils ne peuvent ni distribuer une commande, ni écrire un
champ de préparation, ni ajouter un commentaire ; ces écritures appartiennent aux consommateurs de
commande explicites : les volets de conduite, les Boutons et les Saisies des tableaux de bord,
l'automatisme de l'unité et les outils de l'agent.

Un point de voie se lit comme la projection typée de [Voies](#channels) ; tout autre point d'ici se
lit comme sa valeur brute, sans `.Value` après lui, contrairement à une variable :

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