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: