Récupérer 2 INT dans 1 INT
Récupérer 2 INT dans 1 INT
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 ?
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 ?
-
- Mi homme - Mi automate
- Messages : 1083
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: Récupérer 2 INT dans 1 INT
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
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
- itasoft
- Mi homme - Mi automate
- Messages : 7151
- Enregistré le : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Récupérer 2 INT dans 1 INT
le recevoir sur un REAL et faire REAL_TO_INT
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Récupérer 2 INT dans 1 INT
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à :
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à :
Si c'est pas clair dans ta tête, ce sera bien pire dans ton code.
-
- Générateur de blocs fonctions
- Messages : 125
- Enregistré le : 18 déc. 2017, 11:28
Re: Récupérer 2 INT dans 1 INT
Juste par curiosité, c'est quoi 1 et 2 pour les deux tableaux ?
Eric
Eric
Re: Récupérer 2 INT dans 1 INT
Je sais pas vraiment 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.
C'est le 1 qui est le plus intéressant ici.
J'ai pas pris le temps de découper/redimensionner/mettre en ligne l'image.
...ni lire la suite.
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.
-
- Générateur de blocs fonctions
- Messages : 125
- Enregistré le : 18 déc. 2017, 11:28
Re: Récupérer 2 INT dans 1 INT
Ok merci, parce que le 2 correspond pas au 1 pour les %MD !!!
Re: Récupérer 2 INT dans 1 INT
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.
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.
Re: Récupérer 2 INT dans 1 INT
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
Il faut faire attention à placer le deuxième Word en premier dans le WORD_AS_DINT chose que je n'avais pas faite