Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Calcul Hexa -> Decimal qui me pose des soucis
#1
#2
On 14 mar, 04:16, Gilles ARNAUD <lifedo...@live.fr> wrote:
> J'ai un souci de conversion sur un EIS 4 bytes qui renvois des W. (ets signale leng
Quel est le data type EIS ?
Je suppose que ce n'est pas EIS4 (Date)
et des EIS à 4 bytes, il y en a 4 différents, alors ?!?
#3
bonjour,
Si c'est un nombre à virgule flottante sur 4 octets, c'est
probablement le format 32 bits IEEE, le même que pour les float sur PC

A+
Jean-François

On 14 mar, 12:26, Marc Assin <raym...@warichet.com> wrote:
> On 14 mar, 04:16, Gilles ARNAUD <lifedo...@live.fr> wrote:> J'ai un souci de conversion sur un EIS 4 bytes qui renvois des W. (ets signale leng
>
> Quel est le data type EIS ?
> Je suppose que ce n'est pas EIS4 (Date)
> et des EIS à 4 bytes, il y en a 4 différents, alors ?!?
#4
#5
On 14 mar, 13:19, Gilles ARNAUD <lifedo...@live.fr> wrote:
> Normalement un EIS5, float 32 bits avec virgule...
Ah ?!?
D'après ma doc (Konnex, July 2004 PAGE 3/24)
EIS5 "2-octet Float Value"
#6
Le compte est bon ;-)

Si tu pars de 43 1C 82 8F
1 bit de signe: valeur = 0 (nombre positif)
8 bit d'exposant: valeur = 134 (0x43 décalé d'un bit vers la gauche)
23 bit de mantisse: valeur = 1868431 (1C 82 8F en hexa)

L'exposant représente une valeur décalée de 2^(x-1) - 1 (x représente
le nombre de bits de l'exposant)
Dans notre cas (exposant sur 8bit) c'est décalé de 127 donc l'exposant
réel est 134-127 = 7

La mantisse représente un nombre compris entre 1 et 2, il faut donc
diviser notre nombre par la valeur maximale de la mantisse (23 bits =>
valeur maximale = 2^23) pour la ramener entre 0 et 1. Ensuite ajouter
1 pour l'avoir entre 1 et 2.
Donc la mantisse vaut 1+(1868431 / (2^23)) = 1.22273433

1.22273433 * 2^7 = 156.509994

Formule complète:
(1+(1868431 / (2^23))) * 2^(134-(2^(8-1)-1)) = 156.509995


Pas vraiment évidente, la conversion...
Dans linknx, j'ai réglé le problème de la manière la plus simple qui
soit. Je stocke les bytes dans un entier 32bit puis je cast en float.
Et comme par définitien ce type KNX correspond au format IEEE 754 qui
est celui utilisé par le type float en C, ça marche comme un charme.

Pour plus d'info sur tous les types KNX, il existe un document
librement disponible sur leur site (pour une fois que quelque chose
concernant le standard KNX est librement disponible, ça vaut le coup
de le signaler):
http://www.knx.org/fileadmin/downloads/0...3%20AS.zip


A+

Jean-François


On 14 mar, 18:41, Marc Assin <raym...@warichet.com> wrote:
> On 14 mar, 13:19, Gilles ARNAUD <lifedo...@live.fr> wrote:> Normalement un EIS5, float 32 bits avec virgule...
>
> Ah ?!?
> D'après ma doc (Konnex, July 2004 PAGE 3/24)
> EIS5 "2-octet Float Value"
#7
> D'après ma doc (Konnex, July 2004 PAGE 3/24)

La doc en question se trouve dans la partie "fichiers"
KNX interworking - Datapoint types.pdf
apportée par Dibou 608,3 KB 14 jan 2007
#8
#9
On 14 mar, 21:59, jef2000 <jef2...@ouaye.net> wrote:
> Pour plus d'info sur tous les types KNX, il existe un document
> librement disponible sur leur site
http://www.knx.org/fileadmin/downloads/0...ard/KNX%20...

Le document a été ajouté à la partie "fichiers" (en espérant que ce
soit permis)

Merci Jean-François


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)