Programar con Ladder en una raspberry PLC

Primeros pasos con el lenguaje Ladder en CODESYS para RPI PLC
11 de noviembre de 2024 por
Programar con Ladder en una raspberry PLC
Boot & Work Corp. S.L, Francesc Nosàs Moliner

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.

Init block example

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".




Buscar en nuestro blog

Programar con Ladder en una raspberry PLC
Boot & Work Corp. S.L, Francesc Nosàs Moliner 11 de noviembre de 2024
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