Hallo zusammen,
ich spiele gerade mit einem in Docker simulierten Master/Slave-System herum und dabei ist mir folgendes Problem aufgefallen, zu dem ich eine Fragen hätte.
Sobald auf dem Slave die ESS deaktiviert wird, springt der Soc auf dem Master auf 65535. Also der max. Wert eines UINT16 Registers. Wenn man die Modbus Schnittstelle ausliest ist hier auch zu sehen, dass alle Bits in diesem Register auf 1 stehen. Gleiches gilt für den Channel GridMode bei der Edge-2-Edge-ESS. Dieses Problem tritt nur bei Integer-Werten auf, da diese keinen NaN-Wert haben. Float-Werte werden korrekt auf NaN gesetzt und auf dem Master die entsprechenden Channel dann mit Null beschrieben. Daher wird z.B. die ActivePower der Edge-2-Edge als Null angezeigt.
Meine Vermutung ist, dass das generell für alle Komponenten mit Integer Channels gilt, die einer Modbus-Schnittstelle zugeordnet sind, aber gleichzeitig deaktiviert sind.
Hier einige Screenshots zu der Situation:
Nun zu meiner Frage:
Würde es nicht Sinn machen, den UINT16 Wert 65535 in der OpenEMS Modbus Schnittstelle generell als ungültig anzusehen? Wenn der Master ein UINT16 Register mit 65535 erkennt, beschreibt er den Channel dann mit Null.
Ich habe das bereits testweise in der Klasse AbstractEdge2Edge mit der Funktion ElementToChannelConverter.SET_NULL_FOR_DEFAULT() umsetzen können. Ich habe aber noch keinen Pull Request erstellt, da ich gerne hier nochmal über dieses Thema sprechen würde.
Viele Grüße
Mein Testaufbau:
- Master System
- Simulator NRCMeterActing: Simulierter Verbrauch
- Simulator GridMetrReacting: Simuliertes Grid Meter, was auf Verbrauch reagiert
- Bridge Modbus/TCP: Verbindung zur Slave Edge
- Edge-2-Edge ESS: Slave Edge
- Controller ESS Balancing
- Slave System:
- Simulator EssSymmetric Reacting
- Controller Api Modbus/TCP Read-Write: Schnittstelle für Master


