|
<< Click to Display Table of Contents >> Navigation: Komponenten > Treiber > Modbus Master |
Der Modbus-Treiber ist eine unsichtbare Server-Komponente mit der Möglichkeit Modbus Gateways anzubinden.
Spezifikation Modbus
Das Modbus-Protokoll wurde ursprünglich von der Firma Modicon (heute Schneider Electric) für den Datenverkehr mit ihren Controllern entwickelt. Daten wurden in Form von 16-Bit-Registern (Integer-Format) oder als Status-Informationen in Form von Datenbytes übertragen. Im Laufe der Zeit wurde das Protokoll kontinuierlich erweitert. Modbus TCP/UDP ist eine weitere Kommunikationsart.
Das Modbus-Protokoll ist ein Single-Master Protokoll. Dieser Master steuert die gesamte Übertragung und überwacht eventuell auftretende Timeouts (keine Antwort vom adressierten Gerät). Die angeschlossenen Geräte dürfen nur nach Anforderung durch den Master Telegramme versenden.
Modbus TCP/UDP ist Teil der Norm IEC 61158. Eine Spezifikation findet sich unter: http://www.modbus.org.
Unterstützt werden:
Modbus RTU (Serial), ASCII (Serial),
TCP, RTU over TCP, ASCII over TCP und UDP-IP (auch Secure).
Hinweis: Beim Auslesen mehrerer Geräte kommt es zu einer 100ms Zeitverzögerung zwischen 2er Geräten.
Datenpunkte der Komponente
Name |
Typ |
Funktion |
|---|---|---|
Abfrage zyklisch - Autostart |
Bidirektional |
Hier wird ausgeben ob die zyklische Abfrage aktiv ist. Über ein Aus-Signal wird die zyklische Abfrage deaktiviert. Mit einem Ein-Signal aktiviert. |
Abfrage zyklisch - Pause [s] |
Bidirektional |
Hier wird die eingestellte Pausenzeit zwischen 2 Abfragen ausgegeben. Wird ein ganzzahliger Wert auf den Datenpunkt gesendet ändert sich die Pausenzeit entsprechend. Dies ist z.B. mit einer Touch-Werteingabe möglich. |
Abfrage einmalig |
Eingang |
Über ein Ein-Signal an diesem Eingang wird eine einmalige Abfrage der Werte ausgelöst. Jedes weiteres Ein-Signal löst eine weitere Abfrage aus. |
Aktualisierung wird durchgeführt |
Ausgang |
Für die Dauer der Aktualisierung wird an diesem Ausgang ein An-Signal ausgegeben. |
Diagnose [Daten] |
Ausgang |
Ausgabe der Rohdaten für jedes ausgelesene Register. |
Diagnose [Text] |
Ausgang |
Hier werden Fehlertexte ausgegeben. Diese können z.B. mit der Komponente "Protokollfenster" angezeigt werden. Verbunden mit dem Eingang [Signal] des Protokollfensters werden dort die Diagnoseinformationen angezeigt. Sind mehrere Treiber vorhanden, können die Anzeigen über den Debugger umgeschaltet werden. |
Dynamisch |
Ordner |
Im Ordner Dynamisch werden die Unterordner für Einheit, Gerätestatus, Wert und Wert (Faktor) angelegt. Einheit: Text aus dem Kanaleditor "Einheit" Gerätestatus: Je Geräte-ID gibt es 3 Datenpunkte. Gerät aktiv für das (de)aktivieren der Geräteabfrage, Gerätestatus für die Ausgabe, ob das Gerät auslesbar ist (true) und Geräte Warnung, welches true ausgibt, wenn die Abfrage misslungen ist. Wert: Datenpunkt für den angelegten Kanal ohne Verrechnung mit dem Faktor Wert (Faktor): Datenpunkt für den angelegten Kanal mit Verrechnung des Faktors |
Erweiterte Diagnose |
Eingang |
Über ein An-Signal an diesem Eingang wird die Diagnoseausgabe erweitert. Verbunden mit dem Eingang [Signal] des Protokollfensters werden dort die Diagnoseinformationen angezeigt. |
Fehlerhafte Geräte |
Ausgang |
Ausgabe der Geräte-ID als Text, die nicht ausgelesen werden können. |
Mindestens ein Wert außerhalb des Bereiches |
Ausgang |
Wurden im Kanaleditor Grenzen für einen Wert eingetragen und ist dieser unter-/überschritten, wird an diesem Datenpunkt ein AN-Signal ausgegeben. Eine entsprechende Information wird auch am Diagnose Ausgang ausgegeben. |
Ping Status |
Ausgang |
Bei einer IP-Verbindung kann die Verbindung des Gerätes über einen Ping Check zusätzlich geprüft werden. Ein Ein-Signal zeigt, ob eine Verbindung besteht. |
Schreibzyklus wird durchgeführt |
Ausgang |
Während dem Schreibzyklus wird ein An-Signal ausgegeben. |
Schreibzykluszeit [ms] |
Ausgang |
Ausgabe der Zeit in Millisekunden, wie lange das Schreiben gedauert hat. |
Senden einmalig |
Eingang |
Über ein Ein-Signal an diesem Eingang wird ein einmaliges Senden der Werte ausgelöst. Jedes weiteres Ein-Signal löst ein weiteres Senden aus. |
Senden zyklisch - Autostart |
Bidirektional |
Hier wird ausgeben ob das zyklische Senden aktiv ist. Über ein Aus-Signal wird das zyklische Senden deaktiviert. Mit einem Ein-Signal aktiviert. |
Senden zyklisch - Pause [s] |
Bidirektional |
Hier wird die eingestellte Pausenzeit zwischen 2 Sendetelegrammen ausgegeben. Wird ein ganzzahliger Wert auf den Datenpunkt gesendet ändert sich die Pausenzeit entsprechend. Dies ist z.B. mit einer Touch-Werteingabe möglich. |
Treiber An/Aus |
Bidirektional |
Über ein Ein-Signal wird der Treiber aktiviert. Der voreingestellte Zustand der Treibers aus den Eigenschaften wird beim Start der Simulation bzw. des Servers ausgegeben. |
Treiber Gateway - BACnet Server |
Bidirektional |
Bidirektionale Kommunikationsschnittstelle zwischen Modbus Master und BACnet Server. Siehe Treiber Gateway. |
Treiber Gateway - Dateilogger |
Ausgang |
Dieser Datenpunkt kann mit dem Dateilogger verbunden werden. Dadurch werden alle Daten aus dem Modbus direkt an Dateilogger übertragen. |
Treiber Gateway - MQTT Client |
Bidirektional |
Bidirektionale Kommunikationsschnittstelle zwischen Modbus Master und MQTT Client oder MQTT Broker. Siehe Treiber Gateway. Für mehrere Modbus-Master Anbindungen, wird empfohlen einen eigenen MQTT-Client zu verwenden. |
Update-Zeit [ms] |
Ausgang |
Gibt die Zeit für einen Geräteupdate in Millisekunden aus. |
Verbindung - COM Port |
Bidirektional |
Hier kann zur Laufzeit der COM-Port des Treibers geändert werden. |
Verbindung - IP Adresse |
Bidirektional |
Hier kann zur Laufzeit die IP-Adresse des Treibers geändert werden. |
Verbindungsstatus |
Ausgang |
Bei erfolgreicher Verbindung zum Modbus-Gateway wird ein Ein-Signal ausgegeben, Aus bei Fehler, Undefiniert wenn der Treiber ausgeschaltet ist. |
Eigenschaften der Komponente
Name |
Standard |
Funktion |
|---|---|---|
|
Hier werden die importierten bzw. manuell angelegten Kanäle aufgelistet. Diese erscheinen dann als Unterordner im Datenpunkt-Ordner Dynamisch. Die Beschreibung des Modbus Kanaleditors ist im Unterkapitel. |
|
Serial ... |
Hier wird die Verbindungsart zum Modbus Gerät eingestellt (Com-Port oder IP-Adresse) |
|
... |
Hier werden die Modbus Verbindungsoptionen eingestellt |
|
Treiber An/Aus |
|
Definiert, ob der Treiber bei Projektstart automatisch aktiviert wird. |
- ModBus TCP Wago 750 Anbindung
Grundsätzlich ist es möglich, Daten aus einem Modbus Master, an einen Modbus-Slave weiter zu geben.
Hierbei ist es wichtig, dass die beiden Modbus-Linien sauber getrennt werden.
Hier ein Schema, welches das verdeutlichen soll:

Wird im EisBaer ein Modbus-Master verwendet, sind die Einstellungen und Register der Anleitung aus dem Modbus Slave zu übernehmen.
Wird im EisBaer ein Modbus Slave verwendet, muss geprüft werden, was der externe Modbus Master kann und welche weiteren Slave Geräte auf der Modbus-Linie vorhanden sind.
Es empfiehlt sich, dass die Geräte ID und auch die Registeradressen im EisBaer-Slave eindeutig eingestellt werden.
Damit ist sichergestellt, dass keine 2 Master auf einen Slave zugreifen können. Außerdem hilft es, die Slave Komponenten besser zu unterscheiden.
In der oben dargestellten Grafik entspricht der schwarze Balken der Trennung der beiden Systeme. Die Datenpunkte der Treiber-Komponenten werden 1:1 verknüpft.
Hinweis noch zur TCP-Verbindung: in manchen Fällen wird der Modbus Port 502 durch die Firewall geblockt.
Ein einfaches Master/Slave-Protokoll (heute auch Client/Server): der Master fragt aktiv ab, der Slave — das Feldgerät — antwortet.
Transport & Adressierung
- RTU und ASCII laufen über serielle Leitung (RS-485, selten RS-232), TCP und UDP über Ethernet/IP (Port 502) — der Inhalt ist identisch, nur der Transport unterscheidet sich.
- Modbus/TCP Security: TCP-Verbindungen lassen sich optional TLS-verschlüsselt aufbauen.
- Unit-ID: bei RTU die eindeutige Geräteadresse 1–247, bei TCP oft 1 oder 255.
- Register = 16 Bit (ein „Word"). Größere Werte über mehrere Register: 32-Bit (Int32/Float32) = 2, 64-Bit = 4 Register.
- Byte-/Word-Order: ABCD ist Modbus-Standard (Big-Endian); CDAB (Word-Swap) ist bei vielen SPS für Floats üblich. Falsche Reihenfolge → unsinnige Werte. Der Decoder hilft, die richtige zu finden.
Die vier Datenbereiche
- Coils (FC01): einzelne, schreibbare Bits — z. B. Relais.
- Discrete Inputs (FC02): einzelne, nur lesbare Bits — z. B. Schalterzustände.
- Holding Register (FC03): 16-Bit-Register, lesen & schreiben — Sollwerte, Parameter.
- Input Register (FC04): 16-Bit-Register, nur lesen — Messwerte.
Funktionscodes
Funktionscode |
Bezeichnung |
Typ |
Beschreibung |
|---|---|---|---|
FC01 |
Read Coils |
Lesen |
Mehrere Coils (schreibbare Bits) lesen. |
FC02 |
Read Discrete Inputs |
Lesen |
Mehrere Eingangs-Bits lesen (nur lesbar). |
FC03 |
Read Holding Registers |
Lesen |
Holding-Register lesen — der häufigste Lesecode. |
FC04 |
Read Input Registers |
Lesen |
Input-Register lesen (Messwerte). |
FC05 |
Write Single Coil |
Schreiben |
Ein einzelnes Bit setzen oder löschen. |
FC06 |
Write Single Register |
Schreiben |
Ein einzelnes 16-Bit-Register schreiben. |
FC15 |
Write Multiple Coils |
Schreiben |
Mehrere Coils in einem Telegramm schreiben. |
FC16 |
Write Multiple Registers |
Schreiben |
Mehrere Register in einem Telegramm — z. B. ein 32-Bit-Wert über 2 Register. |
FC23 |
Read/Write Multiple |
Beides |
Lesen und Schreiben in einem Telegramm (spart einen Umlauf). |
FC43 |
Read Device Identification |
Lesen |
Hersteller, Produktname und Version als Klartext auslesen. |