Récupérer 2 INT dans 1 INT

Forum traitant des automates industriels de marque Schneider - Telemecanique
Répondre
PLsetPr0
Asservi son premier moteur
Asservi son premier moteur
Messages : 27
Enregistré le : 07 sept. 2022, 11:21

Récupérer 2 INT dans 1 INT

Message par PLsetPr0 »

Bonjour,

Je lis dans un équipement en com modbus un REAL dans par exemple le registre 10.

Je dois afficher cette valeur pour mon client en supervision, il faut à tout prix que ce soit un INT.

J'en suis rendu à l'étape ou je récupère 2 INT l'un dans le registre 10 l'autre dans le registre 11.

Comment maintenant avoir cette valeur dans 1 seul INT pour l'envoyer en supervision ? :oops:
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1077
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Récupérer 2 INT dans 1 INT

Message par MiGaNuTs »

Ton float est un "paquet" de 32 bits, du coup si tu le coupe en 2 tu n'a pas deux int (entiers signés), mais deux word (entiers non signés, ou plus vulgairement 'paquets de 16 bits'). Parce que si tu le coupe en 2 entiers signés, tu a l'information du signe en double, et du coup tu perds un des 32 bits de ton float d'origine.

Plus d'explications par la : https://fr.wikipedia.org/wiki/IEEE_754

Deux autres sujets ou on a déjà abordé la question :

viewtopic.php?p=23934

viewtopic.php?t=2989
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7142
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Récupérer 2 INT dans 1 INT

Message par itasoft »

le recevoir sur un REAL et faire REAL_TO_INT
Automaticien privé (de tout)
itasoft@free.fr
roudy
Première mise en service
Première mise en service
Messages : 52
Enregistré le : 19 janv. 2019, 17:28

Re: Récupérer 2 INT dans 1 INT

Message par roudy »

Bonjour,
De base le modbus c'est des mots de 16bits donc INT, UINT.
Mais, tu peux aussi récupérer des mots doubles codés de 32bits REAL, DINT, qu'il faut exploiter en tant que tel.
Quand tu as lu ton réel, fais comme dis "itasoft" : REAL_TO_INT

Tout est là :

Image
Si c'est pas clair dans ta tête, ce sera bien pire dans ton code.
ericlardechois
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Enregistré le : 18 déc. 2017, 11:28

Re: Récupérer 2 INT dans 1 INT

Message par ericlardechois »

Juste par curiosité, c'est quoi 1 et 2 pour les deux tableaux ?

Eric
roudy
Première mise en service
Première mise en service
Messages : 52
Enregistré le : 19 janv. 2019, 17:28

Re: Récupérer 2 INT dans 1 INT

Message par roudy »

Je sais pas vraiment :shock: je pointe sur une doc. SCHNEIDER
J'ai pas pris le temps de découper/redimensionner/mettre en ligne l'image.
...ni lire la suite. :lol:
C'est le 1 qui est le plus intéressant ici.
Si c'est pas clair dans ta tête, ce sera bien pire dans ton code.
ericlardechois
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Enregistré le : 18 déc. 2017, 11:28

Re: Récupérer 2 INT dans 1 INT

Message par ericlardechois »

Ok merci, parce que le 2 correspond pas au 1 pour les %MD !!!
roudy
Première mise en service
Première mise en service
Messages : 52
Enregistré le : 19 janv. 2019, 17:28

Re: Récupérer 2 INT dans 1 INT

Message par roudy »

J'ai vu aussi, mais seulement une fois que tu m'avais posé la question pour les tableaux.
Je suis passé à côté quand je l'ai mis en ligne.
Si c'est pas clair dans ta tête, ce sera bien pire dans ton code.
PLsetPr0
Asservi son premier moteur
Asservi son premier moteur
Messages : 27
Enregistré le : 07 sept. 2022, 11:21

Re: Récupérer 2 INT dans 1 INT

Message par PLsetPr0 »

Pour vous faire un retour cela fonctionne en transformant les 2 INT en WORD, en faisant un WORD_AS_DINT, puis en retransformant mon DINT en INT :)

Il faut faire attention à placer le deuxième Word en premier dans le WORD_AS_DINT chose que je n'avais pas faite ;)
Répondre