Para ejecutar CODESYS en un Raspberry PLC, instala CODESYS Development System V3.5 en un PC con Windows, añade el paquete CODESYS Control for Raspberry Pi SL e instala el runtime en el PLC por Ethernet. Por defecto, el PLC responde en 10.10.10.20, y sus entradas y salidas se leen desde el proyecto de CODESYS con las plantillas de Industrial Shields de GitHub.
CODESYS es un entorno de programación IEC 61131-3: Structured Text, Ladder Diagram, Function Block Diagram, Sequential Function Chart y más. Esta guía cubre la licencia del runtime, la red, el inicio de sesión, los bloques de función de E/S y los GPIO directos del Raspberry PLC. Los pasos se hicieron con CODESYS V3.5 SP19 Patch 3. El Raspberry PLC 21 es un autómata programable con Raspberry Pi que se programa así en CODESYS.
- Paso 1CODESYS en el PCDevelopment System V3.5, SP19 Patch 3 o posterior, en Windows.
- Paso 2Paquete Raspberry PiCODESYS Control for Raspberry Pi SL, instalado desde su archivo .package.
- Paso 3RedPC y PLC en 10.10.10.0/24. El PLC es 10.10.10.20.
- Paso 4Runtime en el PLCTools → Update Raspberry Pi lo instala y lo arranca por SSH.
- Paso 5Login y E/SEscanea, inicia sesión y usa los bloques GPIOs o la librería rpiplc.
¿Qué necesitas para ejecutar CODESYS en un Raspberry PLC?
Necesitas cinco piezas. Dos son de CODESYS, una es de Industrial Shields y dos son tu PC y tu red.
| Pieza | Qué hace | Dónde se ejecuta |
|---|---|---|
| CODESYS Development System V3.5 | Herramienta de programación: editor, compilador, descarga y depuración online. | PC con Windows |
| CODESYS Control for Raspberry Pi SL | El runtime que ejecuta el programa compilado. El paquete también añade el comando Update Raspberry Pi a CODESYS. | Raspberry PLC (Linux) |
| Plantillas de Industrial Shields (Projecte-CodeSys) | Bloques de función y una librería para leer y escribir las entradas y salidas del PLC. | Dentro de tu proyecto de CODESYS |
| Cable Ethernet e IP estática en el PC | El PC habla con el PLC en la red 10.10.10.0/24. | PC y PLC |
| CODESYS Edge Gateway for Linux | Opcional. Da acceso al runtime al CODESYS Automation Server y a sus clientes. | Raspberry PLC u otro equipo de la red |
CODESYS Control for Raspberry Pi SL: versiones, modo demo y licencia
Sin licencia, el runtime funciona con todas las funciones durante dos horas. Después se detiene y hay que reiniciarlo. Este modo demo es suficiente para seguir esta guía y probar un programa en el banco.
Una licencia es válida para un equipo. CODESYS la guarda en un soft container en el PLC o en una CODESYS Key, una llave USB que puedes mover de un controlador a otro.
Lee las condiciones de licencia antes de usar CODESYS en un proyecto comercial, como una máquina que vas a vender o una línea de producción. La página de este producto en la CODESYS Store indica que la combinación de Raspberry Pi y este runtime es para uso privado, pruebas y docencia, y que el uso comercial necesita licencias basadas en la aplicación. También indica que el runtime no está liberado para contenedores ni máquinas virtuales. Consulta las condiciones actuales con CODESYS para tu proyecto.
Usa la versión 4.11 o posterior de CODESYS Control for Raspberry Pi SL. En nuestras pruebas con versiones anteriores, la aplicación del runtime se detenía a los pocos segundos en el PLC.
Los proyectos plantilla de Industrial Shields se hicieron con CODESYS V3.5 SP19 Patch 3. Las versiones anteriores de CODESYS dan errores de compilación con ellos. Una versión posterior puede abrirlos, pero CODESYS puede pedirte que actualices las librerías y los dispositivos del proyecto.
Instala CODESYS y el paquete de Raspberry Pi en el PC
- Descarga CODESYS Development System V3.5 de la CODESYS Store. Usamos la 3.5.19 Patch 3 (64 bits). Ejecuta el instalador y sigue los pasos.
- Descarga CODESYS Control for Raspberry Pi SL en la versión que necesites. Viene como archivo .package.
- Ejecuta el archivo .package, o instálalo desde el gestor de paquetes de CODESYS, y sigue el proceso de instalación.
- Reinicia CODESYS. El menú Tools tiene ahora el comando Update Raspberry Pi, y la lista de dispositivos incluye los dispositivos Raspberry Pi.
Las versiones más recientes del paquete instalan el runtime con el plug-in CODESYS Deploy Tool, así que algunos menús pueden ser distintos de las capturas de esta guía.
Conecta el Raspberry PLC al PC por Ethernet
El Raspberry PLC tiene dos puertos Ethernet, y cada uno tiene una IP fija para el acceso de servicio. Usa el puerto lateral siempre que puedas.
| Puerto | Interfaz | Dirección del PLC | Ejemplo de dirección del PC |
|---|---|---|---|
| Puerto Ethernet lateral (recomendado) | eth0, el Ethernet nativo de la Raspberry Pi | 10.10.10.20/24 | 10.10.10.60/24 |
| Puerto Ethernet frontal | eth1, de un controlador W5500 en el bus SPI | 10.10.11.20/24 | 10.10.11.60/24 |
Da al PC una dirección estática en la misma red, con máscara 255.255.255.0. Después prueba el enlace desde un terminal del PC:
ping 10.10.10.20comprueba que el PLC responde.nmap -sn 10.10.10.0/24lista los equipos que responden en la red, si no estás seguro de la dirección.
El usuario Linux por defecto de las imágenes de Industrial Shields es pi, con la contraseña raspberry. Cámbiala antes de conectar el PLC a una red de planta. Si el PLC no responde, consulta cómo comprobar la configuración Ethernet del Raspberry PLC.
Instala el runtime de CODESYS en el PLC con Update Raspberry Pi
El runtime pasa del PC al PLC por SSH. Se hace una vez, y de nuevo cada vez que quieras cambiar la versión del runtime.
- En CODESYS, abre Tools → Update Raspberry Pi.
- Introduce el usuario y la contraseña Linux del PLC, y la dirección IP del PLC, por ejemplo 10.10.10.20.
- Elige la versión del Runtime Package y pulsa Install. Sigue el proceso de instalación.
- La misma ventana muestra información del runtime del PLC y permite arrancarlo y pararlo.

El instalador también pregunta si quieres instalar CODESYS Edge Gateway for Linux. No lo necesitas para un cable directo del PC al PLC. Es útil cuando el CODESYS Automation Server, o un cliente que se conecta a través de él, debe llegar al runtime. Más información en la página de CODESYS Edge Gateway for Linux.
Escanea la red e inicia sesión en el Raspberry PLC
Iniciar sesión es lo que permite descargar el programa al PLC, arrancarlo y pararlo, y ver las variables online.
- Haz doble clic en el dispositivo del árbol Devices para abrir su ventana y pulsa Scan Network.
- Selecciona el Raspberry PLC en la lista.

- Pulsa Login en la barra de herramientas.
- Introduce el usuario del dispositivo. La primera vez que te conectas a un runtime nuevo, CODESYS te pide que crees este usuario. Pertenece al runtime de CODESYS y no es el usuario Linux que usaste en Update Raspberry Pi.


Ya estás conectado al PLC. Puedes descargar la aplicación y arrancarla o pararla cuando quieras.
La ventana del proyecto de CODESYS: Devices, POUs y Messages
Al abrir un proyecto plantilla, ves el editor de código y tres paneles que usarás todo el tiempo.
- Devices contiene el árbol de dispositivos: el dispositivo Raspberry Pi, la aplicación y su programa, la configuración de tareas, las interfaces de comunicación como I2C y los dispositivos que cuelgan de ellas.
- POUs (Program Organization Units) contiene programas, bloques de función y funciones que el programa principal puede llamar.
- Messages es el registro de compilación y ejecución. Muestra errores de sintaxis y declaraciones incoherentes. CODESYS no descarga un programa con errores, así que aquí es donde los encuentras.
La ventana Raspberry Pi de Tools → Update Raspberry Pi se abre en el mismo grupo de paneles que Devices y POUs.

Entradas y salidas del Raspberry PLC en CODESYS: dos métodos en las plantillas
Un Raspberry PLC no es una Raspberry Pi normal. La mayoría de sus entradas y salidas están en chips expansores de E/S en el bus I2C, así que el dispositivo GPIO estándar de CODESYS no las ve. El repositorio Projecte-CodeSys ofrece dos formas de acceder a ellas. Las plantillas están escritas en Structured Text, y también hay una plantilla en Ladder.
| Bloques de función GPIOs y GPIOsR | Librería rpiplc (rpiplc_IS_codesys 0.1.8) | |
|---|---|---|
| Dónde | Bloques de función en las POUs de las plantillas (Presets/Old) | Librería compilada en la carpeta Libraries, usada por Presets/v0.1.8 |
| Cómo accede a las E/S | A través del dispositivo maestro I2C de la Raspberry Pi | Ejecuta las herramientas de test de Industrial Shields del PLC en cada lectura y escritura |
| Versión del Raspberry PLC | V6, según el README del repositorio | También V4. Declaras el modelo y la versión, por ejemplo RPIPLC_21 y V4 |
| Velocidad | Acceso directo por I2C | Lenta, según el README. Úsala para pruebas y señales lentas |
Comprueba la versión de tu PLC antes de elegir. La guía para instalar el sistema operativo del Raspberry PLC explica las imágenes V4 y V6.
El README del repositorio indica que estos métodos no son drivers de E/S estándar de CODESYS y que no se recomiendan para un entorno comercial. Úsalos para aprender, probar y hacer prototipos, y mide el tiempo de ciclo con tu propio programa.
Bloques de función GPIOs y GPIOsR: preparación y métodos
Estos pasos hacen funcionar las E/S de un Raspberry PLC de Industrial Shields en un proyecto de CODESYS:
- Activa la interfaz I2C. Los expansores del PLC necesitan el bus I2C. En CODESYS aparece como un dispositivo maestro I2C.
- Añade el dispositivo I2C_master bajo la interfaz I2C en Devices. Todos los métodos de los bloques lo usan.
- Copia los bloques de función GPIOs del proyecto plantilla a la ventana POUs. Desde ahí están disponibles en todo el proyecto.
- Llama a
i2c_init()una vez, cada vez que arranca el programa del PLC. Sin esta llamada, los bloques no llegan a las E/S.
Usa GPIOs para los modelos con E/S analógicas y digitales, y GPIOsR para los modelos de relés. Cada instancia es una entrada o una salida. Su nombre se indica como WSTRING al declararla, por ejemplo "I0.7", "Q0.0", "A0.6" o "R0.5". El nombre tiene 4 o 5 caracteres.
| Método | Qué hace | Entrada | Devuelve | Bloque |
|---|---|---|---|---|
FB_init(WSTRING) | Se ejecuta al declarar. Fija la dirección del chip I2C y el registro del nombre de E/S | WSTRING | GPIOs, GPIOsR | |
read_analog() | Lectura analógica | UINT | GPIOs, GPIOsR | |
read_digital() | Lectura digital | BOOL | GPIOs, GPIOsR | |
write_analog(UINT) | Escritura analógica | UINT | BOOL | GPIOs, GPIOsR |
write_digital(BOOL) | Escritura digital | BOOL | BOOL | GPIOs, GPIOsR |
read_relay() | Estado del relé fijado por el programa. No es una lectura de tensión en los bornes del relé | BOOL | GPIOsR | |
write_relay(BOOL) | Escritura de relé | BOOL | BOOL | GPIOsR |
Ejemplo en Structured Text: copiar una entrada digital a una salida
Este programa para un modelo con E/S digitales lee la entrada I0.7 y escribe su estado en la salida Q0.0 en cada ciclo. La sintaxis de declaración es la del README de las plantillas.
PROGRAM PLC_PRG
VAR
setup : BOOL := TRUE;
in_07 : GPIOs := GPIOs("I0.7"); // entrada digital I0.7
out_00 : GPIOs := GPIOs("Q0.0"); // salida digital Q0.0
state : BOOL;
ack : BOOL;
END_VAR
// Cuerpo: se ejecuta en cada ciclo del PLC
IF setup THEN
i2c_init(); // una vez, cada vez que arranca el programa
setup := FALSE;
END_IF
state := in_07.read_digital();
ack := out_00.write_digital(state);
Dos detalles evitan la mayoría de errores de compilación. Los literales WSTRING usan comillas dobles rectas, no comillas tipográficas. Y el tipo de la variable debe coincidir con el método: read_digital() devuelve un BOOL y read_analog() devuelve un UINT.
Para programar las mismas E/S en Ladder, consulta programar en Ladder con CODESYS y Raspberry PLC.
GPIO directos: entradas conectadas directamente a la Raspberry Pi
Algunas entradas del Raspberry PLC no están en los expansores I2C. Van directamente a pines GPIO de la Raspberry Pi y son las entradas de interrupción del PLC. Los bloques GPIOs y GPIOsR no pueden declararlas. Son IX.5 e IX.6 en los modelos con E/S analógicas y digitales, e IX.0 e IX.1 en los modelos de relés:
| Modelos analógicos y digitales | Modelos de relés | GPIO de la Raspberry Pi (número BCM) |
|---|---|---|
| I0.5 | I0.0 | 13 |
| I0.6 | I0.1 | 12 |
| I1.5 | I1.0 | 27 |
| I1.6 | I1.1 | 5 |
| I2.5 | I2.0 | 26 |
| I2.6 | I2.1 | 4 |
Para usar un GPIO directo:
- Declara una variable BOOL en el programa, por ejemplo
direct_in : BOOL;. - En Devices, actualiza el dispositivo GPIOs A/B a GPIOs B+/Pi2.
- Abre GPIOs_A_B. En GPIOs Parameters, pon el Value del GPIO en Input u Output.
- En GPIOs I/O Mapping, busca el GPIO en la lista de entradas o salidas, haz clic en el campo Variable y pulsa [...]. Ve a Application → PLC_PRG → direct_in y selecciónala. El mapeo muestra
Application.PLC_PRG.direct_in.

La variable sigue ahora el modo del pin. Para una entrada, léela como cualquier otra variable: state := direct_in;
CODESYS no arranca en el PC: borra CODESYSProjectDefaults.opt
A veces CODESYS Development System no arranca. Una causa habitual es un archivo de valores por defecto del proyecto dañado, como se describe en este hilo de CODESYS Forge. Cierra CODESYS, borra C:\ProgramData\CODESYS\CODESYSProjectDefaults.opt y vuelve a arrancarlo. CODESYS crea el archivo de nuevo, así que solo pierdes tus preferencias de proyecto, no tus proyectos.
| Síntoma | Qué comprobar |
|---|---|
| El runtime se detiene a las dos horas | Modo demo sin licencia. Reinicia el runtime o añade una licencia. |
| El runtime se detiene pocos segundos después de arrancar | Versiones de CODESYS Control for Raspberry Pi SL anteriores a la 4.11. Instala una versión posterior. |
| Scan Network no encuentra el PLC | Dirección y máscara del PC, cable en el puerto correcto, ping 10.10.10.20 y que el runtime esté en marcha en Update Raspberry Pi. |
| Las entradas y salidas no cambian | i2c_init() al arrancar, el dispositivo I2C_master, el bloque correcto (GPIOs o GPIOsR) y la versión del PLC. |
| Errores de compilación en la plantilla | Una versión de CODESYS anterior a V3.5 SP19 Patch 3, o comillas tipográficas en los literales WSTRING. |
Siguientes pasos con CODESYS en el Raspberry PLC
- Programar en Ladder con CODESYS y Raspberry PLC
- Configurar Modbus TCP y RTU en un Raspberry PLC con CODESYS
- PROFINET con CODESYS: alarmas desde un Raspberry PLC como IO-controller
- PROFINET en Linux: la pila p-net de IO-device en un Raspberry PLC
- Node-RED, CODESYS o Arduino IDE: cuál encaja en tu proyecto
- Modbus TCP y RTU en Raspberry PLC con Python y Node-RED
Raspberry PLC en una planta real
Un solo Raspberry PLC 58 gestiona las cuatro secciones de proceso de una planta de biogás, desde la entrada de sustrato hasta la producción de energía. Controla la calefacción del digestor y lee la presión del gas, un panel TouchBerry hace de pantalla de operador y los datos van a un servidor en la nube por Ethernet. Mira la arquitectura y las E/S en el caso de estudio.
Caso de estudio de la planta de biogás
Elige el modelo y la combinación de E/S en la familia Raspberry PLC, o empieza con código que ya funciona en la PLC Solution Library.
Llévalo a la práctica
Mira qué hace un Raspberry PLC con secuencias, límites y alarmas antes de cablear nada.
Simulador
Arranca una turbina o una bomba paso a paso, y párala de forma segura
Un Raspberry PLC 42 ejecuta el arranque como una máquina de estados y lee transmisores 4-20 mA de nivel, caudal, vibración y presión.
Abre el simulador
Simulador
Mantén una cámara frigorífica en su banda, con puerta, desescarche y corte de luz
Un Raspberry PLC 21 gobierna el compresor, los ventiladores y el desescarche, y guarda el registro que demuestra la cadena de frío.
Abre el simulador
Preguntas frecuentes sobre CODESYS en un Raspberry PLC
¿Puedo ejecutar CODESYS en un PLC basado en Raspberry Pi?
Sí. CODESYS Control for Raspberry Pi SL se ejecuta en el Linux del Raspberry PLC, y se programa desde CODESYS Development System en un PC con Windows. Para las E/S del PLC también necesitas las plantillas o la librería de Industrial Shields.
¿Por qué se detiene el runtime de CODESYS a las dos horas?
Porque funciona en modo demo. Sin licencia, CODESYS Control for Raspberry Pi SL funciona con todas las funciones durante dos horas y después se detiene. Reinícialo o instala una licencia en un soft container o en una CODESYS Key.
¿Puedo usar CODESYS Control for Raspberry Pi SL en un proyecto comercial?
Revisa antes las condiciones de licencia. La CODESYS Store indica que este producto es para uso privado, pruebas y docencia, y que el uso comercial necesita licencias basadas en la aplicación. Pregunta a CODESYS qué licencia encaja con tu proyecto.
¿Qué versión de CODESYS necesito?
Las plantillas de Industrial Shields se hicieron con CODESYS V3.5 SP19 Patch 3, así que usa esa versión o una posterior. Usa CODESYS Control for Raspberry Pi SL 4.11 o posterior.
¿Cuál es la dirección IP por defecto del Raspberry PLC?
10.10.10.20 en eth0, el puerto lateral, y 10.10.11.20 en eth1, el puerto frontal, ambas con máscara 255.255.255.0. Da al PC una dirección de la misma red, por ejemplo 10.10.10.60.
¿Por qué el dispositivo GPIO estándar de CODESYS no lee las entradas del PLC?
Porque la mayoría de entradas y salidas del Raspberry PLC están en expansores de E/S en el bus I2C, no en pines de la Raspberry Pi. Usa los bloques GPIOs o GPIOsR, o la librería rpiplc. Solo los GPIO directos, las entradas de interrupción, se mapean a través del dispositivo GPIO.
¿Cómo reinicio el runtime de CODESYS en una Raspberry Pi?
Hay tres formas. En CODESYS, abre Tools → Deploy Control SL, selecciona el dispositivo en la pestaña Operation y detenlo y arráncalo (en versiones anteriores: Tools → Update Raspberry Pi). Desde un terminal en el PLC, ejecuta sudo systemctl restart codesyscontrol, o sudo /etc/init.d/codesyscontrol restart en runtimes antiguos. O reinicia el Raspberry PLC: el runtime vuelve a arrancar solo. En modo demo, cada reinicio te da otras dos horas.
¿CODESYS funciona en una Raspberry Pi 5?
Sí. CODESYS Control for Raspberry Pi SL es compatible con la Raspberry Pi 5 desde la versión 4.11.0.0 (febrero de 2024), y la versión 4.23.0.0 mantiene utilizables los GPIO de la Pi 5 después de un reset origin. En la Pi 5 los GPIO pasan por el nuevo controlador de E/S RP1, así que usa un runtime reciente. Los modelos actuales de Raspberry PLC se basan en una Raspberry Pi 4 Model B, y las plantillas de Industrial Shields están hechas para esos modelos.