Probleme concernant calcul dans automate TSX 5722
- andala
- Créateur de langage

- Messages : 505
- Enregistré le : 19 déc. 2016, 10:24
- Localisation : Atlantide
Probleme concernant calcul dans automate TSX 5722
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
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
Modifié en dernier par andala le 05 févr. 2025, 11:43, modifié 3 fois.
Une bonne action en entraine toujours une autre
Re: Probleme concernant calcul dans automate TSX 5722
Salut,
Tu convertis REAL en INT donc forcément il y a arrondi à l'entier le plus proche (au revoir la virgule
)
Tu convertis REAL en INT donc forcément il y a arrondi à l'entier le plus proche (au revoir la virgule
- andala
- Créateur de langage

- Messages : 505
- Enregistré le : 19 déc. 2016, 10:24
- Localisation : Atlantide
Re: Probleme concernant calcul dans automate TSX 5722
mon probleme ne vien pas du fait que je n'ai plus la virgule mais que PL7 refuse la syntaxe
Une bonne action en entraine toujours une autre
Re: Probleme concernant calcul dans automate TSX 5722
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
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
- andala
- Créateur de langage

- Messages : 505
- Enregistré le : 19 déc. 2016, 10:24
- Localisation : Atlantide
Re: Probleme concernant calcul dans automate TSX 5722
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 ?
avec ma calculatrice je trouve environ 1800 mais lui il trouve 0
explication please ?
Une bonne action en entraine toujours une autre
Re: Probleme concernant calcul dans automate TSX 5722
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.
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.
- andala
- Créateur de langage

- Messages : 505
- Enregistré le : 19 déc. 2016, 10:24
- Localisation : Atlantide
Re: Probleme concernant calcul dans automate TSX 5722
Merci beaucoup; j'ignorai qu'ils utilisaient les mot pour les flottants
Une bonne action en entraine toujours une autre
Re: Probleme concernant calcul dans automate TSX 5722
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
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
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.
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
Salut Adwonaa,
Superbe astuce j'avoue je ne connaissais même pas cette option, très pratique en tout cas.
Superbe astuce j'avoue je ne connaissais même pas cette option, très pratique en tout cas.

