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 ? :?
Nouveau Image bitmap.JPG

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
Image

Ç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 : Image

Et bien si je vais dans les Mots par exemple je vois ceci : Image

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.