```pascal 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 ```