PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umrechnung Temperaturen



cashi
21.11.10, 17:13
Hi,

kurze und dumme Frage :-)

Wenn ich aus meinem Bus mit VisualBasic meine Temperatur von nem RTR lese bekomme ich den Wert 6392 - Die Temp. ist ca. 23°C - ich komm nicht drauf wie ich das umrechne - einer ne Idee ? Danke, Cashi

holzbein
22.11.10, 17:29
Hallo

6392 / 23°C = 277,913.....


Also Must du deinen WERT durch 277,913... Teilen.

zb.: 5975 / 277,913 = 21,5 °C

Must dir nur überlegen wieviel Nachkommastellen du brauchst.(Genauigkeit)

Gruß

Klaus Gütter
23.11.10, 07:00
Ich glaube eher, dass der Wert als DPT 9 (früher: EIS 5) codiert ist. Allerdings sind 6392 dann, wenn ich richtig rechne, nur knapp 20 Grad.

Gruß, Klaus

lostinbyte
23.11.10, 09:40
Hmm, nach DPT 9 (EIS5) sieht der Wert nicht aus.

Hier kann man umrechnen (lassen) KLICK (http://www.tapko.de/index.php/Tools/31/0/)

NetFritz
23.11.10, 11:57
Hallo

@cashi
Wenn ich aus meinem Bus mit VisualBasic meine Temperatur von nem RTR lese bekomme ich den Wert 6392
Wie liest Du den die Temp. vom BUS, mit was selbst geschriebenes oder vielleicht mit einen OCX von M.Dehoff.
Wenn Du das selbst machst musst Du ja DPT9 decodieren.
Gruß NetFritz

cashi
24.11.10, 19:45
Hi,

ja, das kommt über die dehoff´sche OCX.
Das ist einfach ein 2-Byte wert der in decimal konvertiert werden muss.
Eigentlich keine große Sache aber ich steh auf der leitung....

Klaus Gütter
25.11.10, 14:01
Das OCX hat doch eine Funktion - GetEis5Value oder so ähnlich - mit der man die Umrechnung machen kann.
Gruß, Klaus

cashi
25.11.10, 17:24
Super, vielen Dank, das ist die Lösung :-)
Wer aber trotzdem weiß wie die Umrechnung funktioniert gerne melden, würde mich echt intressieren.

aktuelles Beispiel :

ETS liefert : HEX 18 D2
entspricht 2ByteDecimal : 6354
entspricht : 16,8 °C

wie komme ich von der 6354 rechnerisch auf die 16,8 ° ??

Danke, Cashi

Bodo
25.11.10, 21:05
Hoi
Kannst ja mal in der PDF schauen:
http://www.knx.org/fileadmin/downloads/03%20-%20KNX%20Standard/KNX%20Standard%20Public%20Documents/03_07_02%20Datapoint%20Types%20v1.5.00%20AS.zip
So auf Seite 31 glaube ich.


3.10 Datapoint Types “2-Octet Float Value”
Format: 2 octets: F16
octet nr: 2 MSB 1 LSB
field names: FloatValue
encoding: MEEEEMMM MMMMMMMMM
Encoding:
FloatValue = (0,01*M)*2(E)
E = [0 … 15]
M = [-2 048 … 2 047], two’s complement notation
For all Datapoint Types 9.xxx, the encoded value 7FFFh shall always be used to denote invalid
data.
Range: [-671 088,64 … 670 760,96]
PDT: PDT_KNX_FLOAT

holzbein
25.11.10, 22:15
Hallo

6392 / 16,8°C = 378,214285714

Also Must du deine WERTE,die vom Bus kommen, durch 378,214285714 Teilen. Dann siehst in deiner Anzeige oder Visu auch das was du willst.

zb.: 5975 / 378,214285714 = 15,7979... °C, oder
5312 / 378,214285714 = 14,0449... °C, usw.

Wenn ich mich nicht irre kann 2Byte die Zahlen von -32768 bis 32767. Also in deine Temperaturen Umgerechnet ca. -86,7°C bis 86,7°C.

Gruß

Klaus Gütter
26.11.10, 07:24
Hallo Holzbein,

"durch 378,214285714 teilen" ist nicht richtig. Das korrekte Verfahren ist wie Bodo beschreibt.

Gruß, Klaus

NetFritz
26.11.10, 11:37
Hallo
Ich mache es in PHP so.


$eis5 = hexdec($value);
$wert = ($eis5 & 0x07ff);
if (($eis5 & 0x08000) != 0)
{
$wert = $wert | 0xfffff800;
$wert = $wert *-1;
}
$wert = $wert << (($eis5 & 0x07800) >> 11);
if (($eis5 & 0x08000) != 0)
{
$wert = $wert * -1;
}
$value=$wert/100;
Gruß NetFritz

MarkusL
29.11.10, 00:14
cashi, schau mal hier (http://knx-user-forum.de/101548-post8.html).

Warichet
19.05.11, 11:54
Hi NetFritz,

Ich mache es in PHP so.


I'm using your conversion function with PHP and eibd and I have some problems.

When I manually force an input to the function, i.e. 1905 I get the correct result, i.e. 20,98°

When I use the function with the output of eibd GroupRead, I get an inconsistent result, so I guess there is something wrong with the format.

How are you using your function ? do you have a sample usage, please ?

Thank you

cashi
11.11.11, 11:28
Hi,

ich muss das nochmal ausgraben, ich kapier´s immer noch nicht :-)
Also ich bekomme - mittlerweile von einem Weinzierl-IP-Interface - einen Temperaturwert im 2-Byte Float Format. Nun will ich daraus meine Temperatur ersehen. Die Datenformate und umrechnungstabellen sowie die Spezifikationen sind mir alle bekannt, dennoch kapiere ich nicht, wie ich die Werte in C# oder VB.Net in ein brauchbares Format umwandeln kann...
Hat da jemand vllt. nen Codeschnipsel ? Das kann ja nicht viel sein...
Danke, Cashi

Bsp :
Empfangenes Byte-Array :
Wert Byte 1 = 19
Wert Byte 2 = 01

Temperatur = 20,56 Grad

Wie komme ich von den 19|01 auf die 20,56 Grad ?

Bodo
11.11.11, 21:08
Hoi

Also hier kannst Du schon mal Deine Werte überprüfen:
http://www.tapko.de/index.php/Tools/31/0/

19 hex = 25 dez = 00011001 bin
01 hex = 01 dez = 00000001 bin

00011001 00000001
MEEEEMMM MMMMMMMM
(0.01*M)*2(E)
M=0 Vorzeichen ist +
E = 0011 = 3
M = 101 hex = 257 dez
0.01*257 = 2.57
2.57*8=20.56

Bodo
11.11.11, 21:35
Hoi

Das mit den binären Zahlen und nur einen Teil davon nehmen kann man mit "bitshifting" lösen.
Wie das in C# oder VB.Net geht weiss ich nicht.

In PHP war das das mit dem >> 11 (elf stellen nach rechts gehen) siehe oben im Fred.

Ist eine eklige Sache und bestimmt schon hundert mal im www gelöst. (Hab auch schon falsche Lösungen gesehen) :beer:

cashi
14.11.11, 16:11
Vielen Dank Bodo, das hat mich schon etwas weitergebracht. Ich habe mir den Quelltext von http://www.tapko.de/index.php/Tools/31/0/ (Keine Panik, nur private Nutzung etc... :-) ) mal angeschaut und in C# konvertiert aber offenbar bin ich wirklich zu blöd - ich mach da jetzt schon stunden rum und bekomm keine konvertierung hin.
Also wenn doch jemand ne dll oder nen code hat wäre ich sehr dankbar...
Danke, Cashi