```pascal 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 ```