Conversion REAL en 2 entiers
Conversion REAL en 2 entiers
Bonjour,
J'ai une petite question concernant la conversion d'une variable REAL en deux entiers pour la visualisation sur un afficheur
Un exemple : Pour afficher 123456 (décimal) sur l'écran (Soit 1 1110 0010 0100 0000 en binaire), je dois mettre à disposition 2 mots :
-1er : 1 (décimal) soit 1 en binaire...
-2ème : 57920 soit 1110 0010 0100 000 en binaire
Ces 2 entiers sont ensuite assemblés pour former un seul DINT, avec le 1er mot en tant que poids fort
Ma question étant, comment convertir une de mes variables REAL en 2 entiers afin de pouvoir les afficher sur l'écran ?
(J'aimerais bien afficher 312.1 par exemple)
J'avais pensé à convertir en DINT puis à décomposer ce DINT en 2 entiers mais ça ne fonctionne pas comme je veux.
Auriez-vous une petite idée ?
Merci
J'ai une petite question concernant la conversion d'une variable REAL en deux entiers pour la visualisation sur un afficheur
Un exemple : Pour afficher 123456 (décimal) sur l'écran (Soit 1 1110 0010 0100 0000 en binaire), je dois mettre à disposition 2 mots :
-1er : 1 (décimal) soit 1 en binaire...
-2ème : 57920 soit 1110 0010 0100 000 en binaire
Ces 2 entiers sont ensuite assemblés pour former un seul DINT, avec le 1er mot en tant que poids fort
Ma question étant, comment convertir une de mes variables REAL en 2 entiers afin de pouvoir les afficher sur l'écran ?
(J'aimerais bien afficher 312.1 par exemple)
J'avais pensé à convertir en DINT puis à décomposer ce DINT en 2 entiers mais ça ne fonctionne pas comme je veux.
Auriez-vous une petite idée ?
Merci
-
- Mi homme - Mi automate
- Messages : 2076
- Inscription : 21 oct. 2015, 10:00
- Localisation : Ile de France
Re: Conversion REAL en 2 entiers
Salut,
Un reel c'est une mantisse et un exposant, cela n'a rien à voir avec les entiers, que ce soit en simple ou double..
il faut passer par une fonction reel - > Dint mais attention, les capacités de comptage sont différentes. si le réel est trop grand, perte de valeur !
Un reel c'est une mantisse et un exposant, cela n'a rien à voir avec les entiers, que ce soit en simple ou double..
il faut passer par une fonction reel - > Dint mais attention, les capacités de comptage sont différentes. si le réel est trop grand, perte de valeur !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part !
- Bruce33
- Créateur de langage
- Messages : 716
- Inscription : 28 oct. 2015, 06:54
- Localisation : Pas-de-Calais
Re: Conversion REAL en 2 entiers
Bonjour,
Les explications sont confuses.
Quel est cet afficheur qui n'est pas capable d'afficher ni un mot flottant ni un mot entier de 32 bits ?
Pour afficher un nombre avec une virgule à partir d'une variable entière, il faut définir un nombre constant de chiffres après la virgule.
Par ex. la variable entière contient 3121 mais on affiche 312.1
Concernant les conversions de type de variable, en supposant que l'on programme avec Unity Pro (maintenant nommé EcoStruxure Control Expert) :
Les explications sont confuses.
Quel est cet afficheur qui n'est pas capable d'afficher ni un mot flottant ni un mot entier de 32 bits ?
Pour afficher un nombre avec une virgule à partir d'une variable entière, il faut définir un nombre constant de chiffres après la virgule.
Par ex. la variable entière contient 3121 mais on affiche 312.1
Concernant les conversions de type de variable, en supposant que l'on programme avec Unity Pro (maintenant nommé EcoStruxure Control Expert) :
- La fonction REAL_TO_DINT convertit la valeur réelle en valeur entière. Il faudra multiplier la valeur réelle si l'on veut conserver des chiffres après la virgule.
- La fonction DINT_AS_WORD permet de décomposer la valeur entière sur 32 bits en deux mots de 16 bits.
- itasoft
- Mi homme - Mi automate
- Messages : 7035
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Conversion REAL en 2 entiers
slts,
Unity Pro (maintenant nommé EcoStruxure Control Expert)
j’étais pas au courant du changement de nom, mais exactement le même ??
Unity Pro (maintenant nommé EcoStruxure Control Expert)
j’étais pas au courant du changement de nom, mais exactement le même ??
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Conversion REAL en 2 entiers
C'est un écran prévu pour pour communiquer avec des onduleurs en direct (Tout un tas de protocoles propriétaires), mais on peut aussi communiquer en Modbus en lui mettant à disposition les registres suivants :
%MW100 et %MW101 en entiers signés (SINT16 d'après la doc) pour afficher la première ligne etc...
Donc ma problématique est de convertir le REAL en deux INT, sans perdre d'infos (Si je converti ma variable REAL (Ex : 123.45) en DINT, je me retrouve avec 123) --> J'avais testé la solution REAL_TO_DINT et DINT_AS_WORD auparavant mais ça ne fonctionne pas
J'avais pensé à multiplier mon REAL par 100 afin de virer la problématique de la virgule, mais ensuite je ne peux pas la remettre...
%MW100 et %MW101 en entiers signés (SINT16 d'après la doc) pour afficher la première ligne etc...
Donc ma problématique est de convertir le REAL en deux INT, sans perdre d'infos (Si je converti ma variable REAL (Ex : 123.45) en DINT, je me retrouve avec 123) --> J'avais testé la solution REAL_TO_DINT et DINT_AS_WORD auparavant mais ça ne fonctionne pas
J'avais pensé à multiplier mon REAL par 100 afin de virer la problématique de la virgule, mais ensuite je ne peux pas la remettre...
Re: Conversion REAL en 2 entiers
Je plussoie. Désolé mais je ne comprend pas non plus comment les réels sont affichés. Normalement, c'est la norme i3e 754 qui définit le codage.
Quel est la ref de ton afficheur?
- Bruce33
- Créateur de langage
- Messages : 716
- Inscription : 28 oct. 2015, 06:54
- Localisation : Pas-de-Calais
Re: Conversion REAL en 2 entiers
Est-ce possible d'avoir la référence de cet afficheur ou l'accès à la documentation ?
Qu'est-ce qui s'affiche lorsque vous mettez les valeurs suivantes :
- %MW100=0 et %MW101=1
- %MW100=1 et %MW101=0
- %MW100=0 et %MW101=-1
- %MW100=-1 et %MW101=0
Qu'est-ce qui ne fonctionne pas ? Quelle valeur indiquait l'afficheur ?Nicat a écrit :J'avais testé la solution REAL_TO_DINT et DINT_AS_WORD auparavant mais ça ne fonctionne pas
Qu'est-ce qui s'affiche lorsque vous mettez les valeurs suivantes :
- %MW100=0 et %MW101=1
- %MW100=1 et %MW101=0
- %MW100=0 et %MW101=-1
- %MW100=-1 et %MW101=0
Re: Conversion REAL en 2 entiers
Avec ces 2 fonctions l'afficheur indiquait 0000 (Donc pas la valeur que je voulais afficher...)
- %MW100=1 et %MW101=0 --> 65536
- %MW100=0 et %MW101=-1 --> Je n'ai pas testé avec une valeur négative et ne suis pas sur place actuellement
- %MW100=-1 et %MW101=0 --> Idem
La référence est un Siebert XC-Board. La doc se trouve ici : https://we.tl/t-7fgeIPP1d8
- %MW100=0 et %MW101=1 --> 1Qu'est-ce qui s'affiche lorsque vous mettez les valeurs suivantes :
- %MW100=1 et %MW101=0 --> 65536
- %MW100=0 et %MW101=-1 --> Je n'ai pas testé avec une valeur négative et ne suis pas sur place actuellement
- %MW100=-1 et %MW101=0 --> Idem
La référence est un Siebert XC-Board. La doc se trouve ici : https://we.tl/t-7fgeIPP1d8
- djé
- Dieu du process
- Messages : 776
- Inscription : 20 oct. 2015, 09:55
- Localisation : Bretagne, Pays de la Loire, Nantes
Re: Conversion REAL en 2 entiers
Salut,
La solution de la conversion REAL_to_DINT doit fonctionner, mais peut être faut-il changer l'ordre des mots (poids faible poids fort) côté automate.
registre 100 :PF (high)
registre 101 :pf (low)
La solution de la conversion REAL_to_DINT doit fonctionner, mais peut être faut-il changer l'ordre des mots (poids faible poids fort) côté automate.
registre 100 :PF (high)
registre 101 :pf (low)
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...