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