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

4.1 KiB

FUNCTION "ProdBrixRecovery_BrixCal" : Void
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : 'Author'
FAMILY : TASK2
NAME : 'Name'
VERSION : 1.0
   VAR_OUTPUT 
      mTooMuchProdInTank : Bool;
   END_VAR

   VAR_TEMP 
      mSyrPerc : Real;
      mSyrupKgMissing : Real;
      mSyrupLitMissing : Real;
      mQSugarNominal : Real;
      mQSugarActual : Real;
      mH2OPerc : Real;
      mRatio_M : Real;
      mRatio_V : Real;
      mKgH2OToRecover : Real;
      mQH2OActual : Real;
      mQH2ONominal : Real;
      mTankSpaceAvail : Real;
      mTotalRecoverProd : Real;
   END_VAR


BEGIN
	
	 
	
	(* classic code: IF "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupBrix <> 0.0 AND "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupFactor <> 0.0 THEN*)
	IF "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupBrix <> REAL#0.0 AND "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupFactor <> REAL#0.0 THEN
	    #mSyrPerc := "Blender_Variables".gProductBrix / ("HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupBrix * "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupFactor) ;
	    (* classic code: #mSyrupKgMissing := (#mQSugarNominal - #mQSugarActual) / ("HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupBrix * "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupFactor) * 100.0 ;*)
	    #mSyrupKgMissing := (#mQSugarNominal - #mQSugarActual) / ("HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupBrix * "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupFactor) * REAL#100.0 ;
	END_IF;
	
	#mH2OPerc := 1 - #mSyrPerc;
	
	IF #mSyrPerc <> 0 THEN
	    #mRatio_M := #mH2OPerc / #mSyrPerc ;
	END_IF;
	
	(* classic code: IF "Blender_Constants".gH2O_Density <> 0.0 THEN*)
	IF "Blender_Constants".gH2O_Density <> REAL#0.0 THEN
	    #mRatio_V := #mRatio_M * "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupDensity / "Blender_Constants".gH2O_Density ;
	    #mKgH2OToRecover := (#mQH2OActual - #mQH2ONominal) / "Blender_Constants".gH2O_Density ;
	END_IF;
	
	CASE "HMI_Blender_Parameters".Processor_Options.Blender_OPT._MeterType OF
	    1: ;
	        IF (#mRatio_V+1)<>0 THEN
	            "Blender_Variables".gProdDensFromMeter := "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupDensity * (#mRatio_M + 1) / (#mRatio_V + 1) ;    // Maselli 
	        ELSE
	            (* classic code: "Blender_Variables".gProdDensFromMeter := 1.0 ;*)
	            "Blender_Variables".gProdDensFromMeter := REAL#1.0 ;
	        END_IF;
	    2: ;
	        "Blender_Variables".gProdDensFromMeter := "Blender_Variables".gProductDens ;    // Anton Paar 
	ELSE:
	    (* classic code: "Blender_Variables".gProdDensFromMeter := 1.0 ;*)
	    "Blender_Variables".gProdDensFromMeter := REAL#1.0 ;
	END_CASE;
	
	#mQSugarNominal := ("Blender_Variables".gTankProdAmount + "Blender_Constants".gProdAmountInSerpentine) * "Blender_Variables".gProdDensFromMeter * "HMI_Blender_Parameters".Actual_Recipe_Parameters._ProductBrix / 100 ;
	#mQSugarActual := ("Blender_Variables".gTankProdAmount + "Blender_Constants".gProdAmountInSerpentine) * "Blender_Variables".gProdDensFromMeter * "Blender_Variables".gProductBrix / 100 ;
	#mQH2ONominal := "Blender_Variables".gTankProdAmount - #mQSugarNominal ;
	#mQH2OActual := "Blender_Variables".gTankProdAmount - #mQSugarActual ;
	
	IF "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupDensity <> 0 THEN
	    #mTotalRecoverProd := (#mSyrupKgMissing / "HMI_Blender_Parameters".Actual_Recipe_Parameters._SyrupDensity) * ("gActualSP_RatioVol" + 1);
	END_IF;
	
	IF "Blender_Variables".gActualSyrupDens <> 0 THEN
	    #mSyrupLitMissing := #mSyrupKgMissing /"Blender_Variables".gActualSyrupDens ;
	END_IF;
	
	(* classic code: #mTankSpaceAvail := ("Blender_Variables".gProdTankVolume * "Blender_Variables".gProdTankStopLvl / 100.0) - "Blender_Variables".gTankProdAmount ;*)
	#mTankSpaceAvail := ("Blender_Variables".gProdTankVolume * "Blender_Variables".gProdTankStopLvl / REAL#100.0) - "Blender_Variables".gTankProdAmount ;
	
	IF #mTankSpaceAvail >= 2 * "Blender_Constants".gProdAmountInSerpentine THEN
	    #mTooMuchProdInTank := FALSE ;
	ELSE
	    #mTooMuchProdInTank := TRUE ;
	END_IF;
	
	
END_FUNCTION