Verbesserte ModBus Anbindung (IP-Symcon 7.0)

Liebe Community,

eine der letzten neuen Funktionen der 7.0 ist mit dem heutigen Update gelandet.

Eine lang gewünschte Funktion für ModBus war, dass die jeweiligen Coils/Register in einer Liste editierbar sind und direkt als Variablen unterhalb einer Instanz liegen. Dies ist mit dem dem heutigen Update möglich. Zusätzlich können diese Listen als sogenannten ModBus Vorlagen exportiert werden (inkl. der Profile), sodass diese in der Community geteilt werden können. Diese verbesserte ModBus Anbindung macht einige der speziellen „Module Store“ Module für ModBus in Zukunft obsolet und vereinfacht das Auslesen und Einrichten von ModBus Gerät (insbesondere bei vielen gleichen Geräten) um ein vielfaches.

Kurze Zusammenfassung der Funktionen:

  • Listenbasierte Konfiguration, die sich sehr an die tabellarische Darstellung von ModBus Protokolllisten orientiert
  • Import/Export von Vorlagen, die geteilt werden können
  • Virtuelle Adressen, um z.B. einen Durchschnitt von mehreren Registern direkt zu berechnen und in einer Variable abzulegen. Diese virtuellen Adressen sind ebenfalls Bestandteil der Vorlage
  • Profile werden in die Vorlagen exportiert/importiert

Zusätzlich haben wir die Datentypen umbenannt und konsistenter an aktuelle Dokumentation angepasst, um die Einrichtung zu vereinfachen. Diese Verbesserung ist auch in den Einzel-Instanzen verfügbar.

Wir werden im ersten Schritt Vorlagen für Mennekes, ALFEN und ABL Wallboxen erstellen und mit euch teilen. Eine Kategorie zum Teilen&Tauschen von Vorlagen findet ihr hier:

Aktuell fragt die Instanz die Coils/Register noch einzeln ab. Dies wollen wir mit einem zukünftigen Update intelligenter gestalten und automatisch passende Blöcke bilden.

PS: Dieses Feature nutzt einige der neuen PHP-SDK Funktionen wie z.B. dynamische Formulare für Listen und Downloads für Buttons, die auch für euch verfügbar sind :slight_smile:

Exportierte Beispieldatei:
modbus_demo.json (1,7 KB)

Listendarstellung aller Adressen

Verbesserter Dialog zum Hinzufügen von Adressen

Virtuelle Adressen für Spezialberechnungen

Skripte zum Lesen/Schreiben von virtuellen Adressen

5 „Gefällt mir“

Mini-Doku für Virtuelle Adressen:

Neue Instanz mit aktivierter „Ident“ Spalte:

Beim Lese-Skript sind in $VALUES alle Werte mit den jeweiligen Idents verfügbar. Der neue Wert, der in der Variable der virtuellen Adresse laden soll, wird einfach mit return zurückgegeben.

return ($VALUES["A_3_3_23296"] + $VALUES["A_3_3_23298"] + $VALUES["A_3_3_23300"])/3;

Beim Schreibt-Skript wird ein Assoziatives Array als return erwartet, welches alle Ident enthält, in die geschrieben werden soll. $VALUE enthält den neuen Wert, der per RequestAction angefordert wurde.

return [
    "A_3_3_23296" => $VALUE
];

Hi,

Das hört sich sehr gut an. Wird es auch einen vorlagen"store" geben? Sich vorlagen irgendwo raussuchen zu müssen könnte sonst langwierig und fehleranfällig werden…

Viele grüsse

Definitiv ist das unser langfristiger Plan. Wie genau haben wir noch nicht ausgearbeitet - aber ja, langfristig soll das ganze irgendwie mit dem Module Store verknüpft werden können, damit man die Vorlagen besser/schneller finden kann.

paresy

1 „Gefällt mir“

Auf das Feature freue ich mich :slight_smile:

Nach dem Update bekomme ich folgende Meldungen von bestehenden Instanzen:

Die Werte werden aber weiterhin aktualisiert. Muss ich mir Sorgen machen :slight_smile: ?

Bin mir unsicher. Wurden die Variablen evtl. neu erstellt!?

paresy

Die Instanzen und Variablen sind alt:

Hmm. Spannend. Eigentlich sollten die Werte mit Int64 noch als „Float“ erstellt werden.

Sind bei dir alle INT64 Werte als Integer abgebildet?

paresy

Sorry, das Bild vom Objektbaum war falsch.

Es sind korrekt Float Variablen.

EDIT: Und sie werden seit dem Update nicht mehr aktualisiert.

Seit dem Update bekomme ich keine Temperaturen mehr von meiner Wago per Modbus

Sind die Int64?

paresy

Gute Frage, unter Codesys heißen sie REAL. In Symcon schon Ewigkeiten Float32. Das hat auch Jahrelang funktioniert, bis zum Update. :roll_eyes:

Die Temperaturen sind alle 0,0 obwohl die Wago sauber die Daten übermittelt.

Bei INT64 scheint etwas nicht zu stimmen.

Wenn ich ein Element anlegen will, dann bietet er mir nur Integer Profile an.

Das fixe ich zum nächsten Update. Das mit dem Auslesen von INT64/UINT64 ebenfalls.

Update kommt in ca. ner Stunde.

paresy

4 „Gefällt mir“

Wenn ich ein Element mit UINT32 anlege

dann legt er eine Ineger Variable an. Wenn ich dann aber ein Profil („Watt“) zuordnen will, dann bietet er mir korrekterweise die Integer Profile zu Auswahl an.

Bei anschließenden Speichern kommt aber der Fehler

und er ordnet das Profil auch nicht der Variablen zu.

In der Liste bleibt es aber bestehen

Fix ist jetzt online!

@bumaas Passiert das Problem immer noch? Kann es sein dass ein vorheriger Listen Eintrag die Fehlermeldung verursacht?

paresy

Dann noch ein anderes Thema:

Wenn man bei einem Element im nachhinein den Typ ändert oder eine Rechenregel einfügt, so dass sich der Variablentyp ändert, dann wird die betroffene Variable gelöscht und eine neue angelegt.

Das kann wie ich an anderer Stelle schon mehrfach „schmerzhaft“ erfahren durfte durchaus unangenehm sein. Bitte hier eine bessere Lösung finden. :pray:

1 „Gefällt mir“

Super Sache, dann kann ich langsam mal die ModBus Themen angehen die hier noch brach liegen!
Merci Seppm

Ja, passiert immer noch. Die Instanz hat nur ein Element.

Ich kann das leider nicht nachstellen. Wenn ich UINT32 auswähle, dann bekomme ich nur Integer Profile angezeigt und er übernimmt das korrekt. Hast du evtl. noch was bei den virtuellen Adressen drin, wo ein falschen Profile drin sein könnte?

paresy