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