This tutorial demonstrates how to configure Modbus TCP and Modbus RTU masters on a RevPi Connect+ with CODESYS Control CODESYS Control for Linux ARM or ARM64. The application reads the holding registers (0—​9) of connected Modbus slaves and writes their values back to holding registers (10—​19).

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 CODESYS System Requirements.

Overview #

The device tree in CODESYS is configured with:

  • Modbus TCP Master: Reads and writes to a TCP slave device.

  • Modbus RTU Master: Communicates with a serial RTU slave device.

  • POU_Modbus: Handles the application logic for reading and writing data.

Project Setting
Adapting for RevPi Core or RevPi Compact

To adapt the project for RevPi Core or RevPi Compact:

▷ Right-click on 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

  1. Edit the configuration file:

    sudo nano /etc/CODESYSControl_User
  2. Add the following line:

    [SysCom]
    Linux.Devicefile=/dev/ttyUSB
  3. Map the COM ports in CODESYS as follows:

    • /dev/ttyUSB0 → COM port 1

    • /dev/ttyUSB1 → COM port 2

    • /dev/ttyUSBn → COM port n

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

    + image::revpi-tutorial-codesys-modbus-tcp-rtu-master-2.png[Project Setting]

For RevPi Compact

  • Default RS485 Port:
    ▷ Edit /etc/CODESYSControl_User and add:

       [SysCom]
       Linux.Devicefile=/dev/ttyAMA
  • Using USB-485 Converter:
    ▷ Add the following line instead:

   [SysCom]
   Linux.Devicefile=/dev/ttyUSB

Step 2: Configuring Modbus RTU Slave #

Project Setting
  1. Set up the RTU slave with:

    • Channel 1: Read Holding Registers

    • Channel 2: Write Multiple Registers

Project Setting
  1. Ensure the default values for the first 10 holding registers are 12.

Project Setting
  1. Map these channels in the POU_Modbus logic for application-level access.

Project Setting

Step 3: Configuring Modbus TCP Slave #

  1. Specify the Modbus TCP Slave Address in the CODESYS configuration.

Project Setting
  1. Use the same mapping logic as Modbus RTU for holding registers 0—​9 and 10—​19.

Step 4: Simulating Modbus Slaves #

To simulate Modbus TCP and RTU slaves, use ModRSsim2:

  • Download the application from ModRSsim2 on SourceForge.

  • Configure Modbus TCP/RTU slaves to have holding registers:

    • 40001—​40010 for source data

    • 40010—​40020 for destination data

Project Setting
Project Setting

Step 5: Deploy and Test #

  1. Download the compiled project to the RevPi device.

  2. Run the application on your RevPi base module.

  3. Verify that:

    • Data is correctly read from holding registers 0—​9.

    • Data is written back to holding registers 10—​19.

Note

Default RTU Slave Configuration
Ensure that slaves are set with unique IDs and consistent communication settings.

Note

Debugging
Use CODESYS monitoring tools to verify the real-time data exchange between masters and slaves.

Note

Simulation
Use ModRSsim2 for testing before connecting physical devices.

This setup allows Modbus TCP and RTU masters to operate simultaneously, enabling robust data exchange with Modbus-enabled devices.