Hallo,
Ik merkte iets vreemds op tijdens het uitlezen van een groepsadres die een Datapunttype 9.001 (temperatuur) heeft:
Deze waarde wordt eerst in HEX getoond (bijvoorbeeld 3,6°C = HEX 0168)
Als je deze waarde vertaalt met de Windows calculator van HEX naar DEC dan krijg je inderdaad de waarde 36
Bovenstaande is geldig voor waarden tot +/-20°C, wanneer je er boven gaat krijg je dit:
vb. 21,3°C wordt weergegeven als 0C29 = 3113
Volgens ik lees op de site van KNX is datapunttype 9.001 een 16-bit float. Iemand een verklaring voor deze waarden?
Thanks!
Datapunttype 9.001
Re: Datapunttype 9.001
Als je zelf al gevonden hebt dat het een "Floating point" is.
Dan heb je daar het antwoord op je vraag toch al.
Dec 3,6 naar Hex is normaal onmogelijk want geen heel getal vandaar het toepassen van floating point.
Dan heb je daar het antwoord op je vraag toch al.
Dec 3,6 naar Hex is normaal onmogelijk want geen heel getal vandaar het toepassen van floating point.
Edwin
Re: Datapunttype 9.001
Hoi Edwin,
HEX 0168 = DEC 360 (en nog eens delen door 100 en je komt aan 3,6°C) Dit werkt bij alle waarden onder 20,4°C
Wat bedoel je met het type Floating Point, als zijnde een antwoord op mijn vraag? Daar kan ik even niet volgen.
Grtz W
Re: Datapunttype 9.001
Hexadecimaal is een 16 tallig stelsel en decimaal een 10 tallig stelsel.
Derhalve klopt jouw beredenering niet als je goed kijkt.
Zoals knx het toepast op de temperatuur word daar vanwege de preciesie nog eens een formule op toegepast bestaande uit delen van die 16bit data binnen een bepaald bereik.
Derhalve klopt jouw beredenering niet als je goed kijkt.
Zoals knx het toepast op de temperatuur word daar vanwege de preciesie nog eens een formule op toegepast bestaande uit delen van die 16bit data binnen een bepaald bereik.
Edwin
Re: Datapunttype 9.001
Dit is nu net de formule waar mijn vraag over gaat... heb mij de laatste dagen scheel gezocht en pagina's doorlezen met mantissa's, exponenten, etc. maar ik zie het niet zo duidelijk.egfdevos schreef: ↑wo 20 feb 2019, 17:11Hexadecimaal is een 16 tallig stelsel en decimaal een 10 tallig stelsel.
Derhalve klopt jouw beredenering niet als je goed kijkt.
Zoals knx het toepast op de temperatuur word daar vanwege de preciesie nog eens een formule op toegepast bestaande uit delen van die 16bit data binnen een bepaald bereik.
W
Re: Datapunttype 9.001
Dit geld voor DPT 9.xxx
16 bits:
16 t/m 1
MEEEEMMM MMMMMMMM
Eerste M staat voor +/-
X = (0,01*M)*2 tot de macht (E)
E = [0 … 15]
M = [-2048 … 2047]
bereik = [-671088,64 … 670760,96]
Voor DPT 9.001 is het bereik beperkt; [-273 … 670760]
en een eenheid; graden celcius.
16 bits:
16 t/m 1
MEEEEMMM MMMMMMMM
Eerste M staat voor +/-
X = (0,01*M)*2 tot de macht (E)
E = [0 … 15]
M = [-2048 … 2047]
bereik = [-671088,64 … 670760,96]
Voor DPT 9.001 is het bereik beperkt; [-273 … 670760]
en een eenheid; graden celcius.
Edwin
Re: Datapunttype 9.001
Dus als je een hexadecimale waarde hebt zul je deze eerst naar binair om moeten rekenen.
Dan in die 3 blokken onderverdelen. Dan 2 blokken omrekenen naar decimaal.
Door de formule halen en kijken of het een positieve of negatieve temperatuur is.
Dan in die 3 blokken onderverdelen. Dan 2 blokken omrekenen naar decimaal.
Door de formule halen en kijken of het een positieve of negatieve temperatuur is.
Edwin
Re: Datapunttype 9.001
Ok thanks, hier kan ik wat mee.
Mvg