La chaîne de conversion
La conversion typée que chaque tag partage, de la lecture brute à la valeur physique, les deux politiques de lecture invalide, les actions de dépassement de plage, les transformations booléenne et textuelle, et comment une écriture remonte les étapes.
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.
D'abord le brut
La chaîne part de la valeur brute convertie vers le type de donnée du tag, 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 le même type : un tag Float s'arrondit donc à 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 propre case; une étape désactivée laisse passer son entrée, et la carte montre la valeur courante à la sortie de chaque étape, pour que vous suiviez une lecture en direct à travers le calcul :
| Étape | Par défaut | Ce qu'elle fait |
|---|---|---|
| Mise à l'échelle | activée | mis à l'é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 par lequel multiplier (1 conserve la valeur). »), parce qu'il mettrait chaque lecture à zéro et que l'aperçu et la chaîne enregistrée ne doivent jamais se contredire. |
| Étalonnage | désactivé | Une seconde paire linéaire appliquée à la valeur mise à l'échelle : étalonné = mis à l'échelle × Angulaire + Linéaire. Tenue à part de la mise à l'échelle pour qu'un ajustement d'avant et d'après ne dérange pas le calcul de la plage, et gouvernée par sa propre permission; voir Étalonnage. Un Angulaire de 0 y est refusé de la même façon. |
| Lecture invalide | toujours montrée | Deux politiques pour les lectures qui ne portent aucun nombre exploitable (ci-dessous). Ce n'est pas une case : son « désactivé » est déjà l'une des réponses. |
| Limites | désactivées | Jugent la valeur face à Mini (0 par défaut) et Maxi (100 par défaut) et appliquent l'action de dépassement choisie (ci-dessous). Les bornes sont normalisées : un Mini au-dessus du Maxi n'échoue donc jamais, c'est la plus petite des deux qui fait plancher. |
| Décimales | activées | Arrondit à Décimales chiffres, 2 par défaut, acceptées 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 (par défaut) | Le NaN poursuit sa route intact et saute entièrement l'étape Limites, quelle que soit l'action que cette étape 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 coupé, 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 offrir que les deux premières politiques : une valeur de remplacement déclarée est un nombre, et aucun de ces trois types ne se fabrique à partir d'un nombre.
| Politique | Effet |
|---|---|
| Montrer l'erreur (par défaut) | Le tag lit vide et sa qualité devient mauvaise, si bien que la panne se voit partout en même temps. |
| Conserver la dernière bonne valeur | 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 à ce moment que le nombre a été mesuré. Rien n'est conservé avant la première lecture; le tag lit vide d'ici là. |
| Remplacer par une valeur | Le nombre déclaré est présenté tel que déclaré : il n'y a aucune lecture à faire passer par les étapes, il n'est donc ni mis à l'échelle, ni étalonné, ni arrondi, seulement converti vers le type du tag. Offerte pour tout type dans lequel la conversion fait entrer un nombre, c'est-à-dire tous sauf DateTime, Guid et ByteString. |
Une valeur de remplacement n'est jamais silencieuse : la carte Valeur en direct écrit pourquoi (« Dernière bonne valeur, conservée pendant que l'équipement ne répond pas. »), le point en direct passe à l'ambre, et le serveur OPC UA intégré publie la valeur avec un statut de substitution plutôt qu'un simple Bonne. Elle reste publiée aussi longtemps que la politique l'exige : 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 montre. La lecture elle-même reprend le point dès que l'équipement répond, et désactiver la valeur de remplacement aussi. Choisir une valeur de remplacement, c'est choisir la disponibilité : les alarmes et les expressions continuent donc de juger le point comme s'il avait une valeur; ce que cela coûte est payé 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 montrer », jamais « l'équipement est-il là ». Une valeur de remplacement déclarée hors 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 plage
Les actions de Limites pour une valeur hors de Mini et Maxi :
| Action | La valeur devient | Qualité |
|---|---|---|
| Valeur nulle | Un vide (aucune valeur). | bonne |
| Écrêter (par 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. Offerte seulement pour les tags Float et Double, dont le type sait la représenter; elle laisse une voie Process classer la valeur invalide. Une action NaN laissée sur un tag entier par une écriture d'agent ou une sauvegarde restaurée retombe sur le vide de Null. |
Un défaut de limite entre dans la qualité effective du tag : le point en direct, les expressions de propriété et les alarmes voient donc tous la valeur hors limites comme mauvaise sans câblage supplémentaire, et la carte Conversion écrit « 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, texte et autres types
Les types non numériques ont leurs propres transformations dans la même carte Conversion :
- Booléen : Inverser annonce la négation logique de la valeur brute.
- Texte : 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'à la fin, et des bornes hors plage sont ramenées dans la plage plutôt que de faire échouer.
- Tout autre type (DateTime, Guid, ByteString) passe inchangé et n'affiche aucune carte Conversion.
Montrer l'erreur et conserver la dernière bonne valeur s'appliquent à tous les types; remplacer par une valeur est offert partout où un nombre déclaré peut devenir une lecture, si bien qu'un tag DateTime, Guid ou ByteString ne la 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 : ramener dans Mini et Maxi quand les Limites sont activées (une écriture est toujours ramenée dans la plage, jamais abandonnée, quelle que soit l'action de limite), désétalonner ((valeur − Linéaire) ÷ Angulaire), défaire la mise à l'échelle de la même façon, puis convertir vers le type du tag. L'arrondi est destructeur et n'est pas remonté. Une entrée booléenne réapplique Inverser. Une sous-chaîne de texte n'existe que pour l'affichage : une écriture de texte envoie donc la valeur entière telle quelle; DateTime, Guid et ByteString passent inchangés. 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.