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
- Contexto del Problema e Impacto Industrial
- Diseño del Circuito Lógico Combinacional y Mapas de Karnaugh
- Implementación en CODESYS V3.5 y Diseño de HMI (Control por Tiempo)
- Validación en OpenPLC y Prototipo Físico con ESP32 (Control por Sensores)
- Pruebas Experimentales y Validación
- Conclusiones
- 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
1lógico cuando existe presencia de líquido por encima del nivel crítico de vaciado y0cuando el tanque se encuentra completamente vacío. - B2 (Minimum fill level): Sensor ubicado en la cota intermedia. Entrega un
1ló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
1lógico cuando el fluido alcanza la zona de alerta por sobrellenado o rebose.
- B1 (Tank empty): Sensor ubicado en la cota inferior (fondo del tanque). Entrega un
-
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:
- 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.
- 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:
- 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'
- 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

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
bAutoRunningal pulsarbStart. En serie se disponen los contactos normalmente cerradosbStopyH5, 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 mientrasbAutoRunningesté activo y el sensor superiorB3no 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 bobinaB1tras 3 segundos de marcha. - Network 4 (Activación de Sensor B2 e Inyección de Falla): El temporizador
tonNivel2(PT =T#6S) activaB2tras 6 segundos. En paralelo se incluye el contactobFalla_B2para simular fallos desde el HMI.

Networks 5 a 9: Temporización Superior y Salidas Combinacionales
- Network 5 (Activación de Sensor B3): El temporizador
tonNivel3(PT =T#9S) activaB3a los 9 segundos de llenado (con rama paralelabFalla_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.

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.

3.3 Diseño y Validación del HMI en CODESYS Visualizations
El HMI desarrollado integra los siguientes elementos:
- Tanque Seccionado con Animación de Color: Tres bloques de fluido acoplados a
PLC_PRG.B1,PLC_PRG.B2yPLC_PRG.B3que conmutan de blanco a azul cian conforme asciende el nivel. - 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. - Tablero de Señalización (H4, H2, H1, H3, H5): Cinco lámparas diferenciadas cromáticamente según su criticidad.
- 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. - Panel de Control: Pulsadores momentáneos
STARTySTOPjunto al selectorSIMULAR FALLO.
Vista General de Edición del HMI

Validación de Estados en Simulación
-
Estado Inicial (H4 Activo — Tanque Vacío):

-
Llenado Completo a los 9 s (H3 — Sobrellenado):

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

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:
- 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.
- 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.
- 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
LOWal detectar obstáculo yHIGHen ausencia. En el Ladder se acondicionan mediante contactos negados ([/]) para normalizar las banderas internas. - Dos Pulsadores (START y STOP) en configuración Pull-Down: Con resistencias de 10 kΩ hacia GND en las entradas digitales del ESP32.
- 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) |

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

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
bAutoRunningal accionar el pulsador físicoIn_Start(%IX0.0), manteniendo en serie los contactos normalmente cerrados de paradaIn_Stop(%IX0.1) y de alarmaLED_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 internaB1. - Rung 3 (Normalización del Sensor FC-51 B2): Invierte la señal de
In_B2(%IX0.3) para activar la marca lógicaB2.

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ógicaB3. - Rung 5 (LED H4 — Tanque Vacío): Evalúa tres contactos normalmente cerrados en serie (
B1,B2,B3) para energizarLED_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.

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.

Rung 10: Conteo Automático de Lotes (Bloque CTU)
- Rung 10 (Contador de Lotes Requeridos): Cada flanco ascendente de
LED_H3en la entradaCUdel bloqueContadorLotes(CTU) incrementaiLotesActuales(CV) hasta la meta preestablecida (PV = 5 lotes), con reinicio medianteIn_Reset(R).

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