CODESYS es un conjunto completo de software de automatización utilizado para desarrollar y programar sistemas de control en línea con los estándares IEC 61131-3. Es compatible con múltiples lenguajes de programación y ofrece herramientas robustas para la visualización, el control de movimiento y la configuración de buses de campo.
En este tutorial te guiaremos a través de la configuración de CODESYS para Raspberry Pi, específicamente para los PLCs Raspberry Pi de Industrial Shields, destacando su aplicación en la automatización industrial con Raspberry Pi.
Configuración inicial del entorno CODESYS
Usaremos CODESYS V3.5 SP19 Patch 3 + (64-bit),junto con el paquete de programación para PLC de Raspberry, que es esencial para la interacción con el hardware.
Para aquellos interesados en usar Raspberry Pi como un PLC, también necesitaremos el controlador Raspberry para CODESYS. Descarga el siguiente paquete:
CODESYS Control for Raspberry PI
Instalación de CODESYS Control para Raspberry Pi
Es una extensión (paquete) de CODESYS que permite que el software se comunique, controle e interactúe con una Raspberry Pi. Esta extensión permite que la Raspberry Pi interactúe con el software CODESYS y ejecute el código compilado desde este.
La extensión está vinculada a una licencia, si el usuario desea un tiempo de ejecución de más de 2 horas. Si no hay una activa, el software funciona sin restricciones, pero se detiene después de dicho tiempo. Usamos la versión 4.11+ debido a que las versiones anteriores contenían errores fatales. En esas versiones, la aplicación del controlador de Raspberry se detenía después de unos segundos de ejecución.
También es relevante mencionar que esta versión del controlador está programada para funcionar con CODESYS V3.5 SP19. Las versiones inferiores de CODESYS devuelven errores de compilación de código. Las versiones futuras tienen consecuencias actualmente desconocidas
Guía de instalación paso a paso
1. Descargar e instalar CODESYS:
- Para comenzar con la programación de PLC en Raspberry Pi usando CODESYS, descarga la distribución deseada, en este caso, la versión 3.5.19 Patch 3, y sigue los pasos de instalación.
- Luego, instala el CODESYS Control para Raspberry Pi en la versión correspondiente, ejecuta el archivo .package y sigue el proceso de instalación.
2. Instalar el controlador para Raspberry Pi:
- Descarga CODESYS Control para Raspberry Pi en la versión correspondiente.
- Ejecuta el archivo .package y sigue el proceso de instalación.
Plantillas de proyectos para PLCs Raspberry Pi
Dado que un PLC Raspberry Pi es un producto altamente personalizado, no se puede programar como si fuera una Raspberry Pi estándar. Se requieren ciertas características en un proyecto para que pueda ser utilizado de manera efectiva en la automatización industrial. El siguiente repositorio contiene plantillas de proyectos para programar un PLC Raspberry Pi:
https://github.com/Industrial-Shields/Projecte-CodeSys
Todos están escritos en Structured Text.
Interfaz de CODESYS para PLCs Raspberry Pi
En una plantilla de proyecto, podemos ver las ventanas de edición de texto, dispositivos y POUs, y mensajes.
- Devices contains program code, declared Raspberry device, task configuration, external communication interfaces, associated devices, etc.
- POUs (Unidad de Organización de Programas): Contiene el código fuente que puede ser llamado por el código principal.
- Mensajes: Es el registro de depuración y ejecución. Nos muestra errores de sintaxis y declaraciones inconsistentes. Como no es posible compilar un código erróneo, nos indica dónde están los errores.
En "Tools → Update Raspberry PI" encontramos la ventana del controlador de Raspberry PI, que se agrupa con Dispositivos y POUs.

Conectar el PLC Raspberry Pi al PC
Conectamos un PLC Raspberry Pi a nuestro ordenador. Las direcciones IP del PLC son:
- 10.10.10.20 (puerto Ethernet lateral, recomendado)
- 10.10.11.20 (Puerto Ethernet frontal)
Necesitamos configurar la red Ethernet a 10.10.10.0/24 para poder comunicarnos con el PLC.
Se recomiendan las siguientes herramientas para probar la conexión:
- PING (ejemplo: ping 10.10.10.10)
- NMAP (ejemplo: nmap 10.10.10.10/24)
Instalación del controlador en la Raspberry Pi
En las herramientas de CODESYS, abre la pestaña "Update Raspberry PI". Luego, ingresa la IP de la Raspberry, selecciona la dirección IP del PLC de destino, elige la versión del paquete de tiempo de ejecución y presiona "Install". Sigue el proceso de instalación.
En esta misma pestaña, podemos encontrar información relevante sobre el tiempo de ejecución y la Raspberry.

También pedirá instalar el "CODESYS Edge Gateway para Linux". No es obligatorio, pero puedes aprender más sobre ello aquí para verificar si se ajusta a tus necesidades.
Iniciar sesión en la Raspberry Pi
Esto es lo que nos permitirá agregar nuestro código al PLC. Esto requiere una serie de pasos. Primero, necesitamos abrir la ventana "Device" y escanear la red. Luego, seleccionamos el dispositivo Raspberry.

Ahora podemos iniciar sesión en el PLC utilizando el botón "Login". Tendremos que añadir el nombre de usuario para poder conectarnos a la Raspberry. Debe ser el mismo nombre de usuario y contraseña de un usuario que ya exista en la Raspberry.


Ahora estamos en el PLC y podemos iniciar o detener el programa a voluntad.
Solución de problemas comunes en CODESYS
Raramente, CODESYS puede no iniciar. La probabilidad de que la causa seaeste problema no es baja. Una solución a esto es eliminar el archivo "C:\ProgramData\CODESYS\CODESYSProjectDefaults.opt" del PC cada vez que encontremos este problema. Es un archivo autogenerado, por lo que no tenemos que preocuparnos por perder datos al eliminarlo; simplemente se borrarán nuestras preferencias de proyecto.
Uso de GPIOs en un PLC Raspberry Pi
Para que los GPIOs de un PLC Industrial Shields estén activos, se requiere lo siguiente:
- Interfaz I2C: Aparece en CODESYS como un dispositivo maestro I2C.
- Bloques de función dedicados a GPIOs: Se pueden encontrar en las plantillas de proyectos en el repositorio Github.
Los expansores del PLC requieren que el bus I2C esté activo. Los bloques de función deben colocarse en la ventana de POUs y estarán accesibles en todo el proyecto. Todos los métodos utilizan el dispositivo I2C_master. Es necesario agregar el dispositivo "I2C_master" a la interfaz I2C en "Devices".
Bloque de función: GPIOs
Se usa para PLCs analógicos/digitales. Contiene los siguientes métodos:
- FB_init(WSTRING string)
Campo de inicialización, responsable de configurar las direcciones de los chips internos I2C del PLC con los registros correspondientes. Se ingresa un WSTRING con el nombre del GPIO en formato "Q0.0". La cadena debe tener 4 o 5 caracteres. (Por ejemplo: "A2.7" o "I2.10"). - read_analog()
Lectura analógica. No requiere entradas, devuelve un "UINT". - read_digital()
Lectura digital. No requiere entradas, devuelve un "BOOL". - write_analog(UINT value)
Escritura analógica. Requiere un UINT como entrada. Devuelve un "BOOL". - write_digital(BOOL value)
Escritura digital. Requiere un "BOOL" de entrada. Devuelve un "BOOL".
Bloque de función: GPIOsR
Se utiliza para PLCs de relés. Contiene los siguientes métodos:
- FB_init(WSTRING string)
Inicialización, se encarga de configurar las direcciones de los chips internos I2C del PLC con los registros correspondientes. Se introduce un WSTRING con el nombre del GPIO en formato “Q0.0”. La cadena debe tener 4 o 5 caracteres. (Por ejemplo: “A2.7” o “I2.10”). - read_analog()
Lectura analógica. No requiere entradas, devuelve un "UINT". - read_digital()
Lectura digital. No requiere entradas, devuelve un "BOOL". - read_relay()
Verificación del estado de un relé. No requiere entradas, devuelve un " BOOL". Esto no es una lectura del voltaje entre los terminales del relé, solo una verificación del estado del relé. - write_analog(UINT value)
Escritura analógica. Requiere un UINT como entrada. Devuelve un "BOOL". - write_digital(BOOL value)
Escritura digital. Requiere un "BOOL" de entrada. Devuelve un "BOOL". - write_relay(BOOL value)
Escritura de relé. Requiere un "BOOL" como entrada. Devuelve un "BOOL".
Declaración del bloque de función GPIOs:
La declaración de un GPIO se realiza instanciando un bloque de función, proporcionando el tipo, zona/capa y pin, como se describió anteriormente.
En el código de la aplicación PLC, los comandos de lectura y escritura se pueden ejecutar utilizando los métodos correspondientes. Aquí hay un ejemplo para un PLC digital, usando los bloques de función GPIOs:
– Application Header –
PROGRAM PLC_PRG
WAS
Var1 : GPIOs := GPIOs(“I0.7”);
Var2 : GPIOs := GPIOs(“Q0.0”);
i : UINT;
I2: BOOL := TRUE;
END_VAR
– Application Body –
i := Var1.read();
Var2.write(i2);
Algunos pines no se pueden declarar. Este es el caso de los GPIOs directos. Estos son IX.5 e IX.6 en los PLCs digitales, y IX.0 e IX.1 en los PLCs de relé. En estos casos, el usuario debe declararlos como se explica en la siguiente sección.
Declaración de GPIOs directos
La variable debe declararse primero en el encabezado de la aplicación.
- Application Header -
DirectVar : BOOL;
i : BOOL;
First, update the device "GPIOs A/B" to "GPIOs B +/Pi2".
Accede a GPIOs_A_B (GPIOs A/B). En los parámetros de GPIOs, edita el GPIO deseado configurando "Value" to "Input" or "output".
En el mapeo de I/O de GPIOs, edita el GPIO en el menú desplegable (entradas o salidas) y asigna la variable del proyecto. Escribimos en "Variable", presionamos el botón [···]. Una interfaz mostrará todas las variables existentes en el proyecto. Estas están categorizadas en una estructura similar a un archivo. Sigue las Categories → Application→ <PLC_PRG> → <DirectVar>. Presiona la variable y se asignará.

Ahora podemos verificar o escribir valores en esta variable, que se comportará de acuerdo con el modo del pin. A continuación se muestra un ejemplo para verificar una entrada utilizando la variable que declaramos antes:
- Application Body -
i := DirectVar;
Los GPIOs y sus asociaciones son las siguientes.
Direct pin equivalence table
Analog PLC Pin | Relay PLC pins | Canal / bit |
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 |
Conclusión: Optimización de CODESYS para PLC Raspberry Pi en automatización industrial
En resumen, configurar CODESYS para Raspberry Pi ofrece una solución versátil y poderosa para la automatización industrial. Aprovechando el software CODESYS y su compatibilidad con los PLC Raspberry Pi, los usuarios pueden crear sistemas de control personalizados que cumplan con los estándares IEC 61131-3. Esta guía te ha llevado a través de los pasos esenciales, incluyendo la instalación del software necesario, la configuración del PLC Raspberry Pi y la utilización de proyectos plantilla para comenzar. Con estas herramientas y conocimientos, puedes integrar efectivamente los PLC Raspberry Pi en tus proyectos de automatización industrial, optimizando el rendimiento y la eficiencia.

Configuración de CODESYS para PLC basado en Raspberry Pi en automatización industrial