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