nach langem Warten habe ich meinen E3DC S10X geliefert bekommen und dieser wurde in Betrieb genommen.
Nun bekommt mein Timberwolf eine weitere Aufgabe, über ModBus TCP die Daten aus dem E3/DC auszulesen.
Ich habe dafür erstmal mit dem Profil von jockele gestartet, die Verbindung hat damit sofort und einfach funktioniert. Da meine Anlage aber größer ist und ich auch die Daten von dem Zusatzwechselrichter auslesen möchte, musste ich hier tiefer einsteigen und dafür ein eigenes Profil erstellen, welches ich später gerne hier teilen möchte.
E3DC hat Ende Juli eine neue Version der ModBus-Schnittstelle herausgebracht, es ist nun die Version 2.20.
Mir liegt leider nur die Dokumentation zu einer älteren Version vor, aber es haben sich einige Änderungen ergeben sowie die Menge der Daten, die Abgerufen werden können wurde nach meinem Vergleich deutlich erweitert.
Das Profil habe ich soweit schon gut fertig gestellt und getestet, aber ich habe ein Problem mit den Datenwerten zu den Registern mit Int32 und Länge 2.
Hier hat sich E3DC etwas ausgedacht, wie Werte mit dem Int32 zu berechenen sind.
Da ich nicht weiß, ob ich die Anleitung als Anhang hier hochladen darf, da ich diese nur aus dem geschützten Kundenportal habe, hier der Entsprechende Ausschnitt dazu:
Mit dieser Art, die Werte bei Int32 im ModBus zu dekodieren sind, weiß ich nichts anzufangen.4.2 Modbus Int32 Register mit Länge 2
• Jedes Register kann mit unterschiedlichen Daten gefüllt werden. Es ist erforderlich, den
entsprechenden Datentyp einzustellen.
• Ein Register kann zu klein sein:
– Dann wird die Länge auf zwei gesetzt.
Aus zwei Registern (uint16) wird also ein Wert (uint32).
– Die Information wird aber in 2 Registern übertragen.
• I. d. R. werden in der Modbus-Software die Register einfach als (uint32) abgefragt. Sollte diese
Umrechnung nicht per Software möglich sein muss die Berechnung manuell erfolgen.
Beispielrechnung:
Netzbezug = 400 Watt
40074(+/-Offset) = 400 (uint16)
40075(+/-Offset) = 0 (uint16)
[Register 40075] < 32768 è Netzbezug
Netzbezug = [Register 40075] * 65536 + [Register 40074]
= 0 * 65536 + 400 = 400
Netzeinspeisung = 0
Netzeinspeisung = 600 Watt
40074(+/-Offset) = 65535 (uint16)
40075(+/-Offset) = 64936 (uint16)
[Register 40075] >= 32768 è Netzeinspeisung
Netzbezug = 0
Netzeinspeisung = 4294967296 - [Register 40075] * 65536 - [Register 40074]
= 4294967296 – 65535 * 65536 – 64936 = 600
Netzleistung (mit positiven oder negativen Werten)
Netzleistung = Netzbezug - Netzeinspeisung
Wenn ich den wert mit 16 Bit auslese (wie auch im Profil von jockele), stimmt er mit den Wert aus der Web-Schnittstelle überein, aber nur, so lange die Länge in dem Feld ausreicht.
Sobald die Leistung (es betrifft bei mir immer nur die Leistungsangaben) ansteigt, ist der Wert bei 16 Bit nicht vollständig und bei 32 Bit komplett falsch.
Wie kann ich das von E3DC vorgegebene Format uint32 in in den Profileinstellungen des Timberwolf einstellen?
Ich habe bei ModBus keine Möglichkeit dazu gefunden oder habe ich diese nur übersehen?
Oder gibt es eine andere Möglichkeit?
Die letzte Alternative die mir einfallen würde wäre, beide Register einzeln zu importieren und dann im Logik-Editor zu berechnen. Aber dann ist der Vorteil, das Profil für die Community zur Verfügung stellen zu können, deutlich eingeschränkt und es wäre eine lange Anleitung dazu nötig.
Viele Grüße
Jürgen