=== FB 276: MHM_Arbeitsplatz  [STL] ===
INTERFACE:
  Input:
    Arbeitsplatz_Nr : Word                              // Aufruf für Arbeitsplatz
    ErrQuit : Bool                                      // Ablaufstörung quittieren
    B_In_Schleuse_Vorstau : Bool                        // Sensor Trolley ist in Schleuse Vorstau
    B_an_Platz_1 : Bool                                 // Sensor Trolley ist an Platz 1
    B_an_Platz_2 : Bool                                 // Sensor Trolley ist an Platz 2
    B_an_Platz_3 : Bool                                 // Sensor Trolley ist an Platz 3
    B_Nachstau_Einfahrt : Bool                          // Sensor Trolley fährt in Nachstau
    B_Nachstau_Ausfahrt : Bool                          // Sensor Trolley ist am Nachstau-Sep
    Y_Vorstau : Bool                                    // Schleuse Vorstau geöffnet
    Y_Platz_1 : Bool                                    // Stopper Platz 1 geöffnet
    Y_Platz_2 : Bool                                    // Stopper Platz 2 geöffnet
    Y_Platz_3 : Bool                                    // Stopper Platz 3 geöffnet
    Antrieb_Vorstau_aktiv : Bool                        // Vorstau-Antrieb aktiv
    Antrieb_Nachstau_1_aktiv : Bool                     // Nachstau 1-Antrieb aktiv
    Antrieb_Nachstau_2_aktiv : Bool                     // Nachstau 2-Antrieb aktiv
    Antrieb_Nachstau_3_aktiv : Bool                     // Nachstau 3-Antrieb aktiv
  Output:
    Y_Weiche_zu_Platz_1 : Bool                          // Weiche zu Platz 1
    Y_Weiche_zu_Platz_2 : Bool                          // Weiche zu Platz 2
    Y_Weiche_von_Platz_1 : Bool                         // Weiche von Platz 1
    Y_Weiche_von_Platz_2 : Bool                         // Weiche von Platz 2
    Antrieb_Nachstau_1_vor : Bool                       // Nachstau 1-Antrieb einschalten
    Antrieb_Nachstau_2_vor : Bool                       // Nachstau 2-Antrieb einschalten
    Trolley_hat_ABS_erreicht : Bool
    Reset_Vorstau_Schleuse : Bool                       // Reset-Impuls an Vorstau-Schleuse
    Reset_Platz_1_Stopper : Bool                        // Reset-Impuls an Platz 1-Stopper
    Reset_Platz_2_Stopper : Bool                        // Reset-Impuls an Platz 2-Stopper
    Reset_Platz_3_Stopper : Bool                        // Reset-Impuls an Platz 3-Stopper
    Error : Word                                        // Störungen übergeben
  InOut:
    Antrieb_Vorstau_vor : Bool                          // Vorstau-Antrieb einschalten
    Antrieb_Nachstau_3_vor : Bool                       // Nachstau 3-Antrieb einschalten
    hStOk : Bool                                        // Anzeige Start n. Störung aktivieren
  Static:
    Para : Struct                                       // Parameter
      AMR_DL_DB : Int                                   // Einsprung AMR-Datenliste-DB
      AMR_DL_DW : Int                                   // Einsprung AMR-Datenliste-DW
      Reserve : Array[1..3] of Int                      // Reserve
    Arbeitsplatz : "UDLHM_Arbeitsplatz"                 // Statische Arbeitsplatzdaten (aus DL)
    Dyn : Struct                                        // Dynamische Daten
      SS : Struct                                       // Schnittstelle von/zu ausserhalb
        >Trolley_ist_in_Vorstau_eingefahren : Bool      // IN: Trolley ist in Vorstau eingefahren
        PC>Trolley_zum_Platz_1_starten : Bool           // Von PC: Trolley zum Platz 1 starten
        PC>Trolley_zum_Platz_2_starten : Bool           // Von PC: Trolley zum Platz 2 starten
        PC>Trolley_zum_Platz_3_starten : Bool           // Von PC: Trolley zum Platz 2 starten
        Trolley_ist_in_Platz_1_eingefahren>PC : Bool    // An PC: Trolley ist in Platz 1 eingefahren
        Trolley_ist_in_Platz_2_eingefahren>PC : Bool    // An PC: Trolley ist in Platz 2 eingefahren
        Trolley_ist_in_Platz_3_eingefahren>PC : Bool    // An PC: Trolley ist in Platz 3 eingefahren
        Externe_Anzeige : Bool                          // Von PC: Externe gelbe Anzeige aktivieren
        Frei610 : Bool
        PC>Trolley_an_Platz_1_freigegeben : Bool        // Von PC: Trolley ist an Platz 1 beladen / freigegeben
        PC>Trolley_an_Platz_2_freigegeben : Bool        // Von PC: Trolley ist an Platz 2 beladen / freigegeben
        PC>Trolley_an_Platz_3_freigegeben : Bool        // Von PC: Trolley ist an Platz 3 beladen / freigegeben
        Trolley_ist_aus_Platz_1_ausgefahren>PC : Bool   // An PC: Trolley ist aus Platz 1 ausgefahren
        Trolley_ist_aus_Platz_2_ausgefahren>PC : Bool   // An PC: Trolley ist aus Platz 2 ausgefahren
        Trolley_ist_aus_Platz_3_ausgefahren>PC : Bool   // An PC: Trolley ist aus Platz 3 ausgefahren
      Status : Struct                                   // Intern
        Arbeitsplatz_aktiviert : Bool                   // ABP durch PC aktiviert
        Trolley_fährt_in_Vorstau : Bool                 // Trolley fährt in Vorstau
        Trolley_fährt_nach_Platz_1 : Bool               // Trolley fährt nach Platz 1
        Trolley_fährt_nach_Platz_2 : Bool               // Trolley fährt nach Platz 2
        Trolley_fährt_nach_Platz_3 : Bool               // Trolley fährt nach Platz 3
        Trolley_fährt_aus_Platz_1 : Bool                // Trolley fährt aus Nachstau 1
        Trolley_fährt_aus_Platz_2 : Bool                // Trolley fährt aus Nachstau 2
        Trolley_fährt_aus_Platz_3 : Bool                // Trolley fährt aus Nachstau 3
        Trolley_fährt_in_Nachstau : Bool
        Trolley_hat_Nachstau_erreicht : Bool            // Trolley ist in Nachstau eingefahren
        Leer_Check : Bool                               // Vorstau-Leercheck aktiv
        Error_aktiv : Bool                              // Störung vorhanden
        Beladung_erfolgt : Bool                         // Für Prio (3 Minuten aktiv)
        Reset_zum_Beladeplatz_aktiv : Bool              // Reset Sk zum Beladeplatz aktiv
        Reset_Platz_1_aktiv : Bool                      // Reset Platz 1 aktiv
        Reset_Platz_2_aktiv : Bool                      // Reset Platz 2 aktiv
        Reset_Platz_3_aktiv : Bool                      // Reset Platz 3 aktiv
        Reset_aus_Beladeplatz_aktiv : Bool              // Reset Sk aus Beladeplatz aktiv
      HMI : Struct
        Res_Trolleys : Int                              // Anzahl reservierte Trolleys (IN:PLC, OUT:PLC)
        Frei_Plätze : Int                               // Freiplätze für Trolleys (IN:PLC, OUT:PLC)
        Vorstau_Trolleys : Int                          // Anzahl Vorstau-Trolleys (IN:PLC, OUT:PLC)
        Vorstau_resetten : Bool := 1                    // Vorstau-Schleuse resetten (IN:HMI, Out:PLC)
        Platz_1_resetten : Bool                         // Platz 1-Schleuse resetten (IN:HMI, Out:PLC)
        Platz_2_resetten : Bool                         // Platz 2-Schleuse resetten (IN:HMI, Out:PLC)
        Platz_3_resetten : Bool                         // Platz 3-Schleuse resetten (IN:HMI, Out:PLC)
        Sk_zu_Plätze_resetten : Bool := 1
        Sk_aus_Plätze_resetten : Bool := 1
      Sk_zum_Beladeplatz : "USk_Omni"                   // Status der Schrittkette
      Sk_aus_Beladeplatz : "USk"                        // Status der Schrittkette
      Rueckmld : Struct
        RET_VAL_BLKMOV_ABP : Int                        // Rückmeldung nach BLKMOV-Aufruf
        RET_VAL_DL_ABP : Byte                           // Rückmeldung nach DatenOut-Aufruf
        RET_VAL_SendFIFO : Byte
      Error : "UErrHM_Arbeitsplatz"
      Mindestzeit_Rein : Int                            // Mindestzeit [s]
      Stop_Ursache_Rein : Word                          // Stop-Stelle: Nw + Position
      Mindestzeit_Raus : Int                            // Mindestzeit [s]
      Stop_Ursache_Raus : Word                          // Stop-Stelle: Nw + Position
      Vorstau : Struct
        Anzahl_Reservierungen : Int                     // Anzahl der reservierten Trolleys
        Anzahl_Leertrolleys : Int                       // Anzahl der vorhandenen Leertrolleys
        Freigabe_an_Stopper : Bool                      // Freigabe an Ziel-FC
        Trolley_fährt_aus : Bool                        // Trolley hat Stopper verlassen
        Gespeichert_Anzahl : Int                        // Aufgrund dieser Anzahl Eintrag in DL
        Reserve : Array[1..6] of Int
      Platz_1 : Struct
        Beladestelle_wurde_angefahren : Bool            // Beladestelle wurde angefahren
        Trolley_ist_an_Beladung : Bool                  // Trolley ist an Beladestelle
        Trolley_hat_Arbeitsplatz_verlassen : Bool       // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
        Beladestelle_wurde_entsorgt : Bool              // Beladestelle wurde entsorgt
        Freigabe_an_Stopper : Bool                      // Freigabe an Ziel-FC
        Trolley_fährt_aus : Bool                        // Trolley hat Stopper verlassen
        TrolleyID_ausgefahren : DInt
        Reserve : Array[1..2] of Int
      Platz_2 : Struct
        Beladestelle_wurde_angefahren : Bool            // Beladestelle wurde angefahren
        Trolley_ist_an_Beladung : Bool                  // Trolley ist an Beladestelle
        Trolley_hat_Arbeitsplatz_verlassen : Bool       // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
        Beladestelle_wurde_entsorgt : Bool              // Beladestelle wurde entsorgt
        Freigabe_an_Stopper : Bool                      // Freigabe an Ziel-FC
        Trolley_fährt_aus : Bool                        // Trolley hat Stopper verlassen
        TrolleyID_ausgefahren : DInt
        Reserve : Array[1..2] of Int
      Platz_3 : Struct
        Beladestelle_wurde_angefahren : Bool            // Beladestelle wurde angefahren
        Trolley_ist_an_Beladung : Bool                  // Trolley ist an Beladestelle
        Trolley_hat_Arbeitsplatz_verlassen : Bool       // Trolley hat Arbeitsplatz verlassen (Draussen-FC)
        Beladestelle_wurde_entsorgt : Bool              // Beladestelle wurde entsorgt
        Freigabe_an_Stopper : Bool                      // Freigabe an Ziel-FC
        Trolley_fährt_aus : Bool                        // Trolley hat Stopper verlassen
        TrolleyID_ausgefahren : DInt
        Reserve : Array[1..2] of Int
      LeerCheckZeit : Int
      BeladungErfolgtZeit : Int
      Simulation : Struct
        Aktiviert : Bool                                // Von Simulation
        Einen Trolley ausfahren : Bool                  // Von Simulation
        Neustart : Bool                                 // Von Simulation
        Trolleys bereit : Bool                          // An SImulation
        Trolley gestartet : Bool                        // An Simulation
        Trolley 1 gefahren : Bool                       // Intern
        Trolley 2 gefahren : Bool                       // Intern
        Trolley 3 gefahren : Bool                       // Intern
      Res200 : Array[1..7] of Int
  Temp:
    Quelle : Any                                        // Zeiger, wo Rein-Daten sind
    Ueb_akt : Bool                                      // Überwachungszeit aktivieren
    Weiter : Bool                                       // Weiterschaltbedingung ist erfüllt
    Warte_neu : Bool                                    // Wartezeit neu triggern
    Warte_stop : Bool                                   // Wartezeit stoppen
    Raus_Ueb_akt : Bool                                 // Überwachungszeit aktivieren
    Raus_Weiter : Bool                                  // Weiterschaltbedingung ist erfüllt
    Raus_Warte_neu : Bool                               // Wartezeit neu triggern
    Raus_Warte_stop : Bool                              // Wartezeit stoppen
    Vorstau_ist_leer : Bool                             // Vorstau zeitlang ohne Sensor
    MindestZeit_Rein_Ok : Bool
    MindestZeit_Raus_Ok : Bool
    TrolleyID_Ok : Bool
    Error_SendFIFO : Bool
    Position : Int
    BenötigteLeerTrolleys : Int                         // Zusätzlich benötigte Trolleys
  Constant:

--- NW 1: Parameter-Übergabe ---
      L      Arbeitsplatz_Nr

      L      276                                             // Einsprung AMR-DL
      T      Para.AMR_DL_DB                                  // vor Aufruf übergeben!
      L      0
      T      Para.AMR_DL_DW


--- NW 2: Anzeige OP ---
      L      252                                             // Bereichsstop aktiv
      AN     Dyn.Sk_zum_Beladeplatz.Bereich_ok               // Also: Bereichsstop / Not-Aus
      JC     w010

      L      253
      AN     Dyn.Sk_zum_Beladeplatz.Auto_akt                 // Keine Betriebsart
      AN     Dyn.Sk_zum_Beladeplatz.Hand_akt
      JC     w010

      L      255                                             // Handbetrieb aktiv
      A      Dyn.Sk_zum_Beladeplatz.Hand_akt
      JC     w010

      L      Dyn.Sk_zum_Beladeplatz.Akt_Schritt              // Aktiver Schritt
w010: T      Dyn.Sk_zum_Beladeplatz.OP_Schritt


--- NW 3: Out-Bits zum Zurücksetzen ---
      SET
//       R     #Y_Weiche_zu_Platz_1
//       R     #Y_Weiche_zu_Platz_2
//       R     #Y_Weiche_von_Platz_1
//       R     #Y_Weiche_von_Platz_2
      R      Antrieb_Nachstau_1_vor
      R      Antrieb_Nachstau_2_vor
      R      Antrieb_Nachstau_3_vor
      R      Vorstau_ist_leer
      R      Reset_Vorstau_Schleuse
      R      Reset_Platz_1_Stopper                           // Nur 1 Zyklus
      R      Reset_Platz_2_Stopper
      R      Reset_Platz_3_Stopper

      AN     Y_Vorstau
      R      Trolley_hat_ABS_erreicht

      SET                                                    // Jeden Zyklus neu


--- NW 4: HMI-Zeug ---
// Von HMI:
// Platz-Resets siehe dort!
      A      Dyn.HMI.Vorstau_resetten
      R      Dyn.HMI.Vorstau_resetten
      JCN    HMI_B                                           // Negierter Sprung

      SET
      S      Dyn.Status.Leer_Check

// LeerTrolley-Anforderung löschen:
CALL FC "AMR_LeerTrolley_Anforderung_Del" (ArbeitsPlatz:=Arbeitsplatz_Nr, Gespeicherte_LeerTrolleys:=Dyn.Vorstau.Gespeichert_Anzahl)

HMI_B: A      Dyn.HMI."Sk_zu_Plätze_resetten"
      R      Dyn.HMI."Sk_zu_Plätze_resetten"
      S      Dyn.Sk_zum_Beladeplatz.Reset                    // SK zurücksetzen

      A      Dyn.HMI."Sk_aus_Plätze_resetten"
      R      Dyn.HMI."Sk_aus_Plätze_resetten"
      S      Dyn.Sk_aus_Beladeplatz.Reset                    // SK zurücksetzen

      CLR

// An HMI:
      L      Dyn.Vorstau.Anzahl_Leertrolleys
      T      Dyn.HMI.Vorstau_Trolleys

      L      Dyn.Vorstau.Anzahl_Reservierungen
      T      Dyn.HMI.Res_Trolleys

      L      Arbeitsplatz.MaxAnzahl
      L      Dyn.Vorstau.Anzahl_Reservierungen
      -I
      L      Dyn.Vorstau.Anzahl_Leertrolleys
      -I
      T      Dyn.HMI."Frei_Plätze"

      L      0
      >=I
      JC     Anzahl_ok

      T      Dyn.HMI."Frei_Plätze"                           // Minimum übergeben

Anzahl_ok: L      Dyn.HMI."Frei_Plätze"
      T      "BenötigteLeerTrolleys"


--- NW 5: Leer-Check im Vorstau ---
      AN     Dyn.Status.Leer_Check
      JC     RLCT

// Leer-Check aktiv:
      A      B_In_Schleuse_Vorstau
      O      Y_Vorstau
      JC     RLCT

      AN     B_In_Schleuse_Vorstau
      S      Antrieb_Vorstau_vor

      AN     Antrieb_Vorstau_aktiv
      ON     "1s-Impuls"
      JC     LCE

      L      Dyn.LeerCheckZeit
      +      1
      T      Dyn.LeerCheckZeit

// Leer-Check fertig ?
      L      60                                              // 60s rum?
      <I                                                     // Nein!
      JC     LCE

      SET
      R      Dyn.Status.Leer_Check

      L      0                                               // Keine Trolleys mehr vorhanden
      T      Dyn.Vorstau.Anzahl_Leertrolleys

// LeerCheck-Zeit neu aufziehen:
RLCT: L      0
      T      Dyn.LeerCheckZeit

LCE:  NOP 0


--- NW 6: Beladung ist erfolgt (für Prio) ---
      L      Dyn.Vorstau.Anzahl_Reservierungen
      L      0                                               // Trolleys zum ABP unterwegs?
      >I                                                     // Ja !
      O      B_Nachstau_Ausfahrt                             // Trolley wartet auf Ausfahrt
      S      Dyn.Status.Beladung_erfolgt                     // Zusätzlich beim Starten aus ABP!

      AN     Dyn.Status.Beladung_erfolgt
      JC     RBET

      A      "DAMR_Bereich".A01_UH06.BereichErr
      ON     "1s-Impuls"
      JC     BEE

      L      Dyn.BeladungErfolgtZeit
      +      1
      T      Dyn.BeladungErfolgtZeit

// Keine erneute Beladung fertig ?
      L      300                                             // 5 min rum?
      <I                                                     // Nein!
      JC     BEE

      SET
      R      Dyn.Status.Beladung_erfolgt

// LeerCheck-Zeit neu aufziehen:
RBET: L      0
      T      Dyn.BeladungErfolgtZeit

BEE:  NOP 0


--- NW 7: Zusätzlich benötigte Leertrolleys ---
// Bei vielen benötigten Leer-Trolleys, Arbeitsplätze mit einbeziehen:
      L      Dyn.HMI."Frei_Plätze"
      L      6
      >=I
      JCN    Normal                                          // Negierter Sprung

      A      Dyn.Status."Trolley_fährt_nach_Platz_1"
      O      Dyn.Platz_1.Trolley_ist_an_Beladung
      JC     ABP2                                            // Also kein weiterer LT benötigt

      L      "BenötigteLeerTrolleys"
      +      1                                               // Weiterer Trolley benötigt
      T      "BenötigteLeerTrolleys"                         // Zusätzlich benötigte Trolleys

ABP2: A      Dyn.Status."Trolley_fährt_nach_Platz_2"
      O      Dyn.Platz_2.Trolley_ist_an_Beladung
      JC     ABP3                                            // Also kein weiterer LT benötigt

      L      "BenötigteLeerTrolleys"
      +      1                                               // Weiterer Trolley benötigt
      T      "BenötigteLeerTrolleys"                         // Zusätzlich benötigte Trolleys

ABP3: A      Dyn.Status."Trolley_fährt_nach_Platz_3"
      O      Dyn.Platz_3.Trolley_ist_an_Beladung
      JC     Normal                                          // Also kein weiterer LT benötigt

      L      "BenötigteLeerTrolleys"
      +      1                                               // Weiterer Trolley benötigt
      T      "BenötigteLeerTrolleys"                         // Zusätzlich benötigte Trolleys

Normal: NOP 0


--- NW 8: LeerTrolley-Anforderung ---
      A      Dyn.Status.Arbeitsplatz_aktiviert
      AN     Dyn.Status.Leer_Check
      JC     Anforderung

      L      0                                               // Löschen, damit keine Anforderung
      T      "BenötigteLeerTrolleys"
      T      Dyn.Vorstau.Gespeichert_Anzahl

Anforderung: CALL FC "AMR_LeerTrolley_Anforderung" (LeerTrolleys_benötigt:="BenötigteLeerTrolleys", ArbeitsPlatz:=Arbeitsplatz_Nr, Gespeicherte_LeerTrolleys:=Dyn.Vorstau.Gespeichert_Anzahl)


--- NW 9: Rein-Schrittkette zurücksetzen ---
      AN     Dyn.HMI."Sk_zu_Plätze_resetten"
      AN     Dyn.Sk_zum_Beladeplatz.Reset                    // SK zurücksetzen
      JC     en04

// Schrittkette zurücksetzen:
      L      0                                               // Schritt 0: Warten
      T      Dyn.Sk_zum_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle
      T      Dyn.Mindestzeit_Rein

      SET
      R      Dyn.HMI."Sk_zu_Plätze_resetten"
      R      Dyn.Error.Err_BLKMov                            // Error bei Block kopieren
      R      Dyn.Sk_zum_Beladeplatz.Reset                    // SK zurücksetzen
      R      Dyn.Sk_zum_Beladeplatz.Err_Schritt              // Undefinierter Schritt
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit              // Sofort weiter !
      S      Dyn.Sk_zum_Beladeplatz.Reset_Akt                // Reset ist aktiv
      S      Reset_Vorstau_Schleuse
      R      Dyn.Vorstau."Trolley_fährt_aus"
      R      Dyn.Vorstau.Freigabe_an_Stopper

      SET
      R      Dyn.Error.ABP_DL                                // AMR-Datenliste fehlerhaft
      R      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz
      R      Dyn.Error.Err_Uebzeit_SK_Rein                   // Überwachungzeit ist abgelaufen
      R      Dyn.Error.Err_Schritt_Sk_Rein                   // Schritt-Nummer ist nicht definiert
      R      Dyn.Error.Err_BLKMov

// Defaultwerte übergeben:
      L      0                                               // Damit statische Werte neu aus Datenbank geholt werden !
      T      Arbeitsplatz.ABP_Nr                             // Nummer des Arbeitsplatzes

      BEU

en04: NOP 0


--- NW 10: Raus-Schrittkette zurücksetzen ---
      AN     Dyn.HMI."Sk_aus_Plätze_resetten"
      AN     Dyn.Sk_aus_Beladeplatz.Reset                    // SK zurücksetzen
      JC     en05

// Schrittkette zurücksetzen:
      L      0                                               // Schritt 0: Warten
      T      Dyn.Sk_aus_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle
      T      Dyn.Mindestzeit_Raus

      SET
      R      Dyn.HMI."Sk_aus_Plätze_resetten"
      R      Dyn.Sk_aus_Beladeplatz.Reset                    // SK zurücksetzen
      R      Dyn.Sk_aus_Beladeplatz.Err_Schritt              // Undefinierter Schritt
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit              // Sofort weiter !
      S      Dyn.Sk_aus_Beladeplatz.Reset_Akt                // Reset ist aktiv
      S      Reset_Platz_1_Stopper
      S      Dyn.Status.Reset_Platz_1_aktiv
      R      Dyn.Platz_1.Freigabe_an_Stopper
      S      Reset_Platz_2_Stopper
      S      Dyn.Status.Reset_Platz_2_aktiv
      R      Dyn.Platz_2.Freigabe_an_Stopper
      S      Reset_Platz_3_Stopper
      S      Dyn.Status.Reset_Platz_3_aktiv
      R      Dyn.Platz_3.Freigabe_an_Stopper

      SET
      R      Dyn.Error.Err_Uebzeit_SK_Raus                   // Überwachungzeit ist abgelaufen
      R      Dyn.Error.Err_Schritt_Sk_Raus                   // Schritt-Nummer ist nicht definiert

      BEU

en05: NOP 0


--- NW 11: Störungen nach Außen übergeben ---
      L      0
      T      "MW200"

      A      Dyn.Error.ABP_DL                                // AMR-Datenliste fehlerhaft
      =      "M200.0"
      A      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz
      =      "M200.1"
      A      Dyn.Error.Err_BLKMov                            // Error bei Block kopieren
      =      "M200.2"
      A      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit              // Überwachungzeit ist abgelaufen
      =      Dyn.Error.Err_Uebzeit_SK_Rein
      =      "M200.3"
      A      Dyn.Sk_zum_Beladeplatz.Err_Schritt              // Schritt-Nummer ist nicht definiert
      =      Dyn.Error.Err_Schritt_Sk_Rein
      =      "M200.4"
      A      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      =      Dyn.Error.Err_Uebzeit_SK_Raus
      =      "M200.5"
      A      Dyn.Sk_aus_Beladeplatz.Err_Schritt
      =      "M200.6"
      A      Dyn.Error.Err_Platz_1
      =      "M200.7"
      A      Dyn.Error.Err_Platz_2
      =      "M201.0"
      A      Dyn.Error.Err_Platz_3
      =      "M201.1"
      A      Dyn.Error.Reset_Einfahren_akt
      =      "M201.2"
      A      Dyn.Error.Reset_Platz_1_akt
      =      "M201.3"
      A      Dyn.Error.Reset_Platz_2_akt
      =      "M201.4"
      A      Dyn.Error.Reset_Platz_2_akt
      =      "M201.5"
      A      Dyn.Error.Reset_Ausfahren_akt
      =      "M201.6"
      CLR
      =      "M201.7"

      L      "MW200"
      T      Error                                           // Schnittstelle nach Außen

// Störung vorhanden:
      L      0
      <>I                                                    // Ja !
      =      Dyn.Status.Error_aktiv
      S      hStOk

// Störungen pro Zyklus neu erzeugen:
      SET
      R      Dyn.Error.ABP_DL                                // AMR-Datenliste fehlerhaft
      R      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz
      R      Dyn.Error.Err_BLKMov
//       R     #Dyn.Sk_zum_Beladeplatz.Err_Uebzeit//Überwachungzeit ist abgelaufen
//       R     #Dyn.Sk_zum_Beladeplatz.Err_Schritt//Schritt-Nummer ist nicht definiert
//       R     #Dyn.Sk_aus_Beladeplatz.Err_Uebzeit//Überwachungzeit ist abgelaufen
//       R     #Dyn.Sk_aus_Beladeplatz.Err_Schritt//Schritt-Nummer ist nicht definiert
      R      Dyn.Error.Err_Platz_1
      R      Dyn.Error.Err_Platz_2
      R      Dyn.Error.Err_Platz_3
      R      Dyn.Error.Reset_Einfahren_akt
      R      Dyn.Error.Reset_Platz_1_akt
      R      Dyn.Error.Reset_Platz_1_akt
      R      Dyn.Error.Reset_Platz_1_akt
      R      Dyn.Error.Reset_Ausfahren_akt


--- NW 12: Statische Arbeitsplatz-Parameter holen ---
      L      Arbeitsplatz.ABP_Nr                             // Nummer des Lagers
      L      Arbeitsplatz_Nr                                 // Aufruf-Parameter
      ==I                                                    // Identisch ?
      R      Dyn.Error.ABP_DL                                // AMR-Datenbank fehlerhaft
      R      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz
      JC     en06                                            // Ja !

      T      "MW200"                                         // Search-Daten

CALL FC "DatenOut" (SSDB:=Para.AMR_DL_DB, SSDW:=Para.AMR_DL_DW, PARA:=WORD#16#0000, SEARCHDATEN:=P#M200.0, RE_VAL:=Dyn.Rueckmld.RET_VAL_DL_ABP, OUTDATEN:=P#M220.0, Position:="MW196")

      JBI    G_Ok

      A      "M199.0"
      JCN    w060

      SET
      =      Dyn.Error.ABP_DL                                // AMR-Datenbank fehlerhaft

      L      16#A061
      T      Dyn.Stop_Ursache_Rein

      BEU

w060: SET
      S      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz

      L      16#A062
      T      Dyn.Stop_Ursache_Rein

      BEU

// Kennung + Datenbytes
G_Ok: SET
      R      Dyn.Error.ABP_DL                                // AMR-Datenbank fehlerhaft
      R      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz

      L      16#1004                                         // Kennung 10 + Word=04
      T      LW0                                             // Any-Kennung, Datentyp
      L      20                                              // Datenwords speichern
      T      LW2                                             // Wiederholungen

// Quelle-Pointer erzeugen:
      L      0                                               // Bei Merker = 0 !
      T      LW4                                             // DB_Nummer
      L      220                                             // Adresse
      SLD    3
      L      16#8300_0000                                    // Kennung: Merker
      OD
      T      LD6                                             // Kennung, Adresse

CALL SYS "BLKMOV" (SRCBLK:=Quelle, RET_VAL:=Dyn.Rueckmld.RET_VAL_BLKMOV_ABP, DSTBLK:=Arbeitsplatz)   // Datenliste-Daten speichern

      L      16#A063
      T      Dyn.Stop_Ursache_Rein

      L      Dyn.Rueckmld.RET_VAL_BLKMOV_ABP                 // Rückmeldung
      L      0                                               // Fehler vorhanden ?
      <>I                                                    // Ja !
      =      Dyn.Error.Err_BLKMov                            // Error bei Block kopieren
      BEC

      L      Arbeitsplatz.ABP_Typ                            // AMR-Typ = 276 (Normal)
      L      276                                             // Dieser Aufruf-FB ?
      ==I                                                    // Ja !
      JC     w061

      SET
      S      Dyn.Error.Undef_AMR                             // undefinierter Arbeitsplatz

      L      0                                               // Lager ungültig !
      T      Arbeitsplatz.ABP_Nr                             // Nummer des Lagers

      L      16#A064
      T      Dyn.Stop_Ursache_Rein

      BEU

// Defaultwerte übergeben:
w061: NOP 0

      BEU

en06: NOP 0


--- NW 13: Trolley kommt in Vorstau / Antrieb zusätzlich starten ---
// Antrieb zusätlich starten:
      A      ErrQuit                                         // Überwachungszeit abgelaufen quittieren
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit


--- NW 14: Indirekt adressierte Daten in temporäre Daten übergeben ---
      A      ErrQuit                                         // Überwachungszeit abgelaufen quittieren
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      R      Ueb_akt                                         // Überwachungszeit aktivieren


--- NW 15: Einfahrenden Trolley in AMR verarbeiten ---
      A      Dyn.Status."Trolley_fährt_in_Vorstau"
      R      Dyn.Status."Trolley_fährt_in_Vorstau"
      JCN    NoNewT                                          // Negierter Sprung

// Reservierungen -1:
      L      Dyn.Vorstau.Anzahl_Reservierungen
      +      -1
      T      Dyn.Vorstau.Anzahl_Reservierungen

      L      0                                               // Minimum unterschritten ?
      >=I                                                    // Nein !
      JC     ResOk

      T      Dyn.Vorstau.Anzahl_Reservierungen               // Minimum übergeben

// Leertrolleys +1:
ResOk: L      Dyn.Vorstau.Anzahl_Leertrolleys
      +      +1
      T      Dyn.Vorstau.Anzahl_Leertrolleys

NoNewT: NOP 0


--- NW 16: Platz 1 ---
// Freigabe von PC sinnlos!:
      AN     Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      R      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

// Trolley ist draussen:
      AN     Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen  // Rückmeldung von Draussen-FC
      JC     P1HMI

// Reset war aktiv?:
      A      Dyn.Status.Reset_Platz_1_aktiv
      R      Dyn.Status.Reset_Platz_1_aktiv
      JCN    P1NoReset                                       // Negierter Sprung!

      SET
      R      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

      A      B_an_Platz_1                                    // Trolley vorhanden
      S      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      S      Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"

P1NoReset: AN     B_an_Platz_1
      R      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolley ist ausgefahren

      A      Dyn.Status."Trolley_fährt_aus_Platz_1"          // /wird in Raus-SK benötigt (Schritt 2!)
      JC     P1HMI

      SET
      R      Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen

// HMI-Platz-Reset:
P1HMI: A      Dyn.HMI.Platz_1_resetten
      R      Dyn.HMI.Platz_1_resetten
      JCN    P1Check

// Trolley vorhanden:
      A      B_an_Platz_1                                    // Trolley vorhanden
      AN     Y_Platz_1                                       // Stopper GST
      A      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P1Check                                         // Kein Reset notwendig

// Kein Trolley vorhanden:
      AN     B_an_Platz_1                                    // Trolley vorhanden
      AN     Y_Platz_1                                       // Stopper GST
      AN     Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P1Check                                         // Kein Reset notwendig

// Unklarer Zustand -> Reset starten
      SET
      S      Reset_Platz_1_Stopper
      S      Dyn.Status.Reset_Platz_1_aktiv

// Daten-/Sensor-Check:
P1Check: A      Dyn.Status.Reset_Platz_1_aktiv
      O      Dyn.Status."Trolley_fährt_nach_Platz_1"
      O      Y_Platz_1
      R      Dyn.Error.Err_Platz_1
      JC     P1Ende

      A      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     B_an_Platz_1
      O
      AN     Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      A      B_an_Platz_1
      =      Dyn.Error.Err_Platz_1

P1Ende: NOP 0


--- NW 17: Platz 2 ---
// Freigabe von PC sinnlos!:
      AN     Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      R      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

// Trolley ist draussen:
      AN     Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen  // Rückmeldung von Draussen-FC
      JC     P2HMI

// Reset war aktiv?:
      A      Dyn.Status.Reset_Platz_2_aktiv
      R      Dyn.Status.Reset_Platz_2_aktiv
      JCN    P2NoReset                                       // Negierter Sprung!

      SET
      R      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

      A      B_an_Platz_2                                    // Trolley vorhanden
      S      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      S      Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"

P2NoReset: AN     B_an_Platz_2
      R      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolley ist ausgefahren

      A      Dyn.Status."Trolley_fährt_aus_Platz_2"          // /wird in Raus-SK benötigt (Schritt 2!)
      JC     P2HMI

      SET
      R      Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen

// HMI-Platz-Reset:
P2HMI: A      Dyn.HMI.Platz_2_resetten
      R      Dyn.HMI.Platz_2_resetten
      JCN    P2Check

// Trolley vorhanden:
      A      B_an_Platz_2                                    // Trolley vorhanden
      AN     Y_Platz_2                                       // Stopper GST
      A      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P2Check                                         // Kein Reset notwendig

// Kein Trolley vorhanden:
      AN     B_an_Platz_2                                    // Trolley vorhanden
      AN     Y_Platz_2                                       // Stopper GST
      AN     Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P2Check                                         // Kein Reset notwendig

// Unklarer Zustand -> Reset starten
      SET
      S      Reset_Platz_2_Stopper
      S      Dyn.Status.Reset_Platz_2_aktiv

// Daten-/Sensor-Check:
P2Check: A      Dyn.Status.Reset_Platz_2_aktiv
      O      Dyn.Status."Trolley_fährt_nach_Platz_2"
      O      Y_Platz_2
      R      Dyn.Error.Err_Platz_2
      JC     P2Ende

      A      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     B_an_Platz_2
      O
      AN     Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      A      B_an_Platz_2
      =      Dyn.Error.Err_Platz_2

P2Ende: NOP 0


--- NW 18: Platz 3 ---
// Freigabe von PC sinnlos!:
      AN     Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      R      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

// Trolley ist draussen:
      AN     Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen  // Rückmeldung von Draussen-FC
      JC     P3HMI

// Reset war aktiv?:
      A      Dyn.Status.Reset_Platz_3_aktiv
      R      Dyn.Status.Reset_Platz_3_aktiv
      JCN    P3NoReset                                       // Negierter Sprung!

      SET
      R      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal für Platz-Schleuse zum Öffnen

      A      B_an_Platz_3                                    // Trolley vorhanden
      S      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      S      Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"

P3NoReset: AN     B_an_Platz_3
      R      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolley ist ausgefahren

      A      Dyn.Status."Trolley_fährt_aus_Platz_3"          // /wird in Raus-SK benötigt (Schritt 2!)
      JC     P3HMI

      SET
      R      Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen

// HMI-Platz-Reset:
P3HMI: A      Dyn.HMI.Platz_3_resetten
      R      Dyn.HMI.Platz_3_resetten
      JCN    P3Check

// Trolley vorhanden:
      A      B_an_Platz_3                                    // Trolley vorhanden
      AN     Y_Platz_3                                       // Stopper GST
      A      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P3Check                                         // Kein Reset notwendig

// Kein Trolley vorhanden:
      AN     B_an_Platz_3                                    // Trolley vorhanden
      AN     Y_Platz_3                                       // Stopper GST
      AN     Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     P3Check                                         // Kein Reset notwendig

// Unklarer Zustand -> Reset starten
      SET
      S      Reset_Platz_3_Stopper
      S      Dyn.Status.Reset_Platz_3_aktiv

// Daten-/Sensor-Check:
P3Check: A      Dyn.Status.Reset_Platz_3_aktiv
      O      Dyn.Status."Trolley_fährt_nach_Platz_3"
      O      Y_Platz_3
      R      Dyn.Error.Err_Platz_3
      JC     P3Ende

      A      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     B_an_Platz_3
      O
      AN     Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      A      B_an_Platz_3
      =      Dyn.Error.Err_Platz_3

P3Ende: NOP 0


--- NW 19: CTMP-Telegramm Platz 1 ---
// CTMP: Nach Erreichen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"
      JC     NoCTMP1

// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_1, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok)   // TrolleyID übergeben

      AN     TrolleyID_Ok
      JC     NoCTMP1

// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=1, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"

NoCTMP1: NOP 0


--- NW 20: CTMP-Telegramm Platz 2 ---
// CTMP: Nach Erreichen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"
      JC     NoCTMP2

// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_2, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok)   // TrolleyID übergeben

      AN     TrolleyID_Ok
      JC     NoCTMP2

// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=2, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"

NoCTMP2: NOP 0


--- NW 21: CTMP-Telegramm Platz 3 ---
// CTMP: Nach Erreichen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"
      JC     NoCTMP3

// TrolleyID ermitteln
CALL FC "HMSchleuse_TrolleyID" (Schleuse:=Arbeitsplatz.Schleusen_Platz_3, TrolleyID:="Daten_für_SendFIFO".TrolleyID, Ok:=TrolleyID_Ok)   // //TrolleyID übergeben

      AN     TrolleyID_Ok
      JC     NoCTMP3

// CTMP: Nach Erreichen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='C', TelegrammKennung[2]:='T', TelegrammKennung[3]:='M', TelegrammKennung[4]:='P', TelegrammKennung[5]:=?, TelegrammKennung[6]:=?, TelegrammKennung[7]:=?, TelegrammKennung[8]:=?, TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=3, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"

NoCTMP3: NOP 0


--- NW 22: UNLDResp-Telegramm Platz 1 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"
      JC     NoUNLDResp1

// TrolleyID ermitteln
      L      Dyn.Platz_1.TrolleyID_ausgefahren
      T      "Daten_für_SendFIFO".TrolleyID                  // TrolleyID übergeben
      L      DINT#0
      <>D
      =      TrolleyID_Ok

      L      1                                               // Trolley ausgefahren

      A      TrolleyID_Ok
      JC     UNLDResp1_Ok

      L      0                                               // Kein Trolley ausgefahren

UNLDResp1_Ok: T      "Daten_für_SendFIFO".Status_1_Int       // Status übergeben

// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=1, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o. | s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC"
      JCN    NoUNLDResp1

      L      DINT#0
      T      Dyn.Platz_1.TrolleyID_ausgefahren

NoUNLDResp1: NOP 0


--- NW 23: UNLDResp-Telegramm Platz 2 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"
      JC     NoUNLDResp2

// TrolleyID ermitteln
      L      Dyn.Platz_2.TrolleyID_ausgefahren
      T      "Daten_für_SendFIFO".TrolleyID                  // TrolleyID übergeben
      L      DINT#0
      <>D
      =      TrolleyID_Ok

      L      1                                               // Trolley ausgefahren

      A      TrolleyID_Ok
      JC     UNLDResp2_Ok

      L      0                                               // Kein Trolley ausgefahren

UNLDResp2_Ok: T      "Daten_für_SendFIFO".Status_1_Int       // Status übergeben

// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=2, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o. | s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC"
      JCN    NoUNLDResp2

      L      DINT#0
      T      Dyn.Platz_2.TrolleyID_ausgefahren

NoUNLDResp2: NOP 0


--- NW 24: UNLDResp-Telegramm Platz 3 ---
// UNLDResp: Nach Verlassen des Beladepunktes:
      A      "SGes".Ohne_PC_Fahren
      R      Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"

// Telegramm an Host senden:
      AN     Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"
      JC     NoUNLDResp3

// TrolleyID ermitteln
// TrolleyID ermitteln
      L      Dyn.Platz_3.TrolleyID_ausgefahren
      T      "Daten_für_SendFIFO".TrolleyID                  // TrolleyID übergeben
      L      DINT#0
      <>D
      =      TrolleyID_Ok

      L      1                                               // Trolley ausgefahren

      A      TrolleyID_Ok
      JC     UNLDResp3_Ok

      L      0                                               // Kein Trolley ausgefahren

UNLDResp3_Ok: T      "Daten_für_SendFIFO".Status_1_Int       // Status übergeben

// UNLDResp: Nach Verlassen des Beladepunktes:
CALL FB "Daten_in_SendFIFO_speichern" ,  (TelegrammKennung[1]:='U', TelegrammKennung[2]:='N', TelegrammKennung[3]:='L', TelegrammKennung[4]:='D', TelegrammKennung[5]:='R', TelegrammKennung[6]:='e', TelegrammKennung[7]:='s', TelegrammKennung[8]:='p', TelegrammKennung[9]:=?, TelegrammKennung[10]:=?, TrolleyID:=?, StationsNr:=Arbeitsplatz.Host_ABP, Puffer_LinienNr:=3, StoreGroup:=?, Status_1_Int:=?, Status_2_Bit[0]:=?, Status_2_Bit[1]:=?, Status_2_Bit[2]:=?, Status_2_Bit[3]:=?, Status_2_Bit[4]:=?, Status_2_Bit[5]:=?, Status_2_Bit[6]:=?, Status_2_Bit[7]:=?, Reserve[1]_Int:=?, Reserve[2]_Int:=?, Port:=1, Ret_Val_FIFO_IN:="MB199", Error:=Error_SendFIFO)   // s.o. | s.o.

      AN     Error_SendFIFO
      R      Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC"
      JCN    NoUNLDResp3

      L      DINT#0
      T      Dyn.Platz_3.TrolleyID_ausgefahren

NoUNLDResp3: NOP 0


--- NW 25: Simulation zu Starten von beladenen Trolleys ---
      SET
      R      Dyn.Simulation."Trolleys bereit"
      R      Dyn.Simulation."Trolley gestartet"

      AN     Dyn.Simulation.Aktiviert
      R      Dyn.Simulation.Neustart
      R      Dyn.Simulation."Einen Trolley ausfahren"
      JC     SimEnde

// Neustart:
      A      Dyn.Simulation.Neustart
      R      Dyn.Simulation.Neustart
      JCN    TrolleyOk                                       // Negierter Sprung

      SET
      R      Dyn.Simulation."Trolley 1 gefahren"
      R      Dyn.Simulation."Trolley 2 gefahren"
      R      Dyn.Simulation."Trolley 3 gefahren"

// Trolley für Ausfahrt bereit:
TrolleyOk: A      B_an_Platz_1                               // Trolley vorhanden
      A      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 1 gefahren"
      O
      A      B_an_Platz_2                                    // Trolley vorhanden
      A      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 2 gefahren"
      O
      A      B_an_Platz_3                                    // Trolley vorhanden
      A      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 3 gefahren"
      =      Dyn.Simulation."Trolleys bereit"

// Trolley starten:
New:  AN     Dyn.Simulation."Trolleys bereit"
      ON     Dyn.Simulation."Einen Trolley ausfahren"
      R      Dyn.Simulation."Einen Trolley ausfahren"
      JC     SimEnde

      A      B_an_Platz_1                                    // Trolley vorhanden
      A      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 1 gefahren"
      S      Dyn.Simulation."Trolley 1 gefahren"
      S      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Simulation."Trolley gestartet"
      R      Dyn.Simulation."Einen Trolley ausfahren"
      JC     SimEnde

      A      B_an_Platz_2                                    // Trolley vorhanden
      A      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 2 gefahren"
      S      Dyn.Simulation."Trolley 2 gefahren"
      S      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Simulation."Trolley gestartet"
      R      Dyn.Simulation."Einen Trolley ausfahren"
      JC     SimEnde

      A      B_an_Platz_3                                    // Trolley vorhanden
      A      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      AN     Dyn.Simulation."Trolley 3 gefahren"
      S      Dyn.Simulation."Trolley 3 gefahren"
      S      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Simulation."Trolley gestartet"
      R      Dyn.Simulation."Einen Trolley ausfahren"

      SET
      R      Dyn.Simulation."Trolley 1 gefahren"
      R      Dyn.Simulation."Trolley 2 gefahren"
      R      Dyn.Simulation."Trolley 3 gefahren"

      A      B_an_Platz_1                                    // Trolley vorhanden
      A      Dyn.Platz_1.Trolley_ist_an_Beladung             // Trolleydaten ok
      O
      A      B_an_Platz_2                                    // Trolley vorhanden
      A      Dyn.Platz_2.Trolley_ist_an_Beladung             // Trolleydaten ok
      O
      A      B_an_Platz_3                                    // Trolley vorhanden
      A      Dyn.Platz_3.Trolley_ist_an_Beladung             // Trolleydaten ok
      JC     New

SimEnde: NOP 0


--- NW 26: Mindestzeit Einfahren: ---
      SET
      R      MindestZeit_Rein_Ok

      AN     Dyn.Status."Trolley_fährt_nach_Platz_1"
      AN     Dyn.Status."Trolley_fährt_nach_Platz_2"
      AN     Dyn.Status."Trolley_fährt_nach_Platz_3"
      ON     Dyn.Vorstau."Trolley_fährt_aus"
      JCN    TReinPlus                                       // Negierter Sprung

      L      0
      T      Dyn.Mindestzeit_Rein

      JU     TReinEnde

TReinPlus: AN     Antrieb_Vorstau_aktiv
      ON     "1s-Impuls"
      JC     TReinCheck

      L      Dyn.Mindestzeit_Rein
      +      1
      T      Dyn.Mindestzeit_Rein

TReinCheck: NOP 0
      L      Dyn.Mindestzeit_Rein
      L      Arbeitsplatz.Mindestzeit_zum_ABP_1
      >=I
      A      Dyn.Status."Trolley_fährt_nach_Platz_1"
      JC     TReinOk

      CAC
      L      Arbeitsplatz.Mindestzeit_zum_ABP_2
      >=I
      A      Dyn.Status."Trolley_fährt_nach_Platz_2"
      JC     TReinOk

      CAC
      L      Arbeitsplatz.Mindestzeit_zum_ABP_3
      >=I
      A      Dyn.Status."Trolley_fährt_nach_Platz_3"
      JC     TReinOk

      JU     TReinEnde                                       // Negierter Sprung

TReinOk: T      Dyn.Mindestzeit_Rein                         // Zeit einfrieren

      SET
      S      MindestZeit_Rein_Ok

TReinEnde: NOP 0


--- NW 27: Mindestzeit Ausfahren: ---
      SET
      R      MindestZeit_Raus_Ok

      AN     Dyn.Status."Trolley_fährt_aus_Platz_1"
      AN     Dyn.Status."Trolley_fährt_aus_Platz_2"
      AN     Dyn.Status."Trolley_fährt_aus_Platz_3"
      ON     Dyn.Status."Trolley_fährt_in_Nachstau"
      JCN    TRausPlus                                       // Negierter Sprung

      L      0
      T      Dyn.Mindestzeit_Raus

      JU     TRausEnde

TRausPlus: AN     Antrieb_Nachstau_2_aktiv
      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      ON     Antrieb_Nachstau_1_aktiv
      ON     Antrieb_Nachstau_3_aktiv
      ON     "1s-Impuls"
      JC     TRausCheck

      L      Dyn.Mindestzeit_Raus
      +      1
      T      Dyn.Mindestzeit_Raus

TRausCheck: NOP 0
      L      Dyn.Mindestzeit_Raus
      L      Arbeitsplatz.Mindestzeit_aus_ABP_1
      >=I
      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      JC     TRausOk

      CAC
      L      Arbeitsplatz.Mindestzeit_aus_ABP_2
      >=I
      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      JC     TRausOk

      CAC
      L      Arbeitsplatz.Mindestzeit_aus_ABP_3
      >=I
      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      JC     TRausOk

      JU     TRausEnde                                       // Negierter Sprung

TRausOk: T      Dyn.Mindestzeit_Raus                         // Zeit einfrieren

      SET
      S      MindestZeit_Raus_Ok

TRausEnde: NOP 0


--- NW 28: Schrittkette anhalten ---
      A      Dyn.Sk_zum_Beladeplatz.Auto_akt                 // Automatik ist aktiv
      A      Dyn.Sk_zum_Beladeplatz.Bereich_ok
      JU     en08_Mig                                        // Schrittkette nicht anhalten !

      SET
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit              // Störungen löschen
      R      Dyn.Sk_zum_Beladeplatz.Err_Schritt

      L      0                                               // Zeitwerte löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle

      BEU

en08_Mig: NOP 0


--- NW 29: Sprungverteiler Platz-Versorgung ---
      L      Dyn.Sk_zum_Beladeplatz.Neu_Schritt              // Schritt, der im nächsten Zyklus aktiv werden soll
      L      -1                                              // angegeben ?
      ==I                                                    // Nein !
      JC     NEU

      CAC                                                    // Neuen Schritt übergeben
      T      Dyn.Sk_zum_Beladeplatz.Akt_Schritt

      L      -1                                              // Urzustand
      T      Dyn.Sk_zum_Beladeplatz.Neu_Schritt              // Schritt, der im nächsten Zyklus aktiv werden soll

NEU:  SET
      R      Warte_neu                                       // Wartezeit neutriggern
      R      Warte_stop                                      // Wartezeit stoppen

      L      Dyn.Sk_zum_Beladeplatz.Akt_Schritt
      JL     Ende
      JU     s000                                            // Schritt 0
      JU     s001                                            // Schritt 1
      JU     s002                                            // Schritt 2
      JU     s003                                            // Schritt 3
      JU     s004                                            // Schritt 4
      JU     s005                                            // Schritt 5
      JU     s006                                            // Schritt 6
      JU     s007                                            // Schritt 7
      JU     s008                                            // Schritt 8
      JU     s009                                            // Schritt 9
      JU     s010                                            // Schritt 10
      JU     s011                                            // Schritt 11
      JU     s012                                            // Schritt 12
      JU     s013                                            // Schritt 13
      JU     s014                                            // Schritt 14
      JU     s015                                            // Schritt 15
      JU     s016                                            // Schritt 16
      JU     s017                                            // Schritt 17
      JU     s018                                            // Schritt 18
      JU     s019                                            // Schritt 19
      JU     s020                                            // Schritt 20
      JU     s021                                            // Schritt 21
      JU     s022                                            // Schritt 22
      JU     s023                                            // Schritt 23
      JU     s024                                            // Schritt 24
      JU     s025                                            // Schritt 25
      JU     s026                                            // Schritt 26
      JU     s027                                            // Schritt 27
      JU     s028                                            // Schritt 28
      JU     s029                                            // Schritt 29
      JU     s030                                            // Schritt 30
Ende: S      Dyn.Sk_zum_Beladeplatz.Err_Schritt              // Undefinierter Schritt

      L      16#A131
      T      Dyn.Stop_Ursache_Rein

      JU     Raus_NEU

Neu_Mig: A      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
      JCN    Sk

      L      16#A132
      T      Dyn.Stop_Ursache_Rein

      JU     Raus_NEU

Sk:   T      Dyn.Sk_zum_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwerte löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle

      JU     NEU

// Nicht programmierte Schritte:
// s000: SPA   Ende
// s001: SPA   Ende
// s002: SPA   Ende
// s003: SPA   Ende
s004: JU     Ende
s005: JU     Ende
s006: JU     Ende
s007: JU     Ende
s008: JU     Ende
s009: JU     Ende
s010: JU     Ende
s011: JU     Ende
s012: JU     Ende
s013: JU     Ende
s014: JU     Ende
s015: JU     Ende
s016: JU     Ende
s017: JU     Ende
s018: JU     Ende
s019: JU     Ende
// s020: SPA   Ende
// s021: SPA   Ende
s022: JU     Ende
s023: JU     Ende
s024: JU     Ende
s025: JU     Ende
s026: JU     Ende
s027: JU     Ende
s028: JU     Ende
s029: JU     Ende
s030: JU     Ende


--- NW 30: Schritt X: Reserve            ---
      SET                                                    // Weiterschaltbedingung
      =      Weiter

// Schrittaktionen:
      SET

      L      16#B001
      T      Dyn.Stop_Ursache_Rein

      A      Dyn.Sk_zum_Beladeplatz.Reset_Akt                // Reset ist aktiv
      L      20                                              // Weiter mit Schritt 20
      JC     Neu_Mig                                         // Bei diesem Schritt weiter

      A      Weiter                                          // Weiterschaltbedingung ist erfüllt
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit              // Sofort weiter !
      L      0                                               // Angabe der Wartezeit (*10ms)
      JC     Plus                                            // Nächsten Schritt starten

      L      1                                               // Weiter mit Schritt 1
      JC     Neu_Mig                                         // Bei diesem Schritt weiter

      T      Dyn.Sk_zum_Beladeplatz.Neu_Schritt              // Schritt, der im nächsten Zyklus aktiv werden soll

      SET
      A      Dyn.Sk_zum_Beladeplatz.Auto_akt                 // Automatik ist aktiv
      A      Dyn.Sk_zum_Beladeplatz.Bereich_ok
      =      Ueb_akt                                         // Überwachungszeit aktivieren
      L      50                                              // Angabe der Überwachungszeit (*1s)
      JU     tueb                                            // Überwachungszeit

      JU     Raus_NEU


--- NW 31: Schritt 0: Trolley ist in Schleuse / Auftrag erzeugen ---
s000: NOP 0

// Schrittaktionen:
      A      Dyn.Sk_zum_Beladeplatz.Reset_Akt                // Reset ist aktiv
      L      20                                              // Weiter mit Schritt 20
      JC     Neu_Mig                                         // Bei diesem Schritt weiter

      AN     B_In_Schleuse_Vorstau                           // Trolley im Schleuse erkannt
      O      Y_Vorstau
      O      Dyn.Status.Reset_zum_Beladeplatz_aktiv
      JC     Raus_NEU

      SET
      R      Dyn.Status."Trolley_fährt_nach_Platz_1"
      R      Dyn.Status."Trolley_fährt_nach_Platz_2"
      R      Dyn.Status."Trolley_fährt_nach_Platz_3"
      R      Dyn.Vorstau.Freigabe_an_Stopper

      A(
      O      Dyn.SS."PC>Trolley_zum_Platz_1_starten"
      O      "SGes".Ohne_PC_Fahren
      )
      AN     Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"  // Alt-Telegramm noch nicht gesendet
      AN     B_an_Platz_1
      AN     Y_Platz_1                                       // Arbeitsplatz ist geöffnet
      AN     Dyn.Platz_1.Beladestelle_wurde_angefahren       // wegen FIFO-Versorgung
      AN     Dyn.Platz_1.Trolley_ist_an_Beladung
      AN     Dyn.Status.Reset_Platz_1_aktiv
      S      Dyn.Vorstau.Freigabe_an_Stopper
      S      Dyn.Status."Trolley_fährt_nach_Platz_1"
      S      Dyn.Platz_1.Beladestelle_wurde_angefahren
      JC     SX001

      A(
      O      Dyn.SS."PC>Trolley_zum_Platz_2_starten"
      O      "SGes".Ohne_PC_Fahren
      )
      AN     Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"  // Alt-Telegramm noch nicht gesendet
      AN     B_an_Platz_2
      AN     Y_Platz_2                                       // Arbeitsplatz ist geöffnet
      AN     Dyn.Platz_2.Beladestelle_wurde_angefahren       // wegen FIFO-Versorgung
      AN     Dyn.Platz_2.Trolley_ist_an_Beladung
      AN     Dyn.Status.Reset_Platz_2_aktiv
      S      Dyn.Vorstau.Freigabe_an_Stopper
      S      Dyn.Status."Trolley_fährt_nach_Platz_2"
      S      Dyn.Platz_2.Beladestelle_wurde_angefahren
      JC     SX001

      A(
      O      Dyn.SS."PC>Trolley_zum_Platz_3_starten"
      O      "SGes".Ohne_PC_Fahren
      )
      AN     Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"  // Alt-Telegramm noch nicht gesendet
      AN     B_an_Platz_3
      AN     Y_Platz_3                                       // Arbeitsplatz ist geöffnet
      AN     Dyn.Platz_3.Beladestelle_wurde_angefahren       // wegen FIFO-Versorgung
      AN     Dyn.Platz_3.Trolley_ist_an_Beladung
      AN     Dyn.Status.Reset_Platz_3_aktiv
      S      Dyn.Vorstau.Freigabe_an_Stopper
      S      Dyn.Status."Trolley_fährt_nach_Platz_3"
      S      Dyn.Platz_3.Beladestelle_wurde_angefahren
      JC     SX001

      SET
      R      Dyn.Platz_1.Beladestelle_wurde_angefahren
      R      Dyn.Platz_2.Beladestelle_wurde_angefahren
      R      Dyn.Platz_3.Beladestelle_wurde_angefahren

      JU     Raus_NEU

SX001: L      1                                              // Weiter mit Schritt 1
      JU     Neu_Mig                                         // Bei diesem Schritt weiter


--- NW 32: Schritt 1: Trolley gestartet ---
s001: SET                                                    // Weiterschaltbedingung
      A      Y_Vorstau
      =      Weiter

// Schrittaktionen:

      A      Weiter
      R      Dyn.Vorstau.Freigabe_an_Stopper
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
      L      0                                               // Angabe der Wartezeit (*100ms)
      JC     Plus                                            // Nächsten Raus_Schritt starten************************************************

      JU     Raus_NEU


--- NW 33: Schritt 2: Ziel erreicht ?       ---
s002: SET                                                    // Weiterschaltbedingung
      A(
      A      Dyn.Status."Trolley_fährt_nach_Platz_1"
      A      B_an_Platz_1
      O
      A      Dyn.Status."Trolley_fährt_nach_Platz_2"
      A      B_an_Platz_2
      O
      A      Dyn.Status."Trolley_fährt_nach_Platz_3"
      A      B_an_Platz_3
      )
      A      MindestZeit_Rein_Ok
      =      Weiter

// Schrittaktionen:
      SET
      S      Antrieb_Vorstau_vor

      AN     B_In_Schleuse_Vorstau
      S      Dyn.Vorstau."Trolley_fährt_aus"

      A      Dyn.Status."Trolley_fährt_nach_Platz_1"
      =      Y_Weiche_zu_Platz_1
      A      Dyn.Status."Trolley_fährt_nach_Platz_2"
      =      Y_Weiche_zu_Platz_2

      A      Weiter
      L      0
      JC     Plus                                            // Nächsten Schritt starten

      L      16#B061
      T      Dyn.Stop_Ursache_Rein

      JU     Raus_NEU

--- NW 34: Schritt 3: Trolleydaten ändern            ---
s003: SET                                                    // Weiterschaltbedingung
      =      Weiter

// Schrittaktionen:
      SET
      R      Dyn.Vorstau."Trolley_fährt_aus"
      S      Trolley_hat_ABS_erreicht                        // Rückmeldung an Vorstau (Draussen-Sensor)

      A      Dyn.Status."Trolley_fährt_nach_Platz_1"
      R      Dyn.Status."Trolley_fährt_nach_Platz_1"
      S      Dyn.Platz_1.Trolley_ist_an_Beladung
      R      Dyn.SS."PC>Trolley_zum_Platz_1_starten"
      R      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal kam zu früh
      S      Dyn.SS."Trolley_ist_in_Platz_1_eingefahren>PC"

      A      Dyn.Status."Trolley_fährt_nach_Platz_2"
      R      Dyn.Status."Trolley_fährt_nach_Platz_2"
      S      Dyn.Platz_2.Trolley_ist_an_Beladung
      R      Dyn.SS."PC>Trolley_zum_Platz_2_starten"
      R      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal kam zu früh
      S      Dyn.SS."Trolley_ist_in_Platz_2_eingefahren>PC"

      A      Dyn.Status."Trolley_fährt_nach_Platz_3"
      R      Dyn.Status."Trolley_fährt_nach_Platz_3"
      S      Dyn.Platz_3.Trolley_ist_an_Beladung
      R      Dyn.SS."PC>Trolley_zum_Platz_3_starten"
      R      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal kam zu früh
      S      Dyn.SS."Trolley_ist_in_Platz_3_eingefahren>PC"

// Leertrolleys -1:
      L      Dyn.Vorstau.Anzahl_Leertrolleys
      +      -1
      T      Dyn.Vorstau.Anzahl_Leertrolleys

      L      0
      >=I
      JC     ENDE_Mig

      T      Dyn.Vorstau.Anzahl_Leertrolleys                 // Minimum übergeben

      JU     ENDE_Mig


--- NW 35: Schritt 20: Einfahr-Sk resetten ---
s020: SET                                                    // Weiterschaltbedingung
      A      Antrieb_Vorstau_aktiv
      =      Weiter                                          // Weiterschaltbedingung ist erfüllt

// Schrittaktionen:
      SET
      S      Antrieb_Vorstau_vor                             // Kreiselantrieb starten

      L      16#B201
      T      Dyn.Stop_Ursache_Rein

      SET
      S      Antrieb_Vorstau_vor

      A      Weiter                                          // Weiterschaltbedingung ist erfüllt
      L      3000                                            // Angabe der Wartezeit (*10ms)
      JC     Plus                                            // Nächsten Schritt starten

      JU     Raus_NEU


--- NW 36: Schritt 21: Reset ist zu Ende ---
s021: SET
      R      Dyn.Sk_zum_Beladeplatz.Reset_Akt                // Reset ist aktiv

      JU     ENDE_Mig                                        // Ende


--- NW 37: Schrittkette beenden ---
ENDE_Mig: L      0                                           // Schritt 0: Warten
      T      Dyn.Sk_zum_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle

      SET
      R      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
      R      Dyn.Status."Trolley_fährt_nach_Platz_1"
      R      Dyn.Status."Trolley_fährt_nach_Platz_2"
      R      Dyn.Status."Trolley_fährt_nach_Platz_3"
      R      Dyn.Vorstau."Trolley_fährt_aus"
      R      Dyn.Vorstau.Freigabe_an_Stopper

      JU     Raus_NEU


--- NW 38: Nächsten Schritt aktivieren ---
Plus: T      Dyn.Sk_zum_Beladeplatz.T_ok                     // Wartezeit übergeben

      A      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit              // Störung noch nicht quittiert
      JC     Raus_NEU

      L      0                                               // keine Wartezeit ?
      ==I                                                    // Ja ! -> sofort weiter
      JC     w220

      AN     Warte_neu                                       // Wartezeit neutriggern
      JC     W220_Mig

      L      0
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle                // Wartezeit

W220_Mig: A      Warte_stop                                  // Wartezeit stoppen
      JC     Raus_NEU

      L      Dyn.Sk_zum_Beladeplatz.Tok_Zelle
      L      "MW4"                                           // Wartezeit +10ms
      +I
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle                // Wartezeit
      L      Dyn.Sk_zum_Beladeplatz.T_ok                     // abgelaufen ?
      <I                                                     // Nein !
      JC     Raus_NEU

w220: L      Dyn.Sk_zum_Beladeplatz.Akt_Schritt
      +      1                                               // Schritt +1
      T      Dyn.Sk_zum_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwerte löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_zum_Beladeplatz.Tok_Zelle

      JU     Raus_NEU


--- NW 39: Überwachungszeit kontrollieren ---
tueb: A      Ueb_akt
      =      Dyn.Sk_zum_Beladeplatz.Ueb_akt                  // Für Statuskontrolle

      T      Dyn.Sk_zum_Beladeplatz.T_Err                    // Für Statuskontrolle
      L      Dyn.Sk_zum_Beladeplatz.Terr_Zelle               // Maximalzeit
      >I                                                     // abgelaufen ?
      AN     Dyn.Sk_zum_Beladeplatz.Err_Uebzeit
      JC     en24                                            // Nein !

      A      Ueb_akt                                         // Überwachungszeit aktivieren
      S      Dyn.Sk_zum_Beladeplatz.Err_Uebzeit

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle

      JU     Raus_NEU

en24: NOP 0

--- NW 40: Überwachungszeit +1 ---
      AN     Dyn.Sk_zum_Beladeplatz.Ueb_akt                  // Schrittaktion ist aktiv
      ON     "1s-Impuls"
      JC     Raus_NEU

      L      Dyn.Sk_zum_Beladeplatz.Terr_Zelle
      +      1                                               // Üb.zeit +1s
      T      Dyn.Sk_zum_Beladeplatz.Terr_Zelle

      JU     Raus_NEU


--- NW 41: Sprungverteiler SK-Rausfahren ---
Raus_NEU: SET
      R      Raus_Warte_neu                                  // Wartezeit neutriggern
      R      Raus_Warte_stop                                 // Wartezeit stoppen

      L      Dyn.Sk_aus_Beladeplatz.Akt_Schritt
      JL     Raus_Ende_Mig
      JU     Raus_s000                                       // Schritt 0
      JU     Raus_s001                                       // Schritt 1
      JU     Raus_s002                                       // Schritt 2
      JU     Raus_s003                                       // Schritt 3
      JU     Raus_s004                                       // Schritt 4
      JU     Raus_s005                                       // Schritt 5
      JU     Raus_s006                                       // Schritt 6
      JU     Raus_s007                                       // Schritt 7
      JU     Raus_s008                                       // Schritt 8
      JU     Raus_s009                                       // Schritt 9
      JU     Raus_s010                                       // Schritt 10
      JU     Raus_s011                                       // Schritt 11
      JU     Raus_s012                                       // Schritt 12
      JU     Raus_s013                                       // Schritt 13
      JU     Raus_s014                                       // Schritt 14
      JU     Raus_s015                                       // Schritt 15
      JU     Raus_s016                                       // Schritt 16
      JU     Raus_s017                                       // Schritt 17
      JU     Raus_s018                                       // Schritt 18
      JU     Raus_s019                                       // Schritt 19
      JU     Raus_s020                                       // Schritt 20
      JU     Raus_s021                                       // Schritt 21
      JU     Raus_s022                                       // Schritt 22
      JU     Raus_s023                                       // Schritt 23
      JU     Raus_s024                                       // Schritt 24
      JU     Raus_s025                                       // Schritt 25
      JU     Raus_s026                                       // Schritt 26
      JU     Raus_s027                                       // Schritt 27
      JU     Raus_s028                                       // Schritt 28
      JU     Raus_s029                                       // Schritt 29
      JU     Raus_s030                                       // Schritt 30
Raus_Ende_Mig: S      Dyn.Sk_aus_Beladeplatz.Err_Schritt     // Undefinierter Schritt
      BEU

Raus_Neu_Mig: A      Dyn.Sk_aus_Beladeplatz.Einzelschritt_akt // Einzelschritt fahren aktiv
      S      Dyn.Sk_aus_Beladeplatz.Einzelschritt_fertig     // Einzelschritt ist ausgeführt

      A      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      BEC

      T      Dyn.Sk_aus_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwerte löschen
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle

      JU     Raus_NEU

// Nicht programmierte Schritte:
// Raus_s000 : SPA Raus_Ende_Mig
// Raus_s001 : SPA Raus_Ende_Mig
// Raus_s002 : SPA Raus_Ende_Mig
// Raus_s003 : SPA Raus_Ende_Mig
// Raus_s004 : SPA Raus_Ende_Mig
// Raus_s005 : SPA Raus_Ende_Mig
Raus_s006: JU     Raus_Ende_Mig
Raus_s007: JU     Raus_Ende_Mig
Raus_s008: JU     Raus_Ende_Mig
Raus_s009: JU     Raus_Ende_Mig
Raus_s010: JU     Raus_Ende_Mig
Raus_s011: JU     Raus_Ende_Mig
Raus_s012: JU     Raus_Ende_Mig
Raus_s013: JU     Raus_Ende_Mig
Raus_s014: JU     Raus_Ende_Mig
Raus_s015: JU     Raus_Ende_Mig
Raus_s016: JU     Raus_Ende_Mig
Raus_s017: JU     Raus_Ende_Mig
Raus_s018: JU     Raus_Ende_Mig
Raus_s019: JU     Raus_Ende_Mig
// Raus_s020 : SPA Raus_Ende_Mig
// Raus_s021 : SPA Raus_Ende_Mig
Raus_s022: JU     Raus_Ende_Mig
Raus_s023: JU     Raus_Ende_Mig
Raus_s024: JU     Raus_Ende_Mig
Raus_s025: JU     Raus_Ende_Mig
Raus_s026: JU     Raus_Ende_Mig
Raus_s027: JU     Raus_Ende_Mig
Raus_s028: JU     Raus_Ende_Mig
Raus_s029: JU     Raus_Ende_Mig
Raus_s030: JU     Raus_Ende_Mig


--- NW 42: SK-Raus: Schritt 0: Raus-Auftrag erzeugen ---
Raus_s000: NOP 0

// Schrittaktionen:

      A      Dyn.Sk_aus_Beladeplatz.Reset_Akt                // Reset ist aktiv
      L      20                                              // Weiter mit Schritt 20
      JC     Raus_Neu_Mig                                    // Bei diesem Schritt weiter

      A      B_Nachstau_Einfahrt
      O      Y_Platz_1                                       // Ein Arbeitsplatz geöffnet
      O      Y_Platz_2
      O      Y_Platz_3
      O      Dyn.Platz_1."Trolley_fährt_aus"
      O      Dyn.Platz_2."Trolley_fährt_aus"
      O      Dyn.Platz_3."Trolley_fährt_aus"
      O      Dyn.Status."Trolley_fährt_in_Nachstau"
      O      Dyn.Status.Reset_aus_Beladeplatz_aktiv
      BEC                                                    // Kein Platz vor Nachstau-Schleuse

      SET
      R      Dyn.Status."Trolley_fährt_aus_Platz_1"
      R      Dyn.Platz_1.Freigabe_an_Stopper
      R      Dyn.Status."Trolley_fährt_aus_Platz_2"
      R      Dyn.Platz_2.Freigabe_an_Stopper
      R      Dyn.Status."Trolley_fährt_aus_Platz_3"
      R      Dyn.Platz_3.Freigabe_an_Stopper

      A      B_an_Platz_1
      AN     Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
      A      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      AN     Dyn.Platz_1.Beladestelle_wurde_entsorgt         // wegen FIFO-Entsorgung
      R      Dyn.SS."PC>Trolley_an_Platz_1_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Status."Trolley_fährt_aus_Platz_1"
      S      Dyn.Platz_1.Beladestelle_wurde_entsorgt
      S      Dyn.Platz_1.Freigabe_an_Stopper
      JC     SXR000

      A      B_an_Platz_2
      AN     Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
      A      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      AN     Dyn.Platz_2.Beladestelle_wurde_entsorgt         // wegen FIFO-Entsorgung
      R      Dyn.SS."PC>Trolley_an_Platz_2_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Status."Trolley_fährt_aus_Platz_2"
      S      Dyn.Platz_2.Beladestelle_wurde_entsorgt
      S      Dyn.Platz_2.Freigabe_an_Stopper
      JC     SXR000

      A      B_an_Platz_3
      AN     Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC" // Alt-Telegramm noch nicht gesendet
      A      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      AN     Dyn.Platz_3.Beladestelle_wurde_entsorgt         // wegen FIFO-Entsorgung
      R      Dyn.SS."PC>Trolley_an_Platz_3_freigegeben"      // Signal für Platz-Schleuse zum Öffnen
      S      Dyn.Status."Trolley_fährt_aus_Platz_3"
      S      Dyn.Platz_3.Beladestelle_wurde_entsorgt
      S      Dyn.Platz_3.Freigabe_an_Stopper
      JC     SXR000

      SET
      R      Dyn.Platz_1.Beladestelle_wurde_entsorgt
      R      Dyn.Platz_2.Beladestelle_wurde_entsorgt
      R      Dyn.Platz_3.Beladestelle_wurde_entsorgt

      BEU

SXR000: L      1                                             // Weiter mit Schritt 1
      JU     Raus_Neu_Mig                                    // Bei diesem Schritt weiter


--- NW 43: SK-Raus: Schritt 1: Trolley gestartet ---
Raus_s001: NOP 0                                             // Weiterschaltbedingung
      A      Dyn.Platz_1."Trolley_fährt_aus"
      O      Dyn.Platz_2."Trolley_fährt_aus"
      O      Dyn.Platz_3."Trolley_fährt_aus"
      =      Weiter

// Schrittaktionen:
      SET
      S      Dyn.Status.Beladung_erfolgt

      A      Y_Platz_1
      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      S      Dyn.Platz_1."Trolley_fährt_aus"
      R      Dyn.Platz_1.Freigabe_an_Stopper

      A      Y_Platz_2
      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      S      Dyn.Platz_2."Trolley_fährt_aus"
      R      Dyn.Platz_2.Freigabe_an_Stopper

      A      Y_Platz_3
      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      S      Dyn.Platz_3."Trolley_fährt_aus"
      R      Dyn.Platz_3.Freigabe_an_Stopper

      A      Weiter
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      R      Dyn.Status.Trolley_hat_Nachstau_erreicht
      L      0                                               // Angabe der Wartezeit (*100ms)
      JC     Raus_Plus                                       // Nächsten Raus_Schritt starten************************************************

      BEU


--- NW 44: SK-Raus: Schritt 2: Trolley hat Arbeitsplatz verlassen ---
Raus_s002: NOP 0
// Schrittaktionen:
      A      B_Nachstau_Einfahrt
      S      Dyn.Status.Trolley_hat_Nachstau_erreicht

      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      =      Y_Weiche_von_Platz_1
      S      Antrieb_Nachstau_1_vor
      S      Antrieb_Nachstau_3_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      =      Y_Weiche_von_Platz_2
      S      Antrieb_Nachstau_2_vor
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

// Weiterschaltbedingung:
      A      Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen  // von Schleuse
      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      R      Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen
      R      Dyn.Platz_1."Trolley_fährt_aus"
      S      Dyn.Status."Trolley_fährt_in_Nachstau"
      S      Dyn.SS."Trolley_ist_aus_Platz_1_ausgefahren>PC" // Signal von Platz-Schleuse
      JC     R2weiter

      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      A      Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen  // von Schleuse
      R      Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen
      R      Dyn.Platz_2."Trolley_fährt_aus"
      S      Dyn.Status."Trolley_fährt_in_Nachstau"
      S      Dyn.SS."Trolley_ist_aus_Platz_2_ausgefahren>PC" // Signal von Platz-Schleuse
      JC     R2weiter

      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      A      Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen  // von Schleuse
      R      Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen
      R      Dyn.Platz_3."Trolley_fährt_aus"
      S      Dyn.Status."Trolley_fährt_in_Nachstau"
      S      Dyn.SS."Trolley_ist_aus_Platz_3_ausgefahren>PC" // Signal von Platz-Schleuse
      JC     R2weiter

// Trolley fährt nicht in Nachstau:
      A(
      ON     Dyn.Status."Trolley_fährt_aus_Platz_2"
      O      Antrieb_Nachstau_2_aktiv
      )
      A      Antrieb_Nachstau_3_aktiv
      A      Antrieb_Nachstau_3_aktiv
      =      Raus_Ueb_akt                                    // Überwachungszeit aktivieren
      L      60                                              // Angabe der Überwachungszeit (*1s)
      JU     Raus_tueb                                       // Überwachungszeit

R2weiter: SET
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      L      0                                               // Angabe der Wartezeit (*100ms)
      JU     Raus_Plus                                       // Nächsten Raus_Schritt starten************************************************


--- NW 45: SK-Raus: Schritt 3: Trolley in Nachstau fahren ---
Raus_s003: A      Dyn.Status.Trolley_hat_Nachstau_erreicht
      A      Antrieb_Nachstau_3_aktiv                        // Nur bei aktivem Antrieb auswerten!
      A      MindestZeit_Raus_Ok
      =      Weiter

// Schrittaktionen:
      A      B_Nachstau_Einfahrt
      S      Dyn.Status.Trolley_hat_Nachstau_erreicht

      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      =      Y_Weiche_von_Platz_1
      S      Antrieb_Nachstau_1_vor
      S      Antrieb_Nachstau_3_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      =      Y_Weiche_von_Platz_2
      S      Antrieb_Nachstau_2_vor
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

      A      Weiter
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      L      0                                               // Angabe der Wartezeit (*100ms)
      JC     Raus_Plus                                       // Nächsten Raus_Schritt starten************************************************

// Trolley fährt nicht in Nachstau:
      A(
      ON     Dyn.Status."Trolley_fährt_aus_Platz_2"
      O      Antrieb_Nachstau_2_aktiv
      )
      A      Antrieb_Nachstau_3_aktiv
      A      Antrieb_Nachstau_3_aktiv
      =      Raus_Ueb_akt                                    // Überwachungszeit aktivieren
      L      60                                              // Angabe der Überwachungszeit (*1s)
      JU     Raus_tueb                                       // Überwachungszeit


--- NW 46: SK-Raus: Schritt 4: 5s Weiterfahren ---
Raus_s004: SET                                               // Weiterschaltbedingung
      =      Weiter

// Schrittaktionen:
      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      AN     Antrieb_Nachstau_2_aktiv
      ON     Antrieb_Nachstau_1_aktiv
      ON     Antrieb_Nachstau_3_aktiv
      O      Y_Platz_1                                       // Ein Arbeitsplatz noch geöffnet
      O      Y_Platz_2
      O      Y_Platz_3
      S      Raus_Warte_neu
      S      Raus_Warte_stop

      A      Dyn.Status."Trolley_fährt_aus_Platz_1"
      =      Y_Weiche_von_Platz_1
      S      Antrieb_Nachstau_1_vor
      S      Antrieb_Nachstau_3_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_2"
      =      Y_Weiche_von_Platz_2
      S      Antrieb_Nachstau_2_vor
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

      A      Dyn.Status."Trolley_fährt_aus_Platz_3"
      S      Antrieb_Nachstau_3_vor
      S      Antrieb_Nachstau_1_vor

      L      50                                              // Angabe der Wartezeit (*100ms)
      JU     Raus_Plus                                       // Nächsten Raus_Schritt starten************************************************


--- NW 47: SK-Raus: Schritt 5: Fertig ---
Raus_s005: NOP 0                                             // Weiterschaltbedingung

      JU     Raus_Ende


--- NW 48: SK-Raus: Schritt 20: Schleuse resetten ---
Raus_s020: SET                                               // Weiterschaltbedingung
      A      Antrieb_Nachstau_1_aktiv
      A      Antrieb_Nachstau_2_aktiv
      A      Antrieb_Nachstau_3_aktiv
      =      Weiter                                          // Weiterschaltbedingung ist erfüllt

// Schrittaktionen:
      SET
      S      Antrieb_Nachstau_1_vor                          // Antriebe starten
      S      Antrieb_Nachstau_2_vor
      S      Antrieb_Nachstau_3_vor

      L      16#B201
      T      Dyn.Stop_Ursache_Raus

      A      Weiter                                          // Weiterschaltbedingung ist erfüllt
      L      300                                             // Angabe der Wartezeit (*100ms)
      JC     Raus_Plus                                       // Nächsten Raus_Schritt starten************************************************

      BEU


--- NW 49: SK-Raus: Schritt 21: Reset ist zu Ende ---
Raus_s021: SET
      R      Dyn.Sk_aus_Beladeplatz.Reset_Akt                // Reset ist aktiv

      JU     Raus_Ende                                       // Ende


--- NW 50: SK-Raus: Schrittkette beenden ---
Raus_Ende: L      0                                          // Schritt 0: Warten
      T      Dyn.Sk_aus_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle

      SET
      R      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      R      Dyn.Status."Trolley_fährt_aus_Platz_1"
      R      Dyn.Platz_1."Trolley_fährt_aus"
      R      Dyn.Platz_1.Freigabe_an_Stopper
      R      Dyn.Status."Trolley_fährt_aus_Platz_2"
      R      Dyn.Platz_2."Trolley_fährt_aus"
      R      Dyn.Platz_2.Freigabe_an_Stopper
      R      Dyn.Status."Trolley_fährt_aus_Platz_3"
      R      Dyn.Platz_3."Trolley_fährt_aus"
      R      Dyn.Platz_3.Freigabe_an_Stopper
      R      Dyn.Status."Trolley_fährt_in_Nachstau"

      BEU


--- NW 51: SK-Raus: Nächsten Schritt aktivieren ---
Raus_Plus: T      Dyn.Sk_aus_Beladeplatz.T_ok                // Wartezeit übergeben

      A      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit              // Störung noch nicht quittiert
      BEC

      L      0                                               // keine Wartezeit ?
      ==I                                                    // Ja ! -> sofort weiter
      JC     Raus_w220

      AN     Raus_Warte_neu                                  // Wartezeit neutriggern
      JC     Nix_Neu

      L      0
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle                // Wartezeit

Nix_Neu: A      Raus_Warte_stop                              // Wartezeit stoppen
      BEC

      AN     "100ms-Impuls"                                  // 0,1s-Impuls
      BEC

      L      Dyn.Sk_aus_Beladeplatz.Tok_Zelle
      L      "MW2"                                           // Wartezeit +100ms
      +I
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle                // Wartezeit
      L      Dyn.Sk_aus_Beladeplatz.T_ok                     // abgelaufen ?
      <I                                                     // Nein !
      BEC

Raus_w220: L      Dyn.Sk_aus_Beladeplatz.Akt_Schritt
      +      1                                               // Schritt +1
      T      Dyn.Sk_aus_Beladeplatz.Akt_Schritt

      L      0                                               // Zeitwerte löschen
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle
      T      Dyn.Sk_aus_Beladeplatz.Tok_Zelle

      SET
      S      Dyn.Sk_aus_Beladeplatz.Einzelschritt_fertig     // Einzelschritt ist ausgeführt

      BEU


--- NW 52: SK-Raus: Überwachungszeit kontrollieren ---
Raus_tueb: A      Raus_Ueb_akt
      =      Dyn.Sk_aus_Beladeplatz.Ueb_akt                  // Für Statuskontrolle

      T      Dyn.Sk_aus_Beladeplatz.T_Err                    // Für Statuskontrolle
      L      Dyn.Sk_aus_Beladeplatz.Terr_Zelle               // Maximalzeit
      >I                                                     // abgelaufen ?
      AN     Dyn.Sk_aus_Beladeplatz.Err_Uebzeit
      JC     en50                                            // Nein !

      A      Raus_Ueb_akt                                    // Überwachungszeit aktivieren
      S      Dyn.Sk_aus_Beladeplatz.Err_Uebzeit

      L      0                                               // Zeitwert löschen
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle

      BEU

en50: NOP 0

--- NW 53: SK-Raus: Überwachungszeit +1 ---
      AN     Dyn.Sk_aus_Beladeplatz.Ueb_akt                  // Schrittaktion ist aktiv
      ON     "1s-Impuls"
      BEC

      L      Dyn.Sk_aus_Beladeplatz.Terr_Zelle
      +      +1
      T      Dyn.Sk_aus_Beladeplatz.Terr_Zelle

      BEU


--- NW 54: Ende ---
      BE

