# Conduite

> Les unités en service : un nœud par unité avec les volets et les tableaux de bord par lesquels elle est conduite, ce qu'est un essai, le cycle de vie du démarrage à la fin, et ce qui est refusé tant que le runtime est arrêté.

**Conduite** est le dernier des quatre groupes d'un modèle dans la colonne Espace de travail de la
page Process (Process > Modèles > un modèle > Conduite), après [Définition](process-definition),
[Visualisation](process-visualization) et [Réglage](process-setup). Les trois autres déclarent le
procédé; celui-ci contient les unités en service, un nœud par unité, et sous chaque unité les surfaces
par lesquelles elle est conduite. Rien ne se configure ici : une unité se déclare et se termine sur la
page propre au modèle ([Unités](process-units)), ses volets et ses tableaux de bord s'arrangent sous
Visualisation, et ce qu'elle exécute se compose sous Réglage.

La branche est dessinée pour chaque rôle qui peut consulter les modèles (Consulter les modèles,
Exécuter les procédures, Gérer Process). Un rôle qui ne détient que Modifier recettes et évaluations
voit chaque modèle réduit à son groupe Réglage, donc Conduite ne lui est pas dessinée. Surveiller est
libre avec l'arbre; préparer, démarrer et piloter un essai demandent **Exécuter les procédures**, et
un volet le dit sur sa face quand le rôle ne l'a pas.

## La page Conduite {#the-operate-page}

Sélectionner le groupe ouvre un mur de cartes, une par unité, surmonté de « Les stations sur
lesquelles ce modèle tourne. Ouvrez-en une pour préparer une procédure, la démarrer et suivre un
essai enregistré et évalué. » Cliquer sur une carte ouvre cette unité. Chaque carte porte le statut en
direct de l'unité, résolu dans cet ordre de priorité :

| Statut | Sens |
| --- | --- |
| Arrêt déclenché, En attente de réarmement, Signal d'arrêt indisponible | Le [verrouillage](process-automation) de l'unité n'est pas normal. Montré seulement quand le modèle observe un arrêt externe; il l'emporte sur tout ce qui suit. |
| En attente que les consignes parviennent à l'équipement | Un essai détient l'unité et sa recette a remis les consignes d'un segment, puis attend que l'équipement les prenne. Le temps propre au segment n'a pas commencé à courir, alors cet état l'emporte sur ceux d'en dessous; l'enregistrement des données se poursuit dessous exactement comme avant. Seul un segment réglé pour attendre l'affiche un jour. Voir [Recettes](process-recipes#what-a-run-does-with-it). |
| Enregistrement, Suspendu, Écriture, Préparation, Finalisation | Un essai détient l'unité : il échantillonne, il est suspendu à une consigne, il écrit son instantané, il est réservé avant que l'essai existe, ou il ferme son fichier après l'état final. |
| Au repos · procédure | Rien ne détient l'unité et cette procédure est préparée pour le prochain démarrage. |
| Au repos · aucune procédure préparée | Rien ne détient l'unité et rien n'est préparé. |

Un modèle sans unité indique « Aucune unité pour l'instant. Ajoutez-en une sur la page du modèle, dans le tableau Unités. » La ligne
d'arbre du groupe compte ses unités.

La barre de détail porte les deux déclencheurs de lot, dessinés seulement pour un rôle qui détient
Exécuter les procédures. Rien d'autre ne se tient sur cette barre, parce que rien n'est créé ni
supprimé ici.

| Commande | Ce qu'elle fait | Grisée quand (situation) | Non dessinée quand (rôle) |
| --- | --- | --- | --- |
| Tout démarrer | Démarre chaque unité qui a une procédure préparée et qui peut tourner maintenant; les autres sont ignorées en silence. Chaque essai démarré enregistre comme responsable l'opérateur dont la session est ouverte sur cet écran. | Aucune unité n'accepte le démarrage pour l'instant, ou un lot est déjà en cours d'envoi. | Sans Exécuter les procédures. |
| Tout arrêter | Arrête chaque unité qui tourne maintenant; les unités déjà arrêtées le restent. | Aucune unité n'accepte l'arrêt pour l'instant, ou un lot est déjà en cours d'envoi. | Sans Exécuter les procédures. |

Un lot est un déclencheur, pas une opération coordonnée : chaque unité tourne de son côté, un refus
sur une unité est journalisé et n'annule jamais une autre, et le journal des actions signale le compte
(« 3 unités démarrées », « Aucune unité n'a pu être arrêtée. »).

## L'unité {#the-unit}

La page propre à une unité la nomme, dit si un essai la détient et ouvre sur chacune de ses surfaces.
L'en-tête porte une pastille avec l'état de l'essai tant qu'un essai détient l'unité (Enregistrement,
Suspendu, Écriture, Préparation, Finalisation, ou « En attente que les consignes parviennent à
l'équipement » tant qu'un segment de recette réglé pour attendre est encore en attente de ses
consignes; rien tant que l'unité est libre). Tant que l'essai attend, la ligne d'en-tête cède la place
à « Toujours en attente de : Furnace, Pump 1 », les voies dont l'équipement n'a pas encore pris la
consigne : la page dit donc elle-même pourquoi l'horloge du segment n'a pas démarré. Une seule carte,
**Surfaces de conduite**, liste en tuiles les volets et les tableaux de bord que le modèle définit,
dessinés pour cette unité. La page n'a ni verbe de barre ni menu contextuel : c'est un chemin d'accès,
pas un endroit où modifier.

Sous l'unité, l'arbre contient un nœud par volet du modèle, puis un nœud par tableau de bord. Les deux
s'ouvrent sous la même barre de scène qu'emploie la page View, nommée « Modèle · Unité · Surface »,
avec la pastille d'état de l'essai à côté du nom et les deux verbes de fenêtre du côté de fin :
**Agrandir** donne toute la fenêtre à la surface, **Plein écran** (F11) prend tout l'écran, et Échap
quitte l'un ou l'autre.

- Un nœud de **volet** dessine les cartes que le volet arrange, pour cette unité : la carte Essai, la
  carte Métadonnées, l'État de l'essai, les Commentaires, les Occurrences, le graphique des Voies, le
  registre de Productivité, les Commandes uniques et tout tableau de bord que le volet intègre comme
  carte. Cette surface, carte par carte, se trouve dans
  [Essais et commentaires](process-runs).
- Un nœud de **tableau de bord** exécute la définition unique du modèle avec chaque voie abstraite
  répondue par la source liée de cette unité. Il montre le tableau de bord et ne le modifie jamais :
  la modification est un verbe de la ligne propre au modèle sous Visualisation ([Tableaux de bord
  d'un modèle](process-dashboards)). Un tableau de bord sur lequel rien n'est posé le dit au lieu de
  dessiner une scène vide. Ses composants de commande ne demandent ici qu'Exécuter
  les procédures, parce que c'est la surface officielle de Process et non un tableau de bord propre à
  la station.

Un volet ou un tableau de bord marqué **Afficher dans View** apparaît aussi sur la page View, une
entrée par unité du modèle, sous le même nom; ce qu'il dessine est le même dans les deux cas.

## Ce qu'est un essai {#what-a-run-is}

Un essai est une exécution d'une procédure sur une unité. Il est nommé « Procédure · Unité »,
enregistré dans son propre fichier SQLite sous le dossier `acquisitions` de la racine de données de
l'application, et désigné par une ligne de l'index des historiques, ce qui permet de retrouver et de
reprendre un essai inachevé après un redémarrage. Le mode de la procédure est l'enveloppe de l'essai :
**Instantané** applique, enregistre une ligne et juge une fois, puis se termine de lui-même;
**Temporel** exécute la fenêtre de la procédure, répétée en cycles au besoin, et se termine quand la
dernière fenêtre se ferme; **Contrôlé** applique au démarrage et enregistre jusqu'à ce que quelqu'un
l'arrête.

Un seul essai par unité à la fois. Le démarrage réserve l'unité avant de résoudre quoi que ce soit,
donc une unité en préparation est occupée sans prétendre enregistrer; la réservation dure pendant
En cours, Suspendu, Écriture et la fermeture finale du fichier. Tant qu'une unité est occupée, chaque
surface de configuration de la station est en lecture seule (« La configuration est verrouillée
tant qu'une unité est en cours. »); Conduite, elle, reste vivante, parce que conduire n'est pas
configurer.

## Le cycle de vie {#the-lifecycle}

| État | Sens | Atteint par | Quitté par |
| --- | --- | --- | --- |
| Préparation | L'unité est réservée et l'essai est en cours de validation et de matérialisation. Ce n'est pas un état conservé : le point `Procedure.Status` l'indique pendant que `Busy` est déjà vrai. | Démarrer | La matérialisation de l'essai (En cours), ou un refus (de nouveau au repos). |
| En cours | L'échantillonnage et, pour un essai temporel, l'horloge de la fenêtre avancent. | Démarrer, Reprendre | Suspendre, Arrêter, Interrompre, la fin de la fenêtre, un échec, le verrouillage. |
| Suspendu | L'horloge de la fenêtre est figée à la dernière consigne; le datalog continue d'enregistrer. Essais temporels seulement. | Suspendre | Reprendre, Arrêter, Interrompre, le verrouillage. |
| Écriture | L'échantillonnage a cessé; le bloc de finalisation s'est exécuté et l'instantané figé est en cours d'écriture. | Arrêter, Interrompre, la fin de la fenêtre, le verrouillage, la fin d'un essai instantané | L'écriture de l'instantané. |
| Terminé | Terminé proprement; le verdict est celui de l'évaluation. | Écriture après un arrêt, une fin de fenêtre ou un essai instantané | Terminal. |
| Interrompu | Terminé avant terme; le verdict est Non conforme, quoi que l'évaluation ait jugé. | Écriture après une interruption, une règle d'échec de recette réglée sur Interrompre, le verrouillage, ou l'arrêt du runtime | Terminal. |
| En échec | Terminé par une erreur irrécupérable; le verdict est Aucun. | Un échec en cours d'exécution ou de fin; un pointeur d'écriture laissé par une panne revient En échec au lancement suivant | Terminal. |

Un essai qui était En cours ou Suspendu quand l'application s'est fermée n'est pas terminé : il
reprend au lancement suivant, un profil temporel suspendu à son segment et à son cycle conservés.

Chaque essai enregistre qui l'a démarré (l'opérateur dont la session est ouverte sur l'écran qui a
pressé Démarrer, la station quand il n'y en avait aucun, l'automatisme de l'unité, ou un agent) et qui
l'a terminé (les mêmes genres, pour un arrêt ou une interruption). Une fenêtre qui est allée à son
terme, un déclenchement de verrouillage et un échec se terminent sans nommer personne. Suspendre et
Reprendre ne laissent aucun acteur derrière eux.

## Ce qui est refusé, et pourquoi {#what-is-refused-and-why}

- **Runtime arrêté** : tant que le runtime de la station est arrêté, Démarrer, Suspendre, Reprendre,
  Arrêter, Interrompre, les commandes uniques, la préparation et les commentaires sont tous refusés
  avec ce motif, et la carte Essai l'écrit sous ses boutons. Les essais encore ouverts quand le
  runtime s'arrête se terminent en Interrompu.
- **Le verrouillage** : tant que le verrouillage d'une unité est Déclenché, En attente de réarmement
  ou Indisponible, aucun nouveau démarrage, aucune reprise, aucun instantané, aucune évaluation et
  aucune application de recette n'est admis sur cette unité (« L'unité « X » est bloquée par son
  verrouillage : raison »). Arrêter et Interrompre demeurent disponibles.
- **Rien de préparé** : le démarrage a besoin d'une procédure préparée (« Aucune procédure n'est
  préparée. Choisissez-en une d'abord. »).
- **Une source détenue par un autre essai** : deux unités qui écrivent la même source ne peuvent pas
  tourner ensemble; le second démarrage est refusé en nommant la voie et l'unité qui la détient.

Les pages de ce groupe :

| Page | Couvre |
| --- | --- |
| [Essais et commentaires](process-runs) | Le volet d'une unité : la préparation, le démarrage et ce qu'il valide, les commandes du cycle de vie, les cartes en direct, les commentaires, les commandes uniques, le fichier d'essai, et les chemins de l'automatisme et de l'agent vers le même cycle de vie. |
| [L'espace d'adressage de l'unité](process-addresses) | Chaque point qu'une unité publie sous `Process.<Model>.<Unit>`, son type et son sens, et quels points sont des commandes inscriptibles. |
