```pascal FUNCTION_BLOCK "CO2Tracking_SampleTime" { S7_Optimized_Access := 'FALSE' } AUTHOR : 'Author' FAMILY : TASK2 NAME : 'Name' VERSION : 1.0 VAR_IN_OUT mTakeSample : Bool; mCycleCount : Int; mProdCO2Sample : Int; mAuxProdCO2Corr : Real; END_VAR VAR mStart : Bool; mAllSamples : Bool; mWaitCycleToSample : Int; mTotalCount : Int; mProdRefresh : Real; mProdRefreshS : Real; mAuxProdCO2CorrInit : Real; END_VAR BEGIN (* classic code: IF "Blender_Variables".gActual_Prod_SP <> 0.0 THEN*) IF "Blender_Variables".gActual_Prod_SP <> REAL#0.0 THEN #mProdRefresh := "Blender_Variables".gProductLitTank / "Blender_Variables".gActual_Prod_SP ; ELSE #mProdRefresh := 0 ; END_IF; (* classic code: #mProdRefreshS := #mProdRefresh * 1.6 * 60 ;*) #mProdRefreshS := #mProdRefresh * REAL#1.6 * 60 ; IF "Time_250ms" <> 0 AND #mProdCO2Sample <> 0 THEN #mWaitCycleToSample := REAL_TO_INT(#mProdRefreshS / #mProdCO2Sample / "Time_250ms") ; END_IF; IF #mWaitCycleToSample < 1 THEN #mWaitCycleToSample := 1 ; END_IF; IF "Procedure_Variables".ProdCO2_Track.Latch AND NOT "gNoFreezeProductMeter" THEN IF #mCycleCount <= #mWaitCycleToSample THEN #mCycleCount := #mCycleCount + 1 ; ELSE #mTakeSample := TRUE ; #mCycleCount := 0 ; END_IF; ELSE #mTakeSample := FALSE ; END_IF; IF #mTakeSample THEN #mTotalCount := #mTotalCount + 1 ; END_IF; IF #mTotalCount >= #mProdCO2Sample THEN IF "Procedure_Variables".ProdCO2_Track.Running THEN IF NOT #mStart THEN #mStart := TRUE ; #mAuxProdCO2CorrInit := "HMI_Blender_Parameters".Actual_Recipe_Parameters._CO2Vols - "Blender_Variables".gProdCO2Stat_MeanValue ; IF #mAuxProdCO2Corr=0 THEN #mAuxProdCO2Corr := ("HMI_Blender_Parameters".Actual_Recipe_Parameters._CO2Vols - "Blender_Variables".gProdCO2Stat_MeanValue) / 3 ; END_IF; ELSE #mStart := FALSE ; #mAuxProdCO2Corr := #mAuxProdCO2Corr + ("HMI_Blender_Parameters".Actual_Recipe_Parameters._CO2Vols - "Blender_Variables".gProdCO2Stat_MeanValue) / 10 ; END_IF; END_IF; #mAllSamples := TRUE ; #mTotalCount := 0 ; ELSE #mAllSamples := FALSE ; END_IF; // Check the LIMIT boundaries TO act the product tracking IF "Procedure_Variables".ProdCO2_Track.Running THEN IF NOT (ABS(#mAuxProdCO2Corr) < "Blender_Constants".gCO2TrackingMinCorr OR ABS(#mAuxProdCO2Corr) > "Blender_Constants".gCO2TrackingMaxCorr) THEN "Blender_Variables".gCO2TrackingCorr := #mAuxProdCO2Corr ; END_IF; END_IF; END_FUNCTION_BLOCK ```