Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Fertige Vorlagen gerne in der neuen Kategorie „Modbus Vorlagen“ posten. :wink:

Viele Grüße
Stephan

2 „Gefällt mir“

jepp, sind aber aktuell nur die Basisdaten, die ich benötige ohne Batterie etc.

Hallo @paresy, gibt es hierzu schon was neues. Aktuell habe ich ein Gerät wo fast 200 Adressen abgefragt werden. Damit dies schnell geht, lese ich die mit einem ESP32 aus (als kompletten Block) und zerlege die danach. 200 einzelne Aufrufe per Modbus dauern da zu lange.

Nein, ich denke auch nicht, dass dies Feature es zur 7.0 schaffen wird, da wir kurz vor dem RC stehen. Das ist aber etwas, dass ich recht weit oben auf meiner Prio Liste für die 7.1 habe.

Da aber die neue ModBus Instanz kompatibel mit dem Datenblöcke Auslesen Feature ist (im ModBus Splitter) kannst du schon jetzt manuell Datenblöcke definieren und die optimierte Abfrage nutzen. Hast du das schon probiert? Dann kannst du mir auch schon mal eine Einschätzung geben, wie dies in deinem Use-Case performt - denn besser als das kann ich es auch nicht machen :slight_smile:

paresy

Das mit den Datenblöcken habe ich zwar gesehen, aber noch nicht eingesetzt bzw. verstanden.
Werden diese Blöcke dann in dem Intervall gelesen und die Instanz schaut nach ob die angegebene Adresse darin enthalten ist?

Genau so. In der Instanz setzt du das Intervall auf 0 und liest quasi ganze Blöcke im Splitter und die Instanzen dahinter aktualisieren sich wenn ihre Adressen in dem Block drin sind.

paresy

1 „Gefällt mir“

oha, sehr spannend!

bis jetzt läuft das bei mir über ein zusammengeschustertes PHP-Script.
Nativ wäre mir lieber. Nächstes ToDo für nen langen Herbstabend demnächst :grin:

1 „Gefällt mir“

Hallo @paresy
funktioniert sehr gut und ist blitzschnell. Gerade mit dem neuen „Modbusinterface“ ist das wirklich klasse.
Vielen Dank für den Tipp.
Gruß

1 „Gefällt mir“

Hallo @paresy
was mir gerade aufgefallen ist, mit den Datenblöcken funktionieren die virtuellen Adressen nicht mehr. Wahrscheinlich weil der Intervall ja auf 0 gesetzt ist.

PS: Ja daran liegt es. Wenn ich den Intervall wieder von 0 auf x setze geht es wieder.
Die virtuellen Adressen bekommen das also nicht mit, wenn der Datenblock aktualisiert wird.

Stimmt. Ich schau mal wie ich das clever lösen kann.

paresy

1 „Gefällt mir“

Hallo Zusammen,

ich versuche die MODBUS Kommunikation meiner ABB Terra Wallbox auf die neue Anbindung umzustellen. Das klappt soweit ganz gut, bis auf zwei Probleme:

Problem 1)
Fehlermeldungen im Log:

24.10.2023, 11:38:04 | TimerPool            | ModBus Gerät (UpdateTimer): Set charging current limit: Reading is not enabled for this instance

Laut der ABB Modbus Dokumentation sind die beiden Register zum setzen des Ladestroms und zum starten und stoppen der Ladesession „Write Only“, d.h. ich kann die Register nur beschreiben aber nicht davon lesen. (Siehe Seite 8 unten)
Terra.AC.Modbus.Documentation_20210903.pdf (459,4 KB)
Daher habe ich in der Instanzkonfiguration für diese Register Funktion(lesen) auf „keine“ gesetzt, woran sich die neue ModBus Anbindung zu stören scheint.

Punkt 2)
Ich würde natürlich gerne weitere virtuelle Variablen definieren. Zum einen z.B. die codierte Serien Nummer in einer String Variablen ausgeben oder z.B. anhand der Spannungen L1, L2, L3 eine Bool Variable „Einphasig“ auf true oder false setzen, wenn die Box nur an L1 eine Spannung einliegen hat.
Ich verstehe hier aber nicht genau was ich an PHP Code bei den Virtuellen Adressen alles nutzen kann. Kann ich z.B. ein Script mit Variablen verwenden und dann am Ende das Ergebnis mit
RETURN($myResult);
in die virtuelle Variable schreiben?

Ich z.B. folgende Zeile für eine virtuelle String Variable verwendet.

return("Test " .  $VALUES["A_3_3_23296"]);

Ich hätte jetzt erwartet, dass die String Variable den Wert „Test 4398046511104“ enthält, wenn der Ident A_3_3_23396 eine Float Variable mit dem Wert 4398046511104 ist.
Die String Variable bleibt aber leer und wird auch nicht aktualisiert. :thinking:

Ich habe mal meine Vorlage angehangen.
modbus.json (11,7 KB)

Nachtrag: Wenn ich die „Write Only“ Modbus Register entferne kommt es nicht mehr zu der Fehlermeldung „Reading is not enabled for this instance“ und dann geht es auch weiter mit der Script Verarbeitung wodurch Problem 2 hinfällig wird.

D.h. wenn ich folgende funktionierende „Modbus Address Instanz“

als „Modbus Gerät Instanz“ umsetze,

kommt die Fehlermeldung „Reading is not enabled for this instance“ und durch diesen Fehler scheint dann die Scriptverarbeitung der virtuellen Variablen nicht mehr aufgerufen zu werden.

Das müsste doch ein Bug sein? Könnt Ihr das mal verifizieren?

Das ist definitiv ein Fehler (den ich eigentlich dachte korrigiert zu haben). Ich schaue noch mal. Danke!

Bzgl. deiner Frage: Schau mal bitte in meine Betrag 2. Du musst ein assoziatives Array zurückgeben. D.h. return [„A_xxxxx“ => 456578];

paresy

1 „Gefällt mir“

Ich hatte das Problem schon beim Lese Script. Es lag daran, dass die Scripte durch den „Reading is not enabled…“ Fehler gar nicht erst abgearbeitet wurden.

Fix für das WriteOnly Problem kommt zum RC2.

paresy

1 „Gefällt mir“

Hi,

ich bekomme aktuell für das schalten meiner Dimplex Wärmepumpe über Modbus folgenden Fehler.

grafik

Das sind die Settings dazu:

Bin auf IP-Symcon 7.0, Windows (amd64), 24.10.2023, ec6a478afeb9
richimaint

Im Prinzip musst du dich nur an die Meldung halten und die Funktion ersetzen. Dann ist die Meldung weg.

paresy

Und wo ersetzen?

richimaint

Gefunden, im Action Script zur Variable.

richiamint

1 „Gefällt mir“

Warum hast du überhaupt ein Aktions-Skript?
Das sollte auch ohne gehen.
Michael