Obsidean_VM/04-SIDEL/00 - MASTER/MIXER/S7 Software Calls.md

17 KiB

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