Bonjour tout le mode,
Débutant dans le domaine, j'aimerai convertir des variables de types réel (float / 32 bits) en types integer ( mot / 16 bits) .
Quelle est la meilleure solution ?
Les alternatives ?
Version imprimable
Bonjour tout le mode,
Débutant dans le domaine, j'aimerai convertir des variables de types réel (float / 32 bits) en types integer ( mot / 16 bits) .
Quelle est la meilleure solution ?
Les alternatives ?
salut,
tu dois d'abord convertir ton réel en DINT (entier 32 bits), pour ça, tu as 4 fonctions de dispo, chacune avec un arrondi différent :
* TRUNC : on conserve que la partie entiere
* FLOOR : on arrondi vers -infini (entier précédent)
* CEIL : on arrondi vers +infini (entier suivant)
* ROUND : on arrondi au plus proche
Ces fonctions tu les trouves dans la bibliotheque de composants SIEMENS dans la rubrique conversion.
Ensuite il te faut mettre un bloc MOVE pour une conversion DINT vers INT et peut etre, si nécessaire, vérifier qu'il n'y a dépassement de capacité de la valeur (conversion entier 32 bits vers 16 bits)
@+
Merci stephdim !
Je vais deja essayer avec ca...
Ca me parait pas mal...
Est-ce que tu sais si il y une autre solution également ?
Et si il y a dépacement de capacité de la valeur, que dois faire ?
Merci!
@+
un entier INT est une valeur entre -32768 et +32767 inclus.
ton réel a une plage bcp plus importante, donc si tu essayes de convertir la valeur 200000 par ex vers un INT tu auras un résultat incohérent. (les bits significatifs sont tronqués)
a toi de t'assurer que ton programme gère ce genre de situation, en vérifiant par exemple par des blocs COMPARE sur le réel que la conversion est fiable. si ce n'est pas le cas, afficher une alarme sur une IHM par exemple ...
si maintenant ton réel est le résultat d'un calcul et que tu es sûr qu'il n'y aura pas de dépassement de capacité, alors tu peux éviter ces tests.
dans tout les cas la conversion fonctionnera, mais s'il y a dépassement de capacité tu n'auras pas un résultat cohérent.
@+
Je te remercie pour ton aide stephdim!!!
A la prochaine!
@+