=== FB 1423: VP_Sorter_A  [STL] ===
INTERFACE:
  Input:
  Output:
  InOut:
  Static:
    Sorter_MB3121 : "MSepSorterRein"
    Sync_BG3120 : "MStartSync"
    Weiche_VP1 : "MWeiche_Sorter"
    Weiche_VP2 : "MWeiche_Sorter"
    Weiche_VP3 : "MWeiche_Sorter"
    Weiche_VP4 : "MWeiche_Sorter"
    Weiche_VP5 : "MWeiche_Sorter"
    Weiche_VP6 : "MWeiche_Sorter"
    Weiche_VP7 : "MWeiche_Sorter"
    Weiche_VP8 : "MWeiche_Sorter"
    Weiche_VP9 : "MWeiche_Sorter"
    Weiche_VP10 : "MWeiche_Sorter"
    Weiche_VP11 : "MWeiche_Sorter"
    Weiche_VP12 : "MWeiche_Sorter"
    Weiche_VP13 : "MWeiche_Sorter"
    Weiche_VP14 : "MWeiche_Sorter"
    Weiche_VP15 : "MWeiche_Sorter"
    Weiche_VP16 : "MWeiche_Sorter"
    Weiche_VP17 : "MWeiche_Sorter"
    Weiche_VP18 : "MWeiche_Sorter"
    Weiche_VP19 : "MWeiche_Sorter"
    Weiche_VP20 : "MWeiche_Sorter"
    Weiche_VP21 : "MWeiche_Sorter"
    Weiche_VP22 : "MWeiche_Sorter"
    Weiche_VP23 : "MWeiche_Sorter"
    Weiche_VP24 : "MWeiche_Sorter"
    Weiche_VP25 : "MWeiche_Sorter"
    Übergabe_B3003 : "MSorter_Uebergabe"
    Sorter_MB3123 : "MSepSorterRein"
    Impuls_BG3125 : "MImpulsGeber"
    Ohne_PC_fahren : Bool
    Sorter3121_Ok : Bool                                // Sorter darf starten
    Sorter3123_Ok : Bool                                // Sorter darf starten
    Aus_Sorter_3121_gefahren : Bool                     // Sorter von Heber war gefahren
    Aus_Sorter_3123_gefahren : Bool                     // Sorter von Heber war gefahren
    Sorter1Reset : Bool
    Sorter2Reset : Bool
    Sorter_A_leer : Bool
  Input:
  Output:
  InOut:
  Static:
    Dyn : Struct
      GesamtSorterReset : Bool := 1
  Temp:
    ErrQuit : Bool
    ErrAnz : Bool
    Antrieb : Bool
    Stau : Bool
    Start_Ok : Bool
    Error_aktiv : Bool
    Leer : Bool
    Sorter_3121_startbereit : Bool
    Sorter_3123_startbereit : Bool
    Trolley_dazwischen : Bool
    Err_DW : DInt
    Err_Bits : Int
  Constant:

--- NW 1: Systemzeug ---
      A      "DOutbound_Bereich".A01_UH07.AnlageEin
      =      Sorter_MB3121.Dyn.Sk.Auto_akt
      =      Sorter_MB3123.Dyn.Sk.Auto_akt

      AN     "DOutbound_Bereich".A01_UC071.BereichErr
      =      Sorter_MB3121.Dyn.Sk.Bereich_ok
      =      Sorter_MB3123.Dyn.Sk.Bereich_ok

// Bereichshalt:
      CLR                                                    // nicht verbaut
      R      Sorter_MB3121.Dyn.Sk.Bereich_ok

// Sonderbetriebsarten Weichen:
      CLR
      =      Weiche_VP1.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP2.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP3.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP4.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP5.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP6.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP7.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP8.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP9.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP10.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP11.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP12.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP13.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP14.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP15.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP16.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP17.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP18.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP19.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP20.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP21.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP22.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP23.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP24.Dyn.Status.Weichentest_aktiv
      =      Weiche_VP25.Dyn.Status.Weichentest_aktiv

      A      Sync_BG3120.Dyn.Status.TeachModus_Aktiv
      =      Weiche_VP1.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP2.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP3.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP4.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP5.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP6.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP7.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP8.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP9.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP10.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP11.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP12.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP13.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP14.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP15.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP16.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP17.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP18.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP19.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP20.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP21.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP22.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP23.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP24.Dyn.Status.TeachModus_aktiv
      =      Weiche_VP25.Dyn.Status.TeachModus_aktiv

      CLR
      =      Sorter_MB3121.Dyn.Error.Korrektur_Modus_aktiv

      L      1474                                            // DLSeps
      T      "MW174"
      L      1478                                            // DLWeichen
      T      "MW178"

// Nach neuen Daten suchen:
      A      "1s-Impuls"
      =      "Weiche_NewData"


--- NW 2: Linien mit PLC_Ziel anfahren ---
      A      Ohne_PC_fahren
      JCN    En03

      A      "MB3121"
      O      "MB3123"
      CU     "Z101"

      L      "Z101"
      L      1
      <I
      A(
      L      Sorter_MB3121.Separator.Default_Ziel
      L      0                                               // Bekannt ?
      >I                                                     // Ja !
      )
      JC     En03

      SET
      R      "Z101"

      L      Sorter_MB3121.Separator.Default_Ziel
      L      0                                               // unbekannt ?
      ==I
      L      101                                             // Beginn mit Ausfahrziel 1.Puffer
      JC     X399

// Nächste Weiche suchen:
      L      Sorter_MB3121.Separator.Default_Ziel
      T      "MW200"

CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196")   // Nach angegeben Datenbyte suchen (Abzweig-Ziel)

      AN     "M199.7"                                        // Datensatz ist nicht vorhanden
      O      "M208.0"                                        // Letzte Weiche
      L      0                                               // Neubeginn
      JC     X400

X398: CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#FF00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196")   // Nächsten Datensatz lesen

      L      "MW206"                                         // Weichentyp
      L      178                                             // Sorterweiche ?
      <>I                                                    // Nein!
      O      "M199.2"                                        // Ende erreicht
      L      0
      JC     X400

      A      "M208.5"                                        // Weiche für PLC-Ziel disabled !
      JC     X398

      L      "MW226"
      T      Sorter_MB3121.Separator.Default_Ziel

      JU     En03

// 1.Weiche checken:
X399: T      "MW200"

CALL FC "DatenOut" (SSDB:="MW178", SSDW:=0, PARA:=WORD#16#0E00, SEARCHDATEN:=P#M200.0, RE_VAL:="MB199", OUTDATEN:=P#M200.0, Position:="MW196")   // Nach angegeben Datenbyte suchen (Abzweig-Ziel)

      AN     "M199.7"                                        // Datensatz ist nicht vorhanden
      JC     En03

      A      "M208.5"                                        // Weiche für PLC-Ziel disabled !
      JC     X398

      L      "MW226"
X400: T      Sorter_MB3121.Separator.Default_Ziel

En03: NOP 0


--- NW 3: Störungen ---
CALL FC "Err_vorhanden" (Check_DB:=708, Anfangs_DW:=DINT#206, Ende_DW:=DINT#314, Stoerung:=Error_aktiv, ErrDW:=Err_DW, ErrBits:=Err_Bits)   // Störungsanzeige
      A      Error_aktiv                                     // s.o.
      =      Error_aktiv                                     // Sorter Lager Weichen-Störung (Sorter-Antrieb gestoppt!)

      A      "BG3120"                                        // Verlassen-Sensor
      L      S5T#250MS
      OffDelay "T140"


--- NW 4: Störung quittieren UZ7102/7103 ---
      A      "DOutbound_Bereich".A01_UZ7102.StOk_aktiv
      O      "DOutbound_Bereich".A01_UZ7103.StOk_aktiv
      =      ErrQuit


--- NW 5: Umschaltung Sorter 3121 / Sorter3123 ---
      A      "MB3121"
      S      Aus_Sorter_3121_gefahren
      AN     "BG3121"
      R      Sorter3121_Ok
      A      "MB3123"
      S      Aus_Sorter_3123_gefahren
      AN     "BG3123"
      R      Sorter3123_Ok

      L      Sorter_MB3121.Dyn.Stop_Ursache
      L      16#B116
      ==I
      =      Sorter_3121_startbereit
      A      Sorter_3121_startbereit
      AN     Aus_Sorter_3121_gefahren
      S      Sorter3121_Ok
      JC     En05

      L      Sorter_MB3123.Dyn.Stop_Ursache
      L      16#B116
      ==I
      =      Sorter_3123_startbereit
      A      Sorter_3123_startbereit
      AN     Aus_Sorter_3123_gefahren
      S      Sorter3123_Ok
      JC     En05

      SET                                                    // Es kann keiner fahren
      A(
      O      Sorter_3121_startbereit
      O      Sorter_3123_startbereit
      )
      AN     "BG3120"                                        // Sync-Sensor
      AN     "MB3121"                                        // Keiner mehr offen
      AN     "MB3123"
      L      s5t#1s
      OnDelay "T11"
      A      "T11"
      R      Aus_Sorter_3121_gefahren
      R      Aus_Sorter_3123_gefahren

En05: NOP 0


--- NW 6: Sorter-GesamtReset ---
// Sorter-Reset starten:
      A      "DVP_OmniFahren".Schleuse_3121.Dyn.Status.Reset_aktiv // Bei Schleusen-Reset -> Sorter mit resetten!
      AN     "DVP_Sorter_A".Sorter_MB3121.Dyn.GesamtSorterReset_aktiv
      S      "DVP_Sorter_A".Sorter_MB3121.Dyn.GesamtSorterReset

      A      "DVP_OmniFahren".Schleuse_3123.Dyn.Status.Reset_aktiv // Bei Schleusen-Reset -> Sorter mit resetten!
      AN     "DVP_Sorter_A".Sorter_MB3123.Dyn.GesamtSorterReset_aktiv
      S      "DVP_Sorter_A".Sorter_MB3123.Dyn.GesamtSorterReset


--- NW 7: Separator  3121 vor Sorter (Von Kontrollplatz) ---
      L      DB708.DBW204                                    // Err beim Synchronisieren
      L      0                                               // Störung vorhanden ?
      ==I                                                    // Nein !
      AN     Sync_BG3120.Dyn.Stop                            // Rein-Separator stoppen
      AN     Error_aktiv                                     // Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
// Aufteilung Sep 1 <> Sep 2
      AN     "MB3123"
      A      Sorter3121_Ok
      AN     Sorter_MB3121.Dyn.GesamtSorterReset_aktiv
      AN     Sorter_MB3123.Dyn.GesamtSorterReset_aktiv
      A      "SF0122"
// /      U     "M83.1"              ///
      =      Start_Ok

      SET                                                    // Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
      S      Sorter_MB3121.Dyn.BT_beruhigt                   // 1. einfahrender BügelTräger ist im Sep

      A      "T140"
      =      Sorter_MB3121.B_AusSep                          // Entprellung Verlassen-Sensor

// Triggern / Scanner-Auswertung über HW>VP_Omnifahren (FC128/27)
// Ziel über Default-Ziel (HW>VP_Ziel_FC, FC181)
      SET
      R      ErrAnz

CALL FB "None" ,  (Separator_Nr:=3121, ErrQuit:=ErrQuit, B_VorSep:=?, B_ImSep:="BG3121", B_AusSep:=?, B_Beladen_im_Sep:=?, B_Pinsensor:="BG3125", B_Beladen_nach_Sep:=?, Start_Ok:=Start_Ok, Antrieb_aktiv:="MA0145", Antrieb_plus_aktiv:="MA0145", Y_Sep_Auf:="DVP_Zylinder".Sorter_3121.Stat.Ast, K_Sanner_triggern:=?, Sorter_Reset:=Sorter1Reset, Error:=DB708.DBW200, Antrieb_start:="DHWtoVP_Antriebe".MA0144.Stat.A_vor, Antrieb_plus_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)

// Default-Ziel jeden Zyklus neu!:
      L      0
      T      Sorter_MB3121.Separator.Default_Ziel

// Dieser Sorter-Rein-Sep ist aktiv:
      A      "DVP_Zylinder".Sorter_3121.Stat.Ast
      R      "DVP_Zylinder".Weiche_3120.Stat.Ast             // Weiche vor Sorter-Strang

// Quer-Antrieb einschalten:
      A      "MB3121"
      S      "DVP_Antriebe".MA0152.Stat.A_vor


--- NW 8: Separator  3123 vor Sorter (Von Rückführstrecke) ---
      L      DB708.DBW204                                    // Err beim Synchronisieren
      L      0                                               // Störung vorhanden ?
      ==I                                                    // Nein !
      AN     Sync_BG3120.Dyn.Stop                            // Rein-Separator stoppen
      AN     Error_aktiv                                     // Sorter Batch Weichen-Störung (Sorter-Antrieb gestoppt!)
// Aufteilung Sep 1 <> Sep 2
      AN     "MB3121"
      A      Sorter3123_Ok
      AN     Sorter_MB3121.Dyn.GesamtSorterReset_aktiv
      AN     Sorter_MB3123.Dyn.GesamtSorterReset_aktiv
      =      Start_Ok

      SET                                                    // Da Leiste im Sep und Zusatz-Zylinder im Separator -> BT steht sofort sauber im Sep
      S      Sorter_MB3123.Dyn.BT_beruhigt                   // 1. einfahrender BügelTräger ist im Sep

      A      "T140"
      =      Sorter_MB3123.B_AusSep                          // Entprellung Verlassen-Sensor

// Triggern / Scanner-Auswertung über MOmniSchleuse(FB274)
// Ziel über Default-Ziel (ZG_Ziel_FC, FC2181)

CALL FB "None" ,  (Separator_Nr:=3123, ErrQuit:=ErrQuit, B_VorSep:=?, B_ImSep:="BG3123", B_AusSep:=?, B_Beladen_im_Sep:=?, B_Pinsensor:="BG3125", B_Beladen_nach_Sep:=?, Start_Ok:=Start_Ok, Antrieb_aktiv:="MA0152", Antrieb_plus_aktiv:="MA0145", Y_Sep_Auf:="DVP_Zylinder".Sorter_3123.Stat.Ast, K_Sanner_triggern:=?, Sorter_Reset:=Sorter2Reset, Error:=DB708.DBW202, Antrieb_start:="DVP_Antriebe".MA0152.Stat.A_vor, Antrieb_plus_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0152.Stat.Stop_vor, hStOk:=ErrAnz)

// Default-Ziel jeden Zyklus neu!:
      L      0
      T      Sorter_MB3123.Separator.Default_Ziel            // /wird pro Zyklus vom Ziel-FC übergeben!

// Dieser Sorter-Rein-Sep ist aktiv:
      A      "DVP_Zylinder".Sorter_3123.Stat.Ast
      S      "DVP_Zylinder".Weiche_3120.Stat.Ast             // Weiche vor Sorter-Strang


--- NW 9: Reset ist aktiv ---
      A      Sorter_MB3121.Dyn.GesamtSorterReset_aktiv
      =      "7_HMI_Err_UH07_OB".Sorter_MB3121.Reset_aktiv
      A      Sorter_MB3123.Dyn.GesamtSorterReset_aktiv
      =      "7_HMI_Err_UH07_OB".Sorter_MB3123.Reset_aktiv

      A      Sorter_MB3121.Dyn.GesamtSorterReset_aktiv
      O      Sorter_MB3123.Dyn.GesamtSorterReset_aktiv
      =      Weiche_VP1.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP2.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP3.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP4.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP5.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP6.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP7.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP8.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP9.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP10.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP11.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP12.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP13.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP14.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP15.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP16.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP17.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP18.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP19.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP20.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP21.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP22.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP23.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP24.Dyn.Ohne_VerklemmKontrolle
      =      Weiche_VP25.Dyn.Ohne_VerklemmKontrolle

// Diesen Sorterbereich zurücksetzen:
      A      Sorter1Reset                                    // Ein Zyklus
      O      Sorter2Reset                                    // Ein Zyklus
      S      Sync_BG3120.Dyn.Reset
      S      Weiche_VP1.Dyn.Status.Reset
      S      Weiche_VP2.Dyn.Status.Reset
      S      Weiche_VP3.Dyn.Status.Reset
      S      Weiche_VP4.Dyn.Status.Reset
      S      Weiche_VP5.Dyn.Status.Reset
      S      Weiche_VP6.Dyn.Status.Reset
      S      Weiche_VP7.Dyn.Status.Reset
      S      Weiche_VP8.Dyn.Status.Reset
      S      Weiche_VP9.Dyn.Status.Reset
      S      Weiche_VP10.Dyn.Status.Reset
      S      Weiche_VP11.Dyn.Status.Reset
      S      Weiche_VP12.Dyn.Status.Reset
      S      Weiche_VP13.Dyn.Status.Reset
      S      Weiche_VP14.Dyn.Status.Reset
      S      Weiche_VP15.Dyn.Status.Reset
      S      Weiche_VP16.Dyn.Status.Reset
      S      Weiche_VP17.Dyn.Status.Reset
      S      Weiche_VP18.Dyn.Status.Reset
      S      Weiche_VP19.Dyn.Status.Reset
      S      Weiche_VP20.Dyn.Status.Reset
      S      Weiche_VP21.Dyn.Status.Reset
      S      Weiche_VP22.Dyn.Status.Reset
      S      Weiche_VP23.Dyn.Status.Reset
      S      Weiche_VP24.Dyn.Status.Reset
      S      Weiche_VP25.Dyn.Status.Reset


--- NW 10: Inkremente über Zahnrad-Sensor ---
CALL FB "None" ,  (Ink_DB:=1483, B_Zaehlen:="BG3125", Antrieb_aktiv:="MA0145", Quit:=ErrQuit, Zeit_Signal_zu_lang:=?, Zeit_Kein_Signal:=?, Signal:=?, Err_Kein_Signal:="7_HMI_Err_UH07_OB".Impulsgeber_3004.Kein_Signal, Err_Signal_zu_lang:="7_HMI_Err_UH07_OB".Impulsgeber_3004.Signal_zu_lang)

      A(
      O      "7_HMI_Err_UH07_OB".Impulsgeber_3004.Kein_Signal
      O      "7_HMI_Err_UH07_OB".Impulsgeber_3004.Signal_zu_lang
      )
      AN     ErrQuit
      S      "DVP_Antriebe".MA0145.Stat.Stop_vor

      A(
      O      "7_HMI_Err_UH07_OB".Impulsgeber_3004.Kein_Signal
      O      "7_HMI_Err_UH07_OB".Impulsgeber_3004.Signal_zu_lang
      )
      S      ErrAnz


--- NW 11: Sorter A-Antrieb nicht aktiv beim/nach Synchronisieren ---
// Antriebe Sorter A starten:
      A      "DVP_Sensoren".An_BG3120.Stat.B_Akt             // damit Zeit ablaufen kann
      S      "DVP_Antriebe".MA0152.Stat.A_vor                // Quer-Zuführung an
      S      "DVP_Antriebe".MA0145.Stat.A_start              // Sorter A starten

// Antrieb M0152 stoppen, da sonst Lücke zwischen 2 Trolleys kleiner wird
      A      "DVP_Sensoren".An_BG3120.Stat.B_Akt             // Mit Zeitverzögerung!
      AN     "MA0145"                                        // Aber Antrieb Sorter A nicht aktiv
      S      "DVP_Antriebe".MA0152.Stat.A_PS                 // Nicht stoppen, da sonst Lager-Ausfahrt blockiert


--- NW 12: Trolley synchronisieren BG3120 ---
// Teachen: Ref-Sensor ueber Sync-Sensor
      A      "BG3120"
      AN     Sync_BG3120.Dyn.Refpunkt_ok                     // Nur eimalige Auswertung
      =      Sync_BG3120.B_RefPunkt                          // uebergabe fuer unten

      A      "MA0145"
      L      S5T#500ms
      OffDelay "T143"
      A      "T143"
      AN     Sync_BG3120.Dyn.Status.TeachModus_Aktiv         // sonst Probleme bei Doppelimpuls
      O
      A      "MA0145"
      A      Sync_BG3120.Dyn.Status.TeachModus_Aktiv         // sonst Probleme bei Doppelimpuls
      =      Antrieb

// Keine Hauptstrangdaten vorhanden ? (Fuer Sync-Pkt):
      L      "VP_HS_A_oF".Datensortkopf.AnzahlEintraege
      L      "VP_HS_A_mF".Datensortkopf.AnzahlEintraege
      +I
      L      0                                               // Daten vorhanden ?
      ==I                                                    // Nein !
      =      "Hauptstrang_leer"                              // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen

      A      "BG3120"
      L      s5t#500ms                                       // Da trotz Entprellung Doppel-Impulse
      OffDelay "T144"
      A      "T144"
      =      Sync_BG3120.B_BT_da

CALL FB "None" ,  (Sync_Nr:=3120, ErrQuit:=ErrQuit, B_BT_da:=?, B_RefPunkt:=?, B_TeachPunk:="BG3074", Antrieb_aktiv:=Antrieb, Error:=DB708.DBW204, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, hStOk:=ErrAnz)   // Teach-Sensor

      A      Sync_BG3120.Dyn.Error.Inkrementalgeber
      S      "DVP_Antriebe".MA0145.Stat.Stop_vor

// Keine Hauptstrangdaten vorhanden ?:
      L      "VP_HS_A_oF".Datensortkopf.AnzahlEintraege
      L      "VP_HS_A_mF".Datensortkopf.AnzahlEintraege
      +I
      L      0                                               // Daten vorhanden ?
      ==I                                                    // Nein !
      =      "Hauptstrang_leer"                              // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen

// Reservierungen können gelöscht werden:
      L      "VP_TravelFIFO_A".Travel_FIFO_BG3120.FIFO.ANZAHL
      L      0                                               // Daten vorhanden ?
      ==I                                                    // Nein !
      A      "Hauptstrang_leer"                              // Keine Haupstrangdaten vorhanden -> Verklemm-Errors löschen
      =      Sorter_A_leer


--- NW 13: Weiche 3087 / Vollpuffer VP1 ---
CALL FB "None" ,  (Weichen_Nr:=1, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP1.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3087", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP1.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW210, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 14: Weiche 3086 / Vollpuffer VP2 ---
CALL FB "None" ,  (Weichen_Nr:=2, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP2.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3086", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP2.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW212, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 15: Weiche 3085 / Vollpuffer VP3 ---
CALL FB "None" ,  (Weichen_Nr:=3, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP3.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3085", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP3.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW214, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 16: Weiche 3084 / Vollpuffer VP4 ---
CALL FB "None" ,  (Weichen_Nr:=4, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP4.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3084", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP4.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW216, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 17: Weiche 3083 / Vollpuffer VP5 ---
CALL FB "None" ,  (Weichen_Nr:=5, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP5.Stat.B_Akt, B_Gerade:="BG3062", B_Ausfahrt:="BG3083", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP5.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW218, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 18: Weiche 3082 / Vollpuffer VP6 ---
CALL FB "None" ,  (Weichen_Nr:=6, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP6.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3082", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP6.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW220, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 19: Weiche 3081 / Vollpuffer VP7 ---
CALL FB "None" ,  (Weichen_Nr:=7, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP7.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3081", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP7.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW222, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 20: Weiche 3080 / Vollpuffer VP8 ---
CALL FB "None" ,  (Weichen_Nr:=8, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP8.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3080", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP8.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW224, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 21: Weiche 3077 / Vollpuffer VP9 ---
CALL FB "None" ,  (Weichen_Nr:=9, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP9.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3077", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP9.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW226, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 22: Weiche 3076 / Vollpuffer VP10 ---
CALL FB "None" ,  (Weichen_Nr:=10, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP10.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3076", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP10.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW228, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 23: Weiche 3075 / Vollpuffer VP11 ---
CALL FB "None" ,  (Weichen_Nr:=11, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP11.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3075", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP11.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW230, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 24: Weiche 3074 / Vollpuffer VP12 ---
CALL FB "None" ,  (Weichen_Nr:=12, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP12.Stat.B_Akt, B_Gerade:="BG3061", B_Ausfahrt:="BG3074", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP12.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW232, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 25: Weiche 3073 / Vollpuffer VP13 ---
CALL FB "None" ,  (Weichen_Nr:=13, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP13.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3073", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP13.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW234, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 26: Weiche 3072 / Vollpuffer VP14 ---
CALL FB "None" ,  (Weichen_Nr:=14, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP14.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3072", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP14.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW236, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 27: Weiche 3071 / Vollpuffer VP15 ---
CALL FB "None" ,  (Weichen_Nr:=15, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP15.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3071", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP15.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW238, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 28: Weiche 3070 / Vollpuffer VP16 ---
CALL FB "None" ,  (Weichen_Nr:=16, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP16.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3070", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP16.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW240, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 29: Weiche 3067 / Vollpuffer VP17 ---
CALL FB "None" ,  (Weichen_Nr:=17, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP17.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3067", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP17.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW242, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 30: Weiche 3066 / Vollpuffer VP18 ---
CALL FB "None" ,  (Weichen_Nr:=18, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP18.Stat.B_Akt, B_Gerade:="BG3060", B_Ausfahrt:="BG3066", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP18.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW244, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 31: Weiche 3065 / Vollpuffer VP19 ---
CALL FB "None" ,  (Weichen_Nr:=19, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP19.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3065", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP19.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW246, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 32: Weiche 3064 / Vollpuffer VP20 ---
CALL FB "None" ,  (Weichen_Nr:=20, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP20.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3064", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP20.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW248, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 33: Weiche 3063 / Vollpuffer VP21 ---
CALL FB "None" ,  (Weichen_Nr:=21, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP21.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3063", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP21.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW250, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 34: Weiche 3027 / Vollpuffer VP22 ---
CALL FB "None" ,  (Weichen_Nr:=22, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP22.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3027", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP22.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW252, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 35: Weiche 3026 / Vollpuffer VP23 ---
CALL FB "None" ,  (Weichen_Nr:=23, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP23.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3026", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP23.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW254, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 36: Weiche 3025 / Vollpuffer VP24 ---
CALL FB "None" ,  (Weichen_Nr:=24, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP24.Stat.B_Akt, B_Gerade:=?, B_Ausfahrt:="BG3025", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP24.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW256, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 37: Weiche 3024 / Vollpuffer VP25 ---
CALL FB "None" ,  (Weichen_Nr:=25, KorrekturFaktor:=?, ErrQuit:=ErrQuit, Stau_Ausfahrtbereich:="DVP_Sensoren".Stau_VP25.Stat.B_Akt, B_Gerade:="BG3003", B_Ausfahrt:="BG3024", Antrieb_aktiv:=Antrieb, Y_Weiche_abzweigen:="DVP_Zylinder".Weiche_VP25.Stat.Ast, Y_Weiche_geradeaus:=?, Error:=DB708.DBW258, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 38: Übergabe BG3003 ---
CALL FB "None" ,  (Uebergabe_Nr:=3003, KorrekturFaktor:=1.0, ErrQuit:=ErrQuit, Antrieb_aktiv:=Antrieb, Error:=DB708.DBW206, Antrieb_start:="DVP_Antriebe".MA0145.Stat.A_start, Antrieb_stoppen:="DVP_Antriebe".MA0145.Stat.Stop_vor, hStOk:=ErrAnz)


--- NW 39: Sorter B-Antrieb nicht aktiv bei Übergabe (Daten in Travel-FIFO B) ---
      L      "VP_TravelFIFO_B".Travel_FIFO_BG3003.FIFO.ANZAHL
      L      0                                               // Daten vorhanden ?
      >I                                                     // Ja !
      O      "DVP_Sensoren".An_BG3003.Stat.B_Akt             // Mit Zeitverzögerung!
      =      Trolley_dazwischen

// Antrieb Sorter B starten:
      L      "DVP_Sorter_B".Weiche_VP26.Dyn.Hauptstrang_Ink  // Inkremente zum Weiche schalten (vom Hauptstrang)
      L      DINT#0                                          // schon bekannt ?
      >D                                                     // Ja !
      A      "DVP_Sorter_B".Weiche_VP26.Y_Weiche_geradeaus
      O      Trolley_dazwischen
      S      "DVP_Antriebe".MA0145.Stat.A_vor                // Sorter A an
      S      "DVP_Antriebe".MA0146.Stat.A_start              // Sorter B starten

// Antrieb Sorter A stoppen:
      A      Trolley_dazwischen
      AN     "MA0146"                                        // Aber Antrieb Sorter B nicht aktiv
      S      "DVP_Antriebe".MA0145.Stat.Stop_vor
      =      "7_HMI_Err_UH07_OB".Sorter_Vollpuffer."Sorter A stop"


--- NW 40: Störungen anzeigen UZ7102/7103 ---
      A      ErrAnz
      S      "DOutbound_Bereich".A01_UZ7102.StOk_blinken
      S      "DOutbound_Bereich".A01_UZ7103.StOk_blinken


--- NW 41: Ende ---
      BE

