7.6 KiB
7.6 KiB
FUNCTION_BLOCK "BlenderPIDCtrl_SaveInteg"
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : 'Author'
FAMILY : TASK1
NAME : 'Name'
VERSION : 1.0
VAR
mMinProd : Bool;
Timer135En : Bool;
Timer136En : Bool;
Timer137En : Bool;
Timer144En : Bool;
Timer145En : Bool;
Timer146En : Bool;
END_VAR
VAR_TEMP
ValBinTmr135 : Word;
ValBcdTmr135 : S5Time;
ValBinTmr136 : Word;
ValBcdTmr136 : S5Time;
ValBinTmr137 : Word;
ValBcdTmr137 : S5Time;
ValBinTmr144 : Word;
ValBcdTmr144 : S5Time;
ValBinTmr145 : Word;
ValBcdTmr145 : S5Time;
ValBinTmr146 : Word;
ValBcdTmr146 : S5Time;
END_VAR
BEGIN
(* This block save the Integral Component for each PID when the prod flow is minimum *)
(* for the next blender start, that is at minimum speed *)
(* classic code: IF ABS("Blender_Variables".gActual_Prod_SP - "Blender_Variables".gMinProduction) < 0.1 * "Blender_Variables".gMinProduction THEN*)
IF ABS("Blender_Variables".gActual_Prod_SP - "Blender_Variables".gMinProduction) < REAL#0.1 * "Blender_Variables".gMinProduction THEN
#mMinProd := TRUE ;
ELSE
#mMinProd := FALSE ;
END_IF;
"ONS_R"(Enable_ONS := "HMI_PID".RMM301.ManualControl.PidEnable,
Aux_ONS := "mRMM301_Int_Init",
ONS_R => "mRMM301_Int_ONS" );
#Timer135En := #mMinProd;
IF "HMI_PID".RMM301.ManualControl.PidEnable THEN
#ValBcdTmr135:= S_ODT (T_NO := "mSaveRMM301_IntTON",
S := #Timer135En,
TV := s5time#20s,
R := "AUX FALSE",
BI => #ValBinTmr135,
Q => "mSaveRMM301_IntTON.Q");
IF "mSaveRMM301_IntTON.Q" AND "gRMM301_PIDCtrlOk" THEN
"PID_Variables".RMM301PIDIntValue := "mPID_RMM301_Int" ;
"HMI_PID".RMM301.I_ITLVAL := "PID_Variables".RMM301PIDIntValue ;
#Timer135En := FALSE ;
END_IF;
ELSE
#Timer135En := FALSE ;
END_IF;
IF "HMI_PID".RMM301.High_Limit OR "HMI_PID".RMM301.Low_Limit THEN
(* classic code: "HMI_PID".RMM301.I_ITLVAL := 0.0 ;*)
"HMI_PID".RMM301.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRMM301_Int_ONS" THEN
"HMI_PID".RMM301.I_ITL := TRUE ;
END_IF;
"ONS_R"(Enable_ONS := "HMI_PID".RMP302.ManualControl.PidEnable,
Aux_ONS := "mRMP302_Int_Init",
ONS_R => "mRMP302_Int_ONS" );
#Timer136En := #mMinProd;
IF "HMI_PID".RMP302.ManualControl.PidEnable THEN
#ValBcdTmr136:= S_ODT (T_NO := "mSaveRMP302_IntTON",
S := #Timer136En,
TV := s5time#20s,
R := "AUX FALSE",
BI => #ValBinTmr136,
Q => "mSaveRMP302_IntTON.Q");
IF "mSaveRMP302_IntTON.Q" AND "gRMP302_PIDCtrlOk" THEN
"PID_Variables".RMP302PIDIntValue := "mPID_RMP302_Int" ;
"HMI_PID".RMP302.I_ITLVAL := "PID_Variables".RMP302PIDIntValue ;
#Timer136En := FALSE ;
END_IF;
ELSE;
#Timer136En := FALSE ;
END_IF;
IF "HMI_PID".RMP302.High_Limit OR "HMI_PID".RMP302.Low_Limit THEN
(* classic code: "HMI_PID".RMP302.I_ITLVAL := 0.0 ;*)
"HMI_PID".RMP302.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRMP302_Int_ONS" THEN
"HMI_PID".RMP302.I_ITL := TRUE ;
END_IF;
"ONS_R"(Enable_ONS := "HMI_PID".RMM303.ManualControl.PidEnable ,
Aux_ONS := "mRMM303_Int_Init",
ONS_R => "mRMM303_Int_ONS" );
#Timer137En := #mMinProd;
IF "HMI_PID".RMM303.ManualControl.PidEnable THEN
#ValBcdTmr137:= S_ODT (T_NO := "mSaveRMM303_IntTON",
S := #Timer137En,
TV := s5time#20s,
R := "AUX FALSE",
BI => #ValBinTmr137,
Q => "mSaveRMM303_IntTON.Q");
IF "mSaveRMM303_IntTON.Q" AND "gRMM303_PIDCtrlOk" THEN
"PID_Variables".RMM303PIDIntValue := "mPID_RMM303_Int" ;
"HMI_PID".RMM303.I_ITLVAL := "PID_Variables".RMM303PIDIntValue ;
#Timer137En := FALSE ;
END_IF;
ELSE
#Timer137En := FALSE ;
END_IF;
IF ("HMI_PID".RMM303.High_Limit OR "HMI_PID".RMM303.Low_Limit) THEN
(* classic code: "HMI_PID".RMM303.I_ITLVAL := 0.0 ;*)
"HMI_PID".RMM303.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRMM303_Int_ONS" THEN
"HMI_PID".RMM303.I_ITL := TRUE ;
END_IF;
// SECOND GAS INJECTION
"ONS_R"(Enable_ONS := "HMI_PID".RMM304.ManualControl.PidEnable ,
Aux_ONS := "mRMM304_Int_Init",
ONS_R => "mRMM304_Int_ONS" );
#Timer146En := #mMinProd;
IF "HMI_PID".RMM304.ManualControl.PidEnable THEN
#ValBcdTmr137:= S_ODT (T_NO := "mSaveRMM304_IntTON",
S := #Timer146En,
TV := s5time#20s,
R := "AUX FALSE",
BI => #ValBinTmr146,
Q => "mSaveRMM304_IntTON.Q");
IF "mSaveRMM304_IntTON.Q" AND "gRMM304_PIDCtrlOk" THEN
"PID_Variables".RMM304PIDIntValue := "mPID_RMM304_Int" ;
"HMI_PID".RMM304.I_ITLVAL := "PID_Variables".RMM304PIDIntValue ;
#Timer146En := FALSE ;
END_IF;
ELSE
#Timer146En := FALSE ;
END_IF;
IF ("HMI_PID".RMM304.High_Limit OR "HMI_PID".RMM304.Low_Limit) THEN
(* classic code: "HMI_PID".RMM304.I_ITLVAL := 0.0 ;*)
"HMI_PID".RMM304.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRMM304_Int_ONS" THEN
"HMI_PID".RMM304.I_ITL := TRUE ;
END_IF;
"ONS_R"(Enable_ONS := "HMI_PID".RVP303.ManualControl.PidEnable,
Aux_ONS := "mRVP303_Int_Init",
ONS_R => "mRVP303_Int_ONS" );
#Timer144En := #mMinProd;
IF "HMI_PID".RVP303.ManualControl.PidEnable THEN
#ValBcdTmr144:= S_ODT (T_NO := "mSaveRVP303_IntTON",
S := #Timer144En,
TV := S5TIME#20s,
R := "AUX FALSE",
BI => #ValBinTmr144,
Q => "mSaveRVP303_IntTON.Q");
IF "mSaveRVP303_IntTON.Q" THEN
"PID_Variables".RVP303PIDIntValue := "mPID_RVP303_Int" ;
"HMI_PID".RVP303.I_ITLVAL := "PID_Variables".RVP303PIDIntValue ;
#Timer144En := FALSE ;
END_IF;
ELSE;
#Timer144En := FALSE ;
END_IF;
IF "HMI_PID".RVP303.High_Limit OR "HMI_PID".RVP303.Low_Limit THEN
(* classic code: "HMI_PID".RVP303.I_ITLVAL := 0.0 ;*)
"HMI_PID".RVP303.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRVP303_Int_ONS" THEN
"HMI_PID".RVP303.I_ITL := TRUE ;
END_IF;
"ONS_R"(Enable_ONS := "HMI_PID".RVN302.ManualControl.PidEnable,
Aux_ONS := "mRVN302_Int_Init",
ONS_R => "mRVN302_Int_ONS" );
#Timer145En := #mMinProd;
IF "HMI_PID".RVN302.ManualControl.PidEnable THEN
#ValBcdTmr145:= S_ODT (T_NO := "mSaveRVN302_IntTON",
S := #Timer145En,
TV := S5TIME#20s,
R := "AUX FALSE",
BI => #ValBinTmr145,
Q => "mSaveRVN302_IntTON.Q");
IF "mSaveRVN302_IntTON.Q" THEN
"PID_Variables".RVN302PIDIntValue := "mPID_RVN302_Int" ;
"HMI_PID".RVN302.I_ITLVAL := "PID_Variables".RVN302PIDIntValue ;
#Timer145En := FALSE ;
END_IF;
ELSE;
#Timer145En := FALSE ;
END_IF;
IF "HMI_PID".RVN302.High_Limit OR "HMI_PID".RVN302.Low_Limit THEN
(* classic code: "HMI_PID".RVN302.I_ITLVAL := 0.0 ;*)
"HMI_PID".RVN302.I_ITLVAL := REAL#0.0 ;
END_IF;
IF "mRVN302_Int_ONS" THEN
"HMI_PID".RVN302.I_ITL := TRUE ;
END_IF;
END_FUNCTION_BLOCK