# Composants de tableau de bord

> Ce qu'est un composant de tableau de bord : le catalogue des genres, les adresses qu'ils lient, la façon dont une lecture est dessinée, et les sections de propriétés communes à chaque genre.

Un **composant** est un élément posé sur un tableau de bord : un rectangle de cellules de grille qui
dessine quelque chose. La plupart des composants lisent l'espace d'adressage en direct et le
présentent, quelques-uns y écrivent, et quelques-uns ne font que dessiner. Vous en posez un depuis
la zone **Ajouter** de la barre d'outils de l'[éditeur de tableau de bord](view-editor), en le
faisant glisser sur une cellule précise ou en cliquant dessus pour prendre la première cellule
libre, et il s'ouvre dans Propriétés pour que vous le configuriez.

Chaque genre a une page de référence à lui, listée sous [Le catalogue](#the-catalog) et dans la
liste propre à ce groupe. Cette page porte ce qu'ils ont tous en commun : les adresses qu'ils lient,
la façon dont une lecture est dessinée, et les sections de propriétés qui se répètent sur chaque
genre. Quel rôle peut presser une commande, et la marque de verrou qu'un composant porte quand le
rôle connecté ne le peut pas, sont sur [View et tableaux de bord](home).

## Le catalogue {#the-catalog}

La palette Ajouter groupe le catalogue par catégorie, et les catégories disent ce que fait une
famille. **Affichage** est tout ce qui rapporte : les affichages simples et les tableaux, les
lampes, et les graphiques qui suivent des points dans le temps ou les comparent côte à côte.
**Commande** est la famille dédiée à l'écriture : chacun de ses composants existe pour poser une
valeur sur un point. Ce n'est pourtant pas la seule surface qu'un opérateur presse. **Alarme** amène
le registre en cours sur une vue, et son bandeau s'acquitte depuis là, ligne par ligne et pour le
lot. **Média** pose des images, des
marques de bibliothèque et des dessins industriels. **Disposition** groupe une région derrière le
reste de la vue.

| Catégorie | Composants |
|---|---|
| Affichage | [Libellé](component-label) · [Valeur](component-value) · [Tableau de points](component-point-table) · [Voyant d'état](component-status-led) · [Graphique en courbes](component-line-chart) · [Graphique en barres](component-bar-chart) · [Graphique circulaire](component-pie-chart) · [Cadran](component-gauge) · [Carte d'indicateur](component-kpi-card) · [Progression](component-progress) |
| Commande | [Interrupteur](component-toggle) · [Saisie](component-input) · [Bouton](component-button) · [Sélecteur](component-selector) · [Curseur de consigne](component-setpoint-slider) · [Touches de pas](component-step-keys) |
| Alarme | [Bandeau d'alarmes](component-alarm-banner) |
| Média | [Image utilisateur](component-image) · [Icône](component-icon) · [Symbole](component-symbol) |
| Disposition | [Cadre](component-frame) |

Trois pages de ce groupe décrivent des parties du [volet d'unité](view-unit-panels), pas des
composants : le bandeau du [Verrouillage](component-interlock), la
[Liste des occurrences](component-occurrence-list) et le
[Fil des commentaires](component-comment-timeline). Le volet d'unité les dessine pour sa propre
unité ; ils ne se posent jamais sur une vue, et la palette Ajouter ne les propose pas.

Les images, les marques et les dessins que les genres Média affichent viennent de la bibliothèque
propre à la station, sur la page Logic : [La bibliothèque de ressources](logic-assets) porte les
visuels, les icônes et les couleurs, et [Symboles](assets-symbols) le catalogue dans lequel un
[Symbole](component-symbol) se choisit, avec les bornes entre lesquelles ses tracés se dessinent.

## Adresses et lectures en direct {#addresses-and-live-readings}

Les composants en direct se lient à des **adresses** : des noms enracinés dans l'espace d'adressage
en direct de la station, le même espace que Logic lit (voir la [page Logic](logic)). Une adresse
nomme un point, où qu'il vive :

| Forme d'adresse | Ce qu'elle nomme |
|---|---|
| `Connector.<Driver>.<Device>.<Tag>` | La valeur physique d'un tag Connector, avec les dossiers de l'équipement entre le pilote et l'équipement quand il est rangé dans l'un d'eux (voir la [page Connector](connector)) |
| `Variables.<name>` | Une variable Logic (mémoire ou calculée) |
| `Alarms.<name>` | L'état actif d'une alarme |
| `Assets.Icons.<name>` | Une marque de la bibliothèque d'icônes |
| `Process.<Model>.<Unit>.…` | Les points d'essai d'une unité : lectures, `Commands.*`, `Next.<field>`, `Commands.Comment` |

Les champs d'adresse sont du texte libre avec des propositions : la liste est tirée de la liste de
points en direct, plafonnée à 50 lignes, resserrée sur la catégorie de valeur que le champ consomme
(un cadran propose des nombres, un interrupteur commence par les points booléens, une commande qui
écrit ne liste que ce qui peut être écrit), et chaque ligne est marquée de son type. Vous pouvez
toujours taper une adresse que la liste ne propose pas, y compris une qui n'existe pas encore. Dès
qu'un champ nomme un point, l'éditeur montre **ce que ce point lit en ce moment** sous le champ :
la confirmation qu'un composant ne dessinant aucun nombre à lui ne peut pas donner. Sur une vue
définie sur un modèle Process, les voies abstraites du modèle sont en tête de chaque liste ; en
choisir une lie la voie et laisse l'unité être répondue quand une unité ouvre la vue.

Le plan de travail rafraîchit ses composants depuis l'espace d'adressage toutes les 150 ms sur la
fenêtre propre à la station et toutes les 400 ms sur un navigateur distant, sur les valeurs que le
cycle de la logique publie. Deux règles valent pour chaque composant en direct :

- **Jamais une valeur périmée.** Un point qui cesse de lire retombe sur le texte d'attente propre à
  ce composant (le tiret de lacune, une lampe creuse, une lacune de graphique), jamais sur le
  dernier nombre.
- **Une seule marque de lecture mauvaise.** Un composant dont le point lié *n'arrive pas à lire*
  (l'adresse ne résout rien, ou le point répond en mauvaise qualité) porte une seule marque
  partagée : un contour pointillé de prudence autour de la cellule et un petit badge `!` cerclé dans
  son coin supérieur droit. Chaque genre porte la même marque, donc elle s'apprend une fois. Un
  point résolu qui répond en bonne qualité *sans valeur* n'est pas un échec (un banc entre deux
  essais, un compteur hors cycle), donc le composant garde son texte d'attente discret et la marque
  reste éteinte. Une adresse **non liée** n'est la faute de personne : une vue encore en cours
  d'assemblage ne se lit jamais comme une vue d'avertissements.

## L'affichage d'une valeur {#value-display}

La taille à laquelle une lecture est dessinée est régie par un seul contrat, partagé par chaque
surface de texte du plan de travail (affichages, légendes, faces de touches, mots d'état) :

- Chaque surface est soit **automatique** (la cellule décide de la taille, bornée par la largeur que
  les déclarations de la surface réservent : chiffres, décimales, unité, ou les mots écrits), soit
  **fixée**, une taille en points que vous donnez (de 9 à 144). Une taille fixée est littérale :
  elle s'affiche à cette taille dans n'importe quelle cellule et n'est jamais réduite pour faire
  entrer le contenu. Rien dans la taille ne suit jamais la valeur qui arrive, donc un nombre qui
  oscille entre quatre et six caractères ne bouge jamais la typographie.
- **Un nombre n'est jamais dessiné tronqué.** Là où il ne peut pas être montré en entier (plus de
  chiffres que le champ n'en déclare, ou une taille fixée plus large que la cellule), la surface
  dessine `####`, la marque du tableur et du DCS pour un champ trop étroit pour sa valeur, avec la
  lecture entière dans l'infobulle.
- **Le texte libre se tronque par des points de suspension**, avec le texte entier dans l'infobulle.
  Les mots ne portent jamais la marque du nombre.
- Un point qui **ne lit pas** est encore un autre fait : le tiret de lacune, plus la marque partagée
  de lecture mauvaise là où le silence est un vrai échec. L'absence de lecture et l'absence de place
  n'empruntent jamais la marque l'une de l'autre.
- Les nombres se posent à droite de leur champ, en chiffres tabulaires, pour que des colonnes de
  lectures s'alignent entre elles.

Le plancher de lisibilité de 11 px vaut partout, et le bouton **Échelle du contenu** partagé
multiplie la taille résolue : vers le bas cela se voit toujours (toujours avec le plancher), vers le
haut cela ne grandit que tant que la ligne entre encore sans être tronquée.

## Les sections de propriétés partagées {#the-shared-property-sections}

Sélectionner un composant ouvre ses propriétés. Les sections nommées d'après le genre propre au
composant viennent d'abord (son contenu, ses données, sa mise en forme) et sont documentées sur la
page de ce composant. Autour d'elles, chaque composant partage les mêmes sections. Le volet qui les
dessine, la lecture en direct sous chaque champ d'adresse, et les contrôles qui se répètent d'un
genre à l'autre (la taille d'affichage, S'affiche comme, les plages de l'Échelle, la boîte à outils
du graphique) sont décrits sur [L'éditeur de tableau de bord](view-editor).

**Identification du composant** nomme le composant pour qui modifie la vue : le nom est en tête du
volet de propriétés, étiquette la ligne dans la liste Composants et répond à sa recherche. Rien ne
le dessine sur l'écran de l'opérateur ; cela, c'est le titre d'Apparence.

**Apparence** est la boîte du composant :

| Champ | Ce qu'il fait | Valeurs | Par défaut |
|---|---|---|---|
| Afficher le cadre | Dessine le contour propre au composant. | activé / désactivé | désactivé |
| Épaisseur du cadre (px) | La force de ce contour. Un pixel est le bord d'une carte ; un trait plus épais distingue un groupe de ce qui l'entoure sans une deuxième couleur. | de 1 à 4 | 1 |
| Afficher le fond | Remplit le rectangle du composant avec la paire de couleurs, ce qui en fait une carte. Désactivé, la grille se voit à travers. | activé / désactivé | désactivé |
| Couleur du fond | Le remplissage sous forme de paire, une moitié par thème, les deux moitiés modifiées à la fois, parce que le thème en cours décide quelle moitié est à l'écran. | `#RRGGBB` chacune | `#FFFFFF` clair · `#2B2B2B` sombre |
| Titre (coin) | Le libellé de coin propre au composant, ce que la carte *est*, au-dessus de ce que le genre affiche. Vide signifie aucune ligne de légende. | Texte libre | vide |
| Taille du titre (px) | Laissée vide, chaque carte dimensionne son propre titre depuis sa cellule ; une taille fixée est littérale et c'est ce qui met d'accord les titres d'une vue entière. Ce qui n'entre plus se tronque par des points de suspension, titre entier dans l'infobulle. | de 11 à 96, ou vide | vide (Automatique) |
| Couleur du titre | La paire d'encres du titre. Non touchée, le titre suit le ton discret propre au thème. | `#RRGGBB` chacune | `#6B6B6B` clair · `#A0A0A0` sombre |
| Échelle du contenu | Quelle part de sa boîte le contenu occupe : la cellule que vous avez dessinée dimensionne déjà le contenu, et ce bouton l'ajuste à l'intérieur de la cellule sans redessiner la grille. Un dessin y répond géométriquement, un affichage typographiquement. | de 0,25 à 3 | 1 |

**Position et couche** porte les X / Y / L / H numériques, la couche (Z) et la paire **Mettre au
premier plan** / **Mettre à l'arrière-plan**. **Avancé** n'apparaît que sur les genres qui ont des
extras rares. **Actions du composant** duplique ou retire le composant.

Maintenez **Ctrl** pour sélectionner plusieurs composants et modifier ce qu'ils ont en commun : les
champs d'Apparence se répandent sur toute la sélection (un champ sur lequel les membres ne
s'accordent pas indique « Mixte »), les commandes de couche conservent l'ordre relatif du lot, et
Dupliquer et Retirer agissent sur tous. Les champs propres à un genre demandent un composant unique.
