Hallo Zusammen,
ich möchte gerne den Wechselrichter per Modbus TCP auslesen um die aktuellen Werte im QC darstellen zu können.
Ich habe mir den Simply Modbus TCP Client besorgt und habe die gewünschten Register mit dem PC ausgelesen. In diesem Programm werden schön die Nutzdaten des IP-Telegramms dargestellt.
Im Gira Homeserver habe ich eine IP-Geräte Abfrage angelegt. Der Homeserver schickt jetzt die selben Nutzdaten an den Wechselrichter wie mein PC. Ich bekomme auch eine Antwort aber nun kommen wir zum eigentlichen Problem.
Der Wechselrichter gibt Integer und Float Werte aus.
Integer:
Wenn ich demHS die zwei Bytes direkt als Wert in ein Kommunikationsobjekt schreiben lasse bekomme ich falsche Werte. Der Wechselrichter sendet wie im Beispielbild Hex 00 5B also eigentlich die Zahl 91. Der HS hat eine andere Byte Reihenfolge und mach daraus Hex 5B 00 also die Zahl 23296. Dies zu lösen war nicht schwierig in dem ich die Bytes separat auslese und mit einer kleinen Logik richtig zusammenrechne.
Float:
Hier wird es schon Schwieriger, denn auch hier werden die Bytes nicht passend für den HS übertragen. Ich lese die Bytes also wieder einzeln aus und zerlege diese in der Logik in einzelne Bits um daraus eine Gleitkommazahl zu berechen. Problem dabei ist, dass die Logik nicht gerade klein ist und ich es platztechnisch nicht schaffe die Mantisse komplett auszurechnen.
Ich habe auch schon verschiedene Wandlerbausteine ausprobiert, bin dabei aber auf keine Lösung gestoßen.
Denke ich vielleicht einfach zu kompliziert oder gibt es keinen Baustein, welcher eine 4Byte Hexzahl in einen Float-Wert umwandelt?
Für Vorschläge wäre ich sehr dankbar.
Viele Grüße
Markus
ich möchte gerne den Wechselrichter per Modbus TCP auslesen um die aktuellen Werte im QC darstellen zu können.
Ich habe mir den Simply Modbus TCP Client besorgt und habe die gewünschten Register mit dem PC ausgelesen. In diesem Programm werden schön die Nutzdaten des IP-Telegramms dargestellt.
Im Gira Homeserver habe ich eine IP-Geräte Abfrage angelegt. Der Homeserver schickt jetzt die selben Nutzdaten an den Wechselrichter wie mein PC. Ich bekomme auch eine Antwort aber nun kommen wir zum eigentlichen Problem.
Der Wechselrichter gibt Integer und Float Werte aus.
Integer:
Wenn ich demHS die zwei Bytes direkt als Wert in ein Kommunikationsobjekt schreiben lasse bekomme ich falsche Werte. Der Wechselrichter sendet wie im Beispielbild Hex 00 5B also eigentlich die Zahl 91. Der HS hat eine andere Byte Reihenfolge und mach daraus Hex 5B 00 also die Zahl 23296. Dies zu lösen war nicht schwierig in dem ich die Bytes separat auslese und mit einer kleinen Logik richtig zusammenrechne.
Float:
Hier wird es schon Schwieriger, denn auch hier werden die Bytes nicht passend für den HS übertragen. Ich lese die Bytes also wieder einzeln aus und zerlege diese in der Logik in einzelne Bits um daraus eine Gleitkommazahl zu berechen. Problem dabei ist, dass die Logik nicht gerade klein ist und ich es platztechnisch nicht schaffe die Mantisse komplett auszurechnen.
Ich habe auch schon verschiedene Wandlerbausteine ausprobiert, bin dabei aber auf keine Lösung gestoßen.
Denke ich vielleicht einfach zu kompliziert oder gibt es keinen Baustein, welcher eine 4Byte Hexzahl in einen Float-Wert umwandelt?
Für Vorschläge wäre ich sehr dankbar.
Viele Grüße
Markus
Kommentar