7.6 KiB
7.6 KiB
FUNCTION_BLOCK "BlenderPID_PIDInitParam"
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : 'Author'
FAMILY : TASK1
NAME : 'Name'
VERSION : 1.0
VAR
mCO2DevStdInt : Int;
mGAS2DevStdInt : Int;
mH2OKp : Real;
mSyrKp : Real;
mCO2DevStdFOut : Real;
mCO2Kp : Real;
mGAS2DevStdFOut : Real;
mGAS2Kp : Real;
mH2OKpLimit : "SlewLimit";
mSyrKpLimit : "SlewLimit";
mCO2KpLimit : "SlewLimit";
mGAS2KpLimit : "SlewLimit";
mCO2DevStdFlt : "LowPassFilter";
mGAS2DevStdFlt : "LowPassFilter";
END_VAR
VAR_TEMP
mAuxONS_Q : Bool;
mAuxONS1_Q : Bool;
END_VAR
BEGIN
"Blender_Variables".gK_RecBlendError := "HMI_Blender_Parameters".ProcessSetup._KRecBlendError ;
"Blender_Variables".gK_RecCarboCO2Error := "HMI_Blender_Parameters".ProcessSetup._KRecCarboCO2Error ;
"HMI_PID".RMM301.Cycle_Time := "Time_300ms" ;
"HMI_PID".RMP302.Cycle_Time := "Time_300ms" ;
"HMI_PID".RMM303.Cycle_Time := "Time_300ms" ;
"HMI_PID".RMM304.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVM301.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVP303.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVN302.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVS318.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVM319_PRD.Cycle_Time := "Time_300ms" ;
"HMI_PID".RVM319_H2O.Cycle_Time := "Time_300ms" ;
IF "HMI_PID".RMM301.Bp <> 0 THEN
"HMI_PID".RMM301.KP := 100 / "HMI_PID".RMM301.Bp ;
#mH2OKp := "HMI_PID".RMM301.KP ;
(* classic code: #mH2OKpLimit(i_InValue := #mH2OKp ,
i_SlewMax := 0.02 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM301.KP) ;*)
#mH2OKpLimit(i_InValue := #mH2OKp ,
i_SlewMax := REAL#0.02 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM301.KP) ;
ELSE
(* classic code: "HMI_PID".RMM301.KP := 0.0 ;*)
"HMI_PID".RMM301.KP := REAL#0.0 ;
END_IF;
IF "HMI_PID".RMP302.Bp <> 0 THEN
"HMI_PID".RMP302.KP := 100 / "HMI_PID".RMP302.Bp ;
IF "gBlenderStopping" THEN
(* classic code: #mSyrKp := "HMI_PID".RMP302.KP * 1.4 ;*)
#mSyrKp := "HMI_PID".RMP302.KP * REAL#1.4 ;
ELSE
#mSyrKp := "HMI_PID".RMP302.KP ;
END_IF;
(* classic code: #mSyrKpLimit(i_InValue := #mSyrKp ,
i_SlewMax := 0.08 ,
i_Cycle := "Time_300ms" ,
out := "HMI_PID".RMP302.KP) ;*)
#mSyrKpLimit(i_InValue := #mSyrKp ,
i_SlewMax := REAL#0.08 ,
i_Cycle := "Time_300ms" ,
out := "HMI_PID".RMP302.KP) ;
ELSE
(* classic code: "HMI_PID".RMP302.KP := 0.0 ;*)
"HMI_PID".RMP302.KP := REAL#0.0 ;
END_IF;
IF "HMI_PID".RMM303.Bp <> 0 THEN
"HMI_PID".RMM303.KP := 100 / "HMI_PID".RMM303.Bp ;
#mCO2DevStdFlt(i_Value := "Blender_Variables".gCarboCO2Stat_DevStd ,
i_Num := 10 ,
i_Enable := "gBlenderFlowFltEn") ;
#mCO2DevStdFOut := ABS(#mCO2DevStdFlt.FilterOut) ;
"ONS_R"(Enable_ONS := "gP_CarboPipe_En", Aux_ONS := "mCO2TdOns", ONS_R => #mAuxONS_Q);
IF #mAuxONS_Q THEN
"mCO2TD" := "HMI_PID".RMM303.Td ;
END_IF;
"ONS_R"(Enable_ONS := NOT "gP_CarboPipe_En", Aux_ONS := "mCO2Td1Ons", ONS_R => #mAuxONS1_Q);
IF #mAuxONS1_Q THEN
"HMI_PID".RMM303.Td := "mCO2TD" ;
END_IF;
IF "gBlenderStableFlow" THEN
#mCO2DevStdInt := REAL_TO_INT(#mCO2DevStdFOut * 1) ;
END_IF;
IF #mCO2DevStdInt < 1 THEN
#mCO2Kp := 1 ;
ELSIF #mCO2DevStdInt > 10 THEN
#mCO2DevStdInt := 10 ;
END_IF;
IF "gBlenderStopping" THEN
(* classic code: #mCO2Kp := "HMI_PID".RMM303.KP * 1.3 ;*)
#mCO2Kp := "HMI_PID".RMM303.KP * REAL#1.3 ;
ELSIF "gP_CarboPipe_En" THEN
// mCO2Kp := "PID_Variables".CO2_PID.KP / 2.5 ;
(* classic code: #mCO2Kp := 0.006 ;*)
#mCO2Kp := REAL#0.006 ;
"HMI_PID".RMM303.KP := #mCO2Kp ;
(* classic code: "HMI_PID".RMM303.Td := 0.0 ;*)
"HMI_PID".RMM303.Td := REAL#0.0 ;
// gR_CO2_TI := 30 ;
ELSIF #mCO2DevStdInt > 5 AND NOT "gBlenderStopping" THEN
#mCO2Kp := "HMI_PID".RMM303.KP / 2;
ELSE
#mCO2Kp := "HMI_PID".RMM303.KP ;
END_IF;
(* classic code: #mCO2KpLimit(i_InValue := #mCO2Kp ,
i_SlewMax := 0.8 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM303.KP) ;*)
#mCO2KpLimit(i_InValue := #mCO2Kp ,
i_SlewMax := REAL#0.8 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM303.KP) ;
ELSE
(* classic code: "HMI_PID".RMM303.KP:= 0.0 ;*)
"HMI_PID".RMM303.KP:= REAL#0.0 ;
END_IF;
// SECOND GAS INJECTION
IF "HMI_PID".RMM304.Bp <> 0 THEN
"HMI_PID".RMM304.KP := 100 / "HMI_PID".RMM304.Bp ;
#mGAS2DevStdFlt(i_Value := "Blender_Variables".gGAS2Stat_DevStd ,
i_Num := 10 ,
i_Enable := "gBlenderFlowFltEn") ;
#mGAS2DevStdFOut := ABS(#mGAS2DevStdFlt.FilterOut) ;
IF "gBlenderStableFlow" THEN
#mGAS2DevStdInt := REAL_TO_INT(#mGAS2DevStdFOut * 1) ;
END_IF;
IF #mGAS2DevStdInt < 1 THEN
#mGAS2Kp := 1 ;
ELSIF #mGAS2DevStdInt > 10 THEN
#mGAS2DevStdInt := 10 ;
END_IF;
IF "gBlenderStopping" THEN
(* classic code: #mGAS2Kp := "HMI_PID".RMM304.KP * 1.3 ;*)
#mGAS2Kp := "HMI_PID".RMM304.KP * REAL#1.3 ;
ELSIF #mGAS2DevStdInt > 5 AND NOT "gBlenderStopping" THEN
#mGAS2Kp := "HMI_PID".RMM304.KP / 2;
ELSE
#mGAS2Kp := "HMI_PID".RMM304.KP ;
END_IF;
(* classic code: #mGAS2KpLimit(i_InValue := #mGAS2Kp ,
i_SlewMax := 0.8 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM304.KP) ;*)
#mGAS2KpLimit(i_InValue := #mGAS2Kp ,
i_SlewMax := REAL#0.8 ,
i_Cycle := "Time_300ms",
out := "HMI_PID".RMM304.KP) ;
ELSE
(* classic code: "HMI_PID".RMM304.KP:= 0.0 ;*)
"HMI_PID".RMM304.KP:= REAL#0.0 ;
END_IF;
IF "HMI_PID".RVP303.Bp <> 0 THEN
"HMI_PID".RVP303.KP := 100 / "HMI_PID".RVP303.Bp ;
ELSE
(* classic code: "HMI_PID".RVP303.KP := 0.0 ;*)
"HMI_PID".RVP303.KP := REAL#0.0 ;
END_IF;
IF NOT "Blender_Variables_Pers".gSkipDeaireation THEN
IF "HMI_PID".RVN302.Bp <> 0 THEN
"HMI_PID".RVN302.KP := 100 / "HMI_PID".RVN302.Bp ;
ELSE
(* classic code: "HMI_PID".RVN302.KP := 0.0 ;*)
"HMI_PID".RVN302.KP := REAL#0.0 ;
END_IF;
ELSE
IF "HMI_PID".RVN302_TM301.Bp <> 0 THEN
"HMI_PID".RVN302.KP := 100 / "HMI_PID".RVN302_TM301.Bp ;
ELSE
(* classic code: "HMI_PID".RVN302.KP := 0.0 ;*)
"HMI_PID".RVN302.KP := REAL#0.0 ;
END_IF;
END_IF ;
IF "HMI_PID".RVS318.Bp <> 0 THEN
"HMI_PID".RVS318.KP := 100 / "HMI_PID".RVS318.Bp ;
ELSE
(* classic code: "HMI_PID".RVS318.KP := 0.0 ;*)
"HMI_PID".RVS318.KP := REAL#0.0 ;
END_IF;
IF "HMI_PID".RVM319_PRD.Bp <> 0 THEN
"HMI_PID".RVM319_PRD.KP := 100 / "HMI_PID".RVM319_PRD.Bp ;
ELSE
(* classic code: "HMI_PID".RVM319_PRD.KP := 0.0 ;*)
"HMI_PID".RVM319_PRD.KP := REAL#0.0 ;
END_IF;
IF "HMI_PID".RVM319_H2O.Bp <> 0 THEN
"HMI_PID".RVM319_H2O.KP := 100 / "HMI_PID".RVM319_H2O.Bp ;
ELSE
(* classic code: "HMI_PID".RVM319_H2O.KP := 0.0 ;*)
"HMI_PID".RVM319_H2O.KP := REAL#0.0 ;
END_IF;
END_FUNCTION_BLOCK