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

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