* OB1 * FC2000 : MIX - Blender Ctrl Main * FC1860 : # Documentación del Software de Control de Mixer (TIA Portal) ## 1. Introducción Este documento describe la estructura y el funcionamiento del software desarrollado en TIA Portal para el control de un proceso de mezclado (Mixer/Blender). El software está escrito principalmente en SCL (Structured Control Language), con algunos componentes originados en LAD o STL. El objetivo es proporcionar una visión general de las funciones, bloques de datos y lógica de control para facilitar su estudio y comprensión. ## 2. Arquitectura General El software parece seguir una estructura modular común en TIA Portal, utilizando: * **Bloques de Función (FB):** Encapsulan lógica compleja y mantienen su propio estado (datos de instancia). Ejemplos: `BlenderPID_PIDSPCalc`, `BlenderPID_ActualRecipe`, `MFMAnalogValues`. * **Funciones (FC):** Realizan tareas específicas sin mantener un estado interno persistente entre llamadas. Ejemplos: `BlenderCtrl_InitErrors`, `BlenderRun_SelectConstan`, `CO2EqPress`. * **Bloques de Datos (DB):** Almacenan datos del sistema, como parámetros de configuración, variables de proceso, recetas, estados de HMI y datos persistentes. Ejemplos: `Blender_Constants`, `Blender_Variables`, `HMI_Blender_Parameters`, `HMI_PID`, `Recipe__XX`. La ejecución probablemente está organizada en Tareas (OBs cíclicos, de alarma, etc.) que llaman a los FBs y FCs principales. La lógica principal se centra en: 1. **Gestión de Recetas:** Carga, interpreta y aplica parámetros de recetas de producción y CIP. 2. **Control de Procedimientos:** Secuencia las operaciones de la máquina (arranque, producción, parada, enjuague, CIP, runout). 3. **Control PID:** Regula flujos (agua, sirope, CO2), niveles y presiones mediante controladores PID con cálculo de FeedForward. 4. **Monitorización y Alarmas:** Supervisa el estado del proceso, detecta fallos y gestiona alarmas. 5. **Interfaz HMI:** Intercambia datos con la interfaz Hombre-Máquina para visualización y comandos. 6. **Manejo de I/O:** Interactúa con sensores, actuadores y medidores de flujo (posiblemente vía Profibus/Profinet). 7. **Configuración:** Adapta el funcionamiento según el modelo de máquina y opciones seleccionadas. ## 3. Bloques de Datos Clave (DBs) Estos son algunos de los DBs más importantes identificados: * **`Blender_Constants` (DB972):** Almacena constantes físicas y de proceso (densidades, factores de conversión, constantes de PID base, tiempos, etc.).[583] * **`Blender_Variables` (DB971):** Contiene variables de proceso en tiempo real (flujos medidos, SP calculados, errores, niveles, etc.).[599] * **`Blender_Variables_Pers` (DB970):** Guarda variables que deben persistir entre ciclos de encendido/apagado (flags de tipo de receta, totalizadores, horas de funcionamiento).[623] * **`HMI_Blender_Parameters` (DB1001):** Interfaz principal para parámetros de HMI. Contiene: * `Processor_Options`: Opciones de configuración de la máquina (modelo, presencia de equipos como carbonatador, enfriador, tipo de medidores, etc.). **¡Importante para los selectores!**[1095] * `Actual_Recipe_Parameters`: Parámetros de la receta activa.[1096] * `ProcessSetup`: Parámetros de configuración del proceso (presiones, constantes de pérdida, tiempos, etc.).[1097] * **`HMI_PID` (DB1013):** Estructura de datos para todos los controladores PID del sistema (parámetros Kp, Ti, Td, SP, PV, Out, flags de modo manual, etc.).[1135] * **`HMI_Device` (DB1010):** Estructura de datos para controlar y monitorizar dispositivos individuales (válvulas, bombas) con sus estados (abierto, cerrado, manual, fallo, etc.).[1098] * **`HMI_Instrument` (DB1011):** Almacena valores y estados de instrumentos analógicos (niveles, presiones, temperaturas, flujos, etc.).[1122] * **`HMI_Digital` (DB1012):** Almacena estados de instrumentos digitales (sensores de nivel discretos, etc.).[1118] * **`Procedure_Variables` (DB960):** Contiene flags y estados para gestionar la ejecución de diferentes procedimientos (arranque, producción, parada, CIP, runout, etc.).[1475] * **`PID_Variables` (DB961):** Variables intermedias utilizadas específicamente en los cálculos de los PID (valores delta P, pérdidas por fricción, valores integrales guardados).[1459] * **`Profibus_Variables` (DB973):** Almacena datos leídos desde dispositivos Profibus (probablemente medidores de flujo Maselli, Endress+Hauser, MicroMotion, etc.).[1560] * **`System_RunOut_Variables` (DB962):** Gestiona el proceso de fin de producción (runout) y cambio rápido de formato (QCO).[1877] * **`Recipe__XX` (DB401-DB450):** Almacenan los datos de las recetas de producción.[1594]-[1693] * **`CIPRecipe_XX` (DB501-DB530):** Almacenan los datos de las recetas CIP.[775]-[834] * **Otros DBs HMI:** `HMI_Alarms` (DB1000)[1092], `HMI_Variables_Cmd` (DB1005)[1156], `HMI_Variables_Status` (DB1006)[1158], `HMI_Local_CIP_Variables` (DB1003)[1133], `HMI_Service` (DB1004)[1154], `HMI_Recipe_Edit` (DB1008)[1140], `HMI_Recipe_Name` (DB1009)[1142] gestionan diferentes aspectos de la interfaz HMI. ## 4. Módulos de Funcionalidad Principal ### 4.1. Control Principal y Secuenciación * **Gestión de Procedimientos:** Los flags en `Procedure_Variables` (DB960) indican el estado de las secuencias (arranque, producción, parada, etc.). Funciones como `BlenderCtrl_ResetSPWord` (FC2014)[12] y `BlenderCtrl_UpdatePWord` (FC2034)[17] parecen gestionar la activación y el estado de los actuadores (`gSP_...` -> `gP_...`) según lo requiera cada paso del procedimiento. * **Modo Automático/Manual:** `BlenderCtrl_All Auto` (FC2036)[1] y `BlenderCtrl_ManualActive` (FC2037)[7] gestionan el estado general y las alarmas relacionadas con los modos de operación. ### 4.2. Control PID Este es el núcleo del control de proceso continuo. * **`BlenderPID__Main` (FB):** Orquesta la lógica PID. Llama a otros bloques para inicializar parámetros y calcular SPs/FF. Transfiere PVs a los PIDs y gestiona modos (Auto/Manual, Simulación, CIP).[412] * **`BlenderPID_PIDSPCalc` (FB):** Calcula los Setpoints (SP) para los PIDs principales (flujos de agua `RMM301`, sirope `RMP302`, CO2 `RMM303`, GAS2 `RMM304`; presión tanque `RVM301`; niveles `RVP303`, `RVN302`; temperatura `RVM319`) basándose en la receta activa, el modo de operación, las rampas de velocidad, la demanda del llenador y las correcciones por error.[286] Llama a funciones como `CO2EqPress`[968], `DeairCO2TempComp`[1007], `MaxCarboCO2 Vol`[1256]. * **`BlenderPID_PIDFFCalc` (FB):** Calcula los valores de FeedForward (FF) para los PIDs de flujo y nivel, anticipando la apertura de las válvulas según el SP y las condiciones de presión/fricción.[151] Utiliza `FrictionLoss`[1069] y `FeedForward`[1037]. * **`BlenderPID_PIDInitParam` (FB):** Inicializa y ajusta dinámicamente los parámetros de los PID (Kp, Ti, Td) según las condiciones (estabilidad, modo parada).[209] * **`BlenderPID_BlendingFault` (FB):** Monitoriza los errores acumulados de mezcla (`gBlendError`) y carbonatación (`gCarboCO2Error`) y genera alarmas si exceden los límites definidos.[116] * **`BlenderPIDCtrl_SaveInteg` (FB):** Guarda el término integral de los PIDs cuando el flujo es mínimo y estable, para mejorar el arranque posterior.[32] * **`BlenderPID_PIDResInteg` (FC):** Resetea los términos integrales de los PIDs.[274] * **Otros PIDs:** Se gestionan PIDs específicos como el de liberación de presión (`BlenderPIDCtrl_PresRelea`)[25] y el control de cabezal de llenado (`PID_Filling_Head_Calc`)[1446]. ### 4.3. Gestión de Recetas * **`RecipeManagement___Prod` (FC1798):** Gestiona la carga, guardado, edición, copia y borrado de recetas de producción (probablemente interactuando con DBs `Recipe__XX` y HMI).[1711] * **`CIPRecipeManagement` (FC1799):** Gestión similar para las recetas CIP (usando DBs `CIPRecipe_XX`).[835] * **`BlenderPID_ActualRecipe` (FB):** Interpreta los parámetros de la receta activa (`HMI_Blender_Parameters.Actual_Recipe_Parameters`) y configura los flags y variables de operación correspondientes (`gSugarBeverage`, `gWaterRecipe`, `gCarboStillRecipe`, `gSkipDeaireation`, niveles de tanque, etc.).[86] * **`RecipeCalculation` (FC):** Calcula valores dependientes dentro de la edición de recetas (ej. densidad a partir de Brix, ratio a partir de Brix, etc.).[1694] ### 4.4. Configuración de Máquina y Constantes (Selectores DIP) La configuración principal de la máquina parece realizarse a través del parámetro `_ModelNum` dentro de `HMI_Blender_Parameters.Processor_Options.Blender_OPT`. Este número (probablemente ajustado vía HMI o selector físico) determina qué conjunto de constantes se carga: * **`BlenderRun_SelectConstan` (FC):** Esta función es clave. Utiliza una estructura `CASE` sobre `HMI_Blender_Parameters.Processor_Options.Blender_OPT._ModelNum` (valores 0 a 10).[523] * **Para cada `_ModelNum`:** Se asignan valores específicos a variables en `Blender_Variables` (DB971), tales como: * `gWaterVFM_DN`, `gSyrupMFM_DN`, `gWaterPipe_DN`: Diámetros nominales de medidores y tuberías.[524, 527, 531, 535, 539, 543, 547, 551, 555, 559, 563] * `gSyrupMFMZeroStab`: Estabilidad del cero del medidor de sirope.[524, 528, 532, 536, 540, 544, 548, 552, 556, 560, 564] * `gProdTankVolume`, `gDeairTankVolume`: Volúmenes de los tanques.[525, 529, 533, 537, 541, 545, 549, 553, 557, 561, 565] * `gBlenderNomSpeed`: Velocidad nominal de producción.[525, 529, 533, 537, 541, 545, 549, 553, 557, 561, 565] * `gProdTankBottomVol`: Volumen muerto del tanque de producto.[526, 530, 534, 538, 542, 546, 550, 554, 558, 562, 566] * `gBufferTankProbeHeight`: Altura de la sonda del tanque buffer (diferente para modelos 4-6 y 7-9).[543, 547, 551, 555, 559, 563] * **Después del `CASE`:** Se definen otros parámetros base: * `gMinProduction`: Velocidad mínima de producción (calculada a partir de la nominal).[568, 569] * Errores/Repetibilidad de medidores (`gWaterVFMMeasError`, `gSyrupMFMMeasError`, etc.).[573]-[579] * Parámetros de primera producción (`gFirstProdExtraBrix`, etc.).[580] * Tiempos y valores para el runout.[581, 582] * **Otras Opciones (`HMI_Blender_Parameters.Processor_Options.Blender_OPT`):** Flags booleanos que habilitan/deshabilitan funcionalidades o indican presencia de equipos: * `_Simulation`: Habilita modo simulación (visto en `MFMAnalogValues`[1310], `Input_CheckFlowMetersSta`[1196]). * `_BrixMeter`, `_MeterType`, `_Promass`: Configuración del medidor de producto/brix.[87, 88] * `_CarboPresent`: Indica si hay carbonatador.[94] * `_CO2_GAS2_Injection`, `_GAS2InjectionType`: Configuración de segunda inyección de gas (N2/Aire).[95, 99, 183] * `_CoolerPresent`, `_CoolerControl`: Presencia y tipo de control del enfriador.[93] * `_Deaireation`, `_ByPassDeair`, `_StillWaterByPass`: Opciones de desaireación.[107] * `_BlendFillSystem`: Indica si el sistema está acoplado a un llenador.[108, 110] * `_FlowMeterType`: Tipo de medidor de flujo (Endress/MicroMotion).[1196, 1278] * `_WaterPromass`: Indica si el medidor de agua es Promass.[1164, 1293] * `_SyrupLevel`: Usa nivel en tanque de sirope en lugar de cantidad fija.[1510] * `_FastChangeOverEnabled`: Habilita cambio rápido de formato.[1873] * ... y otras opciones vistas en el código. ### 4.5. Manejo de I/O y Dispositivos * **Lectura Analógica:** `ReadAnalogIn` (FC1971)[1584] parece escalar y verificar valores analógicos de entrada (PEW). * **Escaneo Digital:** `Input_DigitalScanner` (FC1719)[1200] procesa entradas digitales, aplicando filtros o lógica de temporización. * **Estado de Medidores:** `Input_CheckFlowMetersSta` (FC)[1160] interpreta los bytes de estado de los medidores de flujo Profibus para detectar fallos o condiciones EPD (Empty Pipe Detection). * **Escaneo de Instrumentos:** `Instrument_Scanner` (FC1968)[1203] verifica fallos generales de instrumentación. * **Fallo Válvulas Neumáticas:** `Pneumatic_Valve_Fault` (FC1969)[1466] monitoriza el estado de las válvulas neumáticas comparando comando y feedback, usando temporizadores definidos en `Pneumatic_Valve_Fault_DB` (DB969)[1464]. * **Interfaz Profibus:** `Profibus_Variables` (DB973)[1560] almacena los datos leídos. `MFMAnalogValues` (FB)[1267] procesa estos datos (o simula si está activo). * **Diagnóstico Profibus/Profinet:** Bloques como `GNS_PLCdia_ProfibusData` (DB2416)[1078], `GNS_PLCdia_ProfinetData` (DB2415)[1081], `HMI_CPU_DP_Diag` (DB174)[1084] y `GLOBAL_DIAG_DB` (DB11)[1075] parecen relacionados con el diagnóstico de la red de comunicación. ### 4.6. Interfaz HMI * **Comandos y Estado:** `HMI_Variables_Cmd` (DB1005)[1156] recibe comandos de la HMI. `HMI_Variables_Status` (DB1006)[1158] envía el estado del proceso a la HMI. * **Visualización de Datos:** `Output_AnalogValueToHMI` (FC)[1421] prepara y envía valores analógicos relevantes (flujos, temperaturas, errores, SPs) a la HMI para su visualización. * **Alarmas y Mensajes:** `HMI_Alarms` (DB1000)[1092] contiene los flags de alarma. `ProductQuality_Messages` (FC)[1532] activa mensajes específicos basados en la calidad del producto. `MessageScroll` (FC210)[1263] podría gestionar la visualización secuencial de mensajes. * **Gestión de Usuarios:** `HMI_Key_User` (DB500)[1088] maneja la autenticación y niveles de usuario. ### 4.7. Control CIP * **Secuenciador CIP:** Bloques como `CIPLocal_ExecSimpleCIP` (FC)[682], `CIPLocal_ExecStep` (FC)[716], `CIPLocal_ProgStepUp` (FC)[766], `CIPLocal_ProgStepDown` (FC)[760] ejecutan las recetas CIP paso a paso. * **Inicialización Pasos CIP:** `CIP_SimpleProgr_Init` (FC)[872] define qué válvulas/bombas activar para cada tipo de paso CIP (Enjuague, Recirculación, Drenaje, etc.). * **Datos CIP:** `CIP_Program_Variables` (DB963)[869] almacena el estado actual del CIP. `CIPReportDB` (DB600)[864] parece ser para reportes. ### 4.8. Funciones Utilitarias Se utilizan diversas funciones para cálculos específicos: * **Cálculos Físicos:** `SyrupDensity`[1868], `WaterDensity`[1903], `CO2 Solubility`[962], `CO2EqPress`[968], `CO2InjPressure`[975], `PPM O2`[1469]. * **Cálculos de Flujo/Presión:** `ValveFlow`[1899], `FrictionLoss`[1069], `DeltaP`[1029], `Flow_To_Press_Loss`[1063], `Freq_To_mmH2O`[1067], `mmH2O_TO_Freq`[1361], `DeaireationValve`[1010]. * **Procesamiento de Señales:** `Integral` (FB)[1206], `LowPassFilter` (FB)[1227], `SlewLimit` (FB)[1808], `Delay` (FB)[1015], `MSE Slope` (FB)[1398], `Statistical_Analisys` (FB)[1840]. * **Manipulación de Datos/Strings:** `Block_compare` (FC61)[634], `Block_move` (FC60)[639], `DELETE` (FC4)[1020], `EQ_STRNG` (FC10)[1033], `REPLACE_Mod` (FC32)[1794]. * **Otras:** `FW_DRand` (FC1922)[1072] (generador aleatorio para simulación), `T_Timer` (FC40)[1896] (temporizador simple). ## 5. Estructura de Llamadas (Inferida) Como se mencionó, sin el proyecto completo, la jerarquía exacta es difícil de determinar. Sin embargo, algunas interacciones clave son: * Un **OB Cíclico principal (Task0/Task1/Task2?)** probablemente llama a: * `BlenderPID__Main` (que a su vez llama a `BlenderPID_PIDInitParam`, `BlenderPID_PIDSPCalc`, `BlenderPID_ActualRecipe`, etc.) * Bloques de gestión de procedimientos (que usan `BlenderCtrl_ResetSPWord`, `BlenderCtrl_UpdatePWord`). * Bloques de manejo de I/O (`Input_DigitalScanner`, `Instrument_Scanner`, `MFMAnalogValues`, `ReadAnalogIn`). * Bloques de comunicación HMI (`Output_AnalogValueToHMI`, `ProductQuality_Messages`). * Gestores de recetas (`RecipeManagement___Prod`, `CIPRecipeManagement`). * Control CIP (`CIPLocal_ExecSimpleCIP`). * Control de Runout/QCO (`ProductAvailable`, `QCO Monitor`). * `BlenderPID_PIDSPCalc` llama a funciones de cálculo como `CO2EqPress`, `DeairCO2TempComp`, `MaxCarboCO2 Vol`. * `BlenderPID_PIDFFCalc` llama a `FrictionLoss` y `FeedForward`. * `MFMAnalogValues` llama a `ValveFlow`, `DeltaP`, `FW_DRand` y utiliza FBs como `SlewLimit`, `LowPassFilter`, `Delay`. * `BlenderRun_SelectConstan` es llamado (probablemente al inicio o al cambiar configuración) para establecer constantes. * El secuenciador CIP (`CIPLocal_ExecSimpleCIP`) llama a `CIPLocal_ProgStepUp/Down`, `CIPLocal_ExecStep`, y `CIP_SimpleProgr_Init`. ## 6. Conclusión Este software implementa un control completo para un proceso de mezcla, abarcando desde la gestión de recetas y la configuración de la máquina hasta el control PID detallado, la secuenciación de procedimientos (producción, CIP, runout) y la interacción con HMI y periféricos. La configuración de la máquina se basa fuertemente en el `_ModelNum` y otros flags dentro de `HMI_Blender_Parameters.Processor_Options.Blender_OPT`, que determinan las constantes y funcionalidades activas. Para un análisis más profundo de la secuencia exacta de ejecución y las interdependencias completas, sería necesario examinar el proyecto completo en TIA Portal, especialmente la configuración de los OBs y las llamadas entre bloques. Espero que esta documentación te sea de gran utilidad para tu estudio. Si necesitas analizar algún bloque o funcionalidad en más detalle, no dudes en preguntar.