Modbus Chaos Solaredge Wechselrichter

Hallo zusammen,

ich muss das Thema hier leider nochmal neu aufrollen.

Folgende Komponenten von Solaredge werden über Modbus gesteuert:

  • Solaredge SE5000H HD-WAVE
  • SolarEdge STOREDGE INTERFACE SESTI-S4
  • LG Resu 10H Speicher

Problem 1:
Der WR und der Speicher brauchen im Modbus Gateway (Splitterinstanz) die Einstellung "Little-Endian (LSW/MSW). Der Storedge hingegen Big-Endian. Das bringt natürlich direkt mehrere Probleme mit sich.
Wenn ich jetzt 2 Splitterinstanzen mit unterschiedlichen Einstellungen erstelle wird das Log mit Fehlermeldungen geflutet. Erstelle ich eine zweite IO Instanz sind die Fehler weg aber ich verliere eine der beiden Verbindungen zum WR weil dieser nur eine Verbindung zulässt. Das Problem ist testweise mit einem zwischengeschalteten Modbus-Proxy gelöst.

Problem 2:
Das schreiben einiger 32/64 Bit Register funktioniert mit Symcon einfach nicht.

Beispiel:
Die gelb markierten Register.
Die Adressen müssen vom Hex-Wert noch umgerechnet werden. E00E ist z.B. 57358.
Doku ab Seite 17:
Power Control Open Protocol for SolarEdge Inverters.pdf (1,1 MB)

Eingerichtet in Symcon sieht es dann so aus:


Es werden auch erfolgreich plausible Werte gelesen wie z.B. 5400 Watt.
Ich kann aber keine Werte schreiben. Es kommt teilweise die Meldung „illegal response lenght“ oder keine Meldung und die Variable hat nach dem Schalten den Wert 2.4923494486481196e-41.

Jetzt kommt das Spannende: Mit Homeassistent und der Erweiterung Solaredge Modbus lassen sich alle Register problemlos lesen und vor allem auch schalten.

Leider sind die problematischen Register genau die die am wichtigsten für mich sind und mit denen die komplette Steuerung des Speichers erfolgt.

Falls hier jemand noch Anregungen oder Ideen hat…
Problem 2 nervt einfach abartig. :skull_and_crossbones:

Viele Grüße
Stephan

Zu 1) Aktuell evaluiere ich, wie ich für die neuen ModBus Device Instanzen ggf. eine Option einbinden kann, in der man die Kodierung vom Splitter überschreiben kann. Das würde das Problem ja geschickt lösen.

Zu 2) Kannst du mal testen, ob du korrekt schreiben kannst, wenn du die Kodierung im Splitter umdrehst? Es wäre mega abgedreht, dass man in der einen Kodierung lesen und einer anderen Schreiben muss, aber zumindest hätten wir dann das Problem isoliert.

paresy

jetzt bekomme ich nur noch den Fehler illegal response lenght. Egal was ich im Splitter einstelle.

Kennst du zufällig ein Modbus Tool für Windows oder Mac mit dem man die Schreibvorgänge mal außerhalb von Symcon testen kann?

ModBus Poll wäre so der Industriestandard.

paresy

Knoten im Kopf…

Hab jetzt mal alle Sachen gelöscht die was mit dem Register zutun haben . Dann habe ich eine neue Instanz „Modbus Register“ erstellt. Als Splitter den mit ByteSwap ausgewählt.

Der gelesene Wert (2000) ist korrekt.
Wenn ich den Wert über Homeassistant ändere wir er korrekt aktualisiert.

in einem Windows Modbus Tool wird der Wert korrekt gelesen (allerdings mit der Einstellung 32bit float und nicht 32bit sw float)

Screenshot 2023-10-12 121020

Jetzt schreibe ich in Symcon einen Wert (4200). Nach mehrmaligen Fehlermeldungen (illegal …) wird als Wert 2,0042426586151123 angezeigt

Im Windows-Tool wird 2,0042 angezeigt. Ändere ich die Display option auf 32bit sw float wird der korrekte Wert (4200) angezeigt. Ändere ich in Symcon den Splitter auf den OHNE ByteSwap wird dort auch 4200 angezeigt.

Wo ist der Fehler? Berücksichtigt Symcon den Byteswap nur beim lesen und nicht beim schreiben? Ich kappier es nicht…

Viele Grüße
Stephan

Ich konnte das Problem nachstellen. Irgendwo beim Schreiben ist noch ein Fehler :confused:

paresy

Super :smiley: dann kann ich ja mich schon mal als Fehlerquelle ausschließen.

Scheinbar bin ich der erste der mit IPS float32 werte auch schreiben will? :thinking:

Scheinbar bist du der erste der in Little Endian (mit Byte Swap) in 32 Bit/64 Bit schreiben will. Es war auf ganzer Linie kaputt seit dem 7.0 Umbau :wink:

paresy

Unknown
ich bin jedenfalls der Typ links im Bild :rofl:

2 „Gefällt mir“