Ir al contenido

ESP32 PLC, M-Duino y Ardbox con OpenPLC

Instala el mod de Industrial Shields, entiende el mapa de E/S por defecto, pasa salidas analógicas a digitales y añade C++ en una extensión Arduino
6 de septiembre de 2024 por
Boot & Work Corp. S.L, Arnau Tena

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

FamiliaBasado enEn OpenPLC
M-DuinoArduino MegaPlaca seleccionable con el mod. Los relés son salidas digitales
ArdboxArduino LeonardoPlaca seleccionable con el mod
ESP32 PLC, incluido el ESP32 PLC 14ESP32Placa seleccionable con el mod
Raspberry PLCRaspberry PiIndustrial 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

  1. 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.
  2. Cierra el editor y descarga el mod, un instalador para Windows: ISModInstaller.exe.
  3. Ejecútalo. Cuando te pida la carpeta de instalación, selecciona la carpeta del OpenPLC Editor, normalmente en tu carpeta de usuario.
  4. 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ñalDirección IECAsignación por defectoEjemplo (M-Duino 58+)
Entradas digitales%IXMismos índices que el PLC. Los pines con el número 99 rellenan los huecos y OpenPLC los ignoraI1_4 es %IX1.4
Salidas digitales y relés%QXMismos índices que el PLC, con el mismo relleno. Los relés son salidas digitalesQ0_3 es %QX0.3
Entradas analógicas%IWUn índice, en el orden de la lista, sin rellenoI0_7 es %IW0, I0_8 es %IW1
Salidas analógicas%QWUn índice, sin relleno. Las salidas que pueden ser analógicas o digitales empiezan como analógicasA0_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.

I/O Config de OpenPLC de un M-Duino 58+ con las listas de entradas digitales, salidas digitales, entradas analógicas y salidas analógicas
I/O Config de un M-Duino 58+: las entradas 99 mantienen las direcciones digitales alineadas con los nombres del PLC.

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

  1. En Analog Outputs, sustituye A0_5 por 99.
  2. En Digital Outputs, sustituye el primer 99 por Q0_5.
  3. Haz clic en Save Changes.

La salida mantiene una dirección que coincide con su nombre: %QX0.5 es Q0_5.

I/O Config de OpenPLC donde A0_5 se sustituye por 99 en las salidas analógicas y Q0_5 se añade a las salidas digitales
A0_5 se sustituye por 99 en Analog Outputs y Q0_5 ocupa la posición libre en Digital Outputs.

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.

  1. En Analog Outputs, sustituye A0_0 por 99.
  2. Añade Q0_0 al final de Digital Outputs.
  3. 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.

I/O Config de OpenPLC de un M-Duino 57R+ donde A0_0 se sustituye por 99 y Q0_0 se añade después de las salidas de relé
M-Duino 57R+: A0_0 se sustituye por 99 y Q0_0 se añade después de los relés, en %QX3.0.

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.

Interruptor de configuración de una salida del PLC: ON para modo digital, OFF para modo analógico
Interruptor de configuración de la salida: ON para digital, OFF para analógica.

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.

Árbol de proyecto del OpenPLC Editor con el menú del signo más abierto y Arduino extension seleccionado
El icono gris con el signo más del árbol de proyecto añade una extensión Arduino.

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 con millis(), 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.

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.

Buscar en nuestro blog

Boot & Work Corp. S.L, Arnau Tena 6 de septiembre 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