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

3.5 KiB

FUNCTION_BLOCK "BlenderPID_BlendingFault"
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : 'Author'
FAMILY : TASK1
NAME : 'Name'
VERSION : 1.0
   VAR 
      Timer132Enable : Bool;
      Timer133Enable : Bool;
      Timer134Enable : Bool;
   END_VAR

   VAR_TEMP 
      ValBinTmr132 : Word;
      ValBcdTmr132 : S5Time;
      ValBinTmr133 : Word;
      ValBcdTmr133 : S5Time;
      ValBinTmr134 : Word;
      ValBcdTmr134 : S5Time;
   END_VAR


BEGIN
	
	
	IF "Procedure_Variables".First_Production.Latch AND "gBlenderEnToRamp" THEN
	    #Timer132Enable := TRUE;
	    #ValBcdTmr132:= S_ODT (T_NO := "mFirstProdBlendErrEnTON",
	                          S    := #Timer132Enable,
	                          TV  := s5time#20s,
	                          R    := "AUX FALSE",
	                          BI   =>  #ValBinTmr132,
	                          Q    => "mFirstProdBlendErrEn.Q");
	ELSE
	    #Timer132Enable := FALSE ;
	END_IF;
	
	IF (ABS("Blender_Variables".gBlendError) > "HMI_Variables_Status".Analog_Values.MaxBlendError AND "gBlenderBlending") AND ("mFirstProdBlendErrEn.Q" OR "Procedure_Variables".First_Production.Done) THEN
	    IF "Blender_Variables".gBlendError > 0 THEN
	        "gBlendErrorLowSyr_Fault" := TRUE ;
	    ELSE
	        "gBlendErrorHighSyr_Fault" := TRUE ;
	    END_IF;
	END_IF;
	
	IF ("gBlendErrorLowSyr_Fault" OR "gBlendErrorHighSyr_Fault") AND "gIN_ResetBtn" THEN
	      "Blender_Variables".gBlendError := 0 ;
	      "gMaxBlendErrorAfterFault"      := TRUE ;
	      "gBlendErrorLowSyr_Fault"       := FALSE ;
	      "gBlendErrorHighSyr_Fault"      := FALSE ;
	END_IF;
	
	IF "gMaxBlendErrorAfterFault" AND "gBlenderStableFlow" THEN
	    #Timer133Enable := TRUE;
	END_IF;
	    
	#ValBcdTmr133:= S_ODT (T_NO := "mBlendErrorRecTmr",
	                      S    := #Timer133Enable,
	                      TV   := s5time#10s,
	                      R    := "AUX FALSE",
	                      BI   =>  #ValBinTmr133,
	                      Q    => "mBlendErrorRecTmr.Q");
	
	IF "mBlendErrorRecTmr.Q" THEN
	    IF ABS("Blender_Variables".gBlendError) < "HMI_Variables_Status".Analog_Values.MaxBlendError THEN
	        #Timer133Enable := FALSE ;
	        "gMaxBlendErrorAfterFault" := FALSE ;
	    END_IF;
	END_IF;
	
	IF (ABS("Blender_Variables".gCarboCO2Error) > "HMI_Variables_Status".Analog_Values.MaxCarboCO2Error AND "gBlenderBlending") AND ("mFirstProdBlendErrEn.Q" OR "Procedure_Variables".First_Production.Done) THEN
	    IF "Blender_Variables".gCarboCO2Error > 0 THEN
	        "gCarboCO2Err_L_CO2_Fault" := TRUE ;
	    ELSE
	        "gCarboCO2Err_H_CO2_Fault" := FALSE ;
	    END_IF;
	END_IF;
	
	IF ("gCarboCO2Err_L_CO2_Fault" OR "gCarboCO2Err_H_CO2_Fault") AND "gIN_ResetBtn" THEN
	    "Blender_Variables".gCarboCO2Error := 0 ;
	    "gMaxCarboErrorAfterFault" := TRUE ;
	    "gCarboCO2Err_L_CO2_Fault" := FALSE ;
	    "gCarboCO2Err_H_CO2_Fault" := FALSE ;
	END_IF;
	
	IF "gMaxCarboErrorAfterFault" AND "gBlenderStableFlow" THEN
	    #Timer134Enable := TRUE;
	END_IF;
	
	#ValBcdTmr134:= S_ODT (T_NO := "mCarboErrorRecTmr",
	                      S    := #Timer134Enable,
	                      TV   := s5time#20s,
	                      R    := "AUX FALSE",
	                      BI   =>  #ValBinTmr134,
	                      Q    => "mCarboErrorRecTmr.Q");   
	                      
	IF "mCarboErrorRecTmr.Q" THEN
	    IF ABS("Blender_Variables".gCarboCO2Error) < "HMI_Variables_Status".Analog_Values.MaxCarboCO2Error THEN
	        #Timer134Enable := FALSE ;
	        "gMaxCarboErrorAfterFault":= FALSE ;
	    END_IF;
	END_IF;
	
	
END_FUNCTION_BLOCK