Instructions TIA Portal

Opérations de Comparaison
Logique de décision & Plages

La comparaison de valeurs est le moteur de la logique décisionnelle industrielle. Maîtrisez les comparateurs standard, les tests de plage et les vérifications de validité.

Que sont les opérations de comparaison dans TIA Portal ?

Les opérations de comparaison permettent de comparer deux valeurs de même type de données (Entiers, Réels, Temps, etc.) ou de vérifier si une valeur se situe à l'intérieur ou à l'extérieur d'une plage définie. Elles sont fondamentales pour créer des seuils d'alarme, des conditions de transition et des boucles de régulation.

TIA Portal propose des comparateurs standard (==, <>, >=, etc.), des instructions de plage (IN_Range, OUT_Range), des tests de validité pour les nombres flottants et des instructions avancées pour les types de données Variant et les pointeurs DB.

Comparateurs Standard

Évaluation de l'égalité et des inégalités entre deux opérandes

CMP == — Égal (Equal)

==

Ce qu'il fait

Compare deux opérandes (IN1 et IN2). Si IN1 est égal à IN2, l'instruction renvoie TRUE. Elle supporte presque tous les types de données simples.

Quand l'utiliser

Vérifier si un compteur a atteint sa cible, si une consigne IHM correspond à la valeur actuelle, ou si un état machine spécifique est actif.

Conseils Pro

Attention avec les types Real : l'égalité stricte peut échouer à cause de la précision. Préférez une marge ou une plage.

En SCL : IF value1 = value2 THEN ...

Vous pouvez comparer des chaînes de caractères (String) pour vérifier des codes d'identification.

CMP <> — Inégal (Not equal)

<>

Ce qu'il fait

Renvoie TRUE si les deux opérandes IN1 et IN2 sont différents. C'est l'inverse de l'égalité.

Quand l'utiliser

Détecter un changement de valeur, s'assurer qu'un capteur ne renvoie pas 0, ou vérifier qu'un mode de marche n'est pas celui interdit.

Conseils Pro

Souvent utilisé pour déclencher une action dès qu'une valeur s'écarte de sa consigne.

En SCL : IF value1 <> value2 THEN ...

Peut être utilisé pour comparer des horodatages (DTL) afin de voir si une date a changé.

CMP >= — Supérieur ou égal

>=

Ce qu'il fait

Renvoie TRUE si la première valeur (IN1) est supérieure ou égale à la seconde (IN2).

Quand l'utiliser

Déclencher une alarme de niveau haut, autoriser une chauffe tant qu'une température n'est pas atteinte.

Conseils Pro

Idéal pour les seuils de sécurité où la valeur limite doit être incluse dans la condition.

En SCL : IF level >= setpoint THEN ...

Peut être utilisé avec des types Time pour vérifier si une durée minimale est écoulée.

CMP <= — Inférieur ou égal

<=

Ce qu'il fait

Renvoie TRUE si IN1 est inférieur ou égal à IN2.

Quand l'utiliser

Surveillance de niveau bas, arrêt d'une pompe, validation d'une pression minimale.

Conseils Pro

Souvent couplé à une hystérésis pour éviter les battements de sortie.

Fonctionne nativement avec les types Date et Time.

En SCL : IF pressure <= min_limit THEN ...

CMP > — Supérieur (Greater than)

>

Ce qu'il fait

Renvoie TRUE si IN1 est strictement supérieur à IN2.

Quand l'utiliser

Comparaison stricte ne devant pas inclure la valeur cible.

Conseils Pro

Moins utilisé que >= en automatisme, mais utile pour les algorithmes mathématiques.

En SCL : IF current > max THEN ...

Préférable pour les comparaisons d'index de boucles (FOR).

CMP < — Inférieur (Less than)

<

Ce qu'il fait

Renvoie TRUE si IN1 est strictement inférieur à IN2.

Quand l'utiliser

Tests de bornes inférieures strictes.

Conseils Pro

Utile pour vérifier si une valeur est 'dans le négatif' (val < 0).

En SCL : IF val < 0 THEN ...

Fonctionne avec les caractères (tri alphabétique).

Opérations de Plage

Vérification de l'appartenance à un intervalle [MIN..MAX]

IN_Range — Dans la plage

IN_Range

Ce qu'il fait

Vérifie si une valeur (VAL) se trouve entre une borne minimale (MIN) et une borne maximale (MAX). L'intervalle est fermé : MIN <= VAL <= MAX.

Quand l'utiliser

Surveillance de fenêtre de fonctionnement (ex: pression entre 2 et 5 bars), validation de vitesse machine.

Conseils Pro

Remplace avantageusement deux comparateurs mis en série, rendant le réseau plus lisible.

Si MIN > MAX, l'instruction renvoie toujours FALSE.

Très utile pour les 'Ready to Run' qui exigent plusieurs conditions analogiques.

OUT_Range — Hors plage

OUT_Range

Ce qu'il fait

Renvoie TRUE si la valeur (VAL) est à l'extérieur de l'intervalle défini par MIN et MAX. Soit VAL < MIN, soit VAL > MAX.

Quand l'utiliser

Détection d'anomalie ou de dépassement de seuils extrêmes (alarme de plage).

Conseils Pro

C'est l'inverse exact de IN_Range.

Utilisez-le pour simplifier la logique d'alarme de process.

En SCL : res := (val < min) OR (val > max);

Tests de Validité

Vérification de l'intégrité des nombres à virgule flottante

|OK| — Vérifier validité

|OK|

Ce qu'il fait

Vérifie si une valeur flottante (Real ou LReal) est un nombre valide. Renvoie FALSE si la valeur est NaN (Not a Number) ou Inf (Infini).

Quand l'utiliser

Après des calculs complexes (divisions, racines carrées, log) pour éviter de propager des erreurs mathématiques qui pourraient arrêter le PLC.

Conseils Pro

Indispensable avant d'envoyer une valeur Real vers une sortie analogique ou un variateur.

Permet de détecter une division par zéro indirecte.

Pratique pour filtrer les retours de capteurs défaillants.

|NOT_OK| — Vérifier invalidité

|NOT_OK|

Ce qu'il fait

Renvoie TRUE si la valeur flottante est invalide (NaN ou Inf).

Quand l'utiliser

Déclencher un bit de défaut de calcul ou forcer une valeur de repli.

Conseils Pro

Utilisez-le pour mettre votre machine en sécurité si un calcul de trajectoire échoue.

C'est l'équivalent de IS_NAN dans d'autres langages.

En SCL : IF NOT OK(value) THEN ...

Comparaisons avancées (Variant)

Instructions pour la programmation dynamique et les types complexes

EQ_Type / NE_Type

Ce qu'il fait

Compare le type de données d'une variable de type Variant avec celui d'une autre variable ou d'un type défini.

Quand l'utiliser

Dans des blocs génériques qui doivent traiter différents types de données (ex: un bloc de log acceptant Int ou Real).

Conseils Pro

Essentiel pour la programmation orientée objet et les bibliothèques réutilisables.

Permet de sécuriser les accès mémoire dynamiques.

Utilisé avec l'instruction VariantGet.

IS_NULL / NOT_NULL

Ce qu'il fait

Vérifie si un pointeur (Variant ou DB_ANY) est nul (ne pointe vers rien).

Quand l'utiliser

Éviter les erreurs d'accès lors de l'utilisation de DB adressés indirectement.

Conseils Pro

Toujours tester NOT_NULL avant d'appeler une méthode ou de lire une donnée via un pointeur.

Équivalent de l'objet 'Nothing' ou 'null' en C#/Java.

Indispensable pour la gestion de listes chaînées ou de structures dynamiques en PLC.

IS_ARRAY

Ce qu'il fait

Vérifie si une variable Variant pointe vers un tableau (Array).

Quand l'utiliser

Programmation de fonctions de traitement par lots ou de buffers de données.

Conseils Pro

Couplez-le avec CountOfElements pour connaître la taille du tableau.

Permet de créer des fonctions de tri universelles.

Fonctionne aussi pour les tableaux de structures (UDT).

Comparaison des comparateurs — Lequel utiliser ?

Choisir la bonne instruction pour votre logique PLC

Vous voulez...Utilisez ceciExemple
Tester l'égalité exacteCMP ==Code produit correct
Seuil de sécurité hautCMP >=Pression > 10 bar
Maintenir dans une zoneIN_RangeTempérature entre 18 et 24°C
Surveiller les erreurs Real|OK|Vérifier résultat division
Vérifier un pointeur DBNOT_NULLDB de recette chargé
Vérifier un type VariantEQ_TypeL'entrée est bien de l'Int

Foire Aux Questions

Pourquoi ma comparaison == échoue-t-il parfois avec des nombres Real ?

Les nombres Real (flottants) ont une précision limitée. Un calcul peut donner 10.000001 au lieu de 10.0. Utilisez toujours IN_Range avec une petite tolérance (ex: entre 9.99 et 10.01) pour comparer des valeurs flottantes.

Quelle est la différence entre IN_Range et deux comparateurs mis en série ?

Fonctionnellement, c'est identique. Cependant, IN_Range est plus compact graphiquement, plus facile à lire et plus performant car le PLC traite l'instruction en une seule étape.

À quoi servent les instructions |OK| et |NOT_OK| ?

Elles servent à détecter les erreurs 'silencieuses' des calculs Real. Si vous faites une racine carrée d'un nombre négatif, le résultat est NaN. Sans le test |OK|, ce NaN va polluer tous vos autres calculs et peut provoquer un arrêt du CPU.

Peut-on comparer des structures complètes (UDT) ?

L'instruction CMP == ne permet pas de comparer directement deux structures. Vous devez comparer chaque membre individuellement ou utiliser un bloc spécifique qui compare les zones mémoire.

Générez votre logique de comparaison par IA

Décrivez vos seuils et conditions en langage naturel, T-IA Connect générera les réseaux de comparaison optimisés avec gestion des erreurs.