afficher la liste des articles
STEP 7 -- Création de programmes S7 -- Exécutions des opérations
Comment programmer un générateur de signaux (carré, dent de scie, triangle et sinus) à l’aide du bloc alarme cyclique dans STEP 7 V5.x ?
Comment peut-on calculer une vitesse, une accélération et une distance ?
Comment peuvent être adressés des octets et des bits de périphérie?
Comment réaliser la dérivation numérique sous STEP 7 V5.5 ?
Comment convertir un nombre hexadécimal en caractères ASCII avec STEP 7 V5.5 ?
A quoi faut-il prendre garde pour la représentation de valeurs entières négatives lors de la visualisation dans l'éditeur CONT/LIST/LOG ?
Informations à propos de "Exécuter des opérations"
Comment se font les calculs de puissance, d'exponentielle, de racine, de polynôme, de logarithme et de valeur linéaire ainsi que la conversion des fonctions trigonométriques en degrés ?
Comment convertir un nombre de type INT en une chaîne de caractère, en S5TIME, ou en BCD et REAL ?
Comment retarder temporellement un signal de sortie en fonction d'un signal d'entrée ?
Comment cumuler des mesures de débit (par exemple quantité écoulée, vitesse d'écoulement) dans une valeur globale ?
Comment faire la surveillance d'un champ 32-Bits, évaluer la position d'un bit actif et accéder individuellement sur des bits d'un double mot ?
Comment relier ensemble des variables et des paramètres de blocs ?
Comment vérifier l'égalité de deux nombres réels ?
Comment se fait la programmation d'une intégration numérique dans S7-SCL et dans STEP 7 ?
A quel moment a lieu la première interrogation d'une séquence combinatoire ?
Que signifie l'instruction NOP du STEP7 au niveau de l'éditeur LIST ?
Comment puis je calculer avec des nombres Réels utilisés dans des formules étendues ?
Quels sont les Blocs Fonction et Blocs Fonction Standard CEI existant dans le STEP 7 pour convertir et comparer des variables String ?
Comment programmer un registre à décalage avec des instructions CONT/LOG dans STEP 7 V5.5 et V11 ?
S7-SCL -- Création de programmes S7 -- Exécutions des opérations
A quoi sert l'option "Activer drapeau OK" ?
Comment réaliser une programmation pour regrouper des produits à fin que la somme des poids donne un poids minimum avec une sélection optimisée ?
Comment calculer le point f(x)=0 d'une fonction continue sur l'axe des X ?
Comment peut-on changer le contenu d'un mot de donnée indirectement en utilisant la fonction "WORD_TO_INT(WORD_TO_BLOCK_DB(DB_Number).DW[Index]?
Comment se fait la programmation d'une intégration numérique dans S7-SCL et dans STEP 7 ?
Comment peut-on programmer en S7-SCL un distributeur de sauts?
Comment les mots de données peuvent être interrogés indexés, lorsque l'index de la plage de valeur Integer (+32767) est dépassé?
Comment peut-on convertir en S7-SCL, une variable de type "BCD" vers le type "INTEGER" et inversement?
Comment puis je calculer avec des nombres Réels utilisés dans des formules étendues ?
Comment comparer deux variables de type WORD ou DWORD ?
Comment puis je calculer avec des nombres Réels utilisés dans des formules étendues ?
Nº de référence:


REPONSE:  
De manière générale, il apparaît que les nombres réels sont spécifiés et calculés avec une précision de 6 chiffres après la virgule. Lors de calculs, vous devez noter que cette précision est maintenue pour chaque étape du calcul.

Lors d’une addition ou d’une soustraction, les exposants sont alignés, c'est-à-dire la base et l’exposant sont les mêmes pour ajouter et soustraire, seule la mantisse est ajoutée. 

Exemple 1 :

Soit a calculer :

y = a + b - c;

z =1 / y;

avec 

a = 100 000 000       en valeur REAL  = 1,000000*108

b = 1                         en valeur REAL = 1,000000*100

c = 100 000 000       en valeur REAL = 1,000000*108

  • Dans la première étape du calcul (a + b) est évalué :
    (a + b) = 1,000000*108 + 1,000000*100 Apres alignement des exposants on obtient  (a + b) = 1,000000*108 + 0,00000001*108. Les deux dernières décimales sont tronquées, car elles ne sont pas affichées (précision de 6 décimales) 
  • De ce fait, un Zéro est ajouté
  • Dans la deuxième étape du calcul ((a + b)-c), c est soustrait au résultat du calcul de l’expression précédente :
    ((a + b)-c) = 1,000000*108 - 1,000000*108 = 0,000000e0
  • Si z est déterminé, cela emmène alors a une division par 0 

La solution correcte est obtenue dans ce cas en convertissant le calcul.

 y = a - c + b;

z = 1 / y;

Maintenant, après le calcul (a - c), le résultat 0,000000e0 est obtenu, puis dans la deuxième étape du calcul ((a -c) + b) l’addition de nombre au format REAL conduit a un résultat exact. 

y = 0,000000*100 + 1,00000*100 = 1,000000*100 

A cause de cela, avant d’effectuer un calcul, vous devez toujours vérifier la meilleur manière d’effectuer le calcul.
De plus amples informations sont également disponible sur l’aide en ligne sous la rubrique «  Type de donnée REEL ».

Exemple 2 :

Comme exemple, le nombre REAL 160.0 doit être divisé par le nombre REAL 100.0. Ce calcul peut être effectué de deux manières, soit avec 160.0 / 100.0 soit avec 160.0 * 0.01. Dans le tableau 1, les deux variantes retournent le même résultat, mais pas la même précision de calcul en format hexadécimal. 

 
Variante 1 : Variante 2 :
STEP 7 S7-SCL STEP 7 S7-SCL
L  1.6e+002 X1 = 1.6e+002 L  1.6e+002 X3 = 1.6e+002
L  1.0e-002 X2 = 1.0e-002 L  1.0e+002 X4 = 1.0e+002
*R Y1 = X1 * X2 
      = 1.6 * 1.0 e(+002-002)
/R Y2 = X3 / X4 
      = (1.6 / 1.0) e(+002-002)
T  MD0 Y1 = 1.6 T  MD4 Y2 = 1.6

Tableau 1 : deux variantes de division de nombres de type REAL dans l'éditeur CONT/LIST/LOG 

La raison de cette différence vient du fait que les deux nombres réels de la première variante (160.0 et 0.01) se trouvent plus éloignés l'un de l'autre que ceux de la deuxième variante (160.0 et 100.0). Cette particularité sur la précision du calcul est valable en STEP 7 aussi bien dans l'éditeur CONT/LIST/LOG qu'avec le logiciel optionnel S7-SCL.

Exemple de calcul dans l'éditeur CONT/LIST/LOG du STEP 7 :
Dans la table de variable (figure 1) se trouvent les deux double-mots de mémentos MD0 et MD4 une fois représentés en format hexadécimal et une fois au format virgule flottante. Les nombres REAL des deux variantes sont égaux à 1.6, mais la représentation hexadécimale est différente sur la dernière position d'une valeur HEX.

Fig. 1 : Programme des deux variantes de calcul dans l'éditeur CONT/LIST/LOG.

Exemple de calcul avec l'option S7-SCL :
Le programme S7-SCL suivant contient deux fonctions. Avec la fonction FC10, c'est la division des deux nombres REAL "X1*X2" qui est réalisée et avec la fonction FC11, c'est la division "X1/X2". Les résultats sont retournés dans les double-mots de mémentos MD10 et MD20 à l'appel des fonctions dans l'OB1.

Fig. 2 : Programme S7-SCL pour le calcul des deux variantes selon le tableau 1 

les résultats des fonctions (MD10 et MD20) sont représentés dans la table de variables d'une part au format hexadécimal et d'autre part au format virgule flottante. Ici aussi les nombres REAL des deux variantes sont égaux à 1.6 mais la représentation hexadécimale diffère sur la dernière position d'une valeur HEX.

Fig. 3 : Table de variables avec la représentation des résultats en format HEX et virgule flottante en S7-SCL

Mots-clefs:
Précision de calcul




 ID contribution:14844391   Date:2005-10-12 
Cette contribution...m´a aidéne m´a pas aidé                                 
mySupport
My Documentation Manager 
Lettre d'information 
CAx-Download-Manager 
Demande d'assistance technique
A propos de cet article
Imprimer
Créer PDF 
Envoyer l'article
QuickLinks
Outil de compatibilité 
Aide
Aide en ligne
Guided Tour