```pascal FUNCTION_BLOCK "BrixTracking_SampleTime" { S7_Optimized_Access := 'FALSE' } AUTHOR : 'Author' FAMILY : TASK2 NAME : 'Name' VERSION : 1.0 VAR_IN_OUT mTakeSample : Bool; mCycleCount : Int; mProdBrixSample : Int; mAuxProdBrixCorr : Real; END_VAR VAR mStart : Bool; mAllSamples : Bool; mWaitCycleToSample : Int; mTotalCount : Int; mProdRefresh : Real; mProdRefreshS : Real; mAuxProdBrixCorrInit : 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 #mProdBrixSample <> 0 THEN #mWaitCycleToSample := REAL_TO_INT(#mProdRefreshS / #mProdBrixSample / "Time_250ms") ; END_IF; IF #mWaitCycleToSample < 1 THEN #mWaitCycleToSample := 1 ; END_IF; IF "Procedure_Variables".ProdBrix_Track.Latch AND NOT "gNoFreezeProductMeter" THEN IF #mCycleCount <= #mWaitCycleToSample THEN #mCycleCount := #mCycleCount + 1 ; ELSE #mTakeSample := TRUE ; #mCycleCount := 0 ; END_IF; ELSE #mTakeSample := FALSE ; // mCycleCount := 0 ; END_IF; IF #mTakeSample THEN #mTotalCount := #mTotalCount + 1 ; END_IF; IF #mTotalCount >= #mProdBrixSample THEN IF "Procedure_Variables".ProdBrix_Track.Running THEN IF NOT #mStart THEN #mStart := TRUE ; #mAuxProdBrixCorrInit := "HMI_Blender_Parameters".Actual_Recipe_Parameters._ProductBrix - "Blender_Variables".gProdBxStat_MeanValue ; IF #mAuxProdBrixCorr=0 THEN #mAuxProdBrixCorr := ("HMI_Blender_Parameters".Actual_Recipe_Parameters._ProductBrix - "Blender_Variables".gProdBxStat_MeanValue) / 3 ; END_IF; ELSE #mStart := FALSE ; #mAuxProdBrixCorr := #mAuxProdBrixCorr + ("HMI_Blender_Parameters".Actual_Recipe_Parameters._ProductBrix - "Blender_Variables".gProdBxStat_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".ProdBrix_Track.Running THEN IF NOT (ABS(#mAuxProdBrixCorr) < "Blender_Constants".gBrixTrackingMinCorr OR ABS(#mAuxProdBrixCorr) > "Blender_Constants".gBrixTrackingMaxCorr) THEN "Blender_Variables".gBrixTrackingCorr := #mAuxProdBrixCorr ; END_IF; END_IF; END_FUNCTION_BLOCK ```