```pascal FUNCTION_BLOCK "ProductAvailable" { S7_Optimized_Access := 'FALSE' } AUTHOR : 'Author' FAMILY : TASK2 NAME : 'Name' VERSION : 1.0 VAR mSyrupAvailable_Line : Real; mSyrupAvailable_Tank : Real; mSyrupProductAvailable : Real; END_VAR BEGIN "System_RunOut_Variables".ContainerSize := "HMI_Blender_Parameters".Actual_Recipe_Parameters._BottleSize ; IF NOT "System_RunOut_Variables".FastChangeOverActivated THEN "System_RunOut_Variables".TotalEmptyContainer := 2100 ; "System_RunOut_Variables".ProdAvailToFillerRunOut := 1000 ; END_IF ; IF NOT "System_RunOut_Variables".FillerRanOut AND NOT "HMI_Blender_Parameters".Processor_Options.Blender_OPT._BlendFillSystem THEN "System_RunOut_Variables".FillerProductAvailable := "System_RunOut_Variables".FillerProductAvailAmount ; ELSE (* classic code: "System_RunOut_Variables".FillerProductAvailable := 0.0 ;*) "System_RunOut_Variables".FillerProductAvailable := REAL#0.0 ; END_IF ; #mSyrupAvailable_Line := LIMIT (MN:= 0, IN:= "HMI_Blender_Parameters".ProcessSetup._SyrupRunOutLiters - "HMI_Variables_Status".Analog_Values.TP301RunOutCount, MX:= "HMI_Blender_Parameters".ProcessSetup._SyrupRunOutLiters ); IF "HMI_Blender_Parameters".Processor_Options.Blender_OPT._SyrupLevel THEN #mSyrupAvailable_Tank := LIMIT (MN:= 0, IN:= "System_RunOut_Variables".TP301BottomVol + ("System_RunOut_Variables".TP301Volume - "System_RunOut_Variables".TP301BottomVol) * "HMI_Instrument".LTP303.PVFiltered / 100, MX:= "System_RunOut_Variables".TP301Volume) ; ELSE #mSyrupAvailable_Tank := "System_RunOut_Variables".TP301SyrupAmount ; END_IF ; IF NOT ("Procedure_Variables".Syr_RunOut.Done OR "Procedure_Variables".TM301_RunOut.Latch) THEN IF "Blender_Variables_Pers".gSugarBeverage THEN "System_RunOut_Variables".SyrupProductAvailable := (#mSyrupAvailable_Line + #mSyrupAvailable_Tank) * ("gActualSP_RatioVol" + 1) ; ELSE "System_RunOut_Variables".SyrupProductAvailable := #mSyrupAvailable_Line * ("gActualSP_RatioVol" + 1) ; END_IF ; ELSE (* classic code: "System_RunOut_Variables".SyrupProductAvailable := 0.0 ;*) "System_RunOut_Variables".SyrupProductAvailable := REAL#0.0 ; END_IF ; IF NOT "Procedure_Variables".TM301_RunOut.Done THEN "System_RunOut_Variables".TankProductAvailable := "ProductLiterInTank"(i_TankLevel:="HMI_Instrument".LTM302.PVFiltered) ; ELSE (* classic code: "System_RunOut_Variables".TankProductAvailable := 0.0 ;*) "System_RunOut_Variables".TankProductAvailable := REAL#0.0 ; END_IF ; "System_RunOut_Variables".PrdPipeProductAvailable := LIMIT(MN:= 0, IN:= "System_RunOut_Variables".ProdPipeRunOutProdAmount - "System_RunOut_Variables".Prod_Pipe_RunOut.Push_Count, MX:= "System_RunOut_Variables".ProdPipeRunOutProdAmount) ; "System_RunOut_Variables".TotalProductAvailable := ("System_RunOut_Variables".TankProductAvailable + "System_RunOut_Variables".SyrupProductAvailable + "System_RunOut_Variables".PrdPipeProductAvailable + "System_RunOut_Variables".FillerProductAvailable) ; "HMI_Service".Service_Status.SyrupProductAvailable := "System_RunOut_Variables".SyrupProductAvailable ; "HMI_Service".Service_Status.PrdTankProductAvailable := "System_RunOut_Variables".TankProductAvailable ; "HMI_Service".Service_Status.PrdPipeProductAvailable := "System_RunOut_Variables".PrdPipeProductAvailable ; "HMI_Service".Service_Status.FillerProductAvailable := "System_RunOut_Variables".FillerProductAvailable ; "HMI_Service".Service_Status.TotalProductAvailable := "System_RunOut_Variables".TotProdAvailableBottle ; "HMI_Service".TotalEmptyContainer := "System_RunOut_Variables".TotalEmptyContainer ; IF "System_RunOut_Variables".ContainerSize <> 0 THEN "System_RunOut_Variables".TotProdAvailableBottle := "System_RunOut_Variables".TotalProductAvailable / "System_RunOut_Variables".ContainerSize ; END_IF ; IF ("Procedure_Variables".Syr_RunOut.Latch OR "Procedure_Variables".Syr_RunOut.Done OR "Procedure_Variables".TM301_RunOut.Latch OR "Procedure_Variables".TM301_RunOut.Done) AND ("System_RunOut_Variables".ProdPipe_RunOut.Done OR "System_RunOut_Variables".ToFillerProductCompleted) AND NOT "System_RunOut_Variables".In_Flr_LastContainer THEN "System_RunOut_Variables".ToFillerProductCompleted := TRUE ; ELSE "System_RunOut_Variables".ToFillerProductCompleted := FALSE ; END_IF ; IF "System_RunOut_Variables".FastChangeOverActivated AND ((("System_RunOut_Variables".TotProdAvailableBottle < "System_RunOut_Variables".ProdAvailBottle_FillerBB) OR "HMI_Service".Service_Status.FillerStopContainer) AND NOT "System_RunOut_Variables".InConveyerFull) THEN "HMI_Service".Service_Status.FillerStopContainer := TRUE ; ELSE "HMI_Service".Service_Status.FillerStopContainer := FALSE ; END_IF ; IF "System_RunOut_Variables".FastChangeOverActivated AND (("System_RunOut_Variables".TotProdAvailableBottle < "HMI_Service".TotalEmptyContainer) OR "HMI_Service".Service_Status.DepallStop) THEN "HMI_Service".Service_Status.DepallStop := TRUE ; ELSE "HMI_Service".Service_Status.DepallStop := FALSE ; END_IF ; IF (*"Procedure_Variables".Syr_RunOut.Latch OR "Procedure_Variables".Syr_RunOut.Done OR "Procedure_Variables".TM301_RunOut.Latch OR "Procedure_Variables".TM301_RunOut.Done OR "System_RunOut_Variables".ProdPipe_RunOut.Latch OR "System_RunOut_Variables".ProdPipe_RunOut.Done THEN*) "Procedure_Variables".TM301_RunOut.Latch THEN "System_RunOut_Variables".ToFillerProdRunOut := TRUE ; ELSE "System_RunOut_Variables".ToFillerProdRunOut := FALSE ; END_IF ; END_FUNCTION_BLOCK ```