Wiesemann & Theis GmbH

Netzwerk-, Sensor- & Schnittstellentechnik für Industrie, Office & IT

Hintergrundwissen:

Modbus-TCP

Standardprotokoll für Automatisierungstechnik



Ursprünglich wurde Modbus als serieller Feldbus von der Firma Modicon (heute Schneider Electric) als Kommunikationsweg zwischen deren Steuerungen entwickelt.


Der klare und einfache Aufbau des Modbus-Protokolls hat dazu geführt, dass auch andere Hersteller Modbus in ihre Geräte integriert haben. Damit hat Modbus sich zu einem bis heute etablierten Standard entwickelt.


Das Master/Slave-Prinzip

Modbus arbeitet nach dem Master/Slave-Prinzip. Das bedeutet, dass es mindestens einen Master und mindestens einen Slave gibt.

Modbus-Slaves sind z. B. SPS-Steuerungen, Web-IOs oder andere dezentrale IO-Baugruppen für digitale und analoge Signale.

Der Master ist immer der Kommunikationspartner, der die Initiative ergreift, also eine Anfrage bzw. den gewünschten Funktionsaufruf an einen Slave sendet. Jeder Slave hat eine eindeutige Adresse. Der Slave ist im Normalfall rein passiv und antwortet nur dann, wenn er gezielt mit seiner Adresse angesprochen wird.

Modbus-TCP Kommunikation

Master/Slave - Client/Server

Mit der zunehmenden Bedeutung von TCP/IP-Ethernet als Übertragungsmöglichkeit wurde das Modbus-Protokoll nahezu 1:1 von serieller Datenübertragung auf TCP adaptiert.

Modbus-TCP arbeitet nach dem Client/Server-Prinzip, wobei der Master den Part des Clients übernimmt und die Slaves als Server agieren. Der Modbus-Master muss also zu jedem Modbus-Slave eine explizite TCP-Verbindung aufbauen. Diese Verbindung bleibt für die Dauer der Kommunikation bestehen. Es wird nicht für jede Anfrage eine neue Verbindung aufgebaut.

Der standardisierte TCP-Server-Port für Modbus-TCP ist 502.

Register und Variablen

Speicheradressen oder auch Registern durch den Modbus-Master, also den Client.

Man kann sich das so vorstellen, als hätte der Modbus-Slave, also der Server, einen Schrank mit sehr vielen Schubfächern, die alle durchnummeriert sind. Den Schubfächern sind Funktionen zugeteilt.

Will der Modbus-Master bestimmte Informationen abrufen, gibt er in seiner Anfrage die Nummer des entsprechenden Fachs an und bekommt vom Modbus-Slave den Inhalt zurück.

Wenn der Modbus-Master beim Slave etwas auslösen möchte, z. B. einen Schaltausgang bedienen, legt er die notwendige Information in das Fach mit der entsprechenden Nummer.

Wie eingangs beschrieben erfolgt das tatsächlich über entsprechende Speicheradressen (Registeradressen). Es stehen maximal 65536 Adressen zur Verfügung. Welche Funktion sich hinter welcher festgelegt - ist also nicht einheitlich vorgegeben.

In aller Regel ist der Speicher getrennt nach Funktionen in Bereiche aufgeteilt.

Bezeichnung Datentyp Zugriff Beschreibung
Discrete 1-Bit nur lesen digitaler Input bzw. Schaltzustand
Coil 1-Bit lesen/schreiben digitaler Output bzw. Schaltzustand
Input Register 16-Bit nur lesen Wert zwischen 0 und 65535 bzw. Analogwert oder Zählwert
Holding Register 16-Bit lesen/schreiben Wert zwischen 0 und 65535 bzw. Analogwert oder Zählwert


Function Codes

Über Function Codes wird innerhalb des Modbus-Protokolls angegeben, auf welchen Datentyp wie zugegriffen werden soll. Hier eine Liste der gängigsten Function Codes:

FC (dez.) FC (hex.) Beschreibung
01 0x01

Read Coils
Lesen digitaler Outputs bzw. Schaltausgänge

02 0x02

Read Discrete Inputs
Lesen digitaler Inputs bzw. Schaltzugänge

03 0x03

Read Holding Registers
Lesen von 16-Bit (Output-)Registern

04 0x04

Read Input Registers
Lesen von 16-Bit (Input-)Registern

05 0x05

Write Single Coil
Schreiben eines einzelnen Outputs bzw. Schaltausgang

06 0x06

Write Single Register
Schreiben eines einzelnen 16-Bit Registers

15 0x0F

Write Multiple Coils
Schreiben mehrerer Outputs bzw. Schaltausgänge

16 0x10

Write Multiple Registers
Schreiben mehrerer 16-Bit (Output-)Register

07 0x07

Read Exeption Status
Fehlerzustand anfordern


Modbus Protokollaufbau

Der Modbus-TCP-Protokollrahmen hat folgenden Aufbau:

Modbus-TCP Paketaufbau


Transaction ID
Die Transaction ID ist so etwas wie eine Anfragenummer und wird vom Master bei jeder Anfrage um eins hochgezählt. Der Client antwortet mit der gleichen Transaction ID.

Protocol ID
Bei Modbus-TCP immer 0.

Length
Länge der Modbus-Daten in Byte plus zwei.

Unit ID
Beim seriellen Modbus-Protokoll war das die Adresse des Slaves. Das Feld ist aus Kompatibilitätsgründen übernommen worden. Bei Modbus-TCP-erfolgt die eindeutige Adressierung allerdings über die IP-Adresse des Slaves.

Function Code
Das Modbus-Protokoll definiert über durchnummerierte Function Codes, was die vom Master gesendete Anfrage beim Slave auslösen soll.

Modbus Data
Der Modbus Data Bereich wird abhängig vom verwendeten Function Code mit unterschiedlichen Inhalten gefüllt und kann dadurch unterschiedlich groß ausfallen. Auch die Datenrichtung spielt beim Aufbau des Modbus Data Bereichs eine Rolle.

Bei Datenrichtung Master an Slave beinhalten die ersten zwei Bytes immer die anzusprechende Speicheradresse.

Modbus-TCP Paketaufbau


Das folgende Beispiel zeigt, wie ein Modbus-TCP Paket beim Abrufen von zwei Registern mit Function Code 3 ab Speicheradresse 0x1020 aussieht.

Modbus-TCP Paketaufbau FC03


Das Antwortpaket ist anders aufgebaut. Hier ist im ersten Byte von Modbus Data die Anzahl der übergebenen Register-Bytes kodiert. In den nächsten 4 Bytes sind die Inhalte der angeforderten Register.

Modbus-TCP Paketaufbau FC03


Trotz des überschaubaren Protokollaufbaus bietet Modbus-TCP große Flexibilität für die industrielle Kommunikation.

Tipp: Achten Sie darauf, ob der Gerätehersteller bei der Beschreibung der Speicheradressen die Werte dezimal oder hexadezimal angibt.


Grundlagen zu gängigen Industrieprotokollen

Produkte für industrielle Anwendungen mit Standardprotokollen

^