Example Modbus TCP-RTU-Slave in CODESYS

In diesem Beispiel wollen wir einen Modbus-TCP-Slave und einen Modbus-RTU-Slave auf dem RevPi Connect+ CODESYS mit CODESYS Control für Raspberry Pi MC SL in Betrieb nehmen.

Die Anwendung soll in diesem Fall die ersten 10 Holdig-Register in die 10 Eingangsregister beider Slaves kopieren.

Die folgende Abbildung zeigt die Codesys-Gerätebaumübersicht des Beispiels.

MODBUS RTU Serielle Schnittstelle konfigurieren

Für RevPi Connect oder Core:

  • Füge die folgende Zeile in /etc/CODESYSControl.cfg hinzu:
    [SysCom]
    Linux.Gerätedatei=/dev/ttyUSB

Modbus-RTU-Slave-Konfiguration

  • Ordne Holding-Register und Input-Register der Applikations-POE mit dem Namen “POE_Modbus” zu, um die Daten für die Applikation verfügbar zu machen.
  • Konfiguriere auch den Modbus-TCP-Slave. Die Konfigurationsschritte sind gleich wie beim Modbus-RTU-Slave.

Modbus TCP und RTU Master simulieren

Write Multiple Registers schreibt in die Holding-Register des Slaves und Read Holding Registers gibt die Daten der Eingangsregister des Modbus TCP/RTU-Slaves zurück, der auf dem RevPi läuft.

Modbus TCP Unit ID: Sie hat die gleiche Funktionalität wie die Slave ID. Allerdings gibt es noch die 255. In der Praxis hängt es von dem angeschlossenen Gerät ab, welcher Wert eingestellt werden muss. Dann wird entweder ein Modbus-TCP-Slave im Netzwerk anhand seiner IP-Adresse eindeutig identifiziert. Wenn dieser Slave aber ein Gateway von Modbus TCP auf Modbus RTU ist, kann er mehrere Modbus-RTU-Slaves ansprechen. Zur Adressierung des Gateways selbst wird die Unit ID 255 empfohlen. QModMaster verwendet stattdessen die Unit ID 0 von 255 für diesen Zweck.