4. Validacion en OpenPLC y Prototipo Fisico - gevengood/Automatizacion-Tanque-Quimico-Doncel GitHub Wiki

4. Validación en OpenPLC y Prototipo Físico con ESP32 (Control por Sensores)

4.1 Arquitectura del Prototipo Físico

Para validar la solución con equipamiento real bajo una aproximación de proceso controlado por sensores, se construyó un banco de pruebas electrónico gobernado por un microcontrolador ESP32-DOIT DevKit V1 (30 pines) ejecutando la lógica IEC 61131-3 diseñada en OpenPLC Editor.

Componentes del Montaje:

  1. Unidad de Control (ESP32 DevKit V1): Procesador dual-core a 3.3 V encargado de escanear los sensores infrarrojos y pulsadores, procesar las ecuaciones combinacionales y el conteo de lotes (CTU), y conmutar los indicadores luminosos.
  2. Doble Fuente de 5 V DC con GND Común:
    • Fuente 1 (5 V DC): Alimentación exclusiva del ESP32.
    • Fuente 2 (5 V DC): Alimentación de los 3 sensores FC-51 y los 5 LEDs indicadores.
    • GND Común: Ambos polos negativos se interconectan en un riel común de tierra.
  3. Tres Sensores Infrarrojos FC-51 (B1, B2, B3): Basados en el comparador LM393 con ajuste de umbral mediante potenciómetro. Operan con lógica Active-LOW: entregan LOW al detectar obstáculo y HIGH en ausencia. En el Ladder se acondicionan mediante contactos negados ([/]) para normalizar las banderas internas.
  4. Dos Pulsadores (START y STOP) en configuración Pull-Down: Con resistencias de 10 kΩ hacia GND en las entradas digitales del ESP32.
  5. Cinco LEDs (H1 a H5) con Resistencias Limitadoras: Cada salida digital se conecta al LED en serie con resistencia de 220 Ω — 330 Ω hacia GND común.

4.2 Diagrama Esquemático del Circuito Físico

  [FUENTE 1: 5V DC]                                       [FUENTE 2: 5V DC (Sensores y LEDs)]
         |                                                                 |
         +-------------------+                         +-------------------+-------------------+
         |                   |                         |                                       |
         v                   |                         v                                       v
  +--------------+           |               +-------------------+                   +-------------------+
  |  VIN (5V)    |           |               | VCC Sensores FC51 |                   |  Etapa de Salida  |
  |              |           |               +-------------------+                   +-------------------+
  |    ESP32     |           |                 |       |       |
  |  DEVKIT V1   |           |        OUT(B1)  |       |       |  OUT(B3)
  |              | <---------+-----------------+       |       +---------+
  |   GPIO 21    |  (%IX0.2: Sensor FC-51 B1 Fondo)    |                 |
  |   GPIO 22    | <-----------------------------------+ OUT(B2)         |
  |   GPIO 23    | <-----------------------------------------------------+
  |              |
  |   GPIO 18    | <--- [Pulsador START] <--- +VCC  (con 10k Pull-Down a GND)
  |   GPIO 19    | <--- [Pulsador STOP ] <--- +VCC  (con 10k Pull-Down a GND)
  |   GPIO 05    | <--- [Pulsador RESET] <--- +VCC  (con 10k Pull-Down a GND)
  |              |
  |   GPIO 25    | ---> [220 Ω] ---> [>| LED H4: Tanque Vacío   ] ---> GND COMÚN
  |   GPIO 26    | ---> [220 Ω] ---> [>| LED H2: Nivel Muy Bajo ] ---> GND COMÚN
  |   GPIO 27    | ---> [220 Ω] ---> [>| LED H1: Nivel Correcto ] ---> GND COMÚN
  |   GPIO 32    | ---> [220 Ω] ---> [>| LED H3: Sobrellenado   ] ---> GND COMÚN
  |   GPIO 33    | ---> [220 Ω] ---> [>| LED H5: Falla Sensores ] ---> GND COMÚN
  |              |
  |     GND      | --------------------------------------------------------------> GND COMÚN
  +--------------+                                                                (Fuentes 1 y 2)

4.3 Mapeo de Pines (Pin Mapping) y Variables en OpenPLC Editor

Pin GPIO Tipo Dirección IEC Alias Función
18 Digital Input %IX0.0 In_Start Pulsador de marcha (Pull-Down)
19 Digital Input %IX0.1 In_Stop Pulsador de parada (Pull-Down)
21 Digital Input %IX0.2 In_B1 Sensor FC-51 Nivel Fondo (B1)
22 Digital Input %IX0.3 In_B2 Sensor FC-51 Nivel Medio (B2)
23 Digital Input %IX0.4 In_B3 Sensor FC-51 Nivel Alto (B3)
05 Digital Input %IX0.5 In_Reset Pulsador de reinicio de lotes
25 Digital Output %QX0.0 LED_H4 LED Tanque Vacío (H4)
26 Digital Output %QX0.1 LED_H2 LED Nivel Muy Bajo (H2)
27 Digital Output %QX0.2 LED_H1 LED Nivel Correcto (H1)
32 Digital Output %QX0.3 LED_H3 LED Sobrellenado (H3)
33 Digital Output %QX0.4 LED_H5 LED Falla en Sensores (H5)

Mapeo de Pines en OpenPLC

Declaración de Variables en main (OpenPLC)

  VAR
    In_Start : BOOL AT %IX0.0; (* Pulsador físico de marcha del sistema (GPIO 18) *)
    In_Stop : BOOL AT %IX0.1; (* Pulsador físico de parada del sistema (GPIO 19) *)
    In_B1 : BOOL AT %IX0.2; (* Sensor FC-51: Detección nivel fondo / vacío (GPIO 21) *)
    In_B2 : BOOL AT %IX0.3; (* Sensor FC-51: Detección nivel mínimo / medio (GPIO 22) *)
    In_B3 : BOOL AT %IX0.4; (* Sensor FC-51: Detección nivel alto / rebose (GPIO 23) *)
    In_Reset : BOOL AT %IX0.5; (* Pulsador físico de reset para contador de lotes (GPIO 5) *)
    LED_H4 : BOOL AT %QX0.0; (* Salida LED: Indicador Tanque Vacío (GPIO 25) *)
    LED_H2 : BOOL AT %QX0.1; (* Salida LED: Indicador Nivel Muy Bajo (GPIO 26) *)
    LED_H1 : BOOL AT %QX0.2; (* Salida LED: Indicador Nivel Correcto (GPIO 27) *)
    LED_H3 : BOOL AT %QX0.3; (* Salida LED: Indicador Sobrellenado (GPIO 32) *)
    LED_H5 : BOOL AT %QX0.4; (* Salida LED: Alarma por falla en sensores (GPIO 33) *)
    bAutoRunning : BOOL; (* Bandera de marcha del proceso con enclavamiento *)
    B1 : BOOL; (* Estado lógico normalizado del sensor de fondo B1 *)
    B2 : BOOL; (* Estado lógico normalizado del sensor medio B2 *)
    B3 : BOOL; (* Estado lógico normalizado del sensor superior B3 *)
    ContadorLotes : CTU; (* Bloque de conteo ascendente de lotes producidos *)
    iLotesActuales : INT; (* Registro del conteo actual de ciclos completados *)
    bLoteCompleto : BOOL; (* Bandera de meta de lotes alcanzada *)
    CTU0 : CTU;
  END_VAR

Variables OpenPLC Parte 1 Variables OpenPLC Parte 2


4.4 Desarrollo del Programa Ladder en OpenPLC (Rungs 1 a 10)

Rungs 1 a 3: Enclavamiento de Seguridad y Normalización de Sensores (B1, B2)

  • Rung 1 (Circuito de Marcha y Parada con Seguridad): Enclava la bandera de operación bAutoRunning al accionar el pulsador físico In_Start (%IX0.0), manteniendo en serie los contactos normalmente cerrados de parada In_Stop (%IX0.1) y de alarma LED_H5 (%QX0.4).
  • Rung 2 (Normalización del Sensor FC-51 B1): Dado que el módulo FC-51 opera con salida Active-LOW (0 V al detectar obstáculo), se invierte la entrada física In_B1 (%IX0.2) mediante un contacto negado |/|, activando la variable interna B1.
  • Rung 3 (Normalización del Sensor FC-51 B2): Invierte la señal de In_B2 (%IX0.3) para activar la marca lógica B2.

OpenPLC Rungs 1 a 3

Rungs 4 a 6: Normalización de Sensor Superior (B3) e Indicadores H4 y H2

  • Rung 4 (Normalización del Sensor FC-51 B3): Invierte la señal de In_B3 (%IX0.4) para obtener la variable lógica B3.
  • Rung 5 (LED H4 — Tanque Vacío): Evalúa tres contactos normalmente cerrados en serie (B1, B2, B3) para energizar LED_H4 (%QX0.0 — GPIO 25) cuando ningún sensor detecta fluido.
  • Rung 6 (LED H2 — Nivel Muy Bajo): Energiza LED_H2 (%QX0.1 — GPIO 26) ante la presencia de fluido exclusivamente en el nivel inferior.

OpenPLC Rungs 4 a 6

Rungs 7 a 9: Indicadores de Nivel Correcto (H1), Sobrellenado (H3) y Alarma de Falla (H5)

  • Rung 7 (LED H1 — Nivel Correcto): Activa la salida LED_H1 (%QX0.2 — GPIO 27) cuando B1 y B2 están activos sin B3.
  • Rung 8 (LED H3 — Sobrellenado): Activa LED_H3 (%QX0.3 — GPIO 32) cuando los tres sensores (B1, B2, B3) se encuentran simultáneamente activos.
  • Rung 9 (LED H5 — Alarma por Falla en Sensores): Implementa la ecuación reducida por Karnaugh (B2·B1') + (B3·B2') mediante dos ramas en paralelo, activando LED_H5 (%QX0.4 — GPIO 33) ante cualquier combinación físicamente imposible.

OpenPLC Rungs 7 a 9

Rung 10: Conteo Automático de Lotes (Bloque CTU)

  • Rung 10 (Contador de Lotes Requeridos): Cada flanco ascendente de LED_H3 en la entrada CU del bloque ContadorLotes (CTU) incrementa iLotesActuales (CV) hasta la meta preestablecida (PV = 5 lotes), con reinicio mediante In_Reset (R).

OpenPLC Rung 10 Contador de Lotes


Anterior: 3. Implementación en CODESYS y HMI | Siguiente: 5. Pruebas, Conclusiones y Referencias IEEE