=== FB 5429: LP_Auslagern  [STL] ===
INTERFACE:
  Input:
  Output:
  InOut:
  Static:
    Ausfahren_Ok : "MAusfahrFreigabe_neu"
    Impuls_MB3321 : "MImpulsGeber"
    Auslagern : Struct
      Auslager_Puffer : Int
      Trolley_markiert : Bool
  Temp:
    ErrQuit : Bool
    Antrieb : Bool
    Impuls : Bool
    Error : Bool
    Trolley_starten_ok : Bool
    Puffer_DB : Int
    Puffer_DW : Int
    AR1Zeiger : DWord                                   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
    AR1Start : DInt                                     // Startwert mit Offset 0
  Constant:

--- NW 1: Trolley aus Leerpuffer starten ok? ---
      AN     "DLP_Sensoren".Stau_BG3327.Stat.B_Akt           // Stau in Steigung
      A(
      ON     "DLP_Sensoren".Stau_BG3322.Stat.B_Akt
      O      "MB3342"
      )
      =      Trolley_starten_ok


--- NW 2: Trolleys aus Leerpuffer zur Sack-Beladung fahren ---
      L      Auslagern.Auslager_Puffer
      L      0                                               // Bekannt ?
      <>I                                                    // Ja !
      JC     Ausgelagert

// Puffer hat Inilauf und Trolley vorhanden -> Dieser Puffer fährst selbst aus
      A      "DLeerPufferStrecken".LeerPuffer_01.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_01.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_02.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_02.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_03.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_03.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_04.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_04.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_05.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_05.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_06.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_06.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_07.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_07.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_08.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_08.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_09.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_09.B_InSchleuse
      O
      A      "DLeerPufferStrecken".LeerPuffer_10.Dyn.Status.Leerpuffer_initialisieren
      A      "DLeerPufferStrecken".LeerPuffer_10.B_InSchleuse
      JC     En01

CALL FC "Leerpuffer to Raus-Lager ermitteln" (Puffer:=Auslagern.Auslager_Puffer)

Ausgelagert: CALL FC "PufferZeiger_ermitteln" (Puffer_X:=Auslagern.Auslager_Puffer, Puffer_DB:=Puffer_DB, Puffer_DW:=Puffer_DW, Error:=Error)

      A      Error
      R      Auslagern.Trolley_markiert
      JC     En01

// Zeiger "Einen Leer-Trolley ausfahren" (71.4) ermitteln:
      L      Puffer_DW
      ITD
      T      AR1Start                                        // Startwert mit Offset 0

      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#71                                         // Offset für Status (2.Byte)
      SLD    3
      L      4                                               // Damit DBX_Bit 71.4
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

// Trolley zum Ausfahren schon markiert ?:
      A      Auslagern.Trolley_markiert
      JCN    Markieren                                       // Negierter Sprung

      OPN    DB[Puffer_DB]                                   // Puffer-DB öffnen

      A      DBX [AR1Zeiger]                                 // Einen Trolley starten (71.4)/ Trolley noch nicht gestartet!
      JC     En01

      SET
      R      Auslagern.Trolley_markiert

      L      0                                               // Nächsten Ausfahr-Puffer ermitteln
      T      Auslagern.Auslager_Puffer

      JU     En01

// Platz vor Sack-Beladung frei?:
Markieren: AN     Trolley_starten_ok
      JC     En01

// Trolley im Puffer zum Auslagern markieren:
      OPN    DB[Puffer_DB]                                   // Puffer-DB öffnen

      SET
      S      DBX [AR1Zeiger]                                 // Einen Trolley starten (70.2)/ Trolley noch nicht gestartet
      S      Auslagern.Trolley_markiert

En01: NOP 0


--- NW 3: Inkremente B über Zahnrad-Sensor ---
      A      "DOutbound_Bereich".A01_UZ0703.StOk_aktiv
      O      "DOutbound_Bereich".A01_UH07.StOk_aktiv
      =      ErrQuit

CALL FB "None" ,  (Ink_DB:=?, B_Zaehlen:="BG3321", Antrieb_aktiv:="MA0065", Quit:=ErrQuit, Zeit_Signal_zu_lang:=?, Zeit_Kein_Signal:=?, Signal:=Impuls, Err_Kein_Signal:="7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Kein_Signal, Err_Signal_zu_lang:="7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Signal_zu_lang)

      A(
      O      "7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Kein_Signal
      O      "7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Signal_zu_lang
      )
      AN     ErrQuit
      S      "DLPtoHW_Antriebe".MA0065.Stat.Stop_vor

      A(
      O      "7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Kein_Signal
      O      "7_HMI_Err_UH07_OB".Auslagerbereich_LeerPuffer.BG3321_Signal_zu_lang
      )
      S      "DOutbound_Bereich".A01_UZ0703.StOk_blinken
      S      "DOutbound_Bereich".A01_UH07.StOk_blinken


--- NW 4: Ausfahr-Steuerung ---
CALL FB "None" ,  (Impuls:=Impuls, Vorbei_1:=?, Vorbei_2:=?, Vorbei_3:=?, Vorbei_4:=?, Vorbei_5:=?, Inks_Vorbei_1:=?, Inks_Vorbei_2:=?, Inks_Vorbei_3:=?, Inks_Vorbei_4:=?, Inks_Vorbei_5:=?, Antrieb_ein:="DLPtoHW_Antriebe".MA0065.Stat.A_start)


--- NW 5: Ende ---
      BE

