Traitement des mesures sur 64 bits sur Unity

Sous forum réservé aux tutoriaux concernant les produits de la marque Schneider
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Traitement des mesures sur 64 bits sur Unity

Message par itasoft »

slts,
Suite au PB du post à « pinpin » sur le forum Schneider,
comme le PB peut se reproduire souvent sur Unity qui n’as pas de type de variables 64bits.
Je propose ci dessous une solution parmi d’autres aussi empiriques.
Depuis la mode du 64bits on voit apparaître des capteurs/compteurs qui délivrent la mesure sur 64bits (sur 4 mots de 16bits)
Le plus simple consiste à ne prendre que les 32 bits des poids faibles, mais il se peut que cette valeur ne soit pas assez grande (cas « pinpin ») ,
mais comme souvent c’est donné dans des unités physiques trop petites pour ce que l’on veut en faire.
Ex :
Le poids en gramme alors que le Kg nous suffit
La tension mV alors que le V nous suffit
L’intensité en mA alors que le A nous suffit
La puissance en mW alors que le W nous suffit
Le volume en litres alors que le M3 nous suffit
Ect..................
Dans ce cas, le but étant de décaler les 64bits à droite pour les ramer sur les 32bits des poids faibles exploitables.
avec la précision de l’arrondi.
Dans cet exemple, on décale les 64bits de 10 à droite (/1024*1.024) pour ramener la valeur sur 32 bits exploitables.
Ex : Avoir la valeur en Kg à la place des grammes, limité à 4 294 967 296 Kg

nbD:=10;
MOVE_BOOL_AREBOOL(0,TABLE_EBOOLS);
TABLE_EBOOLS :=COPY_ARINT_AREBOOL(TABLE_SOURCE, 0, 4, 0);
TABLE_RESULT:=COPY_AREBOOL_ARDINT(TABLE_EBOOLS, nbD, 64, 0);
(*Calcul pour l'arrondi*)
RETENUE:=INT_TO_REAL(TABLE_SOURCE[0] and 16#03FF)/1024.0;
RESULT1000:=REAL_TO_UDINT((UDINT_TO_REAL(DINT_TO_UDINT(TABLE_RESULT[0]))+RETENUE)*1.024);

(*
TABLE_EBOOLS ARRAY[0..127] OF EBOOL
TABLE_SOURCE ARRAY[0..3] OF INT
TABLE_RESULT ARRAY[0..1] OF DINT
RETENUE REAL
RESULT1000 UDINT (résultat)
nbD INT
*)
Automaticien privé (de tout)
itasoft@free.fr
Répondre