Page 1 sur 2
Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 11:30
par andala
bonjour,
je souhaite avoir un calcule avec une virgule afin d’être précis dans mon résultat j'ecris donc
donnée :
%MW200=6500 (Est modifier par un magelis)
|--------------------------------------------------------------------------------------------------------------[%MW100:=26666]---|
|------------------------------------------------------------------------------------[%MF0:=INT_TO_REAL(%MW100/10000)]---|
|-------------------------------------------------------------------------[%MW120:=REAL_TO_INT(%MF0*(%MW200-1000))]---|
Ce que je souhaite faire c'est avoir une valeur precise du calcul suivant :
a = 10 000 / 3600
b = 6500
c = (b - 1000) x a
Mais la programmation réalisé ne fonctionne pas.
pouvez-vous "pointer" mon erreur ?
merci cordialement
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 11:39
par Cyril93
Salut,
Tu convertis REAL en INT donc forcément il y a arrondi à l'entier le plus proche (au revoir la virgule

)
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 11:41
par andala
mon probleme ne vien pas du fait que je n'ai plus la virgule mais que PL7 refuse la syntaxe
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 11:49
par Cyril93
j'imagine que %MW200 est un INT donc oui tu mélanges les types dans ta formule
déclarer
a,b,c : REAL;
a := 10000.0/3600.0;
b := int_to_real(%MW200);
c := (b - 1000.0) * a;
Ou bien resultat:=(int_to_real(%MW200)-1000.0) * (10000.0/3600.0); avec resultat en REAL bien sur pour la virgule
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 12:04
par andala
suivant tes instructions, j'ai mis en oeuvre tout sa mais sa ne fonctionne pas
avec ma calculatrice je trouve environ 1800 mais lui il trouve 0
explication please ?
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 12:17
par Cyril93
Jolie le chevauchement
les flottants ont une longueur de 32bit
%MF190 contient %MW190 et %MW191 donc pour ne pas recouvrir il faut se servir des %MF de deux en deux %MF190, %MF192, %MF194 ils ne doivent pas être utilisés en %MD et %MW aussi. On dit que les zones mémoire se recouvrent les unes avec les autres sauf pour les bit (%M0) eux ils sont à part.
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 14:15
par andala
Merci beaucoup; j'ignorai qu'ils utilisaient les mot pour les flottants
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 20 déc. 2016, 14:23
par Cyril93
Oui et tu peux pas l'inventer
tu aurais pu aussi écrire dans un unique bloc OPERATE
%MF192:=(INT_TO_REAL(%MW200)-1000.0) * (10000.0/3600.0)
mais là tu n'aurais pas appris les règles d'adressage de la mémoire dans PL7
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 21 déc. 2016, 11:32
par Adwonaa
Bonjour,
Pour t'éviter de faire des chevauchements, il existe une option sur pl7-pro.
Option > Éditeur variables > coche Chevauchement
Ça te permettra de voir les variables en rouge dans l'éditeur de variable si elles sont déjà utilisées dans un autre type de variable.
Exemple :
Ici j'utilise %MF0 dans mon programme :
Et bien si je vais dans les Mots par exemple je vois ceci :
En espérant que cela puisse t'être utile.
Re: Probleme concernant calcul dans automate TSX 5722
Posté : 21 déc. 2016, 11:42
par Cyril93
Salut Adwonaa,
Superbe astuce j'avoue je ne connaissais même pas cette option, très pratique en tout cas.