Home - gevengood/Automatizacion-Tanque-Quimico-Doncel GitHub Wiki

Automatización y Monitoreo de Nivel en Tanque de Líquidos Químicos — CODESYS & OpenPLC

Universidad de La Sabana — Facultad de Ingeniería
Asignatura: Automatización Industrial e Internet Industrial de las Cosas (IIoT)
Autor: Jorge Doncel


Tabla de Contenido

  1. Contexto del Problema e Impacto Industrial
  2. Diseño del Circuito Lógico Combinacional y Mapas de Karnaugh
  3. Implementación en CODESYS V3.5 y Diseño de HMI (Control por Tiempo)
  4. Validación en OpenPLC y Prototipo Físico con ESP32 (Control por Sensores)
  5. Pruebas Experimentales y Validación
  6. Conclusiones
  7. Referencias Bibliográficas (Norma IEEE)

1. Contexto del Problema e Impacto Industrial

1.1 Planteamiento del Problema

En la industria de procesos químicos, el almacenamiento y dosificación de reactivos líquidos en tanques exige un monitoreo continuo, determinista y tolerante a fallos. El proyecto parte de la pregunta rectora de ingeniería planteada en la especificación técnica:

"How can industrial automation be utilized to automate the monitoring of chemical liquid tank levels, thereby reducing both energy consumption and liquid waste?" [1]

El sistema bajo estudio consta de un tanque de almacenamiento químico instrumentado con tres sensores discretos de nivel instalados a distintas alturas geométricas y cinco indicadores luminosos de estado en el panel de supervisión:

  • Sensores de Nivel (Entradas):

    • B1 (Tank empty): Sensor ubicado en la cota inferior (fondo del tanque). Entrega un 1 lógico cuando existe presencia de líquido por encima del nivel crítico de vaciado y 0 cuando el tanque se encuentra completamente vacío.
    • B2 (Minimum fill level): Sensor ubicado en la cota intermedia. Entrega un 1 lógico cuando el fluido supera el umbral mínimo de operación normal.
    • B3 (Overflow): Sensor ubicado en la cota superior de seguridad. Entrega un 1 lógico cuando el fluido alcanza la zona de alerta por sobrellenado o rebose.
  • Indicadores Luminosos (Salidas):

    • H1 (Fill level correct): Nivel operativo óptimo (B1=1, B2=1, B3=0).
    • H2 (Fill level too low): Nivel por debajo del mínimo recomendado (B1=1, B2=0, B3=0).
    • H3 (Fill level too high): Nivel excesivo o riesgo de desbordamiento (B1=1, B2=1, B3=1).
    • H4 (Tank empty): Tanque sin líquido (B1=0, B2=0, B3=0).
    • H5 (Error / Faulty sensor): Alarma crítica de diagnóstico de instrumentación.

[!WARNING] Condición de Diagnóstico de Fallos de Instrumentación:
De acuerdo con las especificaciones del problema: "In case a signal status which does not make sense due to a faulty sensor, the signal light H5 indicates an error. The case that all three sensors do not deliver a signal is not regarded as an error."
Por gravedad, el líquido llena el recipiente de abajo hacia arriba. Cualquier combinación donde un sensor superior marque presencia de fluido (1) mientras un sensor inferior marque ausencia (0) constituye un estado físicamente imposible atribuible a una falla de sensor, activando de inmediato la alarma H5 y deteniendo el bombeo.

1.2 Reducción del Consumo Energético y Desperdicio de Líquido Químico

La automatización de este proceso impacta directamente en la sostenibilidad y eficiencia de planta:

  1. Prevención de Derrames y Desperdicio Químico: Al detectar el estado de sobrellenado (H3) o una incongruencia en los sensores (H5), el PLC corta instantáneamente el suministro de la válvula de entrada, evitando el desbordamiento de sustancias químicas.
  2. Optimización Energética en Sistemas de Bombeo: Las bombas centrífugas de llenado solo se energizan cuando el proceso se encuentra activo y por debajo del límite superior, evitando el trabajo en vacío y la sobrepresión hidráulica.

2. Diseño del Circuito Lógico Combinacional y Mapas de Karnaugh

2.1 Tabla de Verdad del Proceso

Con 3 variables binarias de entrada (B3, B2, B1), el sistema posee 8 combinaciones posibles:

# B3 B2 B1 Condición Física del Tanque H1 H2 H3 H4 H5
0 0 0 0 Tanque Vacío — Ningún sensor detecta fluido (Válido) 0 0 0 1 0
1 0 0 1 Nivel Muy Bajo — Fluido solo en el fondo B1 (Válido) 0 1 0 0 0
2 0 1 0 Falla de Sensor — B2 activo pero B1 inactivo (Imposible) 0 0 0 0 1
3 0 1 1 Nivel Correcto — Fluido cubre B1 y B2 sin llegar a B3 (Válido) 1 0 0 0 0
4 1 0 0 Falla de Sensor — B3 activo sin B2 ni B1 (Imposible) 0 0 0 0 1
5 1 0 1 Falla de Sensor — B3 y B1 activos pero B2 inactivo (Imposible) 0 0 0 0 1
6 1 1 0 Falla de Sensor — B3 y B2 activos pero B1 inactivo (Imposible) 0 0 0 0 1
7 1 1 1 Nivel Muy Alto (Rebose) — Los 3 sensores detectan fluido (Válido) 0 0 1 0 0

2.2 Obtención de Ecuaciones Canónicas y Simplificación por Mapas de Karnaugh

A) Indicadores de Estados Operativos

Cada uno de los cuatro estados operativos válidos corresponde a un único minitérmino canónico:

Indicador Minitérmino Ecuación Booleana Mínima
H4 — Tanque Vacío m(0) H4 = B3' · B2' · B1'
H2 — Nivel Muy Bajo m(1) H2 = B3' · B2' · B1
H1 — Nivel Correcto m(3) H1 = B3' · B2 · B1
H3 — Sobrellenado m(7) H3 = B3 · B2 · B1

B) Simplificación por Mapa de Karnaugh para la Alarma de Error (H5)

La salida de error H5 se activa en los minitérminos correspondientes a estados físicamente incongruentes: H5 = Σm(2, 4, 5, 6).

Su expresión canónica en Suma de Productos (SOP) sin simplificar:

H5 = (B3'·B2·B1') + (B3·B2'·B1') + (B3·B2'·B1) + (B3·B2·B1')

Mapa de Karnaugh de 3 variables (código Gray en columnas B2·B1):

B3 \ B2·B1 00 01 11 10
0 0 (m0) 0 (m1) 0 (m3) 1 (m2)
1 1 (m4) 1 (m5) 0 (m7) 1 (m6)

Agrupación de Implicantes Primos Esenciales:

  1. Grupo 1 — Fila B3=1, columnas 00 y 01 (m4, m5): B3 permanece en 1, B2 permanece en 0 (B2'), B1 cambia → se elimina. Resultado: B3·B2'
  2. Grupo 2 — Columna 10, filas B3=0 y B3=1 (m2, m6): B3 cambia → se elimina, B2 permanece en 1, B1 permanece en 0 (B1'). Resultado: B2·B1'

[!NOTE] Ecuación Booleana Mínima:
H5 = (B2 · B1') + (B3 · B2')
Es decir, se detecta un error cuando un sensor de nivel superior reporta presencia de fluido sin que el sensor inmediatamente inferior lo haga, lo cual viola la física del llenado por gravedad. La simplificación reduce el circuito de 4 ramas de 3 contactos a 2 ramas de 2 contactos.


2.3 Diagrama de Transición de Estados del Proceso

stateDiagram-v2
    [*] --> H4_Tanque_Vacio : Inicio (B3=0, B2=0, B1=0)
    H4_Tanque_Vacio --> H2_Nivel_Bajo : Llenado alcanza B1
    H2_Nivel_Bajo --> H1_Nivel_Correcto : Llenado alcanza B2
    H1_Nivel_Correcto --> H3_Sobrellenado : Llenado alcanza B3
    H3_Sobrellenado --> H4_Tanque_Vacio : STOP / Reinicio
    
    H4_Tanque_Vacio --> H5_Error_Sensor : Falla detectada
    H2_Nivel_Bajo --> H5_Error_Sensor : Falla detectada
    H1_Nivel_Correcto --> H5_Error_Sensor : Falla detectada
    H5_Error_Sensor --> H4_Tanque_Vacio : Reset / Rearme

3. Implementación en CODESYS V3.5 y Diseño de HMI (Control por Tiempo)

3.1 Declaración de Variables en CODESYS (PLC_PRG)

En CODESYS V3.5 se implementó una aproximación de proceso controlado por tiempo, donde tres bloques temporizadores con retardo a la conexión (TON: tonNivel1, tonNivel2, tonNivel3) emulan la dinámica progresiva de ascenso del fluido químico a los 3 s, 6 s y 9 s desde la apertura de la válvula de entrada.

PROGRAM PLC_PRG
VAR
    // --- CONTROL DE MARCHA Y PARADA ---
    bStart          : BOOL;  // Pulsador Start
    bStop           : BOOL;  // Pulsador Stop
    bAutoRunning    : BOOL;  // Marca de sistema en marcha

    // --- ACTUADOR ---
    bValveInlet     : BOOL;  // Válvula de llenado

    // --- TEMPORIZADORES DE LLENADO (CONTROL POR TIEMPO) ---
    tonNivel1       : TON;   // Tiempo hasta sensor de fondo B1 (3 seg)
    tonNivel2       : TON;   // Tiempo hasta sensor medio B2 (6 seg)
    tonNivel3       : TON;   // Tiempo hasta sensor alto B3 (9 seg)

    // --- SENSORES DEL TANQUE ---
    B1              : BOOL;  // Sensor fondo
    B2              : BOOL;  // Sensor medio
    B3              : BOOL;  // Sensor alto

    // --- LÁMPARAS INDICADORAS ---
    H1              : BOOL;  // Nivel correcto
    H2              : BOOL;  // Nivel bajo
    H3              : BOOL;  // Nivel alto / Sobrellenado
    H4              : BOOL;  // Tanque vacío
    H5              : BOOL;  // Falla de sensor

    // --- INTERRUPTORES PARA PROBAR FALLA EN EL HMI ---
    bFalla_B2       : BOOL;  // Fuerza sensor B2
    bFalla_B3       : BOOL;  // Fuerza sensor B3
END_VAR

Declaración de Variables en CODESYS


3.2 Explicación del Diagrama Ladder en CODESYS (Networks 1 a 10)

Networks 1 a 4: Enclavamiento Maestro, Válvula y Temporización Inicial

  • Network 1 (Marcha/Parada con Seguridad): Enclava la marca bAutoRunning al pulsar bStart. En serie se disponen los contactos normalmente cerrados bStop y H5, garantizando que cualquier parada manual o falla de sensores desenergice inmediatamente el proceso.
  • Network 2 (Control de Válvula de Entrada bValveInlet): Energiza la válvula de llenado mientras bAutoRunning esté activo y el sensor superior B3 no se haya activado ([/] B3), previniendo el derrame químico.
  • Network 3 (Activación de Sensor B1 por Tiempo): El temporizador tonNivel1 (PT = T#3S) activa la bobina B1 tras 3 segundos de marcha.
  • Network 4 (Activación de Sensor B2 e Inyección de Falla): El temporizador tonNivel2 (PT = T#6S) activa B2 tras 6 segundos. En paralelo se incluye el contacto bFalla_B2 para simular fallos desde el HMI.

Ladder CODESYS Networks 1 a 4

Networks 5 a 9: Temporización Superior y Salidas Combinacionales

  • Network 5 (Activación de Sensor B3): El temporizador tonNivel3 (PT = T#9S) activa B3 a los 9 segundos de llenado (con rama paralela bFalla_B3).
  • Network 6 (Indicador H4 — Tanque Vacío): Implementa B3'·B2'·B1' → H4.
  • Network 7 (Indicador H2 — Nivel Muy Bajo): Implementa B3'·B2'·B1 → H2.
  • Network 8 (Indicador H1 — Nivel Correcto): Implementa B3'·B2·B1 → H1.
  • Network 9 (Indicador H3 — Sobrellenado): Implementa B3·B2·B1 → H3.

Ladder CODESYS Networks 5 a 9

Network 10: Detección de Error de Sensores (H5)

  • Network 10 (Indicador H5 — Falla en Sensores): Implementa la ecuación reducida por Karnaugh (B2·B1') + (B3·B2') → H5 mediante dos ramas en paralelo.

Ladder CODESYS Network 10


3.3 Diseño y Validación del HMI en CODESYS Visualizations

El HMI desarrollado integra los siguientes elementos:

  1. Tanque Seccionado con Animación de Color: Tres bloques de fluido acoplados a PLC_PRG.B1, PLC_PRG.B2 y PLC_PRG.B3 que conmutan de blanco a azul cian conforme asciende el nivel.
  2. Sensores Laterales (B1, B2, B3) y Válvula Superior (bValveInlet): Indicadores luminosos en la pared izquierda del tanque y tubería animada que cambia a verde al abrirse.
  3. Tablero de Señalización (H4, H2, H1, H3, H5): Cinco lámparas diferenciadas cromáticamente según su criticidad.
  4. Banner de Alarma Dinámica: Configurado con la propiedad Invisible := NOT PLC_PRG.H5, permanece oculto en operación normal y aparece automáticamente ante una falla de sensores.
  5. Panel de Control: Pulsadores momentáneos START y STOP junto al selector SIMULAR FALLO.

Vista General de Edición del HMI

Vista General HMI CODESYS

Validación de Estados en Simulación

  • Estado Inicial (H4 Activo — Tanque Vacío): HMI Estado Tanque Vacío

  • Llenado Completo a los 9 s (H3 — Sobrellenado): HMI Estado Sobrellenado

  • Inyección de Falla (B2=1, B1=0 → H5 Encendido): HMI Estado Falla H5


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

En la configuración del dispositivo (ESP32-DOIT DEVKIT V1) dentro de OpenPLC Editor, se vincularon las direcciones físicas GPIO con el direccionamiento estándar IEC 61131-3:

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)

El programa implementado en OpenPLC Editor consta de 10 peldaños (Rungs) que procesan en tiempo real las señales físicas provenientes de los sensores infrarrojos FC-51 y los pulsadores:

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


5. Pruebas Experimentales y Validación

Durante la integración entre simulación y equipamiento físico se ejecutó un protocolo de validación cubriendo las 8 combinaciones posibles de la tabla de verdad:

Prueba Sensores (B3, B2, B1) Respuesta CODESYS (HMI) Respuesta Prototipo Físico (ESP32) Resultado
1 0, 0, 0 H4 encendida, tanque en blanco LED H4 (GPIO 25) encendido fijo ✅
2 0, 0, 1 Nivel 1 a los 3 s, H2 activo LED H2 (GPIO 26) encendido fijo ✅
3 0, 1, 1 Nivel 2 a los 6 s, H1 activo LED H1 (GPIO 27) encendido fijo ✅
4 1, 1, 1 Nivel máximo a los 9 s, H3 activo LED H3 (GPIO 32) encendido + ContadorLotes +1 ✅
5 Combinaciones inválidas H5 activo, banner de alarma visible LED H5 (GPIO 33) encendido, paro de seguridad ✅

Consideraciones Técnicas:

  • Desacoplamiento Energético con GND Común: La alimentación separada de 5 V para los sensores e indicadores respecto al ESP32, unida mediante el riel de GND común, mantuvo la tensión lógica estable durante la operación simultánea de todos los periféricos.

6. Conclusiones

  • Simplificación Lógica y Detección de Fallos: El diseño combinacional a partir de la tabla de verdad de 8 estados y su reducción mediante Mapas de Karnaugh permitió sintetizar la condición de alarma H5 = (B2 · B1') + (B3 · B2') en solo dos ramas en paralelo dentro del diagrama Ladder. Esto garantiza la detección inmediata de cualquier estado físicamente imposible en el llenado del tanque y el corte automático del proceso por seguridad.
  • Equivalencia entre Simulación por Tiempo y Control por Sensores: Se validó el funcionamiento del sistema bajo los dos enfoques requeridos: en CODESYS V3.5 mediante temporizadores TON (3 s, 6 s y 9 s) integrados a una interfaz HMI interactiva con visualización dinámica de nivel y alarmas, y en OpenPLC mediante lectura directa de los sensores infrarrojos FC-51 y conteo automático de lotes con un bloque CTU.
  • Estabilidad Eléctrica del Prototipo Físico: La implementación con el microcontrolador ESP32, empleando dos fuentes independientes de 5 V DC unificadas por un nodo de GND común, resistencias pull-down de 10 kΩ en los pulsadores y resistencias limitadoras en los 5 LEDs indicadores, aseguró lecturas digitales estables y sin caídas de tensión durante las pruebas de validación.

7. Referencias Bibliográficas (Norma IEEE)

[1] Learnchannel-TV, "PLC Programming – Ladder Logic (LD): Tank Level Monitoring," Material de referencia académica, Facultad de Ingeniería, Universidad de La Sabana, Chía, Colombia, 2026.

[2] International Electrotechnical Commission, Programmable controllers – Part 3: Programming languages, IEC Standard 61131-3, Geneva, Switzerland.

[3] T. R. Alves, M. Buratto, F. M. de Souza, and T. V. Rodrigues, "OpenPLC: An open source alternative to automation," in Proc. IEEE Global Humanitarian Technology Conference (GHTC), San Jose, CA, USA, 2021.

[4] J. Doncel and D. S. Buendia Londoño, "Automatización de Celda de Selección y Envasado de Mandarina — Fruver 1A S.A.," Universidad de La Sabana, Chía, Colombia, 2026. [Online]. Available: https://github.com/gevengood/Fruver_1A_Buendia_Doncel/wiki