OPC UA
Un client OPC UA pour des serveurs tiers, avec une confiance gouvernée par les certificats, un adressage par identifiant de nœud et la découverte de l'espace d'adressage.
Le pilote OPC UA est un client pour des serveurs OPC UA tiers : automates, passerelles,
historiens, autres systèmes SCADA, sur opc.tcp. C'est le pendant sortant du
serveur OPC UA intégré qui publie l'espace d'adressage propre à cette station (décrit sous
Paramètres); les deux partagent l'identité d'application de la station
mais font confiance à leurs pairs indépendamment.
Équipement
| Champ | Sens | Par défaut |
|---|---|---|
| Hôte | Le nom DNS, l'adresse IPv4 ou IPv6 du serveur. | localhost quand il est laissé vide |
| Port | Le port TCP du point de terminaison. | 4840 (un 0 configuré retombe sur 4840) |
| Chemin de ressource | Le chemin de point de terminaison que certains serveurs exigent après l'hôte et le port, ce qui produit opc.tcp://host:port/path. Laissez-le vide quand le serveur répond à la racine. |
vide |
| Sécurité de la session | Désactivée, la session est signée et chiffrée et un équipement qui n'offre rien de mieux est refusé. Autoriser une session sans sécurité l'ouvre quand même, en clair, pour un équipement qui n'annonce aucun point de terminaison sécurisé. | désactivée |
| Nom d'utilisateur / Mot de passe | L'identité d'utilisateur de la session. Un nom d'utilisateur vide veut dire une session anonyme. Le mot de passe est protégé au repos par la protection des données de Windows, par utilisateur, et ne peut être lu que sur la machine et le compte Windows qui l'ont saisi. | anonyme |
| Intervalle de scrutation (ms) | La cadence de scrutation par défaut des tags qui ne la remplacent pas. | 1000 |
Sécurité et certificats
La connexion commence par la liste des points de terminaison du serveur : le client choisit le point de terminaison le plus sûr que le serveur annonce et authentifie l'application avec le certificat propre à cette station, la même identité d'application OPC UA qu'emploie le serveur intégré. Beaucoup de serveurs exigent que ce certificat soit approuvé de leur côté avant d'accepter la session; cette étape se fait sur l'équipement.
Un équipement qui n'annonce rien de mieux qu'un point de terminaison sans sécurité est
refusé, et l'appareil dit pourquoi. Cette session ferait circuler les lectures et les
identifiants en clair et ne prouverait aucune identité d'équipement : elle ne s'ouvre donc que
là où vous l'avez demandée sur cet appareil, par Sécurité de la session, Autoriser une
session sans sécurité, sur la carte de connexion. Le choix appartient à cet appareil-là,
voyage dans son adresse sous la forme ?security=none et vaut aussi bien pour la session de
lecture que pour le parcours de la découverte. L'activer ne dégrade jamais un équipement qui
offre de la sécurité : c'est toujours le point de terminaison le plus sûr annoncé qui est
retenu.
Dans l'autre sens, la confiance est fermée par défaut et explicite. Le certificat de l'équipement est vérifié avant l'ouverture de la session :
- Un certificat que cette station n'a jamais approuvé est refusé, enregistré pour examen, et le volet de l'équipement montre un avis qui nomme l'approbation attendue : l'équipement n'est pas « hors ligne », il attend une décision.
- Vous examinez les certificats sous Paramètres → Accès des équipements, la moitié sortante de la confiance par certificat : un certificat enregistré reste sous En attente d'approbation jusqu'à ce que vous l'approuviez (de nouvelles sessions peuvent s'ouvrir) ou le bloquiez (refusé sans redemander sans cesse). C'est la liste des équipements; Accès des clients, sur la même page, est l'autre sens : qui a le droit de se connecter en entrée au serveur propre à cette station.
- Retirer l'approbation, sur une ligne approuvée, ferme les sessions en cours qui reposaient sur ce certificat et le renvoie à la liste d'examen, si bien que la prochaine connexion vous redemandera.
- Un équipement qui ne présente aucun certificat ne prouve rien sur qui a répondu : il n'y a donc rien à approuver et la session est refusée, son adresse écrite au journal. Il ne se connecte que sous ce même Autoriser une session sans sécurité, qui tient alors lieu d'approbation.
Approuver le serveur d'un équipement n'autorise jamais ce certificat à se connecter en entrée au serveur propre à cette station : les deux sens gardent des dépôts distincts, délibérément.
Le comportement d'une session
Les tags sont scrutés : chaque lecture demande au serveur la valeur courante du nœud. Le verdict propre au serveur voyage avec chaque échantillon : une valeur marquée Bad ou Uncertain est refusée et le tag lit une mauvaise qualité, si bien qu'une source douteuse n'est jamais blanchie en une bonne lecture. Un nœud qui n'existe plus sur le serveur se lit comme aucune valeur plutôt que de faire échouer tout l'équipement.
La session est surveillée par des messages de maintien; après trois maintiens manqués, le client lance une reconnexion automatique et poursuit. La boucle de reprise en arrière-plan de l'application possède la connexion initiale, si bien qu'un serveur injoignable ne coûte rien au démarrage.
Adressage d'un tag
Un tag est adressé par son identifiant de nœud, saisi en texte libre et envoyé tel quel. Les formes acceptées sont les notations OPC UA standard :
| Exemple | Sens |
|---|---|
ns=2;s=Temperature |
Identifiant textuel dans l'espace de noms d'indice 2 |
i=2258 |
Identifiant numérique dans l'espace de noms 0 (ici : le CurrentTime du serveur) |
ns=3;i=1042 |
Identifiant numérique dans l'espace de noms d'indice 3 |
nsu=urn:vendor:app;s=Line1.Speed |
La forme étendue qui nomme l'espace de noms par son URI plutôt que par son indice, robuste face aux changements d'indice d'un redémarrage à l'autre |
Le tag lit et écrit l'attribut Value du nœud.
Types de valeur
| Types offerts |
|---|
| Boolean, Byte, Int16, Int32, Int64, Float, Double et String |
Les valeurs sont scalaires seulement : les tableaux, les structures et les autres valeurs complexes sont refusés comme illisibles plutôt qu'aplatis en un nombre trompeur, et le tag lit une mauvaise qualité. Un tel tag échoue tout seul; les autres tags de l'équipement continuent de lire, et rien n'est reconnecté à cause de lui. Une chaîne vide est une valeur, pas un échec. Les types hors de l'ensemble offert (largeurs non signées, DateTime, Guid, ByteString) ne sont pas disponibles sur ce pilote.
Le balayage d'un serveur offre donc moins de voies que le serveur n'en porte : un nœud qui déclare une liste de valeurs, et un nœud dont le type est hors de l'ensemble offert, sont laissés de côté. Ils ne sont pourtant pas abandonnés en silence. Le balayage les compte et son message de clôture dit combien et de quelle sorte, par exemple « 5 voie(s) ont été laissées de côté : 3 de type UInt32, 2 qui portent une liste de valeurs au lieu d'une seule valeur. », si bien qu'une liste courte se lit comme une liste courte et non comme un automate nu.
Écritures
Un tag inscriptible écrit l'attribut Value du nœud par le service Write d'OPC UA. La réponse du serveur est le verdict : une écriture rejetée remonte comme un échec, et la valeur en cache n'avance qu'à l'acceptation. Comme partout, le champ d'écriture prend la valeur physique et la chaîne de conversion est remontée avant que la valeur brute ne parte.
Découverte
La commande Découvrir prend une cible dans le champ qui la précède : une adresse de serveur
OPC UA telle que opc.tcp://plc-host:4840. Le balayage a deux étapes, et la
ligne d'avancement nomme celle qui tourne :
- Points de terminaison : le service de découverte standard de la cible est interrogé et chaque URL de découverte annoncée devient un point de terminaison candidat. Les ports et les chemins de serveur particuliers reviennent intacts dans les champs de connexion du candidat.
- Voies : l'espace d'adressage de chaque candidat est parcouru depuis le dossier Objects vers le bas, et chaque variable lisible est listée comme tag candidat avec son type et son accès. Les zones de diagnostic du serveur sont sautées.
Le parcours ouvre une session anonyme (avec la même sélection du point de terminaison le plus sûr, le même refus d'une session sans sécurité et la même barrière du certificat d'équipement). Un serveur qui refuse les sessions anonymes, un serveur qui n'annonce aucun point de terminaison sécurisé, ou un parcours qui échoue pour une raison quelconque, laisse tout de même le point de terminaison ajoutable avec zéro tag : ajoutez-le, posez les identifiants et la sécurité de la session sur l'appareil, et configurez les tags à la main. Rien n'est enregistré tant que vous n'avez pas ajouté un candidat, et annuler garde les candidats qui étaient déjà complets.
Des limites bonnes à connaître
- Les lectures sont des scrutations de l'attribut Value; le pilote ne crée aucun abonnement sur le serveur distant.
- Valeurs scalaires seulement : un tag ne peut adresser ni un élément de tableau, ni un champ de structure.
- La barrière d'approbation s'applique par certificat : un équipement qui renouvelle son certificat revient à la liste d'examen et attend une nouvelle décision.