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

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