Un técnico en campo tiene una presión inmensa. El operador lo está mirando, la máquina está detenida y la empresa está perdiendo dinero. El Manual de Diagnóstico y Servicio elimina la improvisación proporcionando diagramas de flujo lógicos basados en preguntas de Sí/No.
La filosofía central del diagnóstico industrial es "Dividir y Vencerás" (Half-Splitting). Si la válvula de gas no abre, no revisas primero la placa madre y luego la bobina. Revisas el punto medio: la bornera de conexión. Si hay 24V allí, la placa funciona y el cable/bobina está roto. Si no hay 24V, el cable está sano pero la placa o fuente falló. Con una sola medición, descartas el 50% del sistema.
El código E2E que escribimos en el Día 302 es seguro, lo que significa que la Máquina de Estados (FSM) jamás abrirá la válvula si no hay flujo de gas o si la presión está baja. Pero si el técnico sospecha que el relé de la válvula se quemó, necesita poder activarlo a voluntad para medir el voltaje, sin que el software se lo impida. Por eso, diseñaremos una combinación secreta en el teclado para despertar un "Modo Dios" de diagnóstico exclusivo para el técnico.
Regla 1: Protocolo LOTO (Lockout / Tagout).
Antes de que el técnico meta las manos en el gabinete eléctrico, debe bajar el interruptor magnetotérmico (Breaker) de la alimentación principal de 110V/220V y colocarle un candado físico con su nombre (LOTO). Solo si el diagnóstico requiere forzar válvulas (como en el flujograma), el equipo se vuelve a energizar, pero bajo extrema precaución y cortando primero el flujo físico de gas cerrando las válvulas esféricas manuales.
Regla 2: División de Tensión.
La Tesis está diseñada modularmente. Si la pantalla no enciende, el técnico no asume que el STM32 murió. Retira el cable de 24V que alimenta la placa y mide la Fuente de Poder (PSU) aislada. Si la fuente marca 24V, el corto está en la placa base. Si marca 0V, el corto destruyó la fuente o se fundió el fusible primario.
Regla 3: FRU (Field Replaceable Unit).
En campo no se usan cautines. Es ilegal e inseguro desoldar un chip en una atmósfera explosiva (ATEX). Si se diagnostica que el driver del relé falló, el técnico desenchufa la placa completa (FRU) y atornilla una nueva. La placa dañada se envía al laboratorio para su re-trabajo bajo condiciones controladas.
Para darle al técnico el poder de probar periféricos individualmente, programaremos una secuencia secreta de teclas. Al ingresar a este modo, la máquina suspende la seguridad transaccional (El flujo End-to-End del Día 302 se pausa) y permite el control manual crudo del hardware.
/**
* @file service_diagnostic_mode.c
* @brief Menú Oculto para Técnicos de Campo (Overriding Safety FSM)
*/
#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <stdbool.h>
// Dependencias
extern void Valve_Main_Open(void);
extern void Valve_Main_Close(void);
extern uint32_t Read_Pressure_mBar(void);
extern void LCD_Clear(void);
extern void LCD_Print_Line(uint8_t line, const char* text);
extern IWDG_HandleTypeDef hiwdg;
// Bandera global para suspender la máquina de estados principal
volatile bool System_In_Service_Mode = false;
// =========================================================================
// INGRESO AL MODO DE SERVICIO (SECUENCIA OCULTA)
// =========================================================================
/**
* @brief Verifica si el usuario presiona CLEAR + ENTER simultáneamente por 3 segundos.
* Esto se invoca en el bucle principal de la FSM cuando está en STATE_IDLE.
*/
void Check_For_Service_Menu_Entry(void) {
// Si ambos botones están presionados
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_RESET &&
HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == GPIO_PIN_RESET) {
HAL_Delay(3000); // Bloqueo simple para confirmar "Long Press"
// Si después de 3 segundos siguen presionados...
if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) == GPIO_PIN_RESET &&
HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == GPIO_PIN_RESET) {
System_In_Service_Mode = true; // Suspende FSM Principal
Run_Diagnostic_Menu(); // Entra al Bucle Técnico
}
}
}
// =========================================================================
// BUCLE DE DIAGNÓSTICO (CONTROL MANUAL)
// =========================================================================
void Run_Diagnostic_Menu(void) {
LCD_Clear();
LCD_Print_Line(0, "!! MODO SERVICIO !!");
LCD_Print_Line(1, "[1] TEST VÁLVULA ON");
LCD_Print_Line(2, "[2] TEST VÁLVULA OFF");
LCD_Print_Line(3, "[3] LEER SENSOR ADC");
uint8_t key_pressed = 0;
while (System_In_Service_Mode) {
HAL_IWDG_Refresh(&hiwdg); // Alimentar al perro para no reiniciar
// Función ficticia de lectura de teclado matricial
key_pressed = Keypad_Read_Char();
switch (key_pressed) {
case '1':
// ADVERTENCIA: Esto puentea la seguridad. Asegúrese que no haya
// presión de gas o que la válvula manual esté cerrada.
Valve_Main_Open();
LCD_Print_Line(0, ">> VÁLVULA FORZADA ON");
break;
case '2':
Valve_Main_Close();
LCD_Print_Line(0, ">> VÁLVULA OFF ");
break;
case '3':
{
uint32_t press = Read_Pressure_mBar();
char buf[20];
// Mostramos lectura cruda para validar si el cable 4-20mA está roto
snprintf(buf, sizeof(buf), ">> PRES: %lu mBar ", press);
LCD_Print_Line(0, buf);
break;
}
case 'C': // Botón CLEAR
// Salir del modo servicio y devolver control a la FSM
Valve_Main_Close(); // Apagar todo por seguridad al salir
System_In_Service_Mode = false;
LCD_Clear();
break;
}
HAL_Delay(100);
}
}
Objetivo del día: Mantenibilidad (MTTR) e Interfaz de Bajo Nivel.
El Mean Time To Repair (MTTR o Tiempo Medio de Reparación) es una métrica industrial crítica. Si la máquina se rompe, ¿cuánto tarda un técnico en volver a hacerla ganar dinero? Si no provees un flujograma de diagnóstico, el MTTR será de días. El técnico tendrá que desarmar la placa con un multímetro a ciegas. Si le entregas el **Manual de Servicio**, reducirás el MTTR a minutos, indicándole exactamente qué bornera medir para descartar la fuente de 24V o el relevador.
Pero el mayor logro de ingeniería de hoy es el **Menú Oculto (Service Diagnostic Mode)** en el Firmware. En condiciones normales (Día 302 y 303), tu código es una fortaleza paranoica que aborta la misión al menor error de presión o timeout. Pero un técnico necesita probar si una bobina sirve, independientemente de la presión de gas. Al crear una "puerta trasera" segura (que requiere presionar dos teclas durante 3 segundos para evitar que un despachador entre por accidente), le permites al técnico inyectar 24V directamente a los actuadores o ver los datos crudos del ADC. Convertiste un monolito de silicio impenetrable en una herramienta de autodiagnóstico transparente, cerrando definitivamente la brecha entre el laboratorio y el campo de batalla.