Traitement de 64 bits sur M340
Posté : 17 juin 2016, 11:56
Bonjour.
J'ai un M340 en liaison TCP-IP Modbus avec un débitmètre qui me renvoie des totalisateurs sous la forme suivante :
- 1 valeur non signée de 64 bits reçue coté M340 sur un tableau de 4 Integer qui représente un volume exprimé en litres
- 1 valeur de 64 bits IEEE754 (flottant) reçue coté M340 sur un tableau de 4 Integer qui représente un volume exprimé en mètres cubes
Bien entendu le M340 ne traite pas des valeurs de 64 bits.
Je souhaite convertir ces données sur un UDINT, je m'explique.
J'ai converti les 2 premiers mots de la table du 64 bits non signé vers un UDINT dans lequel je récupère effectivement une valeur à concurrence de la capacité max d'un mot de 32 bits, c'est à dire 4294967295 litres.
Il s'avère que ce n'est pas assez pour mon application, au terme de 2 ans de comptabilisation je ne serai pas loin de dépasser ce volume.
Cela dit si cette valeur était exprimée en mètre cubes depuis le débitmètre le problème ne se poserai pas, j'aurai à ma disposition une valeur qui pourrait aller jusqu'à 4294967295 de mètre cubes... tranquille pendant 2000 ans. Malheureusement une mise à l'échelle n'est pas possible coté débitmètre, et coté automate je n'aurai au maximum que 4294967 de m3 si je divise mon 32 bits par 1000.
En forçant le débitmètre à m'afficher ce qu'un mot de 32 bits peut contenir (4294967295) je n'ai que les 3 premiers mots d'utilisés sur les 4. Le challenge est le suivant :
- trouver le moyen de sortir une valeur avec les 3 premiers mots
- diviser cette valeur par 1000
- placer le résultat dans un UDINT
J'entrevois un moyen mathématique pour le faire, faire du décalage de bits sur le 1er mot, etc... mais je n'ai pas encore trouvé la solution.
Il y a aussi la valeur de 64 bits IEEE754 qui elle ne nécessite pas de conversion d'échelle mais bien qu'ayant trouvé quelques pistes de calcul je n'ai compris la méthode qu'en partie, ça me parait plutôt lourd à réaliser.
Voilà
Peut être avez vous été confrontés à ce genre de problème et que vous connaissez une solution ?
Merci d'avance pour vos réponses
J'ai un M340 en liaison TCP-IP Modbus avec un débitmètre qui me renvoie des totalisateurs sous la forme suivante :
- 1 valeur non signée de 64 bits reçue coté M340 sur un tableau de 4 Integer qui représente un volume exprimé en litres
- 1 valeur de 64 bits IEEE754 (flottant) reçue coté M340 sur un tableau de 4 Integer qui représente un volume exprimé en mètres cubes
Bien entendu le M340 ne traite pas des valeurs de 64 bits.
Je souhaite convertir ces données sur un UDINT, je m'explique.
J'ai converti les 2 premiers mots de la table du 64 bits non signé vers un UDINT dans lequel je récupère effectivement une valeur à concurrence de la capacité max d'un mot de 32 bits, c'est à dire 4294967295 litres.
Il s'avère que ce n'est pas assez pour mon application, au terme de 2 ans de comptabilisation je ne serai pas loin de dépasser ce volume.
Cela dit si cette valeur était exprimée en mètre cubes depuis le débitmètre le problème ne se poserai pas, j'aurai à ma disposition une valeur qui pourrait aller jusqu'à 4294967295 de mètre cubes... tranquille pendant 2000 ans. Malheureusement une mise à l'échelle n'est pas possible coté débitmètre, et coté automate je n'aurai au maximum que 4294967 de m3 si je divise mon 32 bits par 1000.
En forçant le débitmètre à m'afficher ce qu'un mot de 32 bits peut contenir (4294967295) je n'ai que les 3 premiers mots d'utilisés sur les 4. Le challenge est le suivant :
- trouver le moyen de sortir une valeur avec les 3 premiers mots
- diviser cette valeur par 1000
- placer le résultat dans un UDINT
J'entrevois un moyen mathématique pour le faire, faire du décalage de bits sur le 1er mot, etc... mais je n'ai pas encore trouvé la solution.
Il y a aussi la valeur de 64 bits IEEE754 qui elle ne nécessite pas de conversion d'échelle mais bien qu'ayant trouvé quelques pistes de calcul je n'ai compris la méthode qu'en partie, ça me parait plutôt lourd à réaliser.
Voilà
Peut être avez vous été confrontés à ce genre de problème et que vous connaissez une solution ?
Merci d'avance pour vos réponses