Forum: PC-Programmierung KNX: Umrechung von 2 Bytes in Dezimal


von Matt B. (mattb)


Lesenswert?

Hallo,

ich sitze gerade daran Temperaturwerte von einem KNX-System mit einem 
Rechner auszulesen. Die Kommunikation läuft über einen IP-KNX-Router.

Das Programm schreibe ich in C#.

Die Byte-Daten bekomme ich. Meine Frage ich nun, wie ich die beiden 
empfangenen Bytes in eine Dezimalwert umrechne.

Die von KNX verwendeten Datentypen sind hier beschrieben: 
http://www.knx.org/fileadmin/downloads/03%20-%20KNX%20Standard/KNX%20Standard%20Public%20Documents/03_07_02%20Datapoint%20Types%20v1.07.00%20AS.zip

Bei den Temperaturwerten handelt es sich um “2-Octet Float Value”, zu 
finden auf Seite 32.

Hier mal ein Beispiel vom Außentemperaturfühler:
1
MSB-Byte: 0x87   0b10000111
2
LSB-Byte: 0x29   0b00101001
3
4
=>  0b1000011100101001
5
      MEEEEMMMMMMMMMMM
6
7
-> Mantisse: 0b11100101001 = -1833(dezimal)
8
-> Exponent: 0b0000        = 0
9
10
Temperatur = (0.01 * Mantisse) * 2^Exponent
11
           = (0.01 * (-1833)) * 2^0
12
           = -18,33

Momentan liegen die Außentemperaturen aber nur knapp unter 0°C. 
Demzufolge wären -1,833°C passender.

Sieht jemand wo mein Fehler ist?

Danke

von Hermann G. (df2ds)


Lesenswert?

Hallo,
in der Doku steht doch "two's complement notation".
Wenn du - wegen des neg. Vorzeichens- korrekt das Zweierkomplement 
bildest, kommen auch sehr plausible -0,86°C raus!

Gruß
  Hermann

von Klugscheißer (Gast)


Lesenswert?

Ich komme auf -2,15°.

Mantisse: 0b_1_11100101001 = -215

von Matt B. (mattb)


Lesenswert?

Hallo,

mit der Bildung des Zweierkomplements von der Mantisse funktioniert es!

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.