La chaîne de conversion

La conversion typée que partage chaque tag, de la lecture brute à la valeur physique, les deux politiques de lecture non exploitable, les actions hors limites, les transformations booléennes et de chaîne, et comment une écriture remonte les étapes.

Afficher en Markdown

Chaque tag partage une seule chaîne de conversion typée qui transforme la lecture brute en valeur physique. La chaîne vit dans le tag lui-même : la carte Conversion de la page Tags et la grille de l'équipement montrent les mêmes étapes, et la valeur qui arrive dans Logic, sur les tableaux de bord, dans l'enregistreur et sur le nœud OPC UA public est celle qui sort de la dernière étape.

Le brut d'abord

La chaîne part de la valeur brute convertie vers le type de donnée du tag, et non de l'objet propre au pilote : un pilote qui remet 3,7 à un tag Int32 lit 4 en haut de la carte, et chaque étape continue à partir de ce 4. Une lecture que le type déclaré ne peut pas porter du tout (du texte là où un nombre est déclaré) est une lecture vide, jamais un zéro de remplacement. À l'autre bout, la valeur physique est reconvertie vers ce même type, si bien qu'un tag Float s'arrondit à ce qu'un flottant peut représenter.

Les étapes

Pour les types numériques, la chaîne est une suite d'étapes, chacune avec sa case ; une étape désactivée laisse passer son entrée, et la carte affiche la valeur courante à la fin de chaque étape pour que vous puissiez suivre une lecture en direct à travers le calcul :

Étape Défaut Ce qu'elle fait
Mise à l'échelle activée échelle = brut × Angulaire + Linéaire. Angulaire vaut 1 par défaut, Linéaire 0. Un Angulaire de 0 est refusé là où il est saisi (« Un facteur d'échelle de 0 mettrait chaque lecture à zéro. Saisissez le facteur multiplicateur (1 conserve la valeur). »), parce qu'il mettrait chaque lecture à zéro et que l'aperçu et la chaîne conservée ne doivent jamais se contredire.
Étalonnage désactivée Une seconde paire linéaire appliquée à la valeur mise à l'échelle : étalonné = échelle × Angulaire + Linéaire. Tenue à part de la mise à l'échelle pour qu'un ajustement avant/après ne dérange pas le calcul de plage, et gouvernée par sa propre permission ; voir Étalonnage. Un Angulaire de 0 est refusé de la même façon.
Lecture non exploitable toujours affichée Deux politiques pour les lectures qui ne portent aucun nombre utilisable (ci-dessous). Ce n'est pas une case : son « désactivé » est lui-même l'une des deux réponses.
Limites désactivée Juge la valeur face à Mini (0 par défaut) et Maxi (100 par défaut) et applique l'action hors limites choisie (ci-dessous). Les bornes sont normalisées, si bien qu'un Mini au-dessus du Maxi n'échoue jamais : la plus petite des deux est le plancher.
Décimales activée Arrondit à Décimales chiffres, 2 par défaut, accepté de 0 à 15.

Les deux étapes linéaires portent un assistant Deux points qui calcule la paire à partir de deux points de référence ; il est décrit pas à pas sur Étalonnage.

L'équipement a répondu sans nombre

Un thermocouple ouvert, une voie sans capteur : la lecture est arrivée, l'équipement parle, mais la mesure est NaN. Tags numériques seulement, et la qualité reste bonne dans les deux cas :

Politique Effet
Laisser passer (défaut) Le NaN poursuit son chemin intact et saute entièrement l'étape Limites, quelle que soit l'action qu'elle porte : les limites jugent des nombres, et il n'y en a pas ici. L'infini n'est pas un NaN et sature toujours sur la plage.
Remplacer par une valeur Le nombre déclaré prend la place à partir de cette étape et entre dans Limites, Décimales et la conversion finale comme n'importe quelle lecture.

L'équipement n'a pas répondu

Un délai dépassé, un câble sectionné, un équipement éteint, une exception du pilote. Tous les types, mais un tag qui lit un horodatage, un identifiant ou un bloc d'octets ne se voit proposer que les deux premières politiques : une valeur de remplacement déclarée est un nombre, et aucun de ces trois-là ne se fabrique à partir d'un nombre.

Politique Effet
Afficher l'erreur (défaut) Le tag se lit vide et sa qualité devient mauvaise, si bien que le défaut apparaît partout d'un coup.
Maintenir la dernière valeur correcte La dernière lecture arrivée reste affichée, sans péremption, jusqu'à ce que l'équipement réponde de nouveau. Les horodatages continuent de désigner cette lecture, parce que c'est là que le nombre a été mesuré. Rien n'est maintenu avant l'arrivée de la première lecture ; le tag se lit vide d'ici là.
Remplacer par une valeur Le nombre déclaré est présenté tel quel : il n'y a aucune lecture à faire passer par les étapes, donc il n'est ni mis à l'échelle, ni étalonné, ni arrondi, seulement converti vers le type du tag. Proposé pour chaque type vers lequel la conversion porte un nombre, c'est-à-dire tous sauf DateTime, Guid et ByteString.

Une valeur de remplacement n'est jamais silencieuse : la carte Valeur en direct en imprime la raison (« Dernière valeur correcte, maintenue tant que l'équipement ne répond pas. »), le point en direct passe à l'orange, et le serveur OPC UA intégré publie la valeur avec un statut de substitution au lieu d'un Good simple. Elle reste publiée aussi longtemps que la politique le demande : un équipement qui continue de ne pas répondre ne fait pas alterner un client externe entre la valeur de remplacement et un échec de lecture, si bien que ce que ce client lit est ce que le volet affiche. La lecture elle-même reprend le point dès que l'équipement répond, et éteindre la valeur de remplacement fait de même. Choisir une valeur de remplacement, c'est choisir la disponibilité, si bien que les alarmes et les expressions continuent de juger le point comme s'il avait une valeur ; ce que cela coûte est remboursé au grand jour, parce que le journal enregistre toujours la lecture en échec et que l'état de santé signale toujours l'équipement hors ligne. Une valeur de remplacement répond à « qu'est-ce que ce point devrait afficher », jamais à « l'équipement est-il là ». Une valeur de remplacement déclarée en dehors des limites activées est signalée là où elle est saisie : « Hors des limites [0, 100] : la valeur qui remplace une lecture en échec. »

Les valeurs hors limites

Les actions de Limites pour une valeur en dehors du mini et du maxi :

Action La valeur devient Qualité
Valeur nulle Un vide (aucune valeur). bonne
Écrêter (défaut) La borne la plus proche. bonne
Erreur et valeur nulle Un vide. mauvaise (défaut de limite)
Erreur et écrêtage La borne la plus proche. mauvaise (défaut de limite)
NaN NaN. bonne. Proposée seulement pour les tags Float et Double, dont le type sait la représenter ; elle laisse une voie Process classer la valeur non exploitable. Une action NaN laissée sur un tag entier par une écriture d'agent ou une sauvegarde restaurée se dégrade vers le vide de Valeur nulle.

Un défaut de limite se replie dans la qualité effective du tag, si bien que le point en direct, les expressions de propriété et les alarmes voient tous la valeur hors limites comme mauvaise sans câblage supplémentaire, et la carte Conversion imprime « La valeur 130 est hors des limites [0, 100]. » Cela reste une condition du procédé plutôt qu'un problème de connexion, et l'état de santé de l'équipement ne compte pas l'équipement hors ligne pour autant.

Booléen, chaîne et autres types

Les types non numériques ont leurs propres transformations dans la même carte Conversion :

  • Booléen : Inverser rapporte la négation logique de la valeur brute.
  • Chaîne : Début de la sous-chaîne (à partir de 0) et Longueur découpent une fenêtre dans la chaîne brute ; une longueur vide va jusqu'au bout, et des bornes hors plage sont écrêtées plutôt que d'échouer.
  • Tout autre type (DateTime, Guid, ByteString) passe inchangé et n'affiche aucune carte Conversion.

Afficher l'erreur et maintenir la dernière valeur correcte s'appliquent à tous les types ; remplacer par une valeur est proposé partout où un nombre déclaré peut devenir une lecture, si bien qu'un tag DateTime, Guid ou ByteString ne le liste pas. La politique NaN ne s'applique qu'aux tags numériques.

Une écriture remonte la chaîne

Le champ d'écriture de la carte Valeur en direct prend une valeur physique et remonte dans l'ordre les étapes activées et inversibles : écrêtage au mini et au maxi quand Limites est activée (une écriture est toujours écrêtée, jamais abandonnée, quelle que soit l'action de limite), désétalonnage ((valeur − Linéaire) ÷ Angulaire), retour d'échelle de la même façon, puis conversion vers le type du tag. L'arrondi perd de l'information et n'est pas remonté. Une entrée booléenne réapplique Inverser. Une sous-chaîne n'est qu'un affichage, si bien qu'une écriture de chaîne envoie la valeur entière telle quelle ; DateTime, Guid et ByteString passent tels quels. Une valeur écrite par un client OPC UA externe sur le nœud public est déjà brute et ne traverse rien de tout cela.