Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Das ist korrekt. Wenn der User es jedoch explizit anstößt - so wie von mir gewünscht - dann liegt es ja in seiner Hoheit.

Ich hatte mal eine Funktion vorbereitet, die hat das erledigt, aber dann kamen die virtuellen Adressen hinzu. Die machen es komplizierter.:grinning_face:

Hallo,

ich habe ein ModBus-Gerät angelegt und mehrere Variablen (Register) darunter.
Manche nur lesen, manche nur schreiben. Soweit scheint alles zu funktionieren.
Jetzt möchte ich gerne aus einem Skript heraus einen Wert schreiben und komme nicht dahinter wie das funktioniert…
Kann mir bitte jemand auf die Sprünge helfen

RequestAction auf die Variable :slight_smile:

paresy

:face_with_spiral_eyes:

DANKE! Da hätte ich aber auch selbst draufkommen können

2 „Gefällt mir“

Jetzt hab ich noch Register in meinem Gerät hinzugefügt die nur zum Schreiben sind.
Warum werden die nicht als Variable unterhalb des Gerätes angelegt und nicht unter „Befehl testen“ angeboten?

Magst du mal versuchen diesen Adressen einen Ident zu geben?

paresy

Ah, dann funktioniert das!
War mir nicht klar

DANKE!

Ich möchte gerne meine SMA Batterie zum Laden aus dem Netz bewegen. Dazu gibt es verschiedene ModBus Werte, die man schreiben muss. Soweit alles klar.

Aber: die Adressen sind write-only. Wenn ich die nun in der ModBus Geräteinstanz anlege, dann werden keine Variablen angelegt, da sie ja nur schreibbar sind. Wie schreibe ich die Werte aber nun? Ich habe auch keine Funktion gefunden :thinking:

Es geht um die letzten sechs Adressen. Irgendetwas übersehe ich bestimmt.

EDIT: Die Lösung war super versteckt :slight_smile:

Ich habe den gleichen Wunsch, und soweit ich in Erfahrung gebracht habe soll man zyklisch 2 Register
schreiben

1x 40149 auf Wert 802
1x 40151 auf den gewünschten Wert in Watt, aber mit negativen Vorzeichen.

Das hört sich nicht gut an.

Zumindest für meinen Wechselrichter SBS 6.0-10 gelten wohl laut Doku die oben genannten Register.

1 „Gefällt mir“

Ich habe gerade die Doku offen, ich glaube du hast Recht.
wie hast du das jetzt genau gelöst ?

Mein Vorstellung ist, die Werte über RequestAction wie folgt zu setzen.

Battery Mode
1 #normal

40236 writemultiple	uint32	2424 	OpMode (2424 = Voreinstellung)
40793 writemultiple	uint32	0	Minimale Batterieladeleistung
40795 writemultiple	uint32	6000 	Maximale Batterieladeleistung
40797 writemultiple	uint32	0 	Minimale Batterieentladeleistung
40799 writemultiple	uint32	6000 	Maximale Batterieentladeleistung
40801 writemultiple	uint32	0 	Sollwert der Netzaustauschleistung

2 #hold
40236 writemultiple	uint32	2424 	OpMode (2424 = Voreinstellung) 
40793 writemultiple	uint32	0	Minimale Batterieladeleistung
40795 writemultiple	uint32	0	Maximale Batterieladeleistung
40797 writemultiple	uint32	0	Minimale Batterieentladeleistung
40799 writemultiple	uint32	0	Maximale Batterieentladeleistung
40801 writemultiple	uint32	0	Sollwert der Netzaustauschleistung

3 #charge
40236 writemultiple	uint32	2289 	OpMode (2289 = Batterie laden) 
40793 writemultiple	uint32	6000	Minimale Batterieladeleistung
40795 writemultiple	uint32	6000	Maximale Batterieladeleistung
40797 writemultiple	uint32	0	Minimale Batterieentladeleistung
40799 writemultiple	uint32	0	Maximale Batterieentladeleistung
40801 writemultiple	uint32	0	Sollwert der Netzaustauschleistung

Das ist wohl auch der Weg von evcc.

Edit: ich habe noch etwas experimentiert und die hier genannten Werte funktionieren :smiling_face:

@paresy Gibt es zu dem Thema „virtuelle Adressen aktualisieren nicht wenn man nur Datenblöcke läd“ schon etwas neues? Hatte gehofft das ginge inzwischen, aber musste leider feststellen das es wohl noch nicht angepasst wurde. Wechselrichter mit sunspec int+SF zB kann man so mit dem standard modbus device nicht zuverlässig lesen; damit das klappt müssten in einer „atomischen operation“ die beiden register für value & scalefactor gelesen werden (geht mit datenblöcken), und dann direkt auf die virtuelle adresse kombiniert werden, damit man sich zuverlässig an das update event von der einen kombinierten variable subscriben kann :slight_smile:

Da hänge ich mich auch gleich dran… ich hatte vor ein paar Monaten auch nochmals nachgefragt, aber bisher keine Antwort erhalten…

@paresy wie sieht es hier nun aus, wann wird es nun gefixt sein? Das Thema ist nun wohl seit > 1 Jahr bekannt und bisher gab meines Wissens keine Rückmeldung hierzu, dass das Problem gelöst wurde (es hiess mal, dass es in der 7.2 gefixt sei… aber ich glaube, das war wohl nicht so…)

Danke

Wir haben das Problem für die 8.2 auf der Roadmap. Dort müssen wir auch für die Darstellungen an das ModBus Modul ran und würden die Datenblöcke dann ebenfalls auf ModBus Geräte Instanz ziehen, um genau dieses Problem zu lösen.

paresy

Danke für die Rückmeldung… vermutlich dann erst nächstes Jahr, richtig? Schade, dass es so lange dauert (seit 2024), den Fehler zu fixen…

Es wird bei uns eher als „Missing Feature“ getrackt. Ich würde noch mit einer 8.2 die das Feature enthält dieses Jahr rechnen :slight_smile:

paresy

Wird es da auch etwas bzgl. der Darstellungen zu 8.2 geben? Momentan muss man noch für Wertebereiche etc. Profile erstellen, was es etwas unhandlich macht.
Eine Möglichkeit, auch Darstellungen zu exportieren wäre super.

1 „Gefällt mir“

Ich starte gerade mit meinen ersten ModBus-Implementierungen und bin direkt über dieses Problem gestolpert. Die Einzelabfragen der Register in der ModBus-Geräteinstanz funktionieren bei mir nicht so gut. Dauert nach meinem Geschmack verhältnismäßig lange, bringt Last auf den Bus und müllt mir auf Dauer das Meldungsfenster mit Fehlern zu, weil es häufiger zu Timeouts einzelner Register kommt.

Daher wollte ich direkt auf Blockabfragen setzen. Dabei bin ich dann darüber gesolpert, dass zwar die Variablen aktualisiert werden, aber die virtuellen Variablen auf der Strecke bleiben.

Wobei das mit dem Aktualisieren der Variablen auch noch nicht so richtig klappt, ich aber nicht verstehe wieso. Wenn ich beispielsweise ein paar zusammenhängende Register, die auch in einem virtuellen Gerät als Variablen angelegt sind, über den Splitter periodisch (z.B. alle 5 Sekunden) als Block abfrage, dann sehe ich im Debug des Splitters die regelmäßigen Abfragen. Wenn ich mir dann aber die Variablen in der Geräte-Instanz ansehe, aktualisieren (nicht ändern) sich einige in dem 5-Sekunden-Rythmus, andere hingegen ziemlich genau jede Minute. Ich verstehe aber nicht wo diese Minute her kommt. Das scheint ganz unterschiedlich zu sein und es gibt keine anderen Abfragen über den Splitter. Auch das ModBus-Gerät selbst fragt nichts ab (Intervall 0). Schalte ich die Blockabfrage wieder aus, wird im Gerät auch gar nichts mehr aktualisiert. Also müssen die minütlichen Aktualisierungen einiger Variablen irgendwie mit den 5-sekündlichen Blockabfragen zusammenhängen. Aber wieso dann eine Minute und nicht 5 Sekunden?