Danke, das hat mir sehr geholfen! Das HEXen und mit Nullen auffüllen und hinterher wieder DECen klappt perfekt, ich war wohl zu sehr auf die Zwischenkontrolle mit dem Gruppenmonitor fixiert. Der fehlende Datentyp führte datz dass die Werte hier falsch angezeigt wurden.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Umwandlung Dezimal -> DPT9
Einklappen
X
-
Du musst mindestens der ETS sagen, was das für ein DPT ist. Sprich die Gruppenadresse anlegen und den richtigen DPT zuweisen. Dann am besten mal eine Zahl mit der ETS senden und schauen wie der knxd (im vbusmonitorX) es anzeigt.
Einen Kommentar schreiben:
-
Du sendest offenbar den falschen Datentyp, im Gruppenmonitor sind das irgendwie alles 2-byte-Telegramme und nicht 8 byte.
Mit knxd kann ich leider nicht helfen.
Einen Kommentar schreiben:
-
Vielleicht ist der Wurm woanders, aber wenn ich die Hex-Werte sende, erkennt der Gruppenmonitor nicht mal die "Rohwerte"...
Bildschirmfoto 2020-12-29 um 18.27.29.png
Bildschirmfoto 2020-12-29 um 18.27.51.pngAngehängte Dateien
Einen Kommentar schreiben:
-
Also DPT12 ist einfach ein Longinteger.
dpt12.jpg
Für deinen Wert 1000 wäre das einfach die Hexdarstellung der Zahl 1000 => 3E8, und davor mit Nullen aufgefüllt, insgesamt 8 Bytes.
dpt12_debug.jpg
Oder die 1000 mit den zwei Nachkomma-Stellen angehängt dann 100000 => hex 0001 86A0
Zuletzt geändert von Gast1961; 29.12.2020, 18:19.
Einen Kommentar schreiben:
-
Was willst du den. Bei Ganzzahlen umrechnen? Da gibts doch nichts umzurechnen
Einen Kommentar schreiben:
-
Beides total gerne, ich finde nur leider kein Rechenbeispiel wie ich die Zahl umrechnen kann (Komma weglassen kann man ja auch mit ein bisschen Multiplizieren lösen ;-) aber die eigentliche Umrechnung...
Hat jemand von euch eine DECtoDTPxxx-Funktion?
LG
Tobias
Einen Kommentar schreiben:
-
Oder wenn es ganzzahlige Werte sein sollen (Komma weglassen) vielleicht DPT12, Wertebereich 0…4 294 967 295
Einen Kommentar schreiben:
-
DPT14 hätte 7-8 signifikante Ziffern (siehe https://de.wikipedia.org/wiki/Einfache_Genauigkeit)
Einen Kommentar schreiben:
-
Mir würde momentan schon was reichen wo ich es mit dem knxd schon wieder exakt auslesen kann, es geht momentan um einen Zählerstand, am besten eine 6-stellige Zahl mit 2 (oder besser 4) nachkommsatellen, damit sollte sich alles abdeckan lassen...
Einen Kommentar schreiben:
-
dpt 7, dpt8, dpt16?
Viele Wege führen nach Rom!
hängt auch davon ab, wer es empfangen soll und welche Datentypen dort verstanden werden.
Einen Kommentar schreiben:
-
OK, dann fang ich mal komplett von der anderen Seite an
Wie kann ich den Wert 1000 per knxd sauber auf den Bus senden? Hatte ihn bisher mit obiger Funktion umgewandelt, aber erst heute zufällig gesehen dass die Werte nicht exakt sind...
Einen Kommentar schreiben:
-
dpt 9 ist nicht genau, da sind nicht sämtliche Zwischenschritte möglich!
Einen Kommentar schreiben:
-
Umwandlung Dezimal -> DPT9
Moin zusammen,
eher zufällig habe ich gerade rausgefunden dass meine per knxd gesendeten Werte auf den Bus "ungenau" gesendet werden. Vermutlich ist es aber ein Thema in der Umrechnung vorher. Mein Mathe reicht leider nicht aus dafür, kann jemand erkennen wo das "Problem" ist?
LG
Tobias
PHP-Code:$x = DECtoDPT9(1000);
echo ($x);
// ergebnis: 36 1A (und auf dem Bus dann: 999,68)
Ergebnis: 36 1A (und im Gruppenmonitor in der ETS5 "so ungefähr" 1000, nämlich genau 999,68).
PHP-Code:function DECtoDPT9($DEC)
{
$DEC *= 100;
$dpt9 = 0;
$exponent = 0;
if ($DEC < 0)
{
$dpt9 = 0x08000;
$DEC = -$DEC;
}
while ($DEC > 0x07ff)
{
$DEC >>= 1;
$exponent++;
}
if ($dpt9 != 0) $DEC = -$DEC;
$dpt9 |= $DEC & 0x7ff;
$dpt9 |= ($exponent << 11) & 0x07800;
return strtoupper(chunk_split(str_pad(dechex($dpt9 & 0x0ffff),4,'0',STR_PAD_LEFT),2,' '));
}
Stichworte: -


Einen Kommentar schreiben: