Conversion REAL en 2 entiers

Forum traitant des automates industriels de marque Schneider - Telemecanique
Nicat
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Inscription : 22 nov. 2017, 17:23

Conversion REAL en 2 entiers

Message par Nicat »

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
philou77
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 2076
Inscription : 21 oct. 2015, 10:00
Localisation : Ile de France

Re: Conversion REAL en 2 entiers

Message par philou77 »

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 !
Si vous avez compris tout ce que je viens d'écrire, c'est que j'ai dû faire une erreur quelque part ! :D
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Conversion REAL en 2 entiers

Message par Bruce33 »

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) :
  • 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.
Il faut aussi savoir si la valeur peut être négative.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7035
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Conversion REAL en 2 entiers

Message par itasoft »

slts,
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
Avatar de l’utilisateur
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1659
Inscription : 20 oct. 2015, 12:00
Localisation : localhost

Re: Conversion REAL en 2 entiers

Message par Béryl »

itasoft a écrit : 28 mars 2019, 14:56 slts,
Unity Pro (maintenant nommé EcoStruxure Control Expert)

j’étais pas au courant du changement de nom, mais exactement le même ??
Oui, c'est à partir de la V14 de Unity.
Nicat
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Inscription : 22 nov. 2017, 17:23

Re: Conversion REAL en 2 entiers

Message par Nicat »

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...
Avatar de l’utilisateur
ProfnovA
Créateur de langage
Créateur de langage
Messages : 525
Inscription : 21 oct. 2015, 08:21

Re: Conversion REAL en 2 entiers

Message par ProfnovA »

Bruce33 a écrit : 28 mars 2019, 13:28 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 ?
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?
Avatar de l’utilisateur
Bruce33
Créateur de langage
Créateur de langage
Messages : 716
Inscription : 28 oct. 2015, 06:54
Localisation : Pas-de-Calais

Re: Conversion REAL en 2 entiers

Message par Bruce33 »

Est-ce possible d'avoir la référence de cet afficheur ou l'accès à la documentation ?
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 ne fonctionne pas ? Quelle valeur indiquait l'afficheur ?

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
Nicat
Asservi son premier moteur
Asservi son premier moteur
Messages : 30
Inscription : 22 nov. 2017, 17:23

Re: Conversion REAL en 2 entiers

Message par Nicat »

Avec ces 2 fonctions l'afficheur indiquait 0000 (Donc pas la valeur que je voulais afficher...)
Qu'est-ce qui s'affiche lorsque vous mettez les valeurs suivantes :
- %MW100=0 et %MW101=1 --> 1
- %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
Avatar de l’utilisateur
djé
Dieu du process
Dieu du process
Messages : 776
Inscription : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes

Re: Conversion REAL en 2 entiers

Message par djé »

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)
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 ...
Répondre