Funcionando con IF basicos
This commit is contained in:
parent
06b2698ada
commit
185bcdd733
|
@ -1,422 +0,0 @@
|
|||
class BlenderCtrl__Main:
|
||||
def __init__(self):
|
||||
# Initialize variables for BlenderCtrl__Main (FC2000)
|
||||
# Temp variables
|
||||
self.All_Auto_RETVAL = 0 # Int
|
||||
self.Reset_SP_Word_RETVAL = 0 # Int
|
||||
self.mResetWaterTot = False # Bool
|
||||
self.mResetSyrupTot = False # Bool
|
||||
self.mResetCO2Tot = False # Bool
|
||||
self.mResetProductTot = False # Bool
|
||||
self.Block_Move_Err = 0 # Int
|
||||
|
||||
# Common system variables
|
||||
self.AUX_FALSE = False
|
||||
self.Clock_10ms = False
|
||||
self.Clock_100ms = False
|
||||
self.Clock_1s = False
|
||||
self.Clock_Counter = 0
|
||||
self.MachineState = 0
|
||||
self.SystemError = False
|
||||
self.MachineInitialized = False
|
||||
|
||||
# HMI and control variables
|
||||
self.HMI_PID = None
|
||||
self.Filler_Head_Variables = None
|
||||
self.gIN_VoltageOk = False
|
||||
self.M19000 = False
|
||||
self.gEmergencyPressed = False
|
||||
|
||||
# System state indicators
|
||||
self.Air_Pressure_OK = False
|
||||
self.CO2_Pressure_OK = False
|
||||
self.System_Pressure_OK = False
|
||||
self.Temperature_Current = 0.0
|
||||
self.Temperature_Max = 0.0
|
||||
self.Temperature_Alarm = False
|
||||
self.Tank_Level = 0.0
|
||||
self.Tank_Level_Min = 0.0
|
||||
self.Tank_Level_Low = False
|
||||
|
||||
# Mode controls
|
||||
self.Reset_Command = False
|
||||
self.Reset_Complete = False
|
||||
self.Totalizer_Value = 0
|
||||
self.HMI_Manual_Mode_Requested = False
|
||||
self.System_In_Manual_Mode = False
|
||||
self.System_In_Auto_Mode = False
|
||||
self.Production_Mode = False
|
||||
self.CIP_Mode = False
|
||||
|
||||
def run(self):
|
||||
# Network 1: Clock Generation
|
||||
self.Clock_Signal()
|
||||
|
||||
# Network 2: Machine Init
|
||||
self.BlenderCtrl_MachineInit()
|
||||
|
||||
# Network 3: Filler Head
|
||||
# Procesamiento de variables de cabezal de llenado
|
||||
if self.AUX_FALSE:
|
||||
# Implementación del BLKMOV para cabezal
|
||||
self.Filler_Head_Variables.FillerHead = self.HMI_PID.PPM303
|
||||
self.Block_Move_Err = self.resultado_operacion
|
||||
|
||||
# Network 4: Emergency Pressed
|
||||
# Control de parada de emergencia
|
||||
if self.gIN_VoltageOk and not self.M19000:
|
||||
self.gEmergencyPressed = True
|
||||
|
||||
# Network 5: Air and CO2 pressure ok and auxiliary ok
|
||||
# Verificación de presión de CO2 y aire
|
||||
if self.Air_Pressure_OK and self.CO2_Pressure_OK:
|
||||
self.System_Pressure_OK = True
|
||||
|
||||
# Network 6: Blender State Num
|
||||
# Control del estado del mezclador
|
||||
if self.System_Pressure_OK:
|
||||
if self.Production_Mode:
|
||||
self.MachineState = 1 # Production state
|
||||
elif self.CIP_Mode:
|
||||
self.MachineState = 2 # CIP state
|
||||
else:
|
||||
self.MachineState = 0 # Idle state
|
||||
|
||||
# Network 7: Delay Power On
|
||||
# Retardo al encendido para estabilización
|
||||
if self.Clock_1s:
|
||||
self.Power_On_Delay_Counter += 1
|
||||
if self.Power_On_Delay_Counter >= 5: # 5 segundos de retardo
|
||||
self.System_Ready = True
|
||||
|
||||
# Network 8: Production Mode
|
||||
# Activación del modo de producción
|
||||
if self.Production_Mode_Request and self.System_Ready and not self.CIP_Mode:
|
||||
self.Production_Mode = True
|
||||
self.CIP_Mode = False
|
||||
|
||||
# Network 9: CIp Mode
|
||||
# Activación del modo de limpieza CIP
|
||||
if self.CIP_Mode_Request and self.System_Ready and not self.Production_Mode:
|
||||
self.CIP_Mode = True
|
||||
self.Production_Mode = False
|
||||
|
||||
# Network 10: Error Faults
|
||||
# Gestión de errores del sistema
|
||||
if self.Error_Detected or self.Safety_Fault:
|
||||
self.SystemError = True
|
||||
self.Error_Reset_Required = True
|
||||
|
||||
# Network 11: Filler Bottle Count Used to push Product
|
||||
# Control de conteo de botellas para empujar producto
|
||||
if self.Bottle_Detected:
|
||||
self.Bottle_Counter += 1
|
||||
if (
|
||||
self.Production_Mode
|
||||
and self.Bottle_Counter >= self.Min_Bottles_For_Push
|
||||
):
|
||||
self.Start_Product_Push = True
|
||||
|
||||
# Network 12: Water Bypass Enable
|
||||
# Habilitación de bypass de agua
|
||||
if self.Water_Bypass_Request and self.System_In_Manual_Mode:
|
||||
self.Water_Bypass_Enabled = True
|
||||
|
||||
# Network 13: Still Water Bypass
|
||||
# Control de bypass de agua sin gas
|
||||
if self.Still_Water_Request and self.Water_Bypass_Enabled:
|
||||
self.Open_Still_Water_Valve = True
|
||||
|
||||
# Network 14: Manual Syrup Drain Valve Open - Operator Alarm
|
||||
# Alarma de válvula de drenaje de jarabe abierta manualmente
|
||||
if self.Syrup_Drain_Valve_Open and self.Production_Mode:
|
||||
self.Syrup_Drain_Open_Alarm = True
|
||||
self.Operator_Attention_Required = True
|
||||
|
||||
# Network 15: Manual Syrup Drain Valve Open - Operator Alarm
|
||||
# Redundancia para alarma de válvula de drenaje
|
||||
if self.Syrup_Drain_Open_Alarm:
|
||||
self.Flash_HMI_Warning()
|
||||
|
||||
# Network 16: Maselli Control
|
||||
# Control del sistema Maselli de medición Brix
|
||||
self.Maselli_Control()
|
||||
|
||||
# Network 17: mPDS Control
|
||||
# Control del sistema mPDS
|
||||
self.mPDS_Control()
|
||||
|
||||
# Network 18: mPDS Syrup Control
|
||||
# Control de jarabe mediante mPDS
|
||||
self.mPDS_Syrup_Control()
|
||||
|
||||
# Network 19: Co2 Analog Input
|
||||
# Lectura de entrada analógica de CO2
|
||||
self.GetProdBrixCO2_FromAn()
|
||||
|
||||
# Network 20: Quality
|
||||
# Control de calidad del producto
|
||||
self.Quality_Check()
|
||||
|
||||
# Network 21: Input Data
|
||||
# Procesamiento de datos de entrada
|
||||
self.Process_Input_Data()
|
||||
|
||||
# Network 22: Sel Brix Source Check
|
||||
# Verificación de fuente Brix seleccionada
|
||||
if self.Brix_Source_Selected == 1:
|
||||
self.Use_Maselli_Brix()
|
||||
elif self.Brix_Source_Selected == 2:
|
||||
self.Use_mPDS_Brix()
|
||||
|
||||
# Network 23: Check Water Cooling System Temperature
|
||||
# Control de temperatura del sistema de enfriamiento de agua
|
||||
if self.Temperature_Current > self.Temperature_Max:
|
||||
self.Temperature_Alarm = True
|
||||
self.Activate_Cooling()
|
||||
|
||||
# Network 24: Tank Level
|
||||
# Monitoreo de nivel de tanque
|
||||
if self.Tank_Level < self.Tank_Level_Min:
|
||||
self.Tank_Level_Low = True
|
||||
self.Start_Tank_Fill = True
|
||||
|
||||
# Network 25: Production ONS
|
||||
# One-Shot para inicio de producción
|
||||
if self.Production_Mode and not self.last_Production_Mode:
|
||||
self.Production_Initialize()
|
||||
self.Recipe_Load()
|
||||
self.last_Production_Mode = self.Production_Mode
|
||||
|
||||
# Network 26: Blender Prod Mode Init
|
||||
# Inicialización del modo de producción del mezclador
|
||||
if self.Production_Mode and not self.Production_Initialized:
|
||||
self.Blender_Prod_Mode_Init()
|
||||
self.Production_Initialized = True
|
||||
|
||||
# Network 27: Rinse ONS
|
||||
# One-Shot para enjuague
|
||||
if self.Rinse_Request and not self.last_Rinse_Request:
|
||||
self.Start_Rinse_Sequence()
|
||||
self.last_Rinse_Request = self.Rinse_Request
|
||||
|
||||
# Network 28: CIP ONS
|
||||
# One-Shot para inicio de CIP
|
||||
if self.CIP_Mode and not self.last_CIP_Mode:
|
||||
self.CIP_Initialize()
|
||||
self.last_CIP_Mode = self.CIP_Mode
|
||||
|
||||
# Network 29: CIp Mode Init
|
||||
# Inicialización del modo CIP
|
||||
if self.CIP_Mode and not self.CIP_Initialized:
|
||||
self.Blender_CIP_Mode_Init()
|
||||
self.CIP_Initialized = True
|
||||
|
||||
# Network 30: Reset SPWords
|
||||
# Reseteo de palabras SP
|
||||
self.Reset_SP_Words()
|
||||
|
||||
# Network 31: Blender Run Control
|
||||
# Control de funcionamiento del mezclador
|
||||
self.Blender_Run_Control()
|
||||
|
||||
# Network 32: Tank Pressure Control
|
||||
# Control de presión del tanque
|
||||
self.Tank_Pressure_Control()
|
||||
|
||||
# Network 33: Balaiage
|
||||
# Control de barrido (Balaiage)
|
||||
self.Balaiage_Control()
|
||||
|
||||
# Network 34: First Production
|
||||
# Control para primera producción
|
||||
self.First_Production()
|
||||
|
||||
# Network 35: CIP MAIN Calling
|
||||
# Llamada principal al sistema CIP
|
||||
if self.CIP_Mode:
|
||||
self.CIP_Main()
|
||||
|
||||
# Network 36: Blender Rinse
|
||||
# Enjuague del mezclador
|
||||
self.Blender_Rinse()
|
||||
|
||||
# Network 37: Safeties
|
||||
# Control de seguridades
|
||||
self.Safeties()
|
||||
|
||||
# Network 38: Instrument Scanner
|
||||
# Escáner de instrumentos
|
||||
self.Instrument_Scanner()
|
||||
|
||||
# Network 39: Vacuum Control
|
||||
# Control de vacío
|
||||
self.Vacuum_Control()
|
||||
|
||||
# Network 40: Syrup Room Control
|
||||
# Control de sala de jarabes
|
||||
self.Syrup_Room_Control()
|
||||
|
||||
# Network 41: Blend Procedure Data
|
||||
# Datos de procedimiento de mezcla
|
||||
self.Blend_Procedure_Data()
|
||||
|
||||
# Network 42: Pneumatic Valve Control
|
||||
# Control de válvulas neumáticas
|
||||
self.Pneumatic_Valve_Control()
|
||||
|
||||
# Network 43: Pumps Control
|
||||
# Control de bombas
|
||||
self.Pumps_Control()
|
||||
|
||||
# Network 44: Prod Report Manager
|
||||
# Gestor de informes de producción
|
||||
self.Prod_Report_Manager()
|
||||
|
||||
# Network 45: Outputs
|
||||
# Control de salidas
|
||||
self.Manage_Outputs()
|
||||
|
||||
# Network 46: SLIM BLOCK
|
||||
# Bloque SLIM
|
||||
self.SLIM_Block()
|
||||
|
||||
# Network 47: Interlocking Panel 1
|
||||
# Panel de enclavamiento 1
|
||||
self.Interlocking_Panel()
|
||||
|
||||
# Network 48: Filler Control
|
||||
# Control de llenadora
|
||||
self.Filler_Control()
|
||||
|
||||
# Network 49: Blender Ctrl Update PWORD
|
||||
# Actualización de PWORD del controlador de mezcla
|
||||
self.Blender_Ctrl_Update_PWORD()
|
||||
|
||||
# Network 50: ResetTotalizer
|
||||
# Reseteo del totalizador general
|
||||
if self.Reset_Command:
|
||||
self.Totalizer_Value = 0
|
||||
self.Reset_Complete = True
|
||||
|
||||
# Network 51: ResetWaterTot
|
||||
# Reseteo del totalizador de agua
|
||||
if self.mResetWaterTot:
|
||||
self.Water_Totalizer = 0
|
||||
self.mResetWaterTot = False
|
||||
|
||||
# Network 52: Water VFM Reset Totalizer
|
||||
# Reseteo del totalizador VFM de agua
|
||||
if self.Reset_Water_VFM_Request:
|
||||
self.Reset_Water_VFM()
|
||||
self.Reset_Water_VFM_Request = False
|
||||
|
||||
# Network 53: ResetCO2Tot
|
||||
# Reseteo del totalizador de CO2
|
||||
if self.mResetCO2Tot:
|
||||
self.CO2_Totalizer = 0
|
||||
self.mResetCO2Tot = False
|
||||
|
||||
# Network 54: Syrup MFM Reset Totalizer
|
||||
# Reseteo del totalizador MFM de jarabe
|
||||
if self.Reset_Syrup_MFM_Request:
|
||||
self.Reset_Syrup_MFM()
|
||||
self.Reset_Syrup_MFM_Request = False
|
||||
|
||||
# Network 55: ResetProductTot
|
||||
# Reseteo del totalizador de producto
|
||||
if self.mResetProductTot:
|
||||
self.Product_Totalizer = 0
|
||||
self.mResetProductTot = False
|
||||
|
||||
# Network 56: CO2 MFM Reset Tot
|
||||
# Reseteo del totalizador MFM de CO2
|
||||
if self.Reset_CO2_MFM_Request:
|
||||
self.Reset_CO2_MFM()
|
||||
self.Reset_CO2_MFM_Request = False
|
||||
|
||||
# Network 57: ResetCO2Tot
|
||||
# Duplicado - Reseteo del totalizador de CO2
|
||||
if self.Reset_CO2_Tot_Request:
|
||||
self.CO2_Alt_Totalizer = 0
|
||||
self.Reset_CO2_Tot_Request = False
|
||||
|
||||
# Network 58: Reset Totalizer
|
||||
# Reseteo general de totalizadores
|
||||
if self.Master_Reset_Request:
|
||||
self.All_Totalizers_Reset()
|
||||
self.Master_Reset_Request = False
|
||||
|
||||
# Network 59: Reset Totalizer
|
||||
# Reseteo adicional de totalizadores
|
||||
if self.Alternative_Reset_Request:
|
||||
self.Alternative_Totalizers_Reset()
|
||||
self.Alternative_Reset_Request = False
|
||||
|
||||
# Network 60: Blender Ctrl Command
|
||||
# Comando de control del mezclador
|
||||
self.Blender_Ctrl_Command()
|
||||
|
||||
# Network 61: DP Global Diag
|
||||
# Diagnóstico global DP
|
||||
self.DP_Global_Diag()
|
||||
|
||||
# Network 62: Profibus
|
||||
# Gestión de Profibus
|
||||
self.Profibus_Management()
|
||||
|
||||
# Network 63: Valve Fault
|
||||
# Fallo de válvula
|
||||
if self.Valve_Error_Detected:
|
||||
self.Handle_Valve_Fault()
|
||||
self.SystemError = True
|
||||
|
||||
# Network 64: All Auto
|
||||
# Verificación de modo automático completo
|
||||
self.All_Auto_RETVAL = self.All_Auto_Check()
|
||||
|
||||
# Network 65: Ctrl HMI Manual Active
|
||||
# Control de HMI en modo manual activo
|
||||
if self.HMI_Manual_Mode_Requested:
|
||||
self.System_In_Manual_Mode = True
|
||||
self.System_In_Auto_Mode = False
|
||||
|
||||
# Network 66: Mod Copy Recipe
|
||||
# Copia de receta
|
||||
if self.Copy_Recipe_Request:
|
||||
self.Mod_Copy_Recipe()
|
||||
self.Copy_Recipe_Complete = True
|
||||
|
||||
# Network 67: to HMI - Recipe Management
|
||||
# Gestión de recetas para HMI
|
||||
self.Recipe_To_HMI()
|
||||
|
||||
# Network 68: Recipe Calculation
|
||||
# Cálculo de receta
|
||||
self.Recipe_Calculation()
|
||||
|
||||
def Clock_Signal(self):
|
||||
# Clock generation implementation
|
||||
# This generates the system timing signals
|
||||
self.Clock_10ms = not self.Clock_10ms
|
||||
|
||||
# Generate 100ms and 1s clock signals
|
||||
if self.Clock_Counter % 10 == 0:
|
||||
self.Clock_100ms = not self.Clock_100ms
|
||||
|
||||
if self.Clock_Counter % 100 == 0:
|
||||
self.Clock_1s = not self.Clock_1s
|
||||
self.Clock_Counter = 0
|
||||
|
||||
self.Clock_Counter += 1
|
||||
|
||||
def BlenderCtrl_MachineInit(self):
|
||||
# Initialize blender machine state
|
||||
if not self.MachineInitialized:
|
||||
self.MachineState = 0 # IDLE state
|
||||
self.SystemError = False
|
||||
self.MachineInitialized = True
|
||||
self.Production_Mode = False
|
||||
self.CIP_Mode = False
|
||||
self.System_In_Auto_Mode = False
|
||||
self.System_In_Manual_Mode = False
|
BIN
FC2040.txt
BIN
FC2040.txt
Binary file not shown.
Loading…
Reference in New Issue