Obsidean_VM/04-SIDEL/06 - E5.007363 - Modifica O.../Source/source/BlenderPID_PIDInitParam.md

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