Obsidean_VM/04-SIDEL/06 - E5.007363 - Modifica O.../Source/source/BrixTracking_SampleTime.md

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