Obsidean_VM/04-SIDEL/00 - MASTER/MIXER/Documentacion/BlenderCtrl__Main.md

4.7 KiB

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.