Modbus Master| Mit
diesem Funktionsbaustein wird die Modbus Master Funktion
konfiguriert. Die Konfiguration ist hierbei in Slaves und
Register unterteilt. Mit Slave ist hierbei eine Modbus ID gemeint,
mehrere Slaves können auch dieselbe Schnittstelle verwenden. Sind
mehrere Schnittstellen konfiguriert, werden diese der Reihe nach
ausgelesen. Der Funktionsbaustein ist auf 128 Registerzeilen begrenzt, werden mehr Register benötigt, können diese auf mehrere Funktionsbausteine aufgeteilt werden. Jede Registerzeile belegt so viele Ausgänge, wie unter „Anzahl Block lesen" eingestellt sind. Wichtig: An den Funktionsbausteinen müssen immer Variablen verknüpft werden. Beim Erzeugen der Variablen geschieht dies automatisch. Bereits integrierte Geräte-Vorlagen sowie Tipps zur Fehlersuche finden sich am Ende dieser Seite, siehe Vorlagen und Fehlersuche bei RTU (RS485). |
Parameter
|
|
| Deaktivieren | Mit diesem Parameter wird der Baustein deaktiviert und die Register nicht mehr abgefragt. Dies kann zur Diagnose verwendet werden um bestimmte Register vorübergehend auszublenden. |
| Modbus ID |
Modbus ID (Slave Adresse) des Gerätes, Wertebereich 0 bis 255. |
| Telegrammabstand | Minimaler Telegrammabstand. Laut Modbus Spezifikation ist der minimale Telegrammabstand 3.5 Zeichen und mindestens 1.75 ms, dies ist für manche Geräte zu kurz, dieser Parameter wird zum Standard Abstand addiert. |
| Timeout |
Zeit die auf eine Antwort des Slaves
gewartet wird bis ein Fehler erkannt wird. |
| Protokoll |
Auswahl des Protokolls
|
| Schnittstelle |
Bei Auswahl des Protokolls Modbus RTU
werden hier die Schnittstellenparameter eingestellt. Wichtig: Über
USB Umsetzer dürfen nur nicht kritische Komponenten verwendet
werden. Wichtig: Wenn mehrere Modbus Slaves auf einer Schnittstelle betrieben werden, müssen alle Funktionsbausteine die selben Schnittstellenparameter haben. |
| IP
Adresse, Port |
Bei Auswahl des Protokolls Modbus TCP
werden hier die IP Adresse und der Port eingestellt, Standardport
für Modbus ist 502. |
| Register Adressen | Hier kann eingestellt werden ob die Register Adressen bei 0 oder 1 beginnen. Bei „Beginn mit 1" wird von jeder eingetragenen Registeradresse 1 abgezogen, bevor das Telegramm gesendet wird. Damit können die Adressen so eingetragen werden, wie sie in der Beschreibung des Gerätes stehen. |
| Register | Öffnet die Liste der Register. Dieselbe Liste wird auch mit einem Rechtsklick auf den Baustein geöffnet. Die Parameter der Liste sind weiter unten beschrieben. |
| Verbindungen zusammenfassen | Nur bei TCP. Mit dieser Option werden Geräte mit der selben IP Adresse und Portnummer über eine gemeinsame Verbindung ausgelesen. Standardmäßig werden alle Funktionsbausteine über separate Verbindungen ausgelesen. Das Zusammenfassen von Verbindungen kann bei Geräten notwendig sein die nur eine begrenzte Anzahl an gleichzeitigen Verbindungen zulassen. |
Parameter Register
|
|
| Die
Liste der Register wird über den Parameter „Register" oder mit einem
Rechtsklick auf den Baustein geöffnet. In der Werkzeugleiste der Liste
können Zeilen hinzugefügt, gelöscht, verschoben und dupliziert werden,
mit „Vorlage" wird die Konfiguration eines bereits integrierten Gerätes
geladen und mit „Ex-Import" die Liste als Datei exportiert oder
importiert (siehe unten). Ist „Register Hex" angewählt, werden die
Registeradressen hexadezimal angezeigt und eingegeben. |
|
| Aktiv |
Ist diese Option nicht angewählt, wird das Register nicht abgefragt und nicht geschrieben. |
| Name |
Bezeichnung des Registers. Der Name wird beim automatischen Erzeugen
der Variablen übernommen. |
| Register Adresse |
Registeradresse laut Beschreibung des Slaves. Ob die Zählung bei 0
oder bei 1 beginnt, wird mit dem Parameter „Register Adressen"
eingestellt. |
| Länge |
Länge der Variable in Bit. Ein Modbus Register ist immer
16 Bit (2 Byte) groß. Die Länge legt daher fest, wie viele
aufeinanderfolgende Register zu einem Wert zusammengefasst
werden:
Bei Bitbefehlen (Coils, discrete Inputs) wird diese Angabe ignoriert. Beim Schreiben von Registern werden nur 16 und 32 Bit übertragen. |
| Anzahl Block lesen |
Anzahl an Variablen welche mit einer
Abfrage gelesen werden sollen (1 bis 32). Die Variablen müssen im Slave
lückenlos aufeinander folgen und alle dieselbe Länge haben; jede
Variable belegt einen eigenen Ausgang des Bausteins. Gelesen werden
damit „Anzahl Block lesen" mal „Länge" Register in einem Telegramm. Beim Schreiben von Registern muss die Anzahl 1 sein. Bei Bitbefehlen (Coils, discrete Inputs) ist dies die Anzahl der Coils, beim Funktionscode 15 wird der ganze Block mit einem Telegramm geschrieben. |
| Datentyp Register |
Auswahl zwischen Integer und Float
entsprechend der Beschreibung des Slaves. |
| Vorzeichen |
Nur bei Datentyp Integer: Auswahl
zwischen unsigned (vorzeichenlos) und signed (vorzeichenbehaftet).
Bei 48 und 64 Bit wird immer vorzeichenbehaftet gelesen. |
| Datentyp Variable |
EIS-Typ der verknüpften Variable.
Standardmäßig EIS 9 (Fließkomma 4 Byte). Siehe
allgemeine Parameter für eine
Beschreibung der EIS-Typen. |
| Byte order |
|
| Funktionscode |
Modbus Funktionscode entsprechend der Beschreibung des Slaves:
01 Read Coils, 02 Read Discrete Input, 03 Read Holding Register,
04 Read Input Register, 05 Write single Coil, 06 Write single
Register, 15 Write multiple Coils, 16 Write multiple Register. |
| Variable aktualisieren bei |
|
| Schreiben bei |
Nur für Schreibbefehle:
|
| Faktor |
Skalierungsfaktor zwischen Register und
verknüpfter Variable. Beim Lesen wird der Registerwert mit
dem Faktor multipliziert, beim Schreiben wird der
Variablenwert durch den Faktor dividiert. Dadurch kann
derselbe Faktor in beide Richtungen verwendet werden,
beispielsweise rechnet 0.001 beim Lesen W in kW um
und beim Schreiben kW zurück in W. Standardwert: 1. |
| Offset |
Offset wird beim Lesen nach der Multiplikation mit dem Faktor
addiert, beispielsweise um einen Temperatur- oder Zählerwert zu
korrigieren. Hinweis: Anders als der Faktor wirkt der
Offset nicht symmetrisch in beide Richtungen, er wird auch beim
Schreiben addiert. Bei Schreibregistern sollte der Offset daher
0 bleiben. |
| Intervall |
Intervall in dem das Register ausgelesen wird. Für Schreibbefehle nur wenn „Schreiben bei" auf zyklisch eingestellt ist. Beim Wert 0 wird das Register so schnell abgefragt wie es die Schnittstelle zulässt. |
CSV Import / ExportÜber die Schaltfläche Ex-Import in der Werkzeugleiste der Registerliste können alle Konfigurationsdaten
exportiert und wieder importiert werden. Das Format ist Tab-getrennt (TSV),
UTF-8 kodiert. Zeilen, die mit Dateiaufbau:
# Protokoll<TAB>IP-Adresse<TAB>Port<TAB>Knoten-ID<TAB>Register-Offset<TAB>Serielle-Schnittstelle<TAB>Timeout(ms)<TAB>Telegramm-Wartezeit(ms)<TAB>TCP-kombinieren
{9 Verbindungswerte}
# Aktiv<TAB>Name<TAB>Register-Adresse<TAB>Laenge<TAB>Anzahl-Block<TAB>Datentyp-Register<TAB>Vorzeichen<TAB>Datentyp-Variable<TAB>Byte-Order<TAB>Funktionscode<TAB>Variable-aktualisieren<TAB>Schreiben-bei<TAB>Faktor<TAB>Offset<TAB>Intervall
{15 Felder pro Registerzeile}
...
|
|
Verbindungsparameter (Zeile 2, 9 Felder) |
|
| Protokoll | 0 = Modbus RTU (RS485) 1 = Modbus TCP |
| IP-Adresse | IP-Adresse des Slaves (nur TCP), z. B. 192.168.1.100. Bei RTU leer lassen. |
| Port | TCP-Port (nur TCP), Standard 502. Bei RTU leer lassen. |
| Knoten-ID | Modbus-Slave-ID, Wertebereich 0–255. |
| Register-Offset | 0 = Registeradresse beginnt bei 0 1 = Registeradresse beginnt bei 1 |
| Serielle-Schnittstelle | Schnittstellenparameter-String (nur RTU), z. B. COM1,9600,8,N,1. Bei TCP leer lassen. |
| Timeout(ms) | Wartezeit auf Antwort in Millisekunden, z. B. 1000. |
| Telegramm-Wartezeit(ms) | Zusätzliche Pause zwischen Telegrammen in Millisekunden, Standard 0. |
| TCP-kombinieren | 0 = separate Verbindungen 1 = Verbindungen mit gleicher IP zusammenfassen |
Registerparameter (ab Zeile 4, 15 Felder pro Zeile) |
|
| Aktiv | 0 = Register deaktiviert 1 = Register aktiv |
| Name | Bezeichnung des Registers. Kein Tabulator erlaubt. |
| Register-Adresse | Modbus-Registeradresse, Wertebereich 0–65535. |
| Laenge | Länge der Variablen: 1 = 16 Bit (1 Register)
2 = 32 Bit (2 Register) 3 = 64 Bit (4 Register) |
| Anzahl-Block | Anzahl Variablen, die mit einer Abfrage gelesen werden (1–32). Bei Schreibbefehlen muss der Wert 1 sein. |
| Datentyp-Register | 0 = Integer 1 = Float |
| Vorzeichen | 0 = Unsigned 1 = Signed (nur bei Datentyp Integer) |
| Datentyp-Variable |
Index des Variablentyps:0 EIS 0: Konstante1 EIS 1: Bit schalten (Bit)2 EIS 2: Dimmen (4 Bit)3 EIS 3: Zeit (3 Byte)4 EIS 4: Datum (3 Byte)5 EIS 5: Fließkomma (2 Byte)6 EIS 6: Relativ Wert 0–100% (1 Byte)7 EIS 7: Antriebsteuerung (Bit)8 EIS 8: Zwangsteuerung/Priorität (2 Bit)9 EIS 9: Fließkomma (4 Byte) – häufigste Verwendung10 EIS 10: Zählerwert 16 Bit (2 Byte)11 EIS 11: Zählerwert 32 Bit (4 Byte)12 EIS 12: Zugangskontrolle (4 Byte)13 EIS 13: ASCII Zeichen (1 Byte)14 EIS 14: Zählerwert (1 Byte)15 EIS 15: Zeichenkette (14/255 Byte)16 EIS 16: Zählerwert (8 Byte)17 EIS 17: Fließkomma (8 Byte)
|
| Byte-Order |
0 = Big Endian (ABCD) – Standard1 = Mid-Little Endian (CDAB)2 = Little Endian (DCBA)
|
| Funktionscode |
Echter Modbus-Funktionscode (nicht der Index):1 = Read Coils2 = Read Discrete Input3 = Read Holding Register4 = Read Input Register5 = Write Single Coil6 = Write Single Register15 = Write Multiple Coils16 = Write Multiple Registers
|
| Variable-aktualisieren | 0 = nur bei Änderung 1 = immer (auch ohne Wertänderung) |
| Schreiben-bei | 0 = Änderung 1 = Start + Änderung 2 = Zyklisch |
| Faktor | Skalierungsfaktor (Dezimalzahl), Standard 1. Beim Lesen wird der Registerwert mit dem Faktor multipliziert, beim Schreiben dividiert — derselbe Wert kann daher in beide Richtungen verwendet werden. Beispiel: 0.001 um beim Lesen Wh in kWh umzurechnen (und beim Schreiben umgekehrt). |
| Offset | Additionswert zum Registerwert (Dezimalzahl), Standard 0. |
| Intervall | Abfrageintervall in Millisekunden. Bei Schreibbefehlen nur relevant wenn Schreiben-bei = Zyklisch. |
Beispiel-CSV (Fronius Wechselrichter, Modbus TCP)# Protokoll IP-Adresse Port Knoten-ID Register-Offset Serielle-Schnittstelle Timeout(ms) Telegramm-Wartezeit(ms) TCP-kombinieren 1 192.168.1.100 502 1 0 1000 0 0 # Aktiv Name Register-Adresse Laenge Anzahl-Block Datentyp-Register Vorzeichen Datentyp-Variable Byte-Order Funktionscode Variable-aktualisieren Schreiben-bei Faktor Offset Intervall 1 AC Wirkleistung [W] 40092 2 1 1 0 9 0 3 0 0 1 0 5000 1 AC Lifetime Energy [kWh] 40102 2 1 1 0 9 0 3 0 0 0.001 0 60000 1 DC Spannung [V] 40282 2 1 1 0 9 0 3 0 0 1 0 5000 |
|
Tipp: Fehlersuche bei RTU (RS485)
|
|
| Fehlermeldungen im Log | Im Runtime-Log (Diagnose → Log) tauchen bei
Kommunikationsproblemen vor allem zwei Meldungen auf: RTU READ ERROR – es kam gar keine oder keine vollständige Antwort innerhalb des eingestellten Timeouts. Das deutet auf ein Problem auf der Busleitung selbst hin (Verkabelung, Schnittstelleneinstellungen, fehlender Abschlusswiderstand) oder darauf, dass unter dieser Modbus ID gar kein Gerät antwortet. RTU CRC ERROR – es kommt zwar eine Antwort, die Prüfsumme stimmt aber nicht. Das Telegramm wurde auf dem Weg verfälscht, meist durch Störungen, eine zu hohe Baudrate für die Leitungslänge oder mehrere Geräte, die gleichzeitig senden. Davon zu unterscheiden sind RTU ERROR-Meldungen: Hier antwortet das Gerät korrekt, lehnt die Anfrage aber ab. Häufige Meldungen und Ursachen sind:
|
| A und B vertauscht | Die häufigste Ursache für „RTU READ ERROR" bei neu verkabelten Geräten. Da A und B bei Herstellern nicht einheitlich beschriftet sind (A/B, +/-, D+/D-), hilft am schnellsten der Tausch der beiden Adern auf einem Gerät zum Test. Bringt das keine Besserung, liegt die Ursache woanders. |
| Schnittstelleneinstellungen |
Baudrate, Datenbits, Parität und Stopbits (Parameter
„Schnittstelle") müssen exakt mit den Einstellungen des Gerätes
übereinstimmen, sonst kommt entweder gar keine oder nur
unbrauchbare Antwort an (führt ebenfalls zu CRC- oder
Timeout-Fehlern). Diese Werte stehen in der Anleitung des Slaves
bzw. an dessen Bedienfeld/DIP-Schaltern – im Zweifel dort
nachsehen statt zu raten. Werden mehrere Slaves auf derselben Schnittstelle betrieben, müssen alle Funktionsbausteine dieselben Schnittstellenparameter verwenden. |
| Abschlusswiderstand | Bei längeren Leitungen (Faustregel: ab einigen zehn Metern, abhängig von Baudrate und Störeinflüssen) braucht der RS485-Bus an beiden physikalischen Enden einen Abschlusswiderstand (üblich 120 Ohm), sonst kommt es zu Reflexionen auf der Leitung. Das äußert sich meist als sporadischer CRC- oder Timeout-Fehler, der bei kurzen Testleitungen im Labor oft gar nicht auftritt und erst auf der langen Leitung in der Anlage sichtbar wird. |
| Doppelte Modbus ID | Haben zwei Geräte am selben Bus dieselbe Modbus ID, antworten bei einer Abfrage beide gleichzeitig – die Telegramme überlagern sich auf der Leitung und ergeben einen CRC-Fehler oder eine unbrauchbare Antwort. Das tritt oft erst sporadisch auf, wenn beide Geräte zufällig zeitgleich antworten, und wirkt dadurch wie ein instabiles Kabel. Alle Modbus IDs eines Busses auf Eindeutigkeit prüfen (auch bei Geräten, die gerade nicht im Fokus stehen). |
| Vorgehen bei der Fehlersuche |
|
Tipp: Fehlersuche bei Modbus TCP
|
|
| Fehlermeldungen im Log | Im Runtime-Log (Diagnose → Log) geben die
Meldungen einen ersten Hinweis auf die Fehlerursache:
|
| Erreichbarkeit und Port prüfen | IP-Adresse und Port mit der Gerätekonfiguration vergleichen; der Standardport ist 502. Prüfen, ob Steuerung und Gerät im selben Netzwerk liegen und ob IP-Adresse, Subnetzmaske und gegebenenfalls Gateway richtig eingestellt sind. Das Gerät sollte von einem Rechner im selben Netzwerk erreichbar sein. Eine erfolgreiche Ping-Antwort beweist jedoch nur die Netzwerkverbindung – Modbus TCP kann trotzdem deaktiviert oder durch eine Firewall gesperrt sein. |
| Modbus TCP am Gerät | Bei vielen Geräten muss Modbus TCP zuerst aktiviert werden. Manche Geräte erlauben zusätzlich nur bestimmte Gegenstellen oder benötigen trotz TCP eine bestimmte Modbus ID (Unit ID). Bei TCP-zu-RTU-Gateways bestimmt diese ID, welcher RTU-Slave angesprochen wird. Die zulässige ID in der Anleitung des Gerätes oder Gateways prüfen. |
| Verbindungen und Auslastung | Manche Geräte lassen nur eine oder wenige gleichzeitige TCP-Verbindungen zu. Werden mehrere Modbus-Master-Bausteine mit derselben IP-Adresse verwendet, die Option Verbindungen zusammenfassen aktivieren. Bei sporadischen Fehlern zusätzlich Abfrageintervall oder Timeout erhöhen und die Anzahl gleichzeitig abgefragter Register verringern. |
| Vorgehen bei der Fehlersuche |
|
Vorlagen
|
|
|
Folgende Geräte sind bereits als Vorlage integriert. Weitere können
manuell konfiguriert werden. Das Vorlagen-Menü ist nach Gerätegruppen
unterteilt; der oberste Eintrag Suchen öffnet ein Menü mit
Suchfeld, das alle Vorlagen unabhängig von der Gruppe findet. Wechselrichter / Akku: Fronius Symo Gen 24 Float (TCP) Fronius Symo Gen 24 Float Batterie (TCP) Fronius Symo Gen 24 Float Smart Meter (TCP) Fronius Verto Float (TCP) Fronius Verto Float Batterie (TCP) Huawei (TCP) Huawei Batterie (TCP) Huawei EMMA (TCP) Kostal PIKO IQ / PLENTICORE (TCP) Solaredge (TCP) Solaredge (TCP) + Smartmeter Solax (TCP) + Smartmeter Solax EMS1000 (TCP) Solax EMS1000 Wechselrichter/Batterie (TCP) Solax EMS1000 Steuerung TRENE (TCP) SOFAR BTS-5K 10-10 (RTU) SOFAR BTS-5K 10-10 Batterie (RTU) Sungrow SH15/20/25T (TCP) Wattsonic Gen3 (RTU) Wattsonic Gen3 Batterie (RTU) Wenergy Akku Star289 (TCP) Wallbox: Wallbox KEBA KeContact P30 (TCP) Wallbox KEBA KeContact P40 / P40 Pro (TCP) Wallbox ABB Terra AC (TCP) Wallbox ABB Terra AC (RTU) Wallbox Siemens VersiCharge (TCP) Wallbox HAGER Witty Plus (TCP) Wallbox Alpitronic 150 (TCP) Wärmepumpe / Kessel: Ochsner (RTU) Fröhling Lamdatronic 3200 (RTU) OEKOBOILER (RTU) KNV (TCP) NIBE S-Serie (TCP) Templari Klima: Samsung MIM-B19N (RTU) Energiezähler: Energiezähler SDM 630 (RTU) Energiezähler DS100 (RTU) EMU Professional II (RTU) SINEAX AMx000 (TCP) Janitza UMG 604 (TCP) Wetterstation: Wetterstation Thies (RTU) Allgemein: Victron Cerbo (TCP) SMARTFOX Pro (TCP) |
KEBA Ladestationen
|
|
| Unterstützte Geräte |
|
| Verbindung | Protokoll TCP, Port 502, Modbus ID 255 und Beginn der Registeradresse mit 0. Die Ladestation kennt nur die Funktionscodes 3 (Lesen) und 6 (Schreiben, ein Register). Je Anfrage wird immer nur ein Register übertragen, die Anzahl Register je Block bleibt daher auf 1. Jeder Lesewert ist 4 Byte groß, die Länge ist also 32 Bit; geschrieben wird mit 16 Bit. KEBA empfiehlt einen Abstand von mehr als 0,5 s zwischen zwei Leseanfragen und mehr als 5 s zwischen zwei Schreibvorgängen. |
| Schreibregister nicht lesen | Die Register ab 5000 sind reine Schreibregister. Wird ein solches Register mit Funktionscode 3 abgefragt, antwortet die Ladestation nicht und im Protokoll erscheint fortlaufend TCP ERROR READ 1 ... TIMEOUT. In der Vorlage sind diese Register deshalb mit Funktionscode 6 und Schreiben bei Änderung hinterlegt; das Abfrageintervall hat dort keine Bedeutung. |
| Register lesen (Funktionscode 3) |
|
| Register schreiben (Funktionscode 6) |
|
| Notbetrieb (Failsafe) | Damit die Ladestation bei einem Ausfall der Verbindung nicht mit dem zuletzt vorgegebenen Strom weiterlädt, lässt sich ein Notbetrieb einstellen. Scharf wird er erst mit einer Notüberwachungszeit größer 0 in Register 5018; der Strom aus Register 5016 allein genügt nicht. Jedes empfangene Modbus-Telegramm setzt die Zeit zurück – auch ein Lesezugriff. Bleibt es aus, schaltet die Ladestation auf den Notstrom. Zum Abschalten wird 5018 auf 0 gesetzt. In den Vorlagen sind diese Register angelegt, aber nicht aktiv. |
| Bekannte Abweichung | Beim P40 mit einem Softwarestand unter 1.2.1 melden die Register 1036 und 1502 den Wert in Wh statt in 0,1 Wh. In diesem Fall ist der Faktor der beiden Register zu verzehnfachen. |