FUNCTION "FC_Direction" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      nInSwitchNo : USInt;   // Switch Nummer 
   END_VAR

   VAR_OUTPUT 
      nOutDirection : USInt;   // Ziel für Switch-Baustein
   END_VAR

   VAR_IN_OUT 
      InOutCarrier : "stCarrier";   // Daten vom Carrier
   END_VAR


BEGIN
	// Destination vom Carrier, immer unterschiedlich je nach Anlagenbereich, soll übertragen werden auf universale Switch Direction (1-4)
	//
	// Es gibt noch mehr Weichen, aber noch unklar nach welchem Prinzip diese angesteuert werden
	REGION Vergabe Direction
	    CASE #nInSwitchNo OF
	        "cSwi107.1":
	            REGION Switch 107.1 Boom 1
	                IF #InOutCarrier.nDestination = "cDestInboundLS" THEN // zu Ladeschleife
	                    #nOutDirection := 1; // LINKS
	                ELSIF #InOutCarrier.nDestination = "cDestClearing" OR
	                    #InOutCarrier.nDestination = "cDestInboundOut" OR
	                    #InOutCarrier.nDestination = "cDestInboundLS_Extra" THEN // Zur Clearing-Station (Error-Station) oder Inbound verlassen
	                    #nOutDirection := 2; // RECHTS
	                ELSE
	                    #nOutDirection := 2; // Fallback, falls unerwartetes Ziel
	                END_IF;
	            END_REGION
	        "cSwi112.1":
	            REGION Switch 112.1 Boom 2
	                IF #InOutCarrier.nDestination = "cDestInboundLS" OR
	                    #InOutCarrier.nDestination = "cDestInboundLS_Extra" THEN // zu Ladeschleife
	                    #nOutDirection := 1; // LINKS
	                ELSIF #InOutCarrier.nDestination = "cDestClearing" OR
	                    #InOutCarrier.nDestination = "cDestInboundOut" THEN // Zur Clearing-Station (Error-Station) oder Inbound verlassen
	                    #nOutDirection := 2; // RECHTS
	                ELSE
	                    #nOutDirection := 2; // Fallback, falls unerwartetes Ziel
	                END_IF;
	            END_REGION
	        "cSwi114.1":
	            REGION Switch 114.1
	                IF #InOutCarrier.nDestination = "cDestInboundOut" THEN // Inbound verlassen
	                    #nOutDirection := 1; // LINKS
	                ELSIF #InOutCarrier.nDestination = "cDestClearing" THEN // Zur Clearing-Station (Error-Station)
	                    #nOutDirection := 2; // RECHTS !!!!
	                ELSE 
	                    #nOutDirection := 0; // Test, Warten
	                END_IF;
	            END_REGION
	        "cSwi124.1":
	            REGION Switch 124.1
	                IF #InOutCarrier.nDestination = "cDestHighwayStorage" THEN // zum Storage fahren (Ausnahmefall)
	                    #nOutDirection := 1; // LINKS
	                ELSIF #InOutCarrier.nDestination = 0 THEN // Zum Inbound (Standardfall)
	                    #nOutDirection := 2; // RECHTS
	                ELSE
	                    #nOutDirection := 2; //
	                END_IF;
	            END_REGION
	    END_CASE;
	END_REGION
	
END_FUNCTION

