257 lines
8.6 KiB
Plaintext
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
|