Datapunttype 9.001

Problemen, Tips of tricks met ETS programmatie post je hier.
Plaats reactie
ON3WVS
Berichten: 13
Lid geworden op: di 07 feb 2017, 16:38

Datapunttype 9.001

Bericht door ON3WVS » di 19 feb 2019, 14:51

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!

egfdevos
Berichten: 1076
Lid geworden op: vr 26 jul 2013, 07:31
Locatie: Zeeuws-Vlaanderen, Nederland

Re: Datapunttype 9.001

Bericht door egfdevos » di 19 feb 2019, 18:26

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.
Edwin

ON3WVS
Berichten: 13
Lid geworden op: di 07 feb 2017, 16:38

Re: Datapunttype 9.001

Bericht door ON3WVS » wo 20 feb 2019, 16:30

egfdevos schreef:
di 19 feb 2019, 18:26
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.
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

egfdevos
Berichten: 1076
Lid geworden op: vr 26 jul 2013, 07:31
Locatie: Zeeuws-Vlaanderen, Nederland

Re: Datapunttype 9.001

Bericht door egfdevos » wo 20 feb 2019, 17:11

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.
Edwin

ON3WVS
Berichten: 13
Lid geworden op: di 07 feb 2017, 16:38

Re: Datapunttype 9.001

Bericht door ON3WVS » wo 20 feb 2019, 18:18

egfdevos schreef:
wo 20 feb 2019, 17:11
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.
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.

W

egfdevos
Berichten: 1076
Lid geworden op: vr 26 jul 2013, 07:31
Locatie: Zeeuws-Vlaanderen, Nederland

Re: Datapunttype 9.001

Bericht door egfdevos » wo 20 feb 2019, 19:10

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.
Edwin

egfdevos
Berichten: 1076
Lid geworden op: vr 26 jul 2013, 07:31
Locatie: Zeeuws-Vlaanderen, Nederland

Re: Datapunttype 9.001

Bericht door egfdevos » wo 20 feb 2019, 19:19

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.
Edwin

ON3WVS
Berichten: 13
Lid geworden op: di 07 feb 2017, 16:38

Re: Datapunttype 9.001

Bericht door ON3WVS » do 21 feb 2019, 11:01

egfdevos schreef:
wo 20 feb 2019, 19:19
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.
Ok thanks, hier kan ik wat mee.

Mvg

Plaats reactie