2.7 KiB
2.7 KiB
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