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

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