# Análisis del Software PLC Mixer/Starblend (TIA Portal v18) Basado en el archivo `full_project_representation.md`. Análisis técnico del software PLC para un ingeniero informático familiarizado con PLCs. ## Fase 1: Estructura General y Tipos de Datos (UDTs) ### Organización del Proyecto El proyecto sigue una estructura estándar y modular en TIA Portal: - **Tipos de Datos PLC (UDTs):** Definen estructuras de datos personalizadas y reutilizables. Fundamental para estandarizar el manejo de dispositivos y datos complejos. - **Bloques de Función (FBs):** Encapsulan lógica de control reutilizable con memoria asociada (DBs de instancia). Ideales para controlar componentes como válvulas, motores, o implementar lógica compleja como PID o secuenciadores. - **Funciones (FCs):** Contienen lógica reutilizable sin memoria propia. Usadas para cálculos, conversiones, o tareas específicas que no requieren estado persistente. - **Bloques de Datos (DBs):** - **Globales:** Almacenan datos compartidos por todo el programa (Configuración, Estado, Interfaces). - **De Instancia:** Almacenan los datos internos (estado) de cada llamada a un FB. - **Variables PLC (Tags):** Variables globales (Marcas, Temporizadores, Contadores). La conversión de LAD a SCL probablemente se enfocó en FBs y FCs para mejorar la estructuración, legibilidad y capacidad de implementar algoritmos complejos. ### Tipos de Datos PLC (UDTs) Relevantes Los UDTs definen las plantillas para los datos de componentes comunes: - `AnalogInstrument`: Estructura estándar para entradas analógicas (sensores). Incluye `PV`, `SP`, escalado (`Zero`, `Span`), valor filtrado (`PVFiltered`), y estados (`Alarm`, `Mask`, `Wait`). - `CIP_Link_Type`: Define la interfaz de datos con el sistema CIP (peticiones, estados, fase actual). - `Cylinder_Valve` / `MotorValve`: Para control de válvulas. Incluyen comandos (`Open`, `Close`), realimentaciones (`Opened`, `Closed`), y estados (`Fault`). `MotorValve` podría incluir posición. - `DosingCtrl`: Específico para control de dosificación. Contiene setpoints, valores actuales, estado de actuador asociado. - `DriveCtrl`: Para control de motores/bombas. Incluye comandos (`Start`, `Stop`), feedback (`Running`, `Fault`), y posible control de velocidad. - `FlowMeter`: Representa un medidor de flujo. Incluye `Flow Rate`, `Totalizer`, y estado. - `HMI_Commands`: Estructura para recibir comandos desde el HMI. - `HMI_Status`: Estructura para enviar datos de estado/proceso al HMI. - `LevelProbe`: Representa sondas de nivel (analógicas o discretas). - `PID_Compact`: Probablemente encapsula los parámetros y E/S para el bloque `PID_Compact` de Siemens. - `TankLevelCtrl`: Estructura para el control de nivel en tanques (sondas, setpoints, control de actuadores). - `Totalizer`: Estructura genérica para acumular valores (volumen, masa). *Observación:* El uso intensivo de UDTs promueve la modularidad y facilita la creación de instancias para múltiples dispositivos idénticos. ## Fase 2: Bloques de Función (FBs) y Funciones (FCs) Clave Agrupados por funcionalidad del Mixer/Starblend: ### Control Principal y Secuencia - `BlenderCtrl__Main` (FB): **Controlador principal.** Gestiona estados generales (Parado, Producción, CIP), coordina sub-funciones, maneja totalizadores generales (ref: `mResetProductTotTmr`, `mResetTotalizerTmr`). - `BlenderRun__Control` (FB): Gestiona la **secuencia de producción**. Inicia/detiene dosificación, carbonatación, fases de arranque/parada (ref: `mTON_Reset_RecircPHE_Goo`). - `SequenceControl` (FB): Posiblemente un secuenciador genérico utilizado por los anteriores. - `ManageState` (FC): Determina el estado operativo de la máquina basado en condiciones actuales. ### Dosificación y Control de Ratio - `DosingControl` (FB): Controla la adición de **un** ingrediente (agua, jarabe). Se instanciará varias veces. Recibe setpoint y actúa sobre válvula/bomba. - `RatioControl` (FB): **Crítico.** Mantiene la proporción (Brix) entre ingredientes. Lee flujos (de `FlowMeter` / `AnalogInstrument`), calcula el ratio actual y ajusta los setpoints de los `DosingControl`. Puede usar PID. - `FlowControl` (FB): Podría ser un control de flujo genérico (PID) usado por `DosingControl` o `RatioControl`. - `AnalogScaling` (FC/FB): Convierte lecturas de sensores (INT) a unidades de ingeniería (REAL). - `FlowMeter` (Lógica asociada): Lee caudal, calcula totalizado. - `TotalizerCtrl` (FB): Gestiona cálculo y reseteo de totalizadores específicos. - `CalculateRatio` (FC): Contiene la fórmula matemática para el cálculo de ratio. ### Control de Tanques y Niveles - `TankLevel` (FB): Gestiona nivel de un tanque específico (ej. producto, desaireador). Incluye lógica de control y alarmas (ref: `mSyrTank_LevFault2`, `mSyrTank_LoadDelay`). - `LevelControl` (FB): Control de nivel genérico (ON/OFF o PID). - `DeaerationControl` (FB): Específico para el tanque de desaireación (nivel de agua, bomba de vacío). ### Carbonatación - `CarbonationControl` (FB): Gestiona inyección de CO2. Controla válvula/dosificador basado en setpoint y medición (flujo CO2, P/T). Puede usar PID. ### Control de Calidad - `ProductQuality` (FB): Monitoriza parámetros clave (Brix, CO2, Temperatura). Gestiona alarmas relacionadas (ref: `mTTM306_H2O_HighDlyAlm`). - `SelCheckBrixSource` (FB): Selecciona y valida la fuente de medición de Brix si hay múltiples (sensor en línea, cálculo densidad). Gestiona alarmas con retardo (ref: `mSyrBxDelayAlrm`, `mSyrDensDelayAlrm`). ### Control de Actuadores (Válvulas y Bombas) - `ValveCtrl` (FB): Control individual de válvulas (ON/OFF, modulantes). Lógica de comando, feedback, fallo, interlocks. Asociado a UDTs `Cylinder_Valve` / `MotorValve`. - `MotorCtrl` (FB): Control de bombas/motores. Start/Stop, estado, fallo. Asociado a UDT `DriveCtrl`. - `PumpsControl` (FB): Gestiona un grupo de bombas (alternancia, habilitación, fallos centralizados) (ref: `mSyrRoomH2OPumpFaultDly`). ### Limpieza CIP - `CIPMain_Flood` / `CIPMain_Path` (FBs): Gestionan secuencias CIP (inundación de tanques, limpieza de líneas). Interactúan con sistema CIP central (vía `CIP_Link_Type`, `CIP_Interface_DB`). (ref: `mSyrTank_Flood`). ### Comunicación Externa - `Com_Filler` (FC/FB): Lógica de comunicación con la llenadora (listo, demanda, E-Stop). Vía señales o bus, usando `Filler_Interface_DB`. - `Com_SyrupRoom` (FC/FB): Lógica de comunicación con sala de jarabes (petición, confirmación). Usando `SyrupRoom_Interface_DB`. ### Utilidades y Funciones Generales - `AnalogAlarm` (FB): Genera alarmas estándar para valores analógicos. - `HandleAlarms` (FC): Posiblemente centraliza la gestión de alarmas (activación, reconocimiento). - `HMI_Interface` (FC): Agrupa lógica de intercambio de datos con el HMI (vía `HMI_Commands`, `HMI_Status`, `HMI_DB`). ## Fase 3: Bloques de Datos (DBs) y Variables (Tags) ### Bloques de Datos Globales (GDBs) - `Configuration_DB` / `Parameters_DB`: **Crucial.** Almacena todos los parámetros configurables (setpoints de ratio/Brix, flujos, límites de alarma, tiempos, PIDs, recetas). Su estructura define la flexibilidad y ajuste de la máquina. - `Status_DB`: Almacena el estado actual de la máquina y valores de proceso importantes para lógica interna y HMI. - `Alarms_DB`: Contiene el estado de todas las alarmas definidas. - `Interface_DBs` (`Filler_Interface_DB`, `SyrupRoom_Interface_DB`, `CIP_Interface_DB`): Buffers de datos para la comunicación con sistemas externos. ### Bloques de Datos de Instancia (IDBs) - Cada uso de un FB crea un IDB asociado (ej. `DosingControl_Water_DB`). Almacenan el estado interno (`VAR_STAT`) y parámetros específicos de esa instancia. ### Variables PLC (Tags) - Variables `m...` (ej. `mSyrBxDelayAlrm`): Memorias internas (flags, condiciones, triggers). Sus nombres suelen indicar su propósito. - Temporizadores (implícitos en `...Tmr`, `...Dly`, `TON_...`): Usados para retardos, debounce, timeouts en secuencias. ## Próximos Pasos Sugeridos Para profundizar el análisis: 1. **Analizar Lógica Interna de FBs Clave:** Revisar el código SCL (si disponible) de `RatioControl`, `BlenderRun__Control`, `DosingControl`. 2. **Detallar Estructura del `Configuration_DB`:** Identificar parámetros clave y su impacto. 3. **Examinar Lógica de Comunicación:** Ver detalles del intercambio de señales/datos con Llenadora, Sala Jarabes, CIP. 4. **Analizar Manejo de Estados y Alarmas:** Diagrama de estados de la máquina y flujo de gestión de alarmas. 5. **Revisar Implementación de PID:** Configuración y uso de `PID_Compact` u otros bloques PID. **Próximos Pasos Sugeridos:** Para profundizar, podríamos enfocarnos en: 1. **Analizar la lógica interna de FBs clave:** Como `RatioControl`, `BlenderRun__Control`, o `DosingControl`. Si tienes el código SCL de estos bloques, podríamos revisarlo. 2. **Detallar la estructura del `Configuration_DB`:** Identificar qué parámetros son configurables y cómo afectan el funcionamiento. 3. **Examinar la lógica de comunicación:** Ver cómo se gestionan exactamente las señales con la Llenadora, Sala de Jarabes y CIP. 4. **Analizar el manejo de estados y alarmas:** Cómo transita la máquina entre estados y cómo se generan y gestionan las alarmas. 5. **Revisar la implementación del PID:** Si se usa `PID_Compact` u otro, ver cómo está configurado y cómo se integra en el control de flujo, nivel o carbonatación.