FUNCTION "Arbeitsplatz_Ziel_FC" : Void
TITLE = Ziel-FC: AMR Arbeitsplätze
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
FAMILY : Module
NAME : Ziel
//SCL-Portierung des AWL-Bausteins FC1181 "Arbeitsplatz_Ziel_FC" (verhaltensgleich).
//
//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung
//ueber Register" (ParameterPassing) aktiv und wurde per "UC FC[..]" indirekt aus
//AWL aufgerufen -> aus SCL nicht compilierbar. Er liest ausschliesslich globale
//Merker (MW190 = Schleusen-Nr, MW194 = angefordertes Weichen-Ziel, MB-/BG-Merker)
//und ruft die Zielbausteine voll qualifiziert auf -> keine echte Registerabhaengigkeit.
//Als SCL-Baustein entfaellt die Option und er ist direkt aus SCL aufrufbar
//(CASE 1181 in MHMOmniSchleuse).
//
//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L <Schleuse> / NE_I / JC <Ende>")
//ist als CASE ueber die Schleusen-Nr (MW190) ausgefuehrt. Da die Schleusen-Nrn
//paarweise verschieden sind, kann pro Aufruf hoechstens ein Zweig zutreffen; ein
//AWL-BEU/BEC im getroffenen Zweig ist daher als RETURN bzw. "IF <RLO> THEN RETURN;"
//umgesetzt (verhaltensgleich, da nach dem Dispatch nur noch das Bausteinende folgt).
//Die Merker-Schnittstelle (MW190/MW194 vom Aufrufer gelesen, MW198 = Weichenziel
//ausgegeben, M180.6 = Weiterfahrt-Freigabe, MW832 = Anzeigewert) bleibt erhalten.
//
//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!):
//  - Schleuse 3481 (NW3): der Zweig liest die Temp-Variable "EndZiel", die in
//    diesem Zweig NIE beschrieben wird (im AWL undefinierter L-Stack-/Akku-Wert).
//    Verhalten 1:1 uebernommen -> Wert ist undefiniert. UNBEDINGT PRUEFEN!
//  - Schleuse 3285 (NW15): "Error_SendFIFO" (Temp) wird gelesen, aber im ganzen
//    Baustein nie gesetzt -> undefiniert (wie im AWL). PRUEFEN!
//  - Schleuse 3241 (NW4): Ausgangsparameter "AMR_Platz" von
//    "LeerTrolley to AMR-Platz ermitteln" ist Section=Output -> in SCL mit "=>"
//    versorgt (statt ":="). ShopGroup-Konstante DINT#-1 (TypedConstant) 1:1.
//  - Wort-Merker (MW190/MW194/MW198/MW832) und die Word-Temp "EndZiel" werden gegen
//    Word-Konstanten (W#16#..) direkt verglichen; MW190 wird fuer den CASE ueber
//    WORD_TO_INT in Int gewandelt (AWL: NE_I gegen dezimale Konstante).
//  - DB-/Member-Namen mit Sonderzeichen (Umlaut, "-", ">") sind einzeln gequotet.
   VAR_TEMP
      Ziel_hex : Word;
      Ziel_int : Int;
      Zielebene : Word;
      Error : Byte;
      Position : Int;
      Lager_DB : Int;
      Lager_DW : Int;
      AR1Zeiger : DWord;   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
      AR1Start : DInt;   // Startwert mit Offset 0
      SSDW : Int;
      EndZiel : Word;
      Variante : Int;
      AbrufID : DInt;
      Fahrlisten_TrolleyID : DInt;
      Fahrlisten_AbrufID : DInt;
      Fahrlisten_Lager : Int;
      Trolley_unbekannt : Bool;   // Trolley ist nicht in DL
      Error_SendFIFO : Bool;
   END_VAR

BEGIN
   // NW1: Rueckmeldungen erst mal resetten (Weiterfahrt von Ziel-FC erlaubt)
   "M180.6" := FALSE;

   // AWL: UC FC1181 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt)
   CASE WORD_TO_INT("MW190") OF

      3456:   // Schleuse 3456: (Vor Aufzug)
         IF NOT "DZuführung_OmniFahren"."Aufzug_freiräumen" THEN
            "M180.6" := TRUE;
         END_IF;

      3481:   // Schleuse 3481: (Vor 180-Grad ByPass)
         // Hinweis: "EndZiel" (Temp) wird hier gelesen, aber im Zweig nie gesetzt -> Wert undefiniert (wie AWL)!
         IF ("EndZiel" AND W#16#F000) = W#16#B000 THEN   // MPS? -> abbiegen (ByPass)
            "MW198" := W#16#3383;   // Weichenziel
            // Quell-Steuerung:
            IF (NOT "DZuführung_OmniFahren".Weiche_3482_frei)
               OR ("MB3353" AND NOT "MB3362") THEN
               RETURN;   // Weiche von 2.Quelle belegt / andere Quelle aktiv
            END_IF;
            IF     NOT "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."WeicheByPass_von_Haupt-Sep_belegt"
               AND NOT "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt"
               AND NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS1.Stat.B_Akt
               AND NOT "BG3361"
               AND NOT "DArbeitsplätze_Sensoren".An_BG3383.Stat.B_Akt
               AND NOT "BG3383"
               AND NOT "MB3383" THEN
               "M180.6" := TRUE;   // Weiterfahrt ist erlaubt
               "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_ByPass-Sep_belegt" := TRUE;
               "DZuführung_OmniFahren".Weiche_3482_frei := FALSE;   // Weiche jetzt von dieser Quelle belegt
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3483;   // Weichenziel
            IF NOT "DZuführung_OmniFahren"."Übergang_3485"."Am_Übergang".Stat.B_Akt THEN   // nicht am Übergang
               "M180.6" := TRUE;   // Weiterfahrt ist erlaubt
            END_IF;
         END_IF;

      3241:   // Schleuse 3241: (Vor Einfahrt PS5)
         IF "MB3241" THEN
            RETURN;
         END_IF;
         "EndZiel" := W#16#0;
         "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel := W#16#0;   // Damit Schleuse Info hat
         "MW832" := W#16#0;   // damit in Beobachtungsbild sichtbar
         // AMR-Platz, der LeerTrolleys benoetigt, ermitteln:
         "LeerTrolley to AMR-Platz ermitteln"(
            Erlaubter_Bereich := W#16#0000,   // Beide Bereiche erlaubt
            AMR_Platz         => "EndZiel");
         IF "EndZiel" = W#16#0 THEN
            RETURN;   // Kein Leertrolley benötigt
         END_IF;
         // Trolleydaten in DL aendern (Endziel uebergeben):
         "Trolleydaten_neu_anlegen"(
            Gesamt_Trolley_DL := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL,
            TrolleyID         := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse,
            Endziel           := "EndZiel",
            ShopGroup         := DINT#-1);
         "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel := "EndZiel";   // Damit Schleuse Info hat
         "MW832" := "EndZiel";   // damit in Beobachtungsbild sichtbar
         // Auswertung:
         IF ("EndZiel" = W#16#A500) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // PS5 anfahren
            "MW198" := W#16#3242;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_PS5.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3264;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS5.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3243:   // Schleuse 3243: (Vorstau PS5)
         IF "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3245:   // Schleuse 3245: (ABP1/PS5)
         IF "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3251:   // Schleuse 3251: (ABP2/PS5)
         IF "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3255:   // Schleuse 3255: (ABP3/PS5)
         IF "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3262:   // Schleuse 3262: (Ausfahrt PS5)
         IF "DPS5_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DPS5_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS5_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3265:   // Schleuse 3265: (Vor Ausfahrt PS5)
         IF "DPS5_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DPS5_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS5_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3271:   // Schleuse 3271: (Vor Einfahrt PS4)
         IF ("MW194" = W#16#A400) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // PS4 anfahren
            "MW198" := W#16#3272;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_PS4.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3270;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS4.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3273:   // Schleuse 3273: (Vorstau PS4)
         IF "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3275:   // Schleuse 3275: (ABP1/PS4)
         IF "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3281:   // Schleuse 3281: (ABP2/PS4)
         IF "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3285:   // Schleuse 3285: (ABP3/PS4)
         IF "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;
         IF NOT "Error_SendFIFO" THEN   // Hinweis: Temp nie gesetzt -> undefiniert (wie AWL)!
            "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC" := FALSE;
         END_IF;

      3291:   // Schleuse 3291: (Ausfahrt PS4)
         IF NOT "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN
            "MW198" := W#16#3294;   // Weichenziel
         ELSE
            "MW198" := W#16#3302;   // PS3 erst mal anfahren!
         END_IF;
         IF "DPS4_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DPS4_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS4_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3293:   // Schleuse 3293: (Vor Einfahrt PS3)
         IF "DPS4_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            RETURN;
         END_IF;
         IF ("MW194" = W#16#A300) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // PS3 anfahren
            "MW198" := W#16#3302;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_PS3.Stat.B_Akt THEN
               "M180.6" := TRUE;
               "DPS4_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3294;   // Weichenziel
            IF "DPS4_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
               AND NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS3.Stat.B_Akt THEN
               "M180.6" := TRUE;
               "DPS4_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
            END_IF;
         END_IF;

      3303:   // Schleuse 3303: (Vorstau PS3)
         IF "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3305:   // Schleuse 3305: (ABP1/PS3)
         IF "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3311:   // Schleuse 3311: (ABP2/PS3)
         IF "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3315:   // Schleuse 3315: (ABP3/PS3)
         IF "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3321:   // Schleuse 3321: (Ausfahrt PS3)
         IF "DPS3_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3323:   // Schleuse 3323: (Vor Ausfahrt PS3)
         IF "DPS3_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3331:   // Schleuse 3331: (Vor Einfahrt PS2)
         IF ("MW194" = W#16#A200) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // PS2 anfahren
            "MW198" := W#16#3332;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_PS2.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3330;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS2.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3333:   // Schleuse 3333: (Vorstau PS2)
         IF "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3335:   // Schleuse 3335: (ABP1/PS2)
         IF "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3341:   // Schleuse 3341: (ABP2/PS2)
         IF "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3345:   // Schleuse 3345: (ABP3/PS2)
         IF "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3351:   // Schleuse 3351: (Ausfahrt PS2)
         IF NOT "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN
            "MW198" := W#16#3361;   // Weichenziel
         ELSE
            "MW198" := W#16#3362;   // PS1 erst mal anfahren!
         END_IF;
         IF "DPS2_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt"
            AND NOT "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_ByPass-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3353:   // Schleuse 3353: (Vor Einfahrt PS1)
         IF "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            RETURN;
         END_IF;
         IF ("MW194" = W#16#A100) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // PS1 anfahren
            "MW198" := W#16#3362;   // Weichenziel
            IF "DPS2_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
               AND NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_PS1.Stat.B_Akt THEN
               "M180.6" := TRUE;
               "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3361;   // Weichenziel
            // Quell-Steuerung:
            IF (NOT "DZuführung_OmniFahren".Weiche_3482_frei)
               OR "MB3482"   // Reinweiche aktiv
               OR "MB3361" THEN
               RETURN;
            END_IF;
            IF     NOT "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_ByPass-Sep_belegt"
               AND NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_PS1.Stat.B_Akt
               AND NOT "BG3361" THEN
               "M180.6" := TRUE;
               "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
               "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."WeicheByPass_von_Haupt-Sep_belegt" := TRUE;
               "DZuführung_OmniFahren".Weiche_3482_frei := FALSE;   // Weiche jetzt von dieser Quelle belegt
            END_IF;
         END_IF;

      3363:   // Schleuse 3363: (Vorstau PS1)
         IF "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3365:   // Schleuse 3365: (ABP1/PS1)
         IF "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3371:   // Schleuse 3371: (ABP2/PS1)
         IF "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3375:   // Schleuse 3375: (ABP3/PS1)
         IF "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3381:   // Schleuse 3381: (Ausfahrt PS1)
         IF "DPS1_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3383:   // Schleuse 3383: (Vor Ausfahrt PS1)
         IF "DPS1_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3390:   // Schleuse 3390: (Vor Einfahrt MPS3)
         IF ("MW194" = W#16#B300) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // MPS3 anfahren
            "MW198" := W#16#3392;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_MPS3.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3391;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_MPS3.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3393:   // Schleuse 3393: (Vorstau MPS3)
         IF "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3395:   // Schleuse 3395: (ABP1/MPS3)
         IF "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3401:   // Schleuse 3401: (ABP2/MPS3)
         IF "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3405:   // Schleuse 3405: (ABP3/MPS3)
         IF "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3411:   // Schleuse 3411: (Ausfahrt MPS3)
         IF "DMPS3_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DMPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3413:   // Schleuse 3413: (Vor Ausfahrt MPS3)
         IF "DMPS3_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DMPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS3_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3421:   // Schleuse 3421: (Vor Einfahrt MPS2)
         IF ("MW194" = W#16#B200) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // MPS2 anfahren
            "MW198" := W#16#3422;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_MPS2.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3445;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_MPS2.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3423:   // Schleuse 3423: (Vorstau MPS2)
         IF "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3425:   // Schleuse 3425: (ABP1/MPS2)
         IF "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3431:   // Schleuse 3431: (ABP2/MPS2)
         IF "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3435:   // Schleuse 3435: (ABP3/MPS2)
         IF "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3441:   // Schleuse 3441: (Ausfahrt MPS2)
         IF     NOT "DZuführung_OmniFahren"."Aufzug_freiräumen"
            AND "DMPS2_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DMPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3443:   // Schleuse 3443: (Vor Ausfahrt MPS2)
         IF     NOT "DZuführung_OmniFahren"."Aufzug_freiräumen"
            AND "DMPS2_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DMPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3450:   // Schleuse 3450: (Vor Einfahrt MPS1)
         IF ("MW194" = W#16#B100) OR "DZuführung_OmniFahren".Alle_ABPs_anfahren THEN   // MPS1 anfahren
            "MW198" := W#16#3452;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_Einfahrt_MPS1.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         ELSE   // Rest gerade fahren
            "MW198" := W#16#3451;   // Weichenziel
            IF NOT "DArbeitsplätze_Sensoren".Stau_nach_Einfahrt_MPS1.Stat.B_Akt THEN
               "M180.6" := TRUE;
            END_IF;
         END_IF;

      3453:   // Schleuse 3453: (Vorstau MPS1)
         IF "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Vorstau.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3455:   // Schleuse 3455: (ABP1/MPS1)
         IF "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_1.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3461:   // Schleuse 3461: (ABP2/MPS1)
         IF "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_2.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3465:   // Schleuse 3465: (ABP3/MPS1)
         IF "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Platz_3.Freigabe_an_Stopper THEN
            "M180.6" := TRUE;
         END_IF;

      3471:   // Schleuse 3471: (Ausfahrt MPS1)
         IF "DMPS1_OmniFahren".Prio_Ausfahrt.Out.ABP_Schleuse_starten
            AND NOT "DMPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := TRUE;
         END_IF;

      3473:   // Schleuse 3473: (Vor Ausfahrt MPS1)
         IF "DMPS1_OmniFahren".Prio_Ausfahrt.OUT.Haupt_Schleuse_starten
            AND NOT "DMPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" THEN
            "M180.6" := TRUE;
            "DMPS1_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := TRUE;
         END_IF;

      3543:   // Schleuse 3543: (BST 4)
         // AWL: SET / S M180.6 -> Weiterfahrt bedingungslos erlaubt
         "M180.6" := TRUE;

      ELSE
         ;   // unbekannte Schleusen-Nr -> nichts tun
   END_CASE;
END_FUNCTION
