Beispiel ModbusTCP-RTU-Master

In diesem Beispiel wollen wir einen Modbus-TCP-Master und einen Modbus-RTU-Master auf dem RevPi Connect+ CODESYS mit CODESYS Control für Raspberry Pi MC SL in Betrieb nehmen. Außer dem RevPi Connect benötigen wir für dieses Beispiel jeweils einen Slave für Modbus und Modbus-RTU.

Die Anwendung soll in diesem Fall die Holding-Register der Modbus-Slaves 0-9 lesen und diese in die Holding-Register 10-19 kopieren.

Die folgende Abbildung zeigt die Codesys-Gerätebaumübersicht des Beispiels. Beide Modbus-Master laufen auf dem RevPi Connect und haben jeweils einen Slave angeschlossen. Im POU_Modbus ist die Applikationslogik implementiert, die für das Lesen der Holding-Register und das Zurückschreiben in die Holding-Register sowohl für Modbus TCP- als auch für Modbus RTU-Slaves zuständig ist.

Beispiel für andere Geräte anpassen

Du kannst dieses Beispiel für RevPi Compact oder RevPi Core anpassen.

  • Klicke mit der rechten Maustaste auf den RevPi_Connect im Codesys-Gerätebaum.
  • Klicke auf Gerät aktualisieren.
  • Wähle einen RevPi Core oder Compact anstelle des RevPi Connect und benenne das Gerät entsprechend.

Wenn Du eine Lizenz für Single Core hast, kannst Du so das Target ändern:

  • Klicke mit der rechten Maustaste auf das “Root Device” CODESYS Control für Raspberry Pi MC SL im Codesys-Gerätebaum.
  • Klicke auf Gerät aktualisieren.
  • Wähle CODESYS Control für Raspberry Pi SL.

Das CODESYS Control-Geräteziel für das Beispiel wird von Multi Core auf SingleCore geändert.

MODBUS RTU Serielle Schnittstelle konfigurieren

Für RevPi Connect oder Core:

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

Unter der Registerkarte Allgemein/Serielle Portkonfiguration des MODBUS_COM-Geräts im Codesys-Baum wird der COM-Port wie folgt ausgewählt:
/dev/ttyUSB0 -> COM-Anschluss 1
/dev/ttyUSB1 -> COM-Anschluss 2 …
/dev/ttyUSBn -> COM-Anschluss n

Wenn ein zusätzlicher USB-485-Konverter angeschlossen ist, muss der richtige COM-Port identifiziert werden.

Für RevPi Compact:

Wenn Du die Standard-RS485-Schnittstelle des Geräts verwendest, muss die serielle Schnittstelle in Codesys zugewiesen werden.

  • Füge die folgende Zeile in /etc/CODESYSControl.cfg ein
    [SysCom]
    Linux.Devicefile =/dev/ttyAMA
  • Wenn Du einen USB-485-Konverter verwendest, füge die folgende Zeile in /etc/CODESYSControl.cfg hinzu:
    [SysCom]
    Linux.Devicefile =/dev/ttyUSB

Modbus-RTU-Slave-Adresse

Konfiguriere einen der Modbus-RTU-Slave-Kanäle zum Lesen von Holding-Registern und einen zum Schreiben von mehreren Registern.

Der Modbus-RTU-Slave-Standardwert ist auf 12 für die ersten 10 Halteregister eingestellt.

Ordne die beiden zuvor konfigurierten Kanäle für Read Holding Registers und Write Multiple Registers der Applikations-POE mit dem Namen “POE_Modbus” zu, um die Daten für die Applikation verfügbar zu machen.

Modbus-TCP-Slave

Konfiguriere die Modbus-TCP-Slave-Adresse.

Die Konfiguration für den Modbus-TCP-Slave funktioniert genauso wie für den Modbus-RTU-Slave.

Simulation von Modbus-TCP- und RTU-Slave

Für die Simulation der Modbus-Slaves verwenden wir die Anwendung ModRSsim2.

Du kannst die Anwendung hier herunterladen: https://sourceforge.net/projects/modrssim2/.

Die Modbus TCP/RTU Slave Holding Register 40001-40010 werden vom Modbus TCP/RTU Master, der auf dem RevPi läuft, kopiert und in die Slave Holding Register 40010-40020 zurückgeschrieben: