Ir al contenido

Configurar Modbus en un Raspberry Pi PLC con CODESYS

Cómo configurar Modbus TCP cliente y servidor y Modbus RTU por RS-485 en un Raspberry PLC de Industrial Shields con CODESYS V3.5: árbol de dispositivos, canales, mapeo de registros y resolución de problemas
19 de junio de 2026 por
Configurar Modbus en un Raspberry Pi PLC con CODESYS
Joan F. Aubets - Industrial Shields

Guía completa: Modbus TCP y RTU en los Raspberry PLC, con Python y Node-RED

Para usar Modbus en un Raspberry PLC con CODESYS, añade los dispositivos Modbus al árbol de dispositivos del proyecto: bajo Ethernet, un Modbus TCP Client (maestro) con un Modbus TCP Server por cada equipo remoto, o un ModbusTCP Server Device si el PLC debe responder a un SCADA. Para Modbus RTU por RS-485, añade un puerto Modbus COM con un cliente Modbus debajo y un servidor Modbus por cada dirección de esclavo (de 1 a 247). Cada petición es un canal: código de función, registro inicial, longitud y tiempo de ciclo, asignado a variables en la pestaña de mapeo de E/S. Modbus TCP y serie, como maestro y como esclavo, vienen con el paquete del runtime CODESYS Control for Raspberry Pi SL.

Esta guía continúa Configuración de CODESYS para PLC Raspberry Pi en automatización industrial. Antes de empezar necesitas CODESYS V3.5 SP19 Patch 3 o posterior en un PC con Windows, CODESYS Control for Raspberry Pi SL 4.11 o posterior en el PLC y una conexión que funcione (el PLC responde en 10.10.10.20 por su puerto Ethernet lateral por defecto). Las versiones nuevas de CODESYS llaman cliente y servidor a los roles Modbus; las antiguas dicen maestro y esclavo. Los menús son los mismos.

¿Qué dispositivo de CODESYS necesitas?

El Raspberry PLC debe...Dispositivo que hay que añadirInsértalo bajo
Leer o escribir un equipo Modbus TCP (contador, variador, otro PLC)Modbus TCP Client y un Modbus TCP Server por equipoEthernet
Responder a un SCADA, un HMI u otro maestro por EthernetModbusTCP Server DeviceEthernet
Leer o escribir equipos de campo RS-485 con Modbus RTUPuerto Modbus COM, cliente Modbus y un servidor Modbus por direcciónEl PLC (Device)
Responder a un maestro RTU por RS-485Puerto Modbus COM y un dispositivo servidor Modbus debajoEl PLC (Device)

Un cliente Modbus en CODESYS puede tener hasta 64 servidores debajo.

Cliente (maestro) Modbus TCP: leer un equipo remoto

  1. En Devices, haz clic derecho sobre el PLC y añade un adaptador Ethernet si el proyecto no lo tiene. En su configuración, elige la interfaz de red del PLC (eth0 es el puerto lateral).
  2. Clic derecho sobre Ethernet > Add Device > Fieldbuses > Modbus y añade el Modbus TCP Client (Modbus TCP Master en versiones antiguas). Deja activado Auto-reconnect para que el cliente vuelva a conectar después de un corte de red.
  3. Clic derecho sobre el cliente y añade un Modbus TCP Server (Modbus TCP Slave) por cada equipo remoto. Configura su dirección IP, el puerto 502 y el Unit ID que espera el equipo (a menudo 1, o 255 en algunos equipos solo TCP).
  4. En la pestaña de canales del servidor, pulsa Add Channel y elige el tipo de acceso, por ejemplo Read Holding Registers (function code 03), el disparo (cíclico, con su tiempo de ciclo en ms), el offset del registro inicial y la longitud.
  5. En la pestaña de mapeo de E/S, da un nombre de variable a cada registro, o asígnalo a una variable que ya exista en tu programa.

Códigos de función Modbus y tipos de datos en un canal

Código de funciónAccesoDatosAsígnalo a
01 Read CoilsLecturaBits que el maestro también puede escribirBOOL
02 Read Discrete InputsLecturaBits de entradaBOOL
03 Read Holding RegistersLecturaRegistros de 16 bits: consignas, configuraciónWORD o INT
04 Read Input RegistersLecturaValores medidos de 16 bitsWORD o INT
05 / 15 Write Single / Multiple CoilsEscrituraBitsBOOL
06 / 16 Write Single / Multiple RegistersEscrituraRegistros de 16 bitsWORD o INT

Un registro Modbus tiene 16 bits. Un valor con decimales suele llegar como un entero con escala (215 para 21,5 °C) o como un float de 32 bits en dos registros seguidos. Lee el mapa de registros del equipo: da la dirección, la escala y, en los valores de 32 bits, el orden de las palabras.

Usa los valores mapeados en el programa

Supón que un transmisor de temperatura envía la temperatura × 10 en el holding register 0. Asigna el registro a iTempRaw (INT) en la pestaña de mapeo de E/S y escálalo en Texto Estructurado:

VAR
    iTempRaw       : INT;     // mapped to holding register 0 (temperature x 10)
    rTemperature   : REAL;
    bOverheatAlarm : BOOL;
END_VAR

rTemperature := INT_TO_REAL(iTempRaw) / 10.0;
bOverheatAlarm := rTemperature > 75.0;

CODESYS actualiza las variables mapeadas con la tarea de ciclo de bus, y cada canal envía su petición con su propio tiempo de ciclo. Un tiempo de ciclo más corto que el que necesita el equipo para responder solo llena el bus: empieza con 100 ms o más y bájalo si el proceso lo necesita. Este código es un ejemplo para este artículo y no se ha ejecutado en un PLC.

Servidor Modbus TCP: deja que un SCADA lea el PLC

  1. Clic derecho sobre Ethernet > Add Device y añade el ModbusTCP Server Device (ModbusTCP Slave Device en versiones antiguas).
  2. En su configuración, deja el puerto 502, fija el Unit ID que usará el maestro y el número de coils, discrete inputs, holding registers e input registers que expone el PLC.
  3. En la pestaña de mapeo de E/S, enlaza esas áreas con variables de tu programa. El maestro las lee y escribe en las direcciones configuradas.

Apunta el mapa de registros para el equipo del SCADA: dirección, tipo de dato, escala y unidades de cada valor.

Modbus RTU en el puerto RS-485

En el Raspberry PLC, los puertos RS-485 son de /dev/ttySC0 a /dev/ttySC3, según la versión (lístalos con ls /dev/ttySC*). CODESYS en Linux llama a los puertos serie COM1, COM2, etc., y toma el fichero de dispositivo de la sección [SysCom], entrada Linux.Devicefile, de /etc/CODESYSControl_User.cfg. Comprueba qué número de COM apunta al puerto RS-485 de tu PLC antes de configurar el maestro.

  1. Clic derecho sobre el PLC > Add Device > Fieldbuses > Modbus y añade el puerto Modbus COM. Configura el número de puerto COM, la velocidad, la paridad, los bits de datos y los bits de parada. Deben ser los mismos en todos los equipos del bus.
  2. Clic derecho sobre el puerto COM y añade el cliente Modbus (Modbus Master, COM Port en versiones antiguas). Configura el tiempo de espera de respuesta.
  3. Bajo el cliente, añade un servidor Modbus (esclavo) por cada equipo, con su dirección de 1 a 247, y configura sus canales y su mapeo de E/S como en el cliente TCP.

Para que el Raspberry PLC sea esclavo RTU, añade en su lugar el dispositivo servidor Modbus bajo el puerto COM, con la dirección que usará el maestro, y asigna tus variables a sus áreas de registros.

Resolución de problemas de Modbus en CODESYS

SíntomaQué comprobar
El servidor Modbus TCP no respondeHaz ping a su IP desde el PLC, comprueba el puerto 502 y el Unit ID
El equipo Modbus RTU no respondeCableado RS-485 A+ con A+ y B- con B-, terminación en los dos extremos del bus, misma velocidad y paridad, el puerto COM correcto, la dirección del esclavo
Los valores están desplazados un registroDirecciones desde 0 o desde 1: el registro 40001 de un datasheet es el offset 0 en el canal
Los valores de 32 bits no tienen sentidoOrden de palabras del equipo: intercambia los dos registros
Las variables no se actualizanLa aplicación está en marcha (no solo conectada), el estado del dispositivo en Devices, los mensajes del dispositivo, el tiempo de ciclo del canal y el tiempo de espera de respuesta
El runtime se para a las dos horasCODESYS Control for Raspberry Pi SL está en modo demo sin licencia

Preguntas frecuentes sobre Modbus con CODESYS en un Raspberry PLC

¿Necesito una licencia extra para Modbus en CODESYS?

CODESYS indica que Modbus TCP maestro y esclavo y Modbus serie maestro y esclavo vienen como buses de campo con el paquete del runtime CODESYS Control for Raspberry Pi SL. Sin licencia del runtime, este funciona dos horas y luego se para.

¿Qué diferencia hay entre cliente y maestro Modbus?

Ninguna en la práctica. Las versiones nuevas de CODESYS usan cliente y servidor; las antiguas, maestro y esclavo.

¿Puede el PLC ser servidor Modbus TCP y maestro RTU a la vez?

Sí. Cada dispositivo del árbol funciona por su cuenta, así que un Raspberry PLC puede leer equipos RS-485 y servir los valores a un SCADA por Ethernet, como pasarela.

¿A qué velocidad puede consultar Modbus CODESYS?

Depende de la velocidad del bus, del número de registros y del tiempo de respuesta de cada equipo. Fija el tiempo de ciclo de cada canal según lo que necesite el proceso, no al mínimo.

¿Puedo probar Modbus sin los equipos de campo?

Sí, con un simulador Modbus en un PC, o en el simulador de red Modbus de la PLC Solution Library.

Llévalo a la práctica

De la configuración de Modbus en CODESYS al trabajo real: un gateway Modbus en un barco, un simulador de red y un mapa de registros de una planta.

Buscar en nuestro blog

Configurar Modbus en un Raspberry Pi PLC con CODESYS
Joan F. Aubets - Industrial Shields 19 de junio de 2026
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs