ParamManagerScripts/backend/script_groups/TwinCat/test_filling_head_debug.scl

330 lines
8.4 KiB
Plaintext

(* Código SCL generado desde LAD TwinCAT *)
(* Convertidor mejorado con SymPy - Estructura DNF preferida *)
(* Path original: \/TASK1_PID\/PID_Controllers\/Filling_Valve_PID *)
PROGRAM _Filling_Head_PID_Ctrl
VAR_OUTPUT
EN_Out : BOOL ;
END_VAR
VAR
mFillerProdSlew : REAL ;
mFillerEstSlew : SlewLimit ;
mKp_Loss : REAL ;
mR_KP : REAL ;
mR_TI : REAL ;
mR_TD : REAL ;
_Hold_int_PID : BOOL ;
_Init_int_PID : BOOL ;
mManual_Value : REAL ;
mReal_FF_value : REAL ;
mReal_Max_FF : REAL ;
mLMN_FAC : REAL ;
mDeadBand : REAL ;
mInit_Int_PID : REAL ;
mHr_Hs : REAL ;
mFillingHead_PID : FB41_PIDController;
mI_Sel_FillHead : BOOL ;
mP_Sel_FillHead : BOOL ;
mD_Sel_FillHead : BOOL ;
mPID_FillHead_OUT : REAL ;
mPIDFillHeadProp : REAL ;
mPIDFillHeadInt : REAL ;
mPIDFillHeadDer : REAL ;
mP3_Freq_Flted : LowPassFilter ;
mDiffTransducer_Flted : LowPassFilter ;
mFillValve1Press_Flted : LowPassFilter ;
mFillingHead_KP_PID : FB41_PIDController;
mFillHead_PID_En : BOOL ;
mI_Sel_FillHead_KP : BOOL ;
mP_Sel_FillHead_KP : BOOL ;
mD_Sel_FillHead_KP : BOOL ;
mPID_FillHead_KP_OUT : REAL ;
mPIDFillHead_KP_Prop : REAL ;
mPIDFillHead_KP_Int : REAL ;
mPIDFillHead_KP_Der : REAL ;
_Hold_int_KP_PID : BOOL ;
_Init_int_KP_PID : BOOL ;
mManual_KP_Value : REAL ;
mReal_KP_FF_value : REAL ;
mDead_KP_Band : REAL ;
mInit_Int_KP_PID : REAL ;
mFillingHeadPIDStat : StatisticalAnalisys ;
mHeadKP_SlewLimit : SlewLimit ;
mHead_KP_Temp : REAL ;
mOutWordToVFC : WORD ;
mRealTemp : REAL ;
mAnalogInTemp : Peripherial ;
mReset_Int_ONS : R_TRIG ;
mReset_Int : BOOL ;
mEn_ProdPressLoss : TON ;
mStartFillTON : TON ;
mStopFillTP : TP ;
mStopFillingN_ONS : F_TRIG ;
mFillerFilling : BOOL ;
mStopFilling : BOOL;
mDummy : BOOL ;
mDiffSensFaultEn: TON;
END_VAR
(* === CÓDIGO PRINCIPAL === *)
(* Código LAD convertido *)
// Red 2
// Llamada a función: _Filling_Head_PID_Ctrl.Read_Analog
CALL _Filling_Head_PID_Ctrl.Read_Analog();
mDummy := TRUE; // ACTION ejecutada
// Red 3
// Llamada a función: _Filling_Head_PID_Ctrl._KP_PID_Ctrl
CALL _Filling_Head_PID_Ctrl._KP_PID_Ctrl();
mDummy := TRUE; // ACTION ejecutada
// Red 4
// Llamada a función: _Filling_Head_PID_Ctrl.Calcolous
CALL _Filling_Head_PID_Ctrl.Calcolous();
mDummy := TRUE; // ACTION ejecutada
// Red 5
// Llamada a función: gProd_Flow
mDummy := gProd_Flow();
// Red 6
// Llamada a función: mFillerEstSlew
// Sin optimización SymPy
IF mFillerEstSlew(_POSITIV) THEN
mDummy := TRUE;
ELSE
mDummy := FALSE;
END_IF;
// Red 7
// Llamada a función: mStopFillTP
// Sin optimización SymPy
IF mStopFillTP() THEN
mDummy := TRUE;
ELSE
mDummy := FALSE;
END_IF;
// Red 1
// Sin optimización SymPy
IF NOT gAlwaysOff THEN
mP_Sel_FillHead := TRUE;
ELSE
mP_Sel_FillHead := FALSE;
END_IF;
// Red 8
// Sin optimización SymPy
IF NOT gAlwaysOff THEN
mI_Sel_FillHead := TRUE;
ELSE
mI_Sel_FillHead := FALSE;
END_IF;
// Red 9
// Sin optimización SymPy
IF NOT gAlwaysOff THEN
mD_Sel_FillHead := TRUE;
ELSE
mD_Sel_FillHead := FALSE;
END_IF;
// Red 10
// Sin optimización SymPy
IF (gBlenderCIPMode OR gBlenderRinseMode) THEN
g_Head_CIP_Rinse := TRUE;
ELSE
g_Head_CIP_Rinse := FALSE;
END_IF;
// Red 11
// Sin optimización SymPy
IF ((NOT gH_P3_ProductPump_Auto AND gH_P3_ProductPump_Manual) OR g_Head_Drain OR (gH_EV62_Status AND g_Head_CIP_Rinse) OR gP_PID_Head_Manual) THEN
g_MAN_Head := TRUE;
ELSE
g_MAN_Head := FALSE;
END_IF;
// Red 12
// Sin optimización SymPy
IF ((((gP_PID_Head_Enable OR (NOT gProdPipeRunOut_Done AND gBlendFillStartUp_Done)) AND gInFillerEV46Enable AND NOT gFlrCO2ValveEV46Pos_Fault AND gInFillerEV62Enable AND NOT gProdValveEV62Pos_Fault AND NOT gDiffSensor_Analog_Fault) OR (g_Head_CIP_Rinse AND gBlenderRun_Latch) OR g_MAN_Head OR gP_PID_Head_Manual) AND gH_Blender_OPT_BlendFillSystem) THEN
g_Head_PID_Enable := TRUE;
ELSE
g_Head_PID_Enable := FALSE;
END_IF;
// Red 14
// Llamada a función: gHead_PID_Max_Freq
mDummy := gHead_PID_Max_Freq();
// Red 15
// Llamada a función: gH_ProcessSetup_FillerDiameter
mDummy := gH_ProcessSetup_FillerDiameter();
// Red 16
// Llamada a función: mReal_FF_value
mDummy := mReal_FF_value();
// Red 17
// Llamada a función: mManual_Value
mDummy := mManual_Value();
// Red 18
// Llamada a función: _Filling_Head_PID_Ctrl.Write_Analog
CALL _Filling_Head_PID_Ctrl.Write_Analog();
mDummy := TRUE; // ACTION ejecutada
// Red 13
CALL _Filling_Head_PID_Ctrl.Write_Analog();
mDummy := TRUE; // ACTION ejecutada
END_PROGRAM
(* === SUBFUNCIONES (ACTIONs convertidas) === *)
PROCEDURE _Filling_Head_PID_Ctrl__KP_PID_Ctrl
(* Convertida desde ACTION *)
(* Código LAD convertido a SCL *)
// Red 1
IF NOT gAlwaysOff THEN
mI_Sel_FillHead_KP := TRUE;
ELSE
mI_Sel_FillHead_KP := FALSE;
END_IF;
// Red 2
IF NOT gAlwaysOff THEN
mP_Sel_FillHead_KP := TRUE;
ELSE
mP_Sel_FillHead_KP := FALSE;
END_IF;
// Red 3
IF NOT gAlwaysOff THEN
mD_Sel_FillHead_KP := TRUE;
ELSE
mD_Sel_FillHead_KP := FALSE;
END_IF;
// Red 4
IF mFillHead_PID_En THEN
mR_KP := TRUE;
ELSE
mR_KP := FALSE;
END_IF;
END_PROCEDURE
PROCEDURE _Filling_Head_PID_Ctrl_Calcolous
(* Convertida desde ACTION *)
(* Código ST original *)
gHead_PID_Cycle := gPID_Cycle_Time ;
mLMN_FAC := 1.0 ;
mDeadBand := 0.0 ;
mKp_Loss := gH_ProcessSetup_KProdLoss ;
IF gH_ProcessSetup_BPFillingValvePID<>0 THEN
(* IF gHeadPIDCtrlOk THEN*)
mHead_KP_Temp := 100 / gH_ProcessSetup_BPFillingValvePID ;
(* ELSE
mHead_KP_Temp := 50 / gH_ProcessSetup_BPFillingValvePID ;
END_IF*)
END_IF
mHeadKP_SlewLimit(i_InValue:=mHead_KP_Temp, i_SlewMax:=0.01, i_Cycle:=gHead_PID_Cycle, out:=mR_KP) ;
mR_TI := gH_ProcessSetup_TIFillingValvePID ;
mR_TD := gH_ProcessSetup_TDFillingValvePID ;
mManual_Value := 0.0 ;
IF NOT gH_P3_ProductPump_Auto AND gH_P3_ProductPump_Manual THEN
mManual_Value := gH_P3_ProductPumpFC_Manual ;
mLMN_FAC := 1.0 ;
ELSIF g_MAN_Head AND NOT g_Head_CIP_Rinse THEN
mManual_Value := gHead_PID_Manual_Value ;
mLMN_FAC := 1.0 ;
ELSIF g_Head_Drain THEN
mManual_Value := 0.0 ;
mLMN_FAC := 1.0 ;
ELSIF g_Head_CIP_Rinse AND gBlenderRinseMode THEN
mManual_Value :=gH_ProcessSetup_RinseProdPumpFreq ;
mLMN_FAC := 1.0 ;
ELSIF g_Head_CIP_Rinse THEN
mManual_Value :=gH_ProcessSetup_CIPProdPumpFreq ;
mLMN_FAC := 1.0 ;
ELSIF g_Head_PID_Enable AND gH_P3_ProductPump_Auto THEN
gH_P3_ProductPumpFC_Manual := mmH2O_TO_Freq(mPID_FillHead_OUT,gH_ProcessSetup_KProdPump) ;
mManual_Value := 0.0 ;
mLMN_FAC := 1.0 ;
ELSE
mManual_Value := 0.0 ;
mLMN_FAC := 0.0 ;
END_IF
END_PROCEDURE
PROCEDURE _Filling_Head_PID_Ctrl_PID_Monitor
(* Convertida desde ACTION *)
(* Código LAD convertido a SCL *)
// Red 2
// Llamada a función: mFillingHeadPIDStat
IF mFillingHeadPIDStat(_POSITIV) THEN
mDummy := TRUE;
ELSE
mDummy := FALSE;
END_IF;
// Red 1
IF gHeadPIDCtrlOk THEN
gHeadPIDCtrlOk := TRUE;
ELSE
gHeadPIDCtrlOk := FALSE;
END_IF;
END_PROCEDURE
PROCEDURE _Filling_Head_PID_Ctrl_Read_Analog
(* Convertida desde ACTION *)
(* Código LAD convertido a SCL *)
// Red 1
IF NOT gH_Blender_OPT_Simulation THEN
gDiffSensor_Analog_Fault := TRUE;
ELSE
gDiffSensor_Analog_Fault := FALSE;
END_IF;
END_PROCEDURE
PROCEDURE _Filling_Head_PID_Ctrl_Reset_Integral
(* Convertida desde ACTION *)
(* Código ST original *)
mInit_Int_PID := 0.0 ;
_Init_int_PID := TRUE ;
END_PROCEDURE
PROCEDURE _Filling_Head_PID_Ctrl_Write_Analog
(* Convertida desde ACTION *)
(* Código LAD convertido a SCL *)
// Red 1
IF NOT gH_Blender_OPT_Simulation THEN
gProduct_VFC_MainRefValue := TRUE;
ELSE
gProduct_VFC_MainRefValue := FALSE;
END_IF;
END_PROCEDURE