Bonjour,
Je connais pas assez Control Expert et les blocs Read_var donc je pose la question, comment on lis un entier 32bits avec le bloc Read_Var ?
J'ai un M580 qui cause en modbus avec un compteur Polier MTR100LMOD et je veux récup' la consommation. J'arrive à lire des trucs basiques genre l'adresse de mon compteur, la fréquence, etc ... tout ça dans la documentation technique c'est sur du 16bits, mais pour la consommation sur du int32. Sur le RECP du Read_Var, faut mettre un Array [...] of Int et moi dans mon cas, faudrait plutôt du DINT. Quelqu'un à déjà fait ça et pourrait m'aiguiller sur comment faire ?
Merci par avance !
Lecture entier 32 bits avec Read_var sur Control Expert
-
MiGaNuTs
- Mi homme - Mi automate

- Messages : 1637
- Enregistré le : 12 nov. 2015, 21:02
- Localisation : 45 - Loiret
- Contact :
Re: Lecture entier 32 bits avec Read_var sur Control Expert
Bonjour
Si tu n'a pas de valeurs négatives et que tu a lele endian dans ton compteur et dans l'automate tu peut t'en sortir avec un calcul simple
resultat32bits:=poidsfaible+(poidsfort * 2^16)
en t'assurant que tes variables poidfaible et poidsfort soient bien des unsigned
Si tu n'a pas le meme endian entre les deux il faut d'abord tout couper en paquets de 8 bits puis les remettre dans le bon ordre dans ta variable finale.
ca devient beaucoup plus chiant mais ca reste le meme principe
Sinon y'a aussi la methode sauvage qui consiste a déclarer ton tableau de deux int a la meme adresse que ton dint. Le compilateur va te mettre des warning mais ca marche bien avec les vieilles versions de unity
Pour les version récentes il faut aller dans les options du compilateur et désactiver certaines protections anti "code sale"
Si tu n'a pas de valeurs négatives et que tu a lele endian dans ton compteur et dans l'automate tu peut t'en sortir avec un calcul simple
resultat32bits:=poidsfaible+(poidsfort * 2^16)
en t'assurant que tes variables poidfaible et poidsfort soient bien des unsigned
Si tu n'a pas le meme endian entre les deux il faut d'abord tout couper en paquets de 8 bits puis les remettre dans le bon ordre dans ta variable finale.
ca devient beaucoup plus chiant mais ca reste le meme principe
Sinon y'a aussi la methode sauvage qui consiste a déclarer ton tableau de deux int a la meme adresse que ton dint. Le compilateur va te mettre des warning mais ca marche bien avec les vieilles versions de unity
Pour les version récentes il faut aller dans les options du compilateur et désactiver certaines protections anti "code sale"
