Introduction
D'après les recommandations de l'IEC, le type de données de la variable du résultat n'influence pas le type de données de l'expression du résultat et le type de données de l'expression est converti dans le type de données du résultat.
Exemple :
i_DINT := REAL1+REAL2;
Equivalent en utilisant une conversion de type explicite :
e_DINT := REAL_TO_DINT(REAL1+REAL2);
Différences dans Control Expert
Control Expert présente les exceptions suivantes par rapport aux recommandations de l'IEC :
Si le type de données de la variable de résultat d'une affectation est supérieur au type de l'expression de résultat, les paramètres de l'expression de résultat sont convertis dans le type de paramètre de sortie pour éviter un dépassement de capacité.
Exemple :
i_DINT := INT1 + INT2;
Equivalent en utilisant une conversion de type explicite :
e_DINT := INT_TO_DINT(INT1) + INT_TO_DINT(INT2);
Control Expert utilise la conversion de type implicite pour les fonctions génériques, de sorte que le type de données de la variable de résultat a une influence sur le type de données de l'expression de résultat (la fonction générique).
Exemple :
i_DINT := ADD (IN1 := INT1, IN2 := INT2);
Equivalent en utilisant une conversion de type explicite :
e_DINT := ADD (IN1 := INT_TO_DINT(INT1), IN2 := INT_TO_DINT(INT2));
Les paramètres de sortie génériques des blocs fonction n'ont pas d'influence sur le type de données de l'expression de résultat.
Les conversions de type des paramètres d'entrée sont exécutées avant l'appel du corps du FFB, tandis que les conversions de type des paramètres de sortie sont exécutées après cet appel. Contrairement aux conversions de type explicites, les conversions de type implicites ne sont exécutées que lorsque le corps du FFB est appelé.
Exemple :
SAH_0 (IN := BYTE1, CLK := BOOL1, PV := WORD1,
OUT => i_DINT );
Les trois lignes suivantes sont nécessaires pour obtenir un résultat équivalent en utilisant une conversion de type explicite :
word_tmp := DINT_TO_WORD(e_DINT);
SAH_0 (IN := BYTE_TO_WORD(BYTE1), CLK
:= BOOL1, PV := WORD1, OUT => _word_tmp);
e_DINT := WORD_TO_DINT(word_tmp);
Les règles de conversion de type implicite s'appliquent uniquement aux constantes typées. Control Expert traite initialement les constantes non typées (valeurs littérales) comme des constantes DINT.
Exemples :
i_INT := 5 / 6 * 5.52;
Equivalent en utilisant une conversion de type explicite :
e_INT
:= REAL_TO_INT(DINT_TO_REAL(5) / DINT_TO_REAL(6) * 5.52);
i_BOOL := (65535 < INT1)
= (BYTE1 = 255);
Equivalent en utilisant une conversion de type explicite :
e_BOOL := (65535
< INT_TO_DINT(INT1)) = (BYTE_TO_DINT(BYTE1) = 255);
Control Expert prend en charge la conversion de type implicite à l'intérieur d'expressions.
Exemples :
i_INT := BYTE1 = DINT1;
Equivalent en utilisant une conversion de type explicite :
e_INT := BOOL_TO_INT(BYTE_TO_DINT(BYTE1)
= DINT1);
i_WORD := BYTE1
= (REAL1 > DINT1 );
Equivalent en utilisant une conversion de type explicite :
e_WORD := BOOL_TO_WORD(BYTE1
= BOOL_TO_BYTE((REAL1 > DINT_TO_REAL(DINT1))));
i_REAL := WORD1 OR BYTE1 AND (100000 +
5);
Equivalent en utilisant une conversion de type explicite :
e_REAL:= DINT_TO_REAL(WORD_TO_DINT(WORD1)
OR (BYTE_TO_DINT(BYTE1) AND (100000 + 5)));