In this example, we configure and run both a Modbus TCP slave and a Modbus RTU slave on the RevPi Connect+ with CODESYS Control for Linux ARM/ARM64. The application is designed to copy the first 10 holding registers to the 10 input registers of both slaves.

Prerequisites #

Hardware #

✓ RevPi Connect+
✓ One Modbus TCP slave
✓ One Modbus RTU slave

For detailed instructions about how to set up your system, see Getting Started.

Software #

✓ CODESYS Development System installed on your PC

To ensure a compatible system with suitable software, see Software Compatibility.

Overview #

The following figure provides an overview of the CODESYS device tree for the setup:

CODESYS Device Tree Overview
Adapting for RevPi Core or RevPi Compact

▷ Open the context menu of RevPi Connect in the CODESYS device tree.

▷ Select Update device.

▷ Choose RevPi Core or RevPi Compact as the replacement and rename the device accordingly.

Step 1: Configuring Modbus RTU Serial Port #

For RevPi Connect or RevPi Core

▷ Edit the configuration file:

sudo nano /etc/CODESYSControl_User

▷ Add the following line:

[SysCom]
Linux.Devicefile=/dev/ttyUSB

▷ Map the COM ports in CODESYS as follows:

  • /dev/ttyUSB0COM port 1

  • /dev/ttyUSB1COM port 2

  • /dev/ttyUSBnCOM port n

If an extra USB-485 converter is connected, the correct COM port has to be identified.

For RevPi Compact:

▷ Edit /etc/CODESYSControl_User for the default RS485 Port and add:

   [SysCom]
   Linux.Devicefile=/dev/ttyAMA

▷ Add the following line instead for using USB-485 converter:

   [SysCom]
   Linux.Devicefile=/dev/ttyUSB

Step2: Configuring Modbus RTU Slave #

Configuring Modbus RTU Slave

▷ Map Holding Registers and Input Registers to the application POU_Modbus to make the data accessible to the application logic.

Configuring Modbus RTU Slave

Step 3: Configuring Modbus TCP Slave #

The configuration for the Modbus TCP slave is similar to that for the Modbus RTU slave.

Step 4: Simulating Modbus TCP and RTU Masters #

▷ Use the application QModMaster for simulation.
You can download it here.

Write Multiple Registers: Writes data to the holding registers of the slave.

Read Holding Registers: Reads back the input register data of the Modbus TCP/RTU slave running on the RevPi device.

Configuring Modbus RTU Master
Configuring Modbus RTU Master

Step 5: Modbus TCP Unit ID #

  • The Modbus TCP Unit ID serves the same function as the slave ID.

  • The Unit ID 255 is recommended for addressing the gateway itself.

  • When using QModMaster, note that it uses Unit ID 0 instead of 255 for addressing the gateway.

Configuring Modbus RTU Master
Configuring Modbus RTU Master