FUNCTION "FC_Direction" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT nInSwitchNo : USInt; END_VAR VAR_OUTPUT nOutDirection : USInt; // Ziel für Switch-Baustein END_VAR VAR_IN_OUT InOutCarrier : "stCarrier"; END_VAR BEGIN // Destination vom Carrier, immer unterschiedlich je nach Anlagenbereich, soll übertragen werden auf universale Switch Direction (1-4) // TEST TEST TEST REGION Vergabe Direction CASE #nInSwitchNo OF "cSwi405.1": REGION Switch 405.1 IF (#InOutCarrier.nDestination = "cDestLeaveAmr") THEN // Verlasse AMR (empty carrier) #nOutDirection := 1; // LINKS, 1->3 ELSE // Im AMR bleiben, alle anderen Fälle + Fallbackstrategie (?) #nOutDirection := 2; // RECHTS, 1->4 END_IF; END_REGION "cSwi407.1": REGION Switch 407.1 IF #InOutCarrier.nDestination = "cDestMps3" THEN // MPS 3 #nOutDirection := 1; // LINKS, 1->3 ELSIF #InOutCarrier.nDestination = "cDestStayAmr" OR #InOutCarrier.nDestination = "cDestRecirc" THEN // Auf Kreisel bleiben #nOutDirection := 2; // RECHTS, 1->4 ELSE #nOutDirection := 2; // Fallback, falls unerwartetes Ziel END_IF; END_REGION "cSwi410.1": REGION Switch 410.1 IF #InOutCarrier.nDestination = "cDestMps2" THEN // MPS 2 #nOutDirection := 1; // LINKS, 1->3 ELSIF #InOutCarrier.nDestination = "cDestStayAmr" OR #InOutCarrier.nDestination = "cDestRecirc" THEN // Auf Kreisel bleiben #nOutDirection := 2; // RECHTS, 1->4 ELSE #nOutDirection := 2; // Fallback, falls unerwartetes Ziel END_IF; END_REGION "cSwi413.1": REGION Switch 413.1 IF #InOutCarrier.nDestination = "cDestMps1" THEN // MPS 1 #nOutDirection := 1; // LINKS, 1->3 ELSIF #InOutCarrier.nDestination = "cDestStayAmr" OR #InOutCarrier.nDestination = "cDestRecirc" THEN // Auf Kreisel bleiben #nOutDirection := 2; // RECHTS, 1->4 ELSE #nOutDirection := 2; // Fallback, falls unerwartetes Ziel END_IF; END_REGION END_CASE; END_REGION END_FUNCTION