134 lines
9.4 KiB
Markdown
134 lines
9.4 KiB
Markdown
# 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. |