55 lines
4.7 KiB
Markdown
55 lines
4.7 KiB
Markdown
## FB: `BlenderCtrl__Main`
|
|
|
|
Este Bloque de Función parece ser el **orquestador central** del sistema Mixer/Starblend.
|
|
|
|
### Rol Principal
|
|
|
|
- Gestionar el **estado operativo general** de la máquina (Parado, Listo, Producción, CIP, Fallo, Emergencia).
|
|
- Coordinar la activación y desactivación de los sub-sistemas principales (`BlenderRun__Control` para producción, `CIPMain` para limpieza).
|
|
- Actuar como punto central para los **comandos del operador** (HMI) y las **señales de interfaz** externas (Llenadora, Sala Jarabes).
|
|
- Consolidar y gestionar las **condiciones de fallo críticas** del sistema.
|
|
|
|
### Entradas / Salidas Probables (Interfaz del FB)
|
|
|
|
- **Entradas (`VAR_INPUT`):**
|
|
- Comandos desde HMI (Ej. `StartCmd`, `StopCmd`, `ResetCmd`, `SelectModeCmd` - Podrían venir de `HMI_DB` o un UDT `HMI_Commands`).
|
|
- Estado de Emergencia (`EmergencyStopActive`).
|
|
- Feedback de estado de bloques subordinados (Ej. `RunControl_Status`, `CIP_Status`, `CriticalFault`).
|
|
- Señales de habilitación o petición de interfaces externas (Ej. `Filler_Ready`, `SyrupRoom_Available`).
|
|
- Parámetros de configuración relevantes (si no se leen directamente de `Configuration_DB`).
|
|
- **Salidas (`VAR_OUTPUT`):**
|
|
- Estado general de la máquina (Ej. `MachineState`, `IsRunning`, `IsStopped`, `IsInCIP`, `IsInFault`). Enviado a `Status_DB` / `HMI_Status`.
|
|
- Comandos de habilitación/control para bloques subordinados (Ej. `EnableRunControl`, `EnableCIP`, `ResetSubsystems`).
|
|
- Indicaciones de estado para HMI y interfaces externas (Ej. `BlenderReadyForFiller`, `AlarmActive`).
|
|
- Señales de control para actuadores globales si los hubiera (poco común, usualmente se delega).
|
|
|
|
### Lógica Interna Inferida (`VAR` / `VAR_TEMP` / Lógica SCL)
|
|
|
|
- **Máquina de Estados:** El núcleo del FB será probablemente una máquina de estados implementada con una variable (`STAT`) tipo `INT` o `ENUM` y una estructura `CASE` en SCL. Cada estado (`Idle`, `Ready`, `Production`, `CIP`, `Fault`, etc.) define:
|
|
- Las acciones a realizar *dentro* de ese estado (ej. mantener habilitado `BlenderRun__Control`).
|
|
- Las condiciones (basadas en entradas y estados internos) para *transicionar* a otros estados.
|
|
- **Gestión de Modos:** Lógica para seleccionar entre `Producción` y `CIP`, asegurando que solo uno esté activo y gestionando las transiciones seguras entre ellos.
|
|
- **Coordinación de Bloques:** Llamadas a las instancias de los FBs subordinados (`BlenderRun__Control`, `CIPMain_Path`, `CIPMain_Flood`, `PumpsControl`, etc.), pasando los comandos y recibiendo el feedback necesario según el estado actual.
|
|
- **Manejo de Fallos:** Agregación de señales de fallo (`Fault`) desde múltiples fuentes. Lógica para determinar si un fallo es crítico y debe detener la operación, llevando la máquina al estado `Fault`. Implementación de la lógica de `Reset`.
|
|
- **Gestión de Totalizadores:** Las variables `mResetProductTotTmr` y `mResetTotalizerTmr` indican que este FB contiene la lógica para iniciar el reseteo de los totalizadores (posiblemente activando un temporizador o directamente llamando a una función/método en `TotalizerCtrl`), probablemente en respuesta a un comando HMI o al final de un ciclo/batch.
|
|
- **Lógica de Interfaz:** Procesar las señales de las interfaces externas (Llenadora, Sala Jarabes, CIP) y actualizar las señales de estado/petición correspondientes en los DBs de interfaz.
|
|
|
|
### Instancia DB (`BlenderCtrl__Main_DB`)
|
|
|
|
- Este DB asociado almacena todas las variables estáticas (`VAR_STAT`) del `BlenderCtrl__Main`.
|
|
- Contiene el estado interno persistente entre ciclos de scan:
|
|
- El estado actual de la máquina de estados.
|
|
- Flags internos (ej. `FirstScan`, `ResetRequestPending`).
|
|
- Instancias de temporizadores (`TON`, `TOF`) o contadores (`CTU`, `CTD`) utilizados dentro del FB.
|
|
- Copias de comandos o estados importantes.
|
|
|
|
### Implementación SCL
|
|
|
|
- Se esperaría ver una estructura clara en SCL:
|
|
- Declaraciones de `VAR_INPUT`, `VAR_OUTPUT`, `VAR_IN_OUT`, `VAR`, `VAR_STAT`, `VAR_TEMP`.
|
|
- Una sentencia `CASE MyState OF ... END_CASE;` para la máquina de estados.
|
|
- Llamadas a otros FBs/FCs: `InstanceName(Input1 := Value1, Output1 => Target1);`
|
|
- Lógica condicional `IF...THEN...ELSE...END_IF;`.
|
|
- Asignaciones `:=`.
|
|
|
|
En resumen, `BlenderCtrl__Main` actúa como el director de orquesta, asegurando que todos los instrumentos (sub-sistemas) toquen en el momento adecuado según la partitura (estado/modo operativo) y respondiendo a las señales del director (HMI) y del entorno (interfaces externas, fallos). Los OBs proporcionan el escenario y el ritmo (ciclo de scan, interrupciones) para que esta orquesta funcione. |