# Nœuds servis

> La liste de ce que sert le serveur OPC UA embarqué, et de tout ce qu'il sert : tags, variables Logic, alarmes et commandes d'équipement, chaque ligne en lecture seule tant que vous n'autorisez pas l'écriture, où un client trouve chacun et ce qu'il faut à une station mise à jour.

**Nœuds servis** est la quatrième carte du volet du serveur OPC UA dans le Connector. Le serveur sert cette liste et rien d'autre : un client qui se connecte trouve les tags, variables Logic, alarmes et commandes d'équipement listés ici, et aucun autre. La carte le dit sous son titre : « Le serveur sert cette liste et rien d'autre : chaque ligne est un tag, une variable Logic, une alarme ou une commande d'équipement. Une ligne reste en lecture seule tant que vous n'autorisez pas l'écriture. L'écriture d'un client suit alors le même chemin que toute autre et est consignée au journal technique avec la session du client. » Voir Connector lit la carte ; Configurer Connector la modifie.

## Une liste vide {#an-empty-list}

La liste démarre vide, sur une station neuve et sur une station mise à jour depuis une version qui servait chaque équipement en entier. Tant qu'elle est vide, une note d'avertissement sur la carte dit : « La liste est vide, donc le serveur ne sert rien de la station : un client OPC UA ne trouve ni tag, ni variable, ni alarme, ni commande tant que vous n'ajoutez pas de lignes. » Le serveur écoute toujours et accepte toujours les sessions que permet l'[Accès des clients](connector-opcua-client-access) ; elles parcourent un espace d'adressage où rien de la station ne figure. Un agent lit la même chose dans `server_status`, dont `servesNothing` est vrai tant que la liste est vide.

## Le tableau {#the-table}

| Colonne | Ce qu'elle montre |
| --- | --- |
| **Source servie** | Ce que sert la ligne, tel que le sélecteur le nomme, ou « Pas encore de source » tant que sa source n'est pas choisie. |
| **Accès** | **Lecture seule** ou **Lecture et écriture**, et **Appelable** pour une commande d'équipement. |
| **Nœud** | L'adresse avec laquelle un client est configuré, sous la forme `nsu=<namespace>;s=<identifier>` ; vide tant que la ligne ne sert rien. |

Les lignes sont listées par genre (tags, variables, alarmes, commandes), puis par nom. Sans aucune, le tableau dit « Aucun nœud n'est encore servi. Ajoutez-en un avec Nouvelle ligne. » Un clic sur une ligne la sélectionne et ouvre ses champs sous le tableau ; la ligne sélectionnée appartient à la fenêtre où vous êtes.

| Commande | Ce qu'elle fait | Grisée quand (situation) | Non affichée quand (rôle) |
| --- | --- | --- | --- |
| **Nouvelle ligne** | Ajoute une ligne en lecture seule qui ne sert encore rien et la sélectionne, pour que sa source soit choisie ensuite. Le journal des actions dit « Ligne ajoutée à la liste du serveur OPC UA. Choisissez sa source. » | Un essai retient la station, ou le runtime est arrêté. | Sans Configurer Connector. |
| **Supprimer la ligne** (encre de danger) | Supprime la ligne que le tableau a sélectionnée, aussitôt et sans question ; son infobulle nomme la source que sert la ligne, et le journal des actions le confirme. La source n'est pas touchée : un client ne trouve plus son nœud. | Aucune ligne n'est sélectionnée (« Sélectionnez une ligne de la liste pour la supprimer. »), un essai retient la station, ou le runtime est arrêté. | Sans Configurer Connector. |

## Les champs d'une ligne {#a-rows-fields}

Chaque champ est enregistré dès qu'il change, et le serveur sert la nouvelle ligne un instant plus tard, sans couper de session : il lit sa liste dix fois par seconde.

| Champ | Ce qu'il fait | Valeurs et défaut |
| --- | --- | --- |
| **Source servie** | Ce que sert la ligne. La liste s'ouvre sur « (aucun) », puis chaque tag activé d'un équipement activé, nommé d'après son pilote, son équipement et lui-même (« Tag Connector · Simulated · Oven · Temperature »), puis chaque variable Logic qui porte une valeur, par ses dossiers et son nom (« Variable Logic · Oven / Setpoint »), puis chaque alarme, nommée de la même façon (« Alarme Logic · Oven / High temperature »), et enfin chaque commande d'un équipement activé : les commandes déclarées sur la page de l'équipement et celles qu'un protocole fixe, comme celles d'une borne de recharge (« Commande · OCPP · Charger · Reset »). Une source figure une seule fois dans la liste. La ligne tient sa source par son identité, donc un renommage laisse la ligne sur la même source, que le serveur sert alors sous son nouveau nom. Une source que la liste n'offre plus reste sélectionnée et nommée, un tag ou une commande désactivé avec ce qui l'en écarte, et seule une source qui n'existe plus apparaît comme manquante, avec son identité. La carte [Utilisé par](connector-tags#the-used-by-card) d'un tag liste les lignes qui le servent. | « (aucun) » pour une nouvelle ligne. |
| **Accès** | Si un client peut écrire la ligne. **Lecture et écriture** reste dans la liste, grisé, là où la source n'accepte pas d'écriture, avec l'infobulle « Cette source n'accepte pas d'écriture : seuls un tag accessible en écriture ou une variable mémoire en acceptent. » Choisir une alarme remet la ligne en lecture seule. Pour une commande, le champ affiche **Appelable** comme valeur fixe, sans sélecteur, car une commande s'appelle, elle ne se lit ni ne s'écrit. | **Lecture seule** ou **Lecture et écriture** ; **Appelable**, fixe, pour une commande. Lecture seule pour une nouvelle ligne. |

Sous les champs, une ligne dit ce que la ligne de la liste fait pour un client :

| La carte dit | Quand |
| --- | --- |
| « Cette ligne ne sert encore rien : choisissez sa source. » | Aucune source n'est choisie. |
| « La source de cette ligne n'existe plus, donc le serveur ne sert rien pour elle. » | Le tag, la variable, l'alarme ou la commande a été supprimé. |
| « Un client peut lire ce nœud mais pas l'écrire. » | Un tag ou une variable, en lecture seule. |
| « Un client peut lire et écrire ce nœud : chaque écriture est consignée au journal technique avec la session du client. » | Un tag ou une variable marqué en lecture et écriture. |
| « Un client lit Active, Acked, State, Priority et Message de l'alarme, et ne les écrit jamais. » | Une alarme. |
| « Un client appelle cette commande comme une méthode de son équipement tant qu'elle est dans la liste. » | Une commande d'équipement. |

Sous cette ligne, **Un client le trouve à** est suivi du nœud.

## Ce qu'une ligne refuse {#what-a-row-refuses}

Un changement que les règles de la liste refusent n'est pas enregistré : la raison s'affiche en rouge au-dessus des champs de la ligne, le changement reste à l'écran pour que vous le corrigiez, et la ligne continue de servir ce qu'elle servait.

| La carte dit | Quand |
| --- | --- |
| « Cette source est déjà dans la liste : un client la trouve au nœud que sert cette ligne. » | La source figure déjà dans une autre ligne. |
| « La source ne peut pas être écrite : choisissez un tag accessible en écriture ou une variable mémoire, ou laissez la ligne en lecture seule. » | Lecture et écriture sur un tag en lecture seule, un tag d'un pilote qui n'écrit jamais, une variable d'expression, une alarme, une commande ou une source qui n'existe plus. |
| « Une ligne qui accepte des écritures a besoin du tag ou de la variable qui les reçoit. » | Lecture et écriture sur une ligne sans source, ce que seul un agent peut demander. |
| « Cette ligne de la liste n'existe plus. Rechargez et réessayez. » | La ligne a été supprimée ailleurs, dans une autre fenêtre ou par un agent, pendant que vous la modifiiez. |

Tant qu'un essai retient la station ou que le runtime est arrêté, un changement est refusé comme tout changement de la page, avec la raison dans le journal des actions, et rien n'est enregistré.

## Où un client trouve chaque source {#where-a-client-finds-each-source}

| Source | Où elle se trouve | Ce qu'un client lit |
| --- | --- | --- |
| Tag | Là où il a toujours été : dans l'espace de noms de son équipement, `http://opcfoundation.org/UA/<driver>.<device>/`, sous le nom propre du tag. Un client configuré avant que la liste existe le trouve à la même adresse. Un client qui parcourt l'espace d'adressage le trouve dans le dossier `Devices` sous Objects, dans l'objet qui porte le nom de son équipement. | La valeur que l'équipement a répondue, avec sa qualité et son horodatage, telle que le Connector la lit. |
| Variable Logic | Dans le dossier `Logic` sous Objects, dans les propres dossiers de Logic, dans l'espace de noms du serveur `http://opcfoundation.org/UA/EdgeTranslator/` sous son adresse Logic (`Variables.Oven.Setpoint`). | Sa valeur, typée par la conversion unique de la station : Boolean, Int64 pour un Entier, Double pour un Décimal, String pour un Texte et DateTime pour une Date et heure. Une variable sans valeur valide se lit BadDataUnavailable. |
| Alarme | Dans le dossier `Alarms` sous Objects, dans les propres dossiers de Logic, comme un objet sous son adresse Logic (`Alarms.Oven.HighTemperature`). | Cinq membres en lecture seule : Active et Acked (Boolean), State (Int32 : 0 normale, 1 active non acquittée, 2 active acquittée, 3 retombée non acquittée), Priority et Message (String). Tant que l'alarme garde son état pendant une mauvaise qualité, Active, Acked et State se lisent UncertainLastUsableValue. |
| Commande | Une méthode de son équipement, à côté des tags de l'équipement. | Appelée avec les valeurs que la commande déclare, elle répond par ce que l'équipement a répondu. |

Chaque équipement garde son espace de noms quoi que la liste serve de lui, donc l'index où un client trouve un espace de noms ne bouge pas quand les tags d'un autre équipement entrent dans la liste ou en sortent. Un équipement dont la liste ne nomme rien n'a aucun nœud.

## Écriture {#writing}

L'écriture d'un client n'atteint la station que sur une ligne marquée en lecture et écriture, et la liste est consultée à nouveau à l'instant où l'écriture arrive, donc une ligne qui vient de passer en lecture seule n'est jamais écrite. L'écriture sur un tag va dans la file de livraison de son équipement comme toute écriture venue de l'extérieur, et la réponse attend l'équipement ; l'écriture sur une variable mémoire passe par l'entonnoir d'écriture de Logic et est convertie dans le type de la variable. Les verrous de source s'appliquent : une source qu'un Process en cours tient est refusée. Chaque écriture est consignée au journal technique avec l'application et la session du client. Une variable d'expression et une alarme n'acceptent jamais d'écriture, et le serveur répond BadNotWritable. Une commande est appelée, pas écrite, et un client n'appelle qu'une commande qui est dans la liste.

## Une station mise à jour {#an-updated-station}

Une station mise à jour depuis une version sans la liste servait chaque tag de chaque équipement. Sa liste démarre vide, donc après la mise à jour son serveur OPC UA ne sert rien tant que la liste n'est pas composée : ajoutez une ligne pour chaque tag qu'un client lit, marquez en lecture et écriture ceux qu'un client écrit, et ajoutez les commandes qu'un client appelle. Un client configuré avant la mise à jour trouve chaque tag à l'adresse qu'il avait, il n'a donc besoin d'aucun changement de son côté.

## Avec un agent {#with-an-agent}

```text
server_list_upsert(source: "Connector.Simulated.Oven.Temperature")
server_list_upsert(source: "Variables.Oven.Setpoint", access: "ReadAndWrite")
server_list_upsert(source: "Alarms.Oven.HighTemperature")
server_status()
```

Une ligne créée par un agent est en lecture seule sauf si `access` dit autre chose, et `server_list_delete` en supprime une par son identifiant. Les outils sont décrits dans [Les outils, domaine par domaine](agent-tools#connector--configure).

## Ce que la liste ne fait pas {#what-the-list-does-not-do}

Elle ne met pas le serveur en marche (Activer de la barre de commandes le fait), elle ne décide pas quel client peut se connecter (l'[Accès des clients](connector-opcua-client-access) le décide) et elle n'acquitte pas une alarme depuis l'extérieur : acquitter reste une commande de l'opérateur. Elle sert les valeurs ci-dessus et aucun événement OPC UA d'alarmes et conditions. Une variable qui porte une image, une icône ou une couleur n'est pas proposée, et une constante de la description d'un équipement n'est pas servie.
