Guía completa: OpenPLC con PLC industriales
Para programar un ESP32 PLC, un M-Duino o un Ardbox desde OpenPLC, instala el mod de Industrial Shields en la carpeta del OpenPLC Editor y selecciona tu modelo de PLC como placa en Transfer Program to PLC. Las direcciones IEC siguen los nombres impresos en el PLC: %IX1.4 es la entrada I1_4 y %QX0.5 es la salida Q0_5. Las señales analógicas usan un solo índice (%IW, %QW), las salidas que pueden ser analógicas o digitales empiezan como analógicas, y el código C++ con las librerías de Industrial Shields va en una extensión Arduino.
Esta guía explica la instalación del mod, el mapa de E/S por defecto, cómo pasar una salida analógica a digital en una zona normal y en una zona de relés, y una primera extensión Arduino. Los ejemplos usan un M-Duino 42+, y las capturas de I/O Config, un M-Duino 58+ y un M-Duino 57R+. Los pasos son los mismos en cualquier PLC M-Duino, Ardbox o ESP32 PLC si seleccionas el modelo correcto.
El mod de Industrial Shields se publicó en 2024 para el OpenPLC Editor de entonces, y las capturas son de ese editor. OpenPLC Editor v4 es una aplicación nueva: antes de empezar un proyecto, comprueba que tu modelo aparece en su lista de placas, o pregúntanos.
Qué PLC de Industrial Shields puedes programar con OpenPLC
| Familia | Basado en | En OpenPLC |
|---|---|---|
| M-Duino | Arduino Mega | Placa seleccionable con el mod. Los relés son salidas digitales |
| Ardbox | Arduino Leonardo | Placa seleccionable con el mod |
| ESP32 PLC, incluido el ESP32 PLC 14 | ESP32 | Placa seleccionable con el mod |
| Raspberry PLC | Raspberry Pi | Industrial Shields no publica mapa de E/S para OpenPLC. Usa CODESYS para IEC 61131-3 |
Si no tienes claro qué familia encaja en tu proyecto, lee cómo elegir un controlador industrial.
Instala el mod de Industrial Shields en OpenPLC
- Instala el OpenPLC Editor y ábrelo al menos una vez. Si lo acabas de actualizar, ábrelo también una vez, porque una actualización sobrescribe los cambios del mod.
- Cierra el editor y descarga el mod, un instalador para Windows: ISModInstaller.exe.
- Ejecútalo. Cuando te pida la carpeta de instalación, selecciona la carpeta del OpenPLC Editor, normalmente en tu carpeta de usuario.
- Abre el editor, ve a Transfer Program to PLC y comprueba que tu modelo de PLC está en la lista de placas.
Después de cada actualización del OpenPLC Editor, vuelve a instalar el mod.
Cómo se direccionan las entradas y salidas
OpenPLC usa direcciones IEC 61131-3: las señales digitales tienen dos índices y las analógicas, uno. El mod asigna el PLC así por defecto:
| Señal | Dirección IEC | Asignación por defecto | Ejemplo (M-Duino 58+) |
|---|---|---|---|
| Entradas digitales | %IX | Mismos índices que el PLC. Los pines con el número 99 rellenan los huecos y OpenPLC los ignora | I1_4 es %IX1.4 |
| Salidas digitales y relés | %QX | Mismos índices que el PLC, con el mismo relleno. Los relés son salidas digitales | Q0_3 es %QX0.3 |
| Entradas analógicas | %IW | Un índice, en el orden de la lista, sin relleno | I0_7 es %IW0, I0_8 es %IW1 |
| Salidas analógicas | %QW | Un índice, sin relleno. Las salidas que pueden ser analógicas o digitales empiezan como analógicas | A0_5 es %QW0 |
Para ver el mapa exacto de tu modelo, abre Transfer Program to PLC, selecciona la placa y ve a I/O Config. Cada posición de la lista es una dirección: en las listas digitales, la posición n es el índice n / 8 y el bit n mod 8, contando desde 0. OpenPLC trabaja con valores analógicos de 0 a 65535; el escalado de cada familia está en la guía de variables externas.

Pasa una salida analógica a digital
Salidas como A0_5 / Q0_5 pueden funcionar como analógicas o digitales. OpenPLC las inicia como analógicas. Para usar una como digital, cambia dos cosas en I/O Config y el interruptor físico del PLC.
En una zona normal
Ejemplo: la salida A0_5 de la primera zona de un M-Duino 58+.
- En Analog Outputs, sustituye
A0_5por99. - En Digital Outputs, sustituye el primer
99porQ0_5. - Haz clic en Save Changes.
La salida mantiene una dirección que coincide con su nombre: %QX0.5 es Q0_5.

En una zona de relés
Ejemplo: la salida A0_0 de la primera zona de relés de un M-Duino 57R+. Los relés ya llenan los primeros índices de salidas digitales, así que la salida va al final de la lista.
- En Analog Outputs, sustituye
A0_0por99. - Añade
Q0_0al final de Digital Outputs. - Haz clic en Save Changes.
Aquí la dirección no coincide con el nombre: Q0_0 pasa a ser %QX3.0. Anótalo en el comentario de la variable.

Ajusta el interruptor del PLC
Cada salida conmutable tiene un interruptor en el PLC: ON es digital, OFF es analógica. El software y el interruptor deben coincidir. Restore Defaults en I/O Config recupera el mapa original.

Añade código C++ con una extensión Arduino
El mod compila las placas ESP32 PLC, M-Duino y Ardbox con las librerías de Industrial Shields, así que una extensión Arduino puede usar los mismos nombres de pines y funciones que un sketch en el Arduino IDE. Úsala para lo que Ladder no puede hacer, como un protocolo o una librería. Mantén el OpenPLC Editor actualizado para tener extensiones Arduino.
Con un proyecto abierto, haz clic en el icono gris con el signo más y selecciona Arduino extension.

sketch_setup() se ejecuta una vez al arrancar y sketch_loop() una vez por ciclo del PLC, después del programa Ladder. Este ejemplo hace parpadear Q0_0 cada 500 ms:
// Arduino extension: toggles Q0_0 every 500 ms without stopping the PLC scan
unsigned long lastToggle = 0;
bool q0State = false;
void sketch_setup()
{
pinMode(Q0_0, OUTPUT);
}
void sketch_loop()
{
if (millis() - lastToggle >= 500)
{
lastToggle += 500;
q0State = !q0State;
digitalWrite(Q0_0, q0State ? HIGH : LOW);
}
}
Compila para un M-Duino 21+ con las placas Industrial Shields AVR 1.2.1. Dos reglas evitan la mayoría de problemas:
- No uses
delay().sketch_loop()se ejecuta dentro del ciclo, así que un delay para el programa Ladder y Modbus durante ese tiempo. Cuenta el tiempo conmillis(), como arriba. - Controla desde C++ solo salidas que el programa Ladder no use. OpenPLC escribe en cada ciclo las salidas que tienen una variable IEC. Con Modbus activado, escribe todas las salidas de I/O Config, así que antes sustituye allí la salida por 99.
Para compartir variables entre el diagrama Ladder y la extensión, sigue con Crear variables externas en OpenPLC para interactuar con una extensión Arduino.
Preguntas frecuentes sobre OpenPLC en PLC de Industrial Shields
¿Necesito el mod para usar un M-Duino en OpenPLC?
El mod añade las placas de Industrial Shields y su mapa de E/S. Antes de que existiera, se podía seleccionar el Arduino Mega y asignar los pines a mano, como en Mapear cualquier PLC M-Duino para OpenPLC. Con el mod, las direcciones siguen los nombres del PLC.
¿Por qué %IX1.4 es la entrada I1_4?
El mod rellena los huecos entre zonas con pines de relleno (99), así que los dos índices de la dirección IEC son la zona y el número de entrada del PLC.
¿Por qué mi salida es analógica si la quiero digital?
Las salidas conmutables empiezan como analógicas. Pásalas a Digital Outputs en I/O Config y pon el interruptor del PLC en ON.
¿Puedo usar Modbus con estos PLC en OpenPLC?
Sí, desde la pestaña Communications de Transfer Program to PLC. Modbus en Arduino Mega con OpenPLC muestra cómo las direcciones IEC se convierten en coils y registros.
¿Puedo seguir programando el PLC con el Arduino IDE?
Sí. Cargar desde el Arduino IDE sustituye el programa de OpenPLC, y al revés. Consulta cómo instalar las placas de Industrial Shields en el Arduino IDE.
Otras guías de OpenPLC
Llévalo a la práctica
OpenPLC ejecuta programas IEC 61131-3. Mira secuencias del mismo tipo en funcionamiento: una maqueta con GRAFCET, un simulador de secuencia de arranque y una máquina de estados en código.
Caso de estudio
Prueba una secuencia neumática primero en una maqueta.
Una cinta, 3 cilindros, 8 sensores y un PLC basado en Arduino, programado en 8 pasos GRAFCET.
Lee el caso de estudio
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
PLC Solution Library
Secuenciado seguro de electroválvulas en un PLC ESP32 con una máquina de estados
Cada actuación pasa por una sola máquina de estados, así que una condición mixta de carga y descarga no puede existir en el firmware.
Ver el ejemplo