171 lines
17 KiB
Markdown
171 lines
17 KiB
Markdown
|
|
* 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. |