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