SA0020 : Affectation possible d'une valeur tronquée à la variable REAL
Détecte les opérations sur des variables entières pour lesquelles une valeur tronquée pourrait être affectée à un REAL
variable de type de données
Justification : L'analyse statique génère une erreur lorsque le résultat d'un calcul d'entier est affecté à un REAL
ou LREAL
variable. Le programmeur doit être alerté d'une éventuelle interprétation incorrecte de ce type d'affectation : lrealvar := dintvar1 * dintvar2
.
Étant donné que la plage de valeurs de LREAL
est plus grand que celui de DINT
, on pourrait supposer que le résultat du calcul serait de toute façon LREAL
peut être affiché. Ce n'est pas le cas. Le processeur calcule le résultat de la multiplication sous la forme d'un entier puis refond le résultat LREAL
. Un débordement dans le calcul de l'entier serait perdu. Si vous voulez éviter le problème, la facture doit déjà être aussi REAL
- Chirurgie faite :lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)
Importance : Élevée
PROGRAM PLC_PRG VAR rX : LREAL; dI : DINT; END_VAR
rX := dI * dI // SA0020 rX := TO_LREAL(dI) * TO_LREAL(dI) //no message
Sortie dans le messages voir:
SA0020 : Eventuellement affectation d'une valeur tronquée à une variable REAL