Page 2 sur 2

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 17:22
par Mrjack
philou77 a écrit : 30 oct. 2018, 13:02 Salut,

Ta valeur doit bien être localisée dans ton automate à une adresse définie...
Si tu déclare une nouvelle Variable à l'adresse de RxData[7] en format WORD, tu accèderas directement à ta valeur par cette nouvelle variable.
Valeur qui est en BCD, une simple conversion bcd to int te donnera ta température en décimal (si tu y tiens vraiment)
(*Variables bloc de réception TH1*)
CAN_Rx2 : CAN_L2_RX_29BIT_FRAME;
RxData :ARRAY[1..8] OF BYTE; (* lieu de réception des données retournées*)
tempth1 AT%MB0 :BYTE ;
(*wCAN_ID2 : WORD:=16#8FDCDD7;*)
Rx2readframe : BOOL;
confirmRx2 : BOOL;
counterRx2 : WORD;
error_29BitRx2 : CAN_eL2_FRAME_ERROR;
(* Fin Variables bloc de réception TH1*)

Non, si je mets un AT il est refusé d'accès en écriture. C'est le bloc fonction qui décide de l'emplacement (si j'ai bien compris)

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 17:23
par Mrjack
itasoft a écrit : 30 oct. 2018, 13:12 slts,
es que ça veut dire que RxData[7] et RxData[8] sont du type BYTE ?
Oui:
(*Variables bloc de réception TH1*)
CAN_Rx2 : CAN_L2_RX_29BIT_FRAME;
RxData :ARRAY[1..8] OF BYTE; (* lieu de réception des données retournées*)
tempth1 AT%MB0 :BYTE ;
(*wCAN_ID2 : WORD:=16#8FDCDD7;*)
Rx2readframe : BOOL;
confirmRx2 : BOOL;
counterRx2 : WORD;
error_29BitRx2 : CAN_eL2_FRAME_ERROR;
(* Fin Variables bloc de réception TH1*)

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 17:33
par Mrjack
JAPIB a écrit : 30 oct. 2018, 13:57 Une petite idée en Ladder. (Pour faire cela le ST serait plus "simple" à écrire.)

Cordialement.
Merci pour ta réponse,
J'ai essayé, mais le resultat n'est pas exact en décimal (voir capture)
J'ai oublié quelque chose?

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 17:54
par philou77
Oui,

Il faut ajouter 255 et pas 256 pour basculer de l'octet de poids faible (comptage max de 0 à 255 sur un octet ce qui fait bien 256 valeurs) à l'octet de poids fort !

D'ou ton erreur de résultat !



Merci à JAPIB

Edit: Pardon, je me suis trompé... pas vu la multiplication !

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 18:11
par Mrjack
En fait la valeur lu avec ta méthode est la même que la valeur physique affichée sur le thermostat.
Donc merci beaucoup, cela fonctionne.
Par contre avec la calculatrice windows.....Il y a un écart... Comme expliquer?

Merci beaucoup encore :-)

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 18:53
par Mrjack
philou77 a écrit : 30 oct. 2018, 17:54 Oui,

Il faut ajouter 255 et pas 256 pour basculer de l'octet de poids faible (comptage max de 0 à 255 sur un octet ce qui fait bien 256 valeurs) à l'octet de poids fort !

D'ou ton erreur de résultat !



Merci à JAPIB
Yep!
Merci beaucoup :-)

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 19:09
par JAPIB
Dans quel mode de représentation à été copié ton écran Mrjack : Décimal, hexadécimal, binaire ?

J'ai refait la manip avec les valeurs que tu nous donnais dans ton premier message, à savoir 1 et 16 en hexa.
Mes copies d'écrans précédentes étaient en décimal.
Les nouvelles copies d'écran sont en affichage Hexa et la calculatrice windows (en mode programmeur) calcul correctement.
Image 6.jpg
Image 7.jpg
Comme souvent, tout est une affaire de point de vue :D

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 21:01
par Mrjack
Ma calculatrice déconne?!
Voir la capture, je ne comprends pas.
je mets 0124 en hex et la correspondance décimale est 292....Alors que c'est 280 (28°)????
Je ne capte pas là...

Re: codesys 2.3 Convertir hexa en decimal

Posté : 30 oct. 2018, 23:22
par JAPIB
Ta copie d'écran montre que les valeurs affichées dans CoDeSys le sont en décimal.
Le 24 que tu vois et exprimé en décimal.
En réalité 24 (en base 10) correspond à 18 en hexadécimal (en base 16).
Et si tu convertis 118 d'hexadécimal en décimal tu retrouves bien la valeur 280. :)

Dans CoDeSys, pour voir les valeurs en hexadécimal il faut faire un clic droit sur les valeurs des variables, dans les variables globales par exemple et choisir Hexadécimal. A ce moment les valeurs seront affichées sous la forme 16#18 (au lieu de 24 en décimal).
La notation 16#... indique que la valeur qui suit est exprimée en hexadécimal, pour du binaire on aurait la notation 2#.... (cette représentation n'est pas utilisée que dans CoDeSys).

Le système de l'automate se débrouille avec les valeurs, les représentations (binaire, hexa, décimale) ne sont là que pour nous "faciliter" :oops: :oops: la vie.
L'hexa, par exemple, permet de représenter des grands nombres avec peu de caractères. Ça à été inventé au moment ou les machines informatiques se programmaient en assembleur, avec des valeurs de code exprimée par des valeurs numériques.
Par exemple 32767 (en décimal) s'exprime 7FFF en hexa, 4 caractères au lieu de 5 !

Pour en revenir à CoDeSys, voici ci dessous, un exemple d'affichage avec les valeurs de mon message précédent :
16#16 correspond à 22 (base 10).
La valeur 16#116 convertie en décimal donne bien 278.
Image 8.jpg
Image 9.jpg
Cordialement. :D