Loxone Config – Modbus synchron lesen – Teil 2

Irgendwie hat es mir das Thema Modbus angetan. Jedenfalls wollte ich noch eine weitere Lösung zum synchronen Modbus TCP lesen aus der Loxone Config heraus vorstellen. In Teil1 bin ich bereits auf eine „kleine“ Lösung eingegangen. In diesem Beispiel stelle ich ein Stück picoC Code zur Verfügung, mit dem man blockweise Modbus-Werte auslesen kann. Das ist ressourcenschonender als Einzelabfragen und konsistenter.

UPDATE: Dieser Artikel ist inzwischen veraltet. Aktuellste Version von Funktionsbeschreibung, Doku und Sourcen gibts hier.

Generell bleiben wir bei dem Beispiel von Teil 1: Das Auslesen der Registeradresse ab 40206 eines Solaredge Wechselrichters. Das Auslesen von z.B. 10 Registern ab 40206 würde dann so aussehen:

Offensichtlich liegt die Limitierung des Lesens von Modbus-Registern also nur noch an Loxone Config selbst. Es gibt maximal 13 Ausgabekanäle. Wer mehr benötigt muss eben eine Restmenge von Werten an andere Bausteine übergeben und dort weiterrechnen und ausgeben (ist im dritten Teil dieser Reihe beschrieben).

Wie kommt man also nun zum blockweisen Lesen?

  1. Einen Programm-Baustein in Loxone Config einfügen (Achtung: derzeit werden seitens Loxone max. 8 solcher Bausteine unterstützt).
  2. Ausgäbekanäle anzeigen lassen.
  3. Den zur Verfügung gestellten picoC Code in den Baustein kopieren. Nachtrag: Ich würde empfehlen Teil3 ebenfalls zu lesen. Dort gibts noch Hinweise zum Thema Stabilität und Reboots bei Deployments.

Die notwendige Konfiguration im Code beschreibe ich nachstehend. Das sind lediglich zu Beginn des Codes ein paar Zeilen.

Nun also zur Konfiguration

Hierzu findet sich zu Beginn des Code folgender Abschnitt:Ich denke, die Konfiguration ist hier selbsterklärend…

Wir haben also

  1. IP und Port
  2. Startadresse in Hex
  3. Anzahl der zu lesenden Ergebnisse, unabhängig vom Datentypen. Die notwendige Anzahl an zu lesenden Bytes berechnet das Programm selbst.
  4. Und dann noch den Datentypen. Die gelesenen Bytes werden allesamt mit demselben Datentyp interpretiert. Welche Datentypen relevant sind, steht in der Herstellerdoku zu den Registern. Für Teil2 dieser Reihe gibt es hier nun also folgende Typen. Weitere finden sich dann in Teil3.

Das sollte in den meisten Fällen ausreichen.

Für die Startadresse gibt diverse Rechner im Netz, die von Dezimal nach Hex und umgekehrt rechnen können. Zu beachten ist, dass in der Folge der abgefragten Modbus-Register nur unterstützte Adressbereiche sind. Es kann sonst zu Modbus-Fehlern kommen, wenn das Gerät nicht fehlertolerant entworfen wurde…

Das wars dann auch schon. Im Normalfall sollten nun nach einem „Speichern auf dem Server“ die Werte auf den Ausgabekanälen angezeigt werden.

Noch ein Hinweis: Die Modbus-Devices unterstützen häufig nur einen einzigen Client/Session für den Zugriff. Wenn nun also Loxone zugreift und wir in picoC mit einer weiteren Verbindung ebenfalls zugreifen, dann kann das potentiell zwischendurch für Millisekunden kurz für rote Lämpchen sorgen. Das ist Loxone unabhängig und würde mit einer beliebigen anderen zweiten Verbindung ebenso passieren. Das fängt sich wieder und stellt zumindest in meinem Umfeld kein Problem dar. Hier also in der Doku des Herstellers nachschauen und selbst beobachten.

Wer damit gar nicht leben kann/möchte, muss sich entscheiden, wie er die Modbus Werte seines Devices auslesen möchte: Über Loxone Bordmittel oder im Block mittels der vorgestellten Lösung. Ich selbst mache bei mir beides. Und weil es nicht reicht, gibts hier noch einen Teil 3 zum synchronen Auslesen von bis zu 26 Werten. Besser konfigurierbar, stabiler durch bessere Infoausgaben…, Unterstützung für weitere Datentypen wie Strings, Coils etc.

Da es doch einiges an Arbeit gekostet hat, die ganzen Dinge zusammenzutragen, wollte ich andere nicht in die gleichen Probleme laufen lassen. Viel Spaß damit!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert