Files
HundM_Fortna/=A01+UH03-KF00/Programmbausteine/200_MFR/FC_Direction.scl
T
2026-06-23 10:21:32 +02:00

406 lines
16 KiB
Plaintext

FUNCTION "FC_Direction" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
nInSwitchNo : USInt;
END_VAR
VAR_OUTPUT
nOutDirection : USInt;
END_VAR
VAR_IN_OUT
InOutCarrier : "stCarrier";
END_VAR
VAR_TEMP
xDestB1 : Bool; // Ziel allgemein Block1
xDest211 : Bool; // Ziel befindet sich in erstem Viertel von B1
xDest212 : Bool; // Ziel befindet sich in zweitem Viertel von B1
xDest213 : Bool; // Ziel befindet sich in dritten Viertel von B1
xDest214 : Bool; // Ziel befindet sich in letztem Viertel von B1
xDestB2 : Bool; // Ziel allgemein Block2
xDest221 : Bool; // Ziel befindet sich in erstem Viertel von B2
xDest222 : Bool; // Ziel befindet sich in zweitem Viertel von B2
xDest223 : Bool; // Ziel befindet sich in dritten Viertel von B2
xDest224 : Bool; // Ziel befindet sich in letztem Viertel von B2
xDestB3 : Bool; // Ziel allgemein Block3
xDest231 : Bool; // Ziel befindet sich in erstem Viertel von B3
xDest232 : Bool; // Ziel befindet sich in zweitem Viertel von B3
xDest233 : Bool; // Ziel befindet sich in dritten Viertel von B3
xDest234 : Bool; // Ziel befindet sich in letztem Viertel von B3
END_VAR
BEGIN
//ÜBERARBEITEN, NEUE TRO NAMEN
REGION Lager Aufteilung
IF #InOutCarrier.nDestination >= 21100 AND #InOutCarrier.nDestination <= 21119 THEN
#xDestB1 := TRUE;
#xDest211 := TRUE;
ELSIF #InOutCarrier.nDestination >= 21200 AND #InOutCarrier.nDestination <= 21217 THEN
#xDestB1 := TRUE;
#xDest212 := TRUE;
ELSIF #InOutCarrier.nDestination >= 21300 AND #InOutCarrier.nDestination <= 21321 THEN
#xDestB1 := TRUE;
#xDest213 := TRUE;
ELSIF #InOutCarrier.nDestination >= 21400 AND #InOutCarrier.nDestination <= 21413 THEN
#xDestB1 := TRUE;
#xDest214 := TRUE;
////////////////////////////
ELSIF #InOutCarrier.nDestination >= 22100 AND #InOutCarrier.nDestination <= 22119 THEN
#xDestB2 := TRUE;
#xDest221 := TRUE;
ELSIF #InOutCarrier.nDestination >= 22200 AND #InOutCarrier.nDestination <= 22217 THEN
#xDestB2 := TRUE;
#xDest222 := TRUE;
ELSIF #InOutCarrier.nDestination >= 22300 AND #InOutCarrier.nDestination <= 22321 THEN
#xDestB2 := TRUE;
#xDest223 := TRUE;
ELSIF #InOutCarrier.nDestination >= 22400 AND #InOutCarrier.nDestination <= 22413 THEN
#xDestB2 := TRUE;
#xDest224 := TRUE;
////////////////////////////
ELSIF #InOutCarrier.nDestination >= 23100 AND #InOutCarrier.nDestination <= 23119 THEN
#xDestB3 := TRUE;
#xDest231 := TRUE;
ELSIF #InOutCarrier.nDestination >= 23200 AND #InOutCarrier.nDestination <= 23217 THEN
#xDestB3 := TRUE;
#xDest232 := TRUE;
ELSIF #InOutCarrier.nDestination >= 23300 AND #InOutCarrier.nDestination <= 23321 THEN
#xDestB3 := TRUE;
#xDest233 := TRUE;
ELSIF #InOutCarrier.nDestination >= 23400 AND #InOutCarrier.nDestination <= 23415 THEN
#xDestB3 := TRUE;
#xDest234 := TRUE;
END_IF;
END_REGION
REGION Vergabe Direction
CASE #nInSwitchNo OF
"cSwi313.1":
REGION Switch 313.1
IF #xDestB1 OR
#xDestB2 OR
#InOutCarrier.nDestination = "cDestLvl1B1" OR
#InOutCarrier.nDestination = "cDestLvl1B2"
THEN
//RECHTS ABBIEGEN
#nOutDirection := 2;
ELSIF
#xDestB3 OR
#InOutCarrier.nDestination = "cDestLvl1B3"
THEN
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSE
//FALLBACK
#nOutDirection := 0; //nicht erlaubt
END_IF;
END_REGION
"cSwi314.1":
REGION Switch 314.1
IF #xDestB1 OR
#InOutCarrier.nDestination = "cDestLvl1B1"
THEN
//RECHTS ABBIEGEN
#nOutDirection := 2;
ELSIF #xDestB2 OR
#InOutCarrier.nDestination = "cDestLvl1B2"
THEN
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSE
;//30000, 0, 300, xDestB3
#nOutDirection := 2;
END_IF;
END_REGION
"cSwi315.1":
REGION Switch 315.1
IF #xDestB1 THEN
//LINKS ABBIEGEN
#nOutDirection := 3;
ELSE
;//30000, 0, 200, 300, xDestB2, xDestB3
#nOutDirection := 3;
END_IF;
END_REGION
"cSwi316.1":
REGION Switch 316.1
IF #InOutCarrier.nDestination = 300 OR
#xDestB3 THEN
;//RECHTS ABBIEGEN
ELSE
;//30000, 0, 200, 300, xDestB1, xDestB2
END_IF;
END_REGION
"cSwi317.1":
REGION Switch 317.1
IF (#InOutCarrier.nDestination = "cDestLvl1B1") OR #InOutCarrier.nDestination = 11000 THEN
#nOutDirection := 2;
ELSIF #xDestB1 THEN
#nOutDirection := 1;
ELSE
#nOutDirection := 0;
END_IF;
END_REGION
"cSwi318.1":
REGION Switch 318.1
IF #xDest211 OR #xDest212 THEN
//RECHTS ABBIEGEN
#nOutDirection := 2;
ELSIF #xDest213 OR #xDest214 THEN
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSE
#nOutDirection := 0; // undefined, todo
END_IF;
END_REGION
"cSwi319.1":
REGION Switch 319.1
IF #xDest212 OR
#InOutCarrier.nDestination = 21043 OR
#InOutCarrier.nDestination = 1 OR //AMR
#InOutCarrier.nDestination = 2 //F2H
THEN
#nOutDirection := 2; // GERADE/RECHTS ABBIEGEN, Block verlassen
ELSIF #xDest211
THEN
#nOutDirection := 1; //LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1;
END_IF;
END_REGION
"cSwi320.1":
REGION Switch 320.1
IF #InOutCarrier.nDestination = 21043 OR #InOutCarrier.nDestination = 1 OR #InOutCarrier.nDestination = 2
THEN //provisorisch den Jam-Namen vom Ziel genommen, todo
#nOutDirection := 2;
;//GERADE/RECHTS ABBIEGEN, Block verlassen zu Ausfahrt
ELSIF #xDest211 OR #xDest212 THEN //#xDestB1
#nOutDirection := 1;
;//LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1; // undefined, todo
END_IF;
END_REGION
"cSwi321.1":
REGION Switch 321.1
IF #xDest214 THEN
#nOutDirection := 2; ; //RECHTS ABBIEGEN, im Block bleiben
ELSIF #xDest213 OR
#InOutCarrier.nDestination = 21043 OR
#InOutCarrier.nDestination = 1 OR #InOutCarrier.nDestination = 2 OR #InOutCarrier.nDestination = 3 OR #InOutCarrier.nDestination = 4
THEN
#nOutDirection := 1; //GERADE/LINKS ABBIEGEN
ELSE
#nOutDirection := 0; //undefined, todo
END_IF;
END_REGION
"cSwi322.1":
REGION Switch 322.1
IF #xDest213 OR #xDest214 THEN //#xDestB1
#nOutDirection := 2; //RECHTS ABBIEGEN, im Block bleiben
ELSIF #InOutCarrier.nDestination = 21043 OR #InOutCarrier.nDestination = 1 OR #InOutCarrier.nDestination = 2 OR #InOutCarrier.nDestination = 3 OR #InOutCarrier.nDestination = 4 THEN
#nOutDirection := 1; //GERADE/LINKS ABBIEGEN, Block verlassen zu Ausfahrt
ELSE
#nOutDirection := 0; //undefined, todo
END_IF;
END_REGION
"cSwi339.1":
REGION Switch 339.1
IF #InOutCarrier.nDestination = "cDestLvl1B2" THEN
#nOutDirection := 2;
//TO LEVEL 1
//RECHTS ABBIEGEN
ELSIF #xDestB2 THEN
//TO SECTION 2.2
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSE
//Undefined
#nOutDirection := 0;
END_IF;
END_REGION
"cSwi340.1":
REGION Switch 340.1
IF #xDest221 OR #xDest222 THEN
//RECHTS ABBIEGEN
#nOutDirection := 2;
ELSIF #xDest223 OR #xDest224 THEN
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSE
#nOutDirection := 0; // undefined, todo
END_IF;
END_REGION
"cSwi341.1":
REGION Switch 341.1
IF #xDest222 OR
#InOutCarrier.nDestination = 1 OR
#InOutCarrier.nDestination = 2
THEN
#nOutDirection := 2; // GERADE/RECHTS ABBIEGEN, Block verlassen
ELSIF #xDest221
THEN
#nOutDirection := 1; //LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1;
END_IF;
END_REGION
"cSwi342.1":
REGION Switch 342.1
IF #InOutCarrier.nDestination = 1 OR
#InOutCarrier.nDestination = 2
THEN
#nOutDirection := 2; //GERADE/RECHTS ABBIEGEN, Block verlassen zu Ausfahrt
ELSIF #xDest221 OR #xDest222 THEN //#xDestB1
#nOutDirection := 1;
;//LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1;
END_IF;
END_REGION
"cSwi343.1":
REGION Switch 343.1
IF #xDest224 THEN
#nOutDirection := 2;
; //RECHTS ABBIEGEN, im Block bleiben
ELSIF #xDest223 OR
#InOutCarrier.nDestination = 22043 OR
#InOutCarrier.nDestination = 1 OR
#InOutCarrier.nDestination = 2
THEN
#nOutDirection := 1; //GERADE/LINKS ABBIEGEN
ELSE
#nOutDirection := 2; //undefined, todo
END_IF;
END_REGION
"cSwi344.1":
REGION switch 344.1
IF #xDest223 OR #xDest224 THEN //#xDestB1
#nOutDirection := 2; //RECHTS ABBIEGEN, im Block bleiben
ELSIF #InOutCarrier.nDestination = 22043 OR
#InOutCarrier.nDestination = 1 OR
#InOutCarrier.nDestination = 2
THEN
#nOutDirection := 1; //GERADE/LINKS ABBIEGEN, Block verlassen zu Ausfahrt
ELSE
#nOutDirection := 2; //undefined, todo
END_IF;
END_REGION
"cSwi361.1":
REGION Switch 361.1
IF #InOutCarrier.nDestination = "cDestLvl1B3" THEN // Level 1.3
#nOutDirection := 1;
ELSIF #xDestB3 THEN
#nOutDirection := 2;
ELSE
#nOutDirection := 0;
END_IF;
END_REGION
"cSwi362.1":
REGION Switch 362.1
IF #xDest231 OR #xDest232 THEN
//LINKS ABBIEGEN
#nOutDirection := 1;
ELSIF #xDest233 OR #xDest234 THEN
//LINKS ABBIEGEN
#nOutDirection := 2;
ELSE
#nOutDirection := 0; // undefined, todo
END_IF;
END_REGION
"cSwi363.1":
REGION Switch 363.1
IF #xDest232 OR
#InOutCarrier.nDestination = 23023 OR
#InOutCarrier.nDestination = "cDestF2HEmpty" OR
#InOutCarrier.nDestination = "cDestInboundEmpty" OR
#InOutCarrier.nDestination = "cDestAMRLoaded" OR
#InOutCarrier.nDestination = "cDestF2HLoaded"
THEN
#nOutDirection := 1; // Block verlassen
ELSIF #xDest231
THEN
#nOutDirection := 2; //im Block bleiben
ELSE
#nOutDirection := 2;
END_IF;
END_REGION
"cSwi364.1":
REGION Switch 364.1
IF #InOutCarrier.nDestination = 23023 OR
#InOutCarrier.nDestination = 2 OR
#InOutCarrier.nDestination = "cDestF2HEmpty" OR
#InOutCarrier.nDestination = "cDestInboundEmpty" OR
#InOutCarrier.nDestination = "cDestAMRLoaded" OR
#InOutCarrier.nDestination = "cDestF2HLoaded"
THEN //provisorisch den Jam-Namen vom Ziel genommen, todo
#nOutDirection := 1;
;//Block verlassen zu Ausfahrt
ELSIF #xDest231 OR #xDest232 THEN
#nOutDirection := 2;
;//LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 2; // undefined, todo
END_IF;
END_REGION
"cSwi365.1":
REGION Switch 365.1
IF #InOutCarrier.nDestination = 23023 OR #xDest233 OR
#InOutCarrier.nDestination = "cDestF2HEmpty" OR
#InOutCarrier.nDestination = "cDestInboundEmpty" OR
#InOutCarrier.nDestination = "cDestAMRLoaded" OR
#InOutCarrier.nDestination = "cDestF2HLoaded"
THEN //provisorisch den Jam-Namen vom Ziel genommen, todo
#nOutDirection := 2
;//GERADE/RECHTS ABBIEGEN, Block verlassen zu Ausfahrt
ELSIF #xDest234 THEN
#nOutDirection := 1;
;//LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1; // undefined, todo
END_IF;
END_REGION
"cSwi366.1":
REGION Switch 366.1
IF #InOutCarrier.nDestination = 23023 OR
#InOutCarrier.nDestination = 1 OR
#InOutCarrier.nDestination = 2 OR
#InOutCarrier.nDestination = "cDestF2HEmpty" OR
#InOutCarrier.nDestination = "cDestInboundEmpty" OR
#InOutCarrier.nDestination = "cDestAMRLoaded" OR
#InOutCarrier.nDestination = "cDestF2HLoaded"
THEN //provisorisch den Jam-Namen vom Ziel genommen, todo
#nOutDirection := 2;
;//GERADE/RECHTS ABBIEGEN, Block verlassen zu Ausfahrt
ELSIF #xDest233 OR #xDest234 THEN
#nOutDirection := 1;
;//LINKS ABBIEGEN, im Block bleiben
ELSE
#nOutDirection := 1; // undefined, todo
END_IF;
END_REGION
ELSE
;
END_CASE;
END_REGION
END_FUNCTION