La Lógica Ladder es un paradigma de programación centrado originalmente en racks de relé y diseño de control de máquinas industriales. Su diseño, similar a las conexiones de hardware en un rack, simplifica grandes porciones de código secuencial en representaciones digestibles de código pictográfico.
Con el tiempo ha evolucionado hasta convertirse en un lenguaje de programación en toda regla, utilizado principalmente para programar PLCs.
En este tutorial de CODESYS para Raspberry Pi, te guiaremos a través de la configuración de un proyecto de Ladder en CODESYS para Raspberry, específicamente para Industrial Shields Raspberry Pi PLCs, destacando su aplicación en automatización industrial con dicho producto.
Configuración
Consulta el artículo sobre la configuración de CODESYS para Raspberry Pi PLC en el siguiente enlace:
Configuración de CODESYS para Raspberry Pi PLC en automatización industrial
Iniciando un proyecto en Ladder
Necesitamos un nuevo proyecto en Codesys con un PLC_PRG en Ladder Logic Diagram (LD). Esto nos proporcionará una caja de herramientas ampliada en Ladder que necesitaremos para programar el PLC.
También necesitaremos los fragmentos de código que nos permitirán usar los GPIOs. Para hacer eso, tendremos que copiar los POUs del proyecto preestablecido en Ladder que se encuentra en el repositorio de Github y pegarlos en la ventana de POUs análoga de nuestro programa. Junto con estos, también necesitaremos la carpeta rpiplc, disponible en el mismo proyecto preestablecido en la vista Devices.
https://github.com/Industrial-Shields/Projecte-CodeSys/tree/main/Presets
Método #1: bloques de ejecución
Un primer método consiste en utilizar bloques de "Execute" para ejecutar código en sintaxis de Structured Text. Este bloque se encuentra en ToolBox > General > Execute.
En el siguiente ejemplo, el bloque ejecuta la función obligatoria i2c_init() solo una vez, al inicio de la ejecución del programa. La función de inicialización debe ejecutarse una vez al inicio del código, cada vez que el programa se inicie. A continuación, se muestra una implementación común.
El código utilizado es el mismo que en el tutorial de Structured Text:
Configuración de CODESYS para Raspberry Pi PLC en automatización industrial
A continuación, se muestra un ejemplo de un bloque de ejecución que escribe un valor digital, opera sobre un valor y realiza una lectura digital.
Método #2: POUs en Ladder
Si abrimos el proyecto plantilla de Ladder desde GitHub, encont una carpeta llamada "rpiplc" en la vista de Devices. Este conjunto de funciones nos permite agregar bloques al editor de Ladder que interactuarán con los GPIOs del PLC. ¡Cuidado! Los pines de interrupción no son gestionados por estos bloques.
The inner workings of those blocks differ from the previous execution example. We need an extra input with a WSTRING that defines the port name.
En el siguiente ejemplo, estamos leyendo el puerto "I0.8" y almacenando el valor en la variable "analog_reading".
Lista de funciones para interactuar con los GPIOs
Funciones genéricas que se encuentran en la carpeta "rpiplc":
- i2c_init()
Inicializa el bus i2c, encargado de comunicar valores a los GPIOs. No requiere entrada y siempre devuelve un BOOL: FALSE. Debe ejecutarse una vez al inicio del código, cada vez que el programa se inicie. La siguiente imagen muestra una implementación común.
Functions found in the GPIOs folder, managing the ports of the analog layers of the PLC:
- a_analog_read(WSTRING port)
Lectura analógica. Requiere un nombre de puerto y devuelve un UINT. - a_analog_write(UINT value, WSTRING port)
Lectura analógica. Requiere un nombre de puerto y devuelve un UINT. - a_digital_read(WSTRING port)
Lectura digital. Requiere un nombre de puerto y devuelve un BOOL. - a_digital_write(BOOL value, WSTRING port)
Escritura digital. Requiere un nombre de puerto y un BOOL. Devuelve un BOOL.
Funciones en la carpeta GPIOs, para gestionar los puertos de las capas de relé del PLC:
- r_relay_write(WSTRING port, BOOL value)
Escritura en relé. Requiere un nombre de puerto y un BOOL. Devuelve un BOOL. - r_analog_read(WSTRING port)
Lectura analógica. Requiere un nombre de puerto y devuelve un UINT. - r_analog_write(UINT value, WSTRING port)
Escritura analógica. Requiere un nombre de puerto y un UINT. Devuelve un BOOL. - r_digital_read(WSTRING port)
Lectura digital. Requiere un nombre de puerto y devuelve un BOOL. - r_digital_write(BOOL value, WSTRING port)
Escritura digital. Requiere un nombre de puerto y un BOOL. Devuelve un BOOL.
El siguiente ejemplo muestra una escritura digital en el puerto "Q0_4" (Q0.4), utilizando el valor "i". Devuelve una variable de confirmación "ack".

Programar con Ladder en una raspberry PLC