Projekt Assistent Hilfe
 

Baustein zur Anbindung von Geräten über den Modbus

Einleitung

Über den Modbus können an dem angeschlossenen Gerät Daten ausgelesen und modifiziert werden. Das Modbus-Protokoll unterscheidet hier zwischen (Schalt-) Zuständen, die bitweise gelesen oder geschrieben werden können und 16-Bit-Registern, die dazu dienen Werte lesend oder schreibend zu bedienen.  

Das Modbus-Protokoll unterscheidet hierfür die unten aufgeführten Zugriffsmethoden mit deren Funktionscodes. Aus der Beschreibung des anzusprechenden Gerätes sollte hervorgehen, welche Funktionen das Gerät unterstützt und welche Bedeutung die einzelnen Daten haben, die über den Modbus bedient werden. Es kann sein, dass ein Gerätehersteller auch mit Werten arbeiten möchte, die nicht in ein 16-Bit-Register passen und hieraus folgend zwei 16-Bit-Register verwendet, um große Werte, die 32-Bit erfordern, bedienen zu können. Diese Zugriffsmethode ist nicht durch das Modbus-Protokoll spezifiziert, wird aber vom Logikbaustein unterstützt.

Der Modbus unterscheidet die folgenden Objekt-Typen:

Objekttyp

Zugriff Größe Adressbereich
COIL R/W 1 Bit

00001 - 09999

DISCRETE INPUT

R 1 Bit 10001 - 19999
INPUT REGISTER R 16 Bit 30001 - 39999
HOLDING REGISTER R/W 16 Bit 40001 - 49999

 

Der Zugriff auf die einzelnen Bits und Register in den unterschiedlichen Adress-Bereichen wird durch die folgenden Funktionen ermöglicht:

FUNCTION CODE

MODBUS-FUNKTIONEN BESCHREIBUNG

1

Read Coil Bit lesen

2

Read Discrete Input Bit lesen

3

Read Holding Register

Register lesen

4

Read Input Register Register lesen

5

Write Single Coil

Bit schreiben

6

Write Holding Register

Register schreiben

15 Write Multiple Coils Mehrere Bits schreiben
16 Write Multiple Holding Registers Mehrere Register schreiben

 

Verwendung des Bausteins

Der Logikbaustein nutzt zur Kommunikation das Modbus-TCP Protokoll, das gewöhnlich auf dem Port 502 arbeitet. Der Baustein ist so konzipiert, dass immer nur eine der oben aufgeführten Funktionen bedient wird. Entsprechend wird je nach Anwendung der Baustein mehrfach benötigt, um das Gerät vollständig zu bedienen. Die Verbindung zum Gerät wird nicht gehalten, sondern für jeden Zugriff kurz aufgebaut und nach dem Austausch der Daten wieder abgebaut.

 

Eingänge

Bezeichnung

Beschreibung

IP-Adresse

Die IP-Adresse des Modbus-Gerätes, welches angesteuert werden soll.

Port

Der Standard-Port für den Modbus ist 502. Er kann geändert werden.

Modbus-Funktion

Über die Funktion (FunctionCode) wird festgelegt, welcher der oben gelisteten Funktionen Daten gelesen oder geschrieben werden soll.

Start

Der Start-Parameter bestimmt den Index des ersten Bit oder Registers, das gelesen oder geschrieben werden soll. Werden mehrere Werte gelesen oder geschrieben, so belegen diese immer die nachfolgenden Positionen. Der Start Wert des Modbus Bausteins beginnt bei 1 und liest bzw. schreibt den ersten Index des verbundenen Modbus Gerätes. Somit sendet der Baustein bei Startwert 1 an das angesprochene Modbus Gerät den Index 0 zum Lesen bzw. zum Schreiben.

Es ist zu beachten, dass der Index bei den Modbus-Geräten aber bei 0 oder 1 starten kann. Ein entsprechender Hinweis sollte in der Schnittstellenbeschreibung des jeweiligen Gerätes zu entnehmen sein.

Unit-ID

Einige Hersteller verwenden auch bei dem Modbus-TCP-Protokoll die Vergabe eine Unit-ID. Diese ist bei den meisten Geräten 1 und entsprechend vorbelegt. Sie kann ggf. entsprechend der Dokumentation des Geräteherstellers angepasst werden.

Trigger

Über den Trigger-Eingang wird der Baustein dazu veranlasst Daten über den Modbus zu lesen oder zu schreiben. Für das Schreiben von Daten wird der Trigger nur benötigt, wenn gleichzeitig mehrere Daten über die Funktionen „FC15“ und „FC16“ geschrieben werden sollen.

Sollen Daten zyklisch gelesen werden, so kann der Trigger-Eingang mit einem Oszillator-Baustein verbunden werden.

Anzahl

Über diesen Parameter wird festgelegt, wie viele Werte gelesen oder geschrieben werden sollen.

Hinweis
Sollen unterschiedliche Register-Typen (binär, 16-Bit, 32-Bit, Vorzeichen) verwendet werden, so ist für jeden Typen ein eigener Baustein zu verwenden. Gleiches gilt für das Lesen und Schreiben von Werten.

Maximal unterstützt ein Baustein 16 Eingangs- oder Ausgangswerte.

Format

(nur sichtbar, wenn der Read-Mode Register lesen oder schreiben soll)

Es kann zwischen 16-Bit und 32-Bit gewählt werden. Der Modbus unterstützt i.A. nur 16-Bit-Register. Um größere Werte bedienen zu können, werden in der Praxis dann zwei 16-Bit-Register verwendet, um Werte, die ein 32-Bit-Register erfordern, aufzunehmen.

Hinweis
Beim Schreiben eines 32-Bit-Wertes, wird immer die Funktion „FC16 - Write Multiple Holding Register“ verwendet, um sicherzustellen, dass der Wert vollständig geschrieben ist und keine Leseanforderung während des Schreibens ausgeführt wird.

32-Bit-Aufteilung (Höherwertiges Wort zuerst)

(nur sichtbar, wenn das Format auf 32-Bit-Werte gesetzt ist)

Über diesen Schalter wird festgelegt, ob bei Verwendung von 32-Bit-Werten das erste 16-Bit-Register des Modbus-Gerätes die höherwertigen 16-Bit aufnimmt, oder das zweite 16-Bit-Register.
Vorzeichen Über diese Einstellung wird festgelegt, ob der Wert Vorzeichenbehaftet oder ohne Vorzeichen behandelt wird. Diese Vorgabe ist insbesondere für die interne Verwendung bei 32-Bit Werten wichtig, damit das niederwertige Byte korrekt interpretiert wird. Bei Verwendung von vorzeichenbehafteten Werten, berücksichtigt der Baustein das Zweierkomplement.
 
Wertebereiche

16-Bit vorzeichenlos:

0 … 65535 0000 … FFFF
16-Bit mit Vorzeichen: -32.768 … 32.767 8000 … 7FFF
32-Bit vorzeichenlos: 0 … 4.294.967.295

0000 0000 … FFFF FFFF

32-Bit mit Vorzeichen -2.147.483.648 … 2.147.483.647 8000 0000 … 7FFF FFFF
 

Bit 1..n

(nur sichtbar, wenn der Write-Mode Bits (Coils) schreiben soll)

Dieser Eingang wird vom Baustein entsprechend oft der vorgegebenen Anzahl angeboten. Auf den Eingang wird der binäre Wert gelegt, der über den Modbus geschrieben werden soll.

Register 1..n

(nur sichtbar, wenn der Write-Mode Register schreiben soll)

Dieser Eingang wird vom Baustein entsprechend oft der vorgegebenen Anzahl angeboten. Auf den Eingang wird der Wert gelegt, der über den Modbus geschrieben werden soll.

Bei Überschreitung des Wertebereichs eines 16/32 Bit Datenformates werden jeweils nur die ersten 16/32 Bit des Eingangswertes gesendet.

Ausgänge

Bezeichnung

Beschreibung

Bit 1...n

(nur sichtbar, wenn der Read-Mode Bits (Coils) lesen soll)

Dieser Ausgang wird vom Baustein entsprechend oft der vorgegebenen Anzahl angeboten. An diesem Ausgang liegt der binäre Wert an, der über den Modbus gelesen wurde.

Register 1...n

(nur sichtbar, wenn der Read-Mode Register lesen soll)

Dieser Ausgang wird vom Baustein entsprechend oft der vorgegebenen Anzahl angeboten. An diesem Ausgang liegt der Wert an, der über den Modbus gelesen wurde.

Fehler-Code

Bei erfolgreicher Ausführung der Lese- oder Schreiboperation auf den Modbus, steht am Error-Ausgang der Wert 0 an. Im Fehlerfall kann der Ausgang einen der folgenden Werte annehmen:

0 = kein Fehler

1 = Der Funktionscode wird vom Server nicht unterstützt.

2 = Die vorgegebene Start-Adresse (1..65536) oder die Anzahl (1..2000) liegt außerhalb des erlaubten Bereichs.

3 = Die Anfrage enthält einen ungültigen Wert.

4 = Bei der Ausführung der Anfrage ist ein Fehler aufgetreten. Keine Antwort vom Modbus Gerät.

5 = Fehler beim Lesen der Antwort vom Modbus Gerät.

6 = CRC-Fehler in der Antwort.

10 = Die Start-Adresse in Kombination mit der Anzahl liegt außerhalb des erlaubten Bereichs.

11 = Das Ausführen der Aktion hat einen unbekannten Fehler verursacht (Exception).

12 = Verbindungsfehler: Es konnte keine Modbus-TCP-Verbindung aufgebaut werden.

13 = Verbindungsfehler: Timeout / Die Gegenstelle antwortet nicht.

 

Beispiel

Es soll ein Temperaturwert einer Heizungsanlage zyklisch gelesen werden. Gemäß Beschreibung der Modbus-Anbindung der Heizungsanlage liegt die Vorlauf-Temperatur auf dem Register Nr. 17 und kann mit der Funktion FC4 gelesen werden. Die Temperatur wird mit einer Nachkommastelle ausgegeben, entsprechend wird der Wert im Register mit dem Faktor 10 eingetragen und ist nach dem Auslesen entsprechend aufzubereiten.

Gemäß Beschreibung des Herstellers beginnt der Index bei 1, somit muss der Eingang Start des Modbus Baustein in diesem Bespiel bei 18 liegen.