Please ensure Javascript is enabled for purposes of website accessibility
Powered by Zoomin Software. For more details please contactZoomin

AVEVA™ InTouch HMI

Fonctions mathématiques

  • Last UpdatedSep 24, 2024
  • 2 minute read

Les fonctions mathématiques renvoient le résultat d'une expression mathématique spécifiée.

Dans un QuickScript, tous les calculs mathématiques se font internement en double précision, quel que soit le type de données de l'opérande. Conformément aux règles mathématiques standard, le résultat des opérations de division est toujours arrondi en conservant la précision. L'arrondi se produit uniquement sur le résultat final, et non sur les valeurs intermédiaires, et le quotient respecte le type de données cible. C'est aussi la méthodologie standard des systèmes SCADA et DCS, pour assurer l'intégrité des données, préserver la précision, calculer l'horodatage ainsi que la propagation et agrégation globales de la qualité requise des données dans ces systèmes.

Pour effectuer un arrondi à chaque étape au lieu de sur le résultat final, il est possible d'exploiter la prise en charge des bibliothèques .NET dans un QuickScript et d'utiliser les méthodes System.Math.Floor et System.Math.Round pour arrondir explicitement les valeurs intermédiaires. Prenons l'exemple du script suivant :

dim dividende as integer;
dim diviseur as integer;
dim quotient as integer;
dim reste as integer;
dividende = 8;
diviseur = 3;
LogMessage("Valeur du dividende = " + dividende);
LogMessage("Valeur du diviseur = " + diviseur);
quotient = dividende/diviseur;
LogMessage("Valeur du quotient = " + quotient);
reste = dividende mod diviseur;
LogMessage ("Valeur du reste = " + reste);
dividende = diviseur*quotient +reste;
LogMessage ("Valeur du dividende = " + dividende);

Le résultat est : 8 / 3 = 3

Si au lieu de cela vous voulez ignorer le reste (sans arrondir le résultat final à l'entier le plus proche), vous pouvez invoquer la méthode Math.Floor et utiliser le code suivant :

dim dividende as integer;
dim diviseur as integer;
dim quotient as integer;
dim reste as integer;
dividende = 8;
diviseur = 3;
LogMessage("Valeur du dividende = " + dividende);
LogMessage("Valeur du diviseur = " + diviseur);

// *** Ajout d'un appel à Math.Floor. Ceci ignore le reste au lieu d'arrondir le résultat interne de type Double à la valeur entière
quotient = System.Math.Floor(dividende/diviseur);

LogMessage("Valeur du quotient = " + quotient);
reste = dividende mod diviseur;
LogMessage ("Valeur du reste = " + reste);
dividende = diviseur*quotient +reste;
LogMessage ("Valeur du dividende = " + dividende);

Le résultat est : 8 / 3 = 2 (reste 2)