Skip to main content

Introducción

OpenPLC es una plataforma de automatización de código abierto que permite programar controladores lógicos siguiendo el estándar IEC 61131-3, incluyendo lenguajes como Ladder Diagram, Structured Text y Function Block Diagram. Una de sus principales ventajas es que su Runtime puede ejecutarse directamente sobre placas Arduino, desde el Uno y Nano hasta el Mega y Leonardo, funcionando como un soft-PLC embebido sin depender de una PC conectada de forma permanente. Este artículo documenta paso a paso el desarrollo de un circuito clásico de automatización industrial —el arranque-parada con sello (seal-in)— programado en OpenPLC Editor y desplegado sobre un Arduino, cubriendo desde la creación del proyecto hasta la resolución de errores comunes de compilación.

te invito a leer mi articulo :

Curso Control Digital con Arduino: Aprende a Automatizar Sistemas

 

Qué es un circuito Start/Stop con enclavamiento

El circuito de arranque-parada (Start/Stop) es uno de los patrones más fundamentales en control industrial y educación en automatización. Su lógica consiste en que, al presionar un botón de arranque (Start), una salida se energiza y permanece activa gracias a un contacto de «enclavamiento» que retroalimenta su propio estado, incluso después de soltar el botón, hasta que se presiona un botón de parada (Stop) que interrumpe el circuito. La expresión booleana equivalente es:

salida = (Start OR salida) AND NOT Stop. 

circuito-Start-Stop

circuito-Start-Stop

Preparación del entorno: creación del proyecto

El primer paso es abrir OpenPLC Editor y crear un nuevo proyecto desde la pantalla de bienvenida, haciendo clic en «New Project«.

Open plc

Open plc (paso 1)

El asistente guía al usuario a través de tres pasos: nombrar el proyecto, elegir el lenguaje base del programa —en este caso Ladder Diagram— y definir el tiempo de la tarea cíclica, que por defecto se establece en 20 milisegundos (T#20ms), un valor estándar y suficiente para lógica combinacional simple como esta.

openPLC

openPLC paso2

 

openPLC

openPLC (paso 3)

Declaración de variables

Con el proyecto creado, el siguiente paso es declarar las variables de entrada y salida en la tabla de «main» dentro de Programs. Se definieron tres variables booleanas: dos de entrada para los pulsadores y una de salida para el actuador.

Nombre Clase Tipo Dirección
Star_btn Input BOOL %IX0.0
Stop_btn Input BOOL %IX0.1
Motor_on Output BOOL %QX0.0

Es importante notar que la columna «Location» (dirección IEC) no se edita manualmente escribiendo en la celda; en versiones recientes del editor esta dirección se resuelve automáticamente al vincular la variable con un pin físico durante la configuración del dispositivo. si no te aparece de manera automática al vincularlo con el arduino lo resolvemos 

openPLC

openPLC (paso 4)

Construcción del diagrama Ladder

Una vez declaradas las variables, se creó un nuevo rung en el editor gráfico. La lógica se construyó de la siguiente manera: un contacto negado (normalmente cerrado) de Stop_btn al inicio del rung, seguido de un contacto normalmente abierto de Star_btn en serie, con una rama paralela debajo que contiene un contacto de la propia variable Motor_on (el sello), y finalmente la bobina de salida Motor_on al cierre del rung. Esta disposición garantiza que la señal de Stop tenga prioridad de interrupción sobre cualquier otro estado del circuito.

openPLC

openPLC (paso5)

Instalación del soporte de hardware (Package Manager)

Antes de poder compilar hacia una placa Arduino, es necesario instalar el paquete de soporte de hardware (HAL) correspondiente desde el Package Manager del editor. En la pestaña «Browse Catalog» se localiza el paquete «Arduino boards», que agrega soporte oficial para placas de la familia Arduino —Uno, Mega, Nano, Leonardo, Due, entre otras— y se instala con un solo clic.

 

Configuración del dispositivo y mapeo de pines

En la pestaña «Configuration», se seleccionó el modelo de placa objetivo del desplegable «Device». El editor muestra automáticamente las especificaciones técnicas de la placa seleccionada, un dato crítico dado que estas placas basadas en ATmega328P cuentan con apenas 2 KB de RAM y 32 KB de memoria flash, lo cual limita la complejidad de los programas que pueden alojar. Posteriormente, en la sección «Pin Mapping», se asignaron los pines físicos a cada variable declarada previamente.

Pin físico Tipo Dirección Variable
D2 Digital Input %IX0.0 Star_btn
D3 Digital Input %IX0.1 Stop_btn
D4 Digital Output %QX0.0 Motor_on

openPLC

openPLC (paso6)

Resolución de errores de compilación

Al intentar compilar y transferir el programa por primera vez mediante la opción «Build & Upload», surgieron dos errores consecutivos relacionados con librerías de Arduino faltantes: ArduinoUniqueID.h: No such file or directory y posteriormente AVR_PWM.h: No such file or directory. La causa raíz, visible en el log de compilación, fue que el índice de paquetes de Arduino (package_index.tar.bz2) devolvía un error «403 Forbidden» al intentar descargarse automáticamente, un bloqueo de red intermitente hacia el repositorio oficial. La solución consistió en descargar manualmente ambas librerías desde sus repositorios de GitHub (ArduinoUniqueID y AVR_PWM) y descomprimirlas directamente en la carpeta de librerías del Arduino IDE (Documentos\Arduino\libraries\), evitando así la necesidad de descarga automática. Este es un problema recurrente que puede afectar a cualquier usuario cuyo entorno de red bloquee temporalmente el CDN de paquetes de Arduino.

Compilación y carga exitosa

Tras instalar manualmente las librerías faltantes, el proceso de «Build & Upload» se completó sin errores. El registro de compilación confirmó los siguientes resultados para un Arduino Uno:

Métrica Valor Porcentaje del máximo
Memoria flash usada 10,476 bytes 32% de 32,256 bytes
Memoria RAM (variables globales) 1,373 bytes 67% de 2,048 bytes
RAM libre para variables locales 675 bytes

El mensaje final «Arduino upload complete» confirmó que el firmware compilado —incluyendo la lógica Ladder traducida a código C++ por el compilador interno STruC++— se transfirió correctamente al microcontrolador vía el puerto serie asignado.

Verificación del código generado

El OpenPLC Editor no incluye un visor de código integrado, por lo que para inspeccionar el C++ generado es necesario navegar manualmente a la carpeta de compilación del proyecto (build\Arduino Uno\src\), donde se encuentran archivos como pou_MAIN.cpp (la lógica del programa principal), configuration.cpp (el mapeo de pines) y arduino_runtime_glue.cpp (la integración entre el runtime de OpenPLC y el hardware). Estos archivos pueden abrirse con cualquier editor de código como Visual Studio Code para su estudio.

Prueba funcional del circuito

Con el firmware ya cargado, la validación final se realiza conectando el editor a la placa mediante el botón «Connect» en la pestaña de configuración, y activando el monitoreo en vivo (columna «Debug») sobre cada variable. En el diagrama Ladder, los contactos y bobinas activos se resaltan visualmente cuando su valor es verdadero, permitiendo verificar en tiempo real que al presionar Star_btn la salida Motor_on se energiza y permanece activa por el efecto de sello, y que al presionar Stop_btn el circuito se interrumpe correctamente, replicando el comportamiento esperado de un arrancador de motor industrial.

openPLC

openPLC (Paso 7)


openPLC

openPLC (paso8)

Conclusiones para proyectos educativos

Este ejercicio demuestra que es viable programar lógica de control industrial estándar (IEC 61131-3) sobre hardware Arduino de bajo costo, aunque con restricciones de memoria que limitan la escala de los programas alojables en placas basadas en ATmega328P. Para aplicaciones didácticas más ambiciosas —con mayor cantidad de entradas/salidas, comunicación Modbus simultánea o lógica más compleja— conviene evaluar migrar a placas con más recursos, como el ESP32, que también cuenta con soporte oficial en OpenPLC y ofrece mayor RAM y flash disponibles.


References

  1. 1.1 OpenPLC Overview – Autonomy – Currently, OpenPLC Runtime is officially supported on the following platforms: Arduino Uno / Nano / …
  2. PLC Ladder Logic on an Arduino: Introduction to OpenPLC – Build a low-cost PLC using the Arduino Uno and the open-source industrial controls software, OpenPLC…
  3. Board Selection | Autonomy Edge – OpenPLC – The Board Selection interface lets you choose the target hardware for your PLC program. The desktop …
  4. OpenPLC on Arduino – General Discussion about the OpenPLC on the Arduino boards.

Loading

Telles Rafael

Profesor Especialista en Control Industrial, con mas de 20 Años de experiencia en electrónica digital

Leave a Reply

Close Menu

Wow look at this!

This is an optional, highly
customizable off canvas area.

About Salient

The Castle
Unit 345
2500 Castle Dr
Manhattan, NY

T: +216 (0)40 3629 4753
E: hello@themenectar.com