Page 1 sur 2

INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:12
par NicoLasB
Bonjour

J'ai mis en place une liaison MODBUS entre un MTZ et un M340, j'utilise la fonction READ_VAR.
La communication fonction, je dois récupérer une mesure d’énergie qui est codé sur 64bits soit 4 INT.
Extrait doc MTZ :
TableauModBus.PNG
Avec le bloc INT_AS_DINT je récupère par le infos des deux premiers mot ensemble et les deux dernier ensembles, mais cela ne me fait pas la valeurs complète.
La valeur doit être affichée en supervision (Panorama E2), je pense convertir la résultat en STRING pour afficher la valeur dans E2.

Avez vous une idée de comment gérer un INT64 ?

Merci de votre aide

Nico Las

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:22
par itasoft
slts,
ya pas de variables 64 bits sur Unity, si c'est des Wh avec les 32 premiers bits ça te fera 4 milliards de Wh , ça ne te suffit pas ?

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:25
par ProfnovA
Je me suis arrêté à la V10. Est-ce qu' Unity sait maintenant gérer les INT64?

Sinon, il faut passer par des réels.

https://www.se.com/ww/en/faqs/FA311202/

Comme déjà discuté sur ce forum, je ne voie pas l’intérêt d'afficher une valeur en milliardième de milliardième... Attention à choisir des unités pertinentes à afficher. Est-ce que ça apporterait quelque chose d'avoir un compteur de vitesse en m/h? Monsieur, l'agent, je roulais à 80498 m/h, je vous jure.

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:35
par itasoft
pas de INT64
la solution donnée sur le lien est débile, le REAL est codé sur 32 bits exposant+mantisse ça donnera jamais la valeur maxi de
18 446 744 073 709 551 616.00
comme tu dis il faut si c'est possible augmenter l'unité de mesure ex: des kWh à la place des Wh

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:40
par NicoLasB
Je l'affiche en kW.
Le MTZ est en service depuis 4 mois est il est déjà a 272 000 000 watt.
Le compteur sera au max dans 5 ans ce qui est limite pour du matériel neuf.
Je suis parti du principe qu'il était a zéro lors de l'installation par Schneider, peut être qu'ils ont mis un offset par rapport a l'ancien Diris.

Merci pour le lien, je vais essayer ça.
Même si le calcul est bizarre.

Nico Las

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 15:47
par NicoLasB
Le calcul est bon.
Poids fort multiplier par 4294967295 + le poids faible
avec un max à 18 446 744 073 709 551 615

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 16:03
par itasoft
NicoLasB a écrit : 20 févr. 2020, 15:47 Le calcul est bon.
Poids fort multiplier par 4294967295 + le poids faible
avec un max à 18 446 744 073 709 551 615
-----------------
j'ai pas essayé , je vais regarder comment c'est codé sur les 32 bits du REAL

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 16:31
par ProfnovA
Je viens d'essayer, dans la théorie ça fonctionne mais on perd forcément en précision au bout d'un moment. On peut pas faire rentrer 64 bits dans 32 sans dommages.

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 16:55
par pach30
Pourquoi vouloir passer en 64 bits "virtuels" dans l'API ? Si c'est pour afficher sur Panorama , autant lui remonter les 2 DINT et faire le passage en 64 bits directement dans Pano , non ?

Re: INT64 d'un MTZ vers M340

Posté : 20 févr. 2020, 18:31
par itasoft
slts,
disons que ça marche avec le source de type UDINT, le REAL ne traite pas le débordement, tant que ça rentre c'est bon.

(*Source tous les bits à 1*)
UDINT_low:=16#FFFFFFFF;
UDINT_High:=16#FFFFFFFF;

REAL_low:=UDINT_TO_REAL(UDINT_low);
REAL_High:=UDINT_TO_REAL(UDINT_High);
REAL_RESULT:=(REAL_High*4294967295.0)+REAL_low;

----- avec le source de type DINT ça peut pas marcher----------
(*Source tous les bits à 1*)
DINT_low:=16#FFFFFFFF;
DINT_High:=16#FFFFFFFF;

REAL_low:=DINT_TO_REAL(DINT_low);
REAL_High:=DINT_TO_REAL(DINT_High);
REAL_RESULT:=(REAL_High*4294967295.0)+REAL_low;