Skip to main content

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

Exemple 32. Exemple
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:

  • sa_icon_message.png SA0020 : Eventuellement affectation d'une valeur tronquée à une variable REAL