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