ParamManagerScripts/backend/script_groups/TwinCat/.example/PRODUCTAVAILABLE.EXP

257 lines
8.6 KiB
Plaintext

(* @PATH := '\/TASK2_ControlMain\/Blender_Procedure\/System Run Out' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM ProductAvailable
VAR
mSyrupAvailable_Line : REAL;
mSyrupAvailable_Tank : REAL;
mSyrupTankProductAvailable: BOOL;
mSyrupProductAvailable : REAL;
END_VAR
VAR_OUTPUT
EN_Out : BOOL ;
END_VAR
(* @END_DECLARATION := '0' *)
IF NOT gFastChangeOverActivated THEN
gContainerSize := gH_A_Recipe_BottleSize ;
CASE gH_A_Recipe_BottleShape OF
0: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 2100 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 2100 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From 1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 2100 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 2100 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 2100 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 2100 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
1: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 3300 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 2800 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From 1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 1600 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 1650 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 1750 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 1750 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
2: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 3333 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 2990 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From 1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 2450 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 2000 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 1200 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 1200 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
3: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 4000 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 3500 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From 1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 2230 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 2100 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 1999 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 1999 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
4: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 2300 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 1960 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From 1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 1700 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 1500 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 1200 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 1200 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
5: ;
CASE TRUNC (gContainerSize*2.0) * 5 OF
0: gTotalEmptyContainer := 4500 ; (* From 0 to 0.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
5: gTotalEmptyContainer := 2100 ; (* From 0.5 to 0.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
10: gTotalEmptyContainer := 3400 ; (* From 1 to 1.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
15: gTotalEmptyContainer := 2100 ; (* From .1.5 to 1.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
20: gTotalEmptyContainer := 3290 ; (* From 2 to 2.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
25: gTotalEmptyContainer := 3000 ; (* From 2.5 to 2.99 Liters *)
gProdAvailToFillerRunOut := 1000 ;
30: gTotalEmptyContainer := 2690 ; (* From 3 to 3.49 Liters *)
gProdAvailToFillerRunOut := 1000 ;
ELSE
gTotalEmptyContainer := 2690 ;
gProdAvailToFillerRunOut := 1000 ;
END_CASE
ELSE
;
END_CASE
END_IF
IF NOT gFillerRanOut AND NOT gH_Blender_OPT_BlendFillSystem THEN
gFillerProductAvailable := gFillerProductAvailableAmount ;
ELSE
gFillerProductAvailable := 0.0 ;
END_IF
mSyrupAvailable_Line := LIMIT (0, gH_ProcessSetup_SyrupRunOutLiters - gH_SyrupRunOutCount, gH_ProcessSetup_SyrupRunOutLiters) ;
IF gH_Blender_OPT_SyrupLevel THEN
mSyrupAvailable_Tank := LIMIT (0,gSyrupTankBottomVol + (gSyrupTankVolume - gSyrupTankBottomVol) * gSyrupTankLevel / 100,gSyrupTankVolume) ;
ELSE
mSyrupAvailable_Tank := gSyrupTankSyrupAmount ;
END_IF
IF NOT (gSyrRunOut_Done OR gProdTankRunOut_Latch) THEN
IF gSugarBeverage THEN
gSyrupProductAvailable := (mSyrupAvailable_Line + mSyrupAvailable_Tank) * (gActualSP_RatioVol + 1) ;
ELSE
gSyrupProductAvailable := mSyrupAvailable_Line * (gActualSP_RatioVol + 1) ;
END_IF
ELSE
gSyrupProductAvailable := 0.0 ;
END_IF
IF NOT gProdTankRunOut_Done THEN
gTankProductAvailable := ProductLiterInTank(i_TankLevel:=gProductTankLevel) ;
ELSE
gTankProductAvailable := 0.0 ;
END_IF
gPrdPipeProductAvailable := LIMIT(0, gProdPipeRunOutProdAmount - gProdPipeRunOutPushCount, gProdPipeRunOutProdAmount) ;
gTotalProductAvailable := (gTankProductAvailable + gSyrupProductAvailable + gPrdPipeProductAvailable + gFillerProductAvailable) ;
gH_SyrupProductAvailable := gSyrupProductAvailable ;
gH_PrdTankProductAvailable := gTankProductAvailable ;
gH_PrdPipeProductAvailable := gPrdPipeProductAvailable ;
gH_FillerProductAvailable := gFillerProductAvailable ;
gH_TotalProductAvailable := gTotalProductAvailableBottle ;
gH_TotalEmptyContainer := gTotalEmptyContainer ;
IF gContainerSize<>0 THEN
gTotalProductAvailableBottle := gTotalProductAvailable / gContainerSize ;
END_IF
IF (gSyrRunOut_Latch OR gSyrRunOut_Done OR gProdTankRunOut_Latch OR gProdTankRunOut_Done) AND
(((gTotalProductAvailable - gFillerProductAvailable)<gProdAvailToFillerRunOut) OR gToFillerProdRunOut) AND NOT gFillerRanOut THEN
gToFillerProdRunOut := TRUE ;
(*IF NOT gH_Blender_OPT_FastChangeOverEnabled AND NOT gIn_ProdTankNotEmpty THEN
gToFillerProductCompleted := TRUE ;
END_IF*)
ELSE
gToFillerProdRunOut := FALSE ;
END_IF
IF (gSyrRunOut_Latch OR gSyrRunOut_Done OR gProdTankRunOut_Latch OR gProdTankRunOut_Done) AND (gProdPipeRunOut_Done OR gToFillerProductCompleted) AND
NOT gIn_Flr_FastChangeLastContainerFilled THEN
gToFillerProductCompleted := TRUE ;
ELSE
gToFillerProductCompleted := FALSE ;
END_IF
IF gFastChangeOverActivated AND (((gTotalProductAvailableBottle<gProdAvailBottle_ToFillerBottleBlock) OR gH_FillerStopContainer) AND
NOT gInConveyerFull) THEN
gH_FillerStopContainer := TRUE ;
ELSE
gH_FillerStopContainer := FALSE ;
END_IF
IF gFastChangeOverActivated AND ((gTotalProductAvailableBottle<gH_TotalEmptyContainer) OR gH_DepallStop) THEN
gH_DepallStop := TRUE ;
ELSE
gH_DepallStop := FALSE ;
END_IF
END_PROGRAM