=== FC 29: Simulation_Aus_VP_Trolley_starten  [STL] ===
INTERFACE:
  Input:
  Output:
  InOut:
  Temp:
    VollPuffer : Int
    VP_DB : Int
    VP_DW : Int
    AR1Zeiger : DWord                                   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
    AR1Start : DInt                                     // Startwert mit Offset 0
    PARA : Word
    Position : Int
    Schleife1 : Word                                    // Loopzähler 1
  Constant:
  Return:
    Ret_Val : Void

--- NW 1: Ausfahrt schon aktiv ? ---
      A      "DVollPufferStreckenA".VollPuffer_01.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_02.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_03.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_04.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_05.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_06.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_07.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_08.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_09.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_10.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_11.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_12.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_13.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_14.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_15.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_16.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_17.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_18.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_19.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_20.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_21.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_22.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_23.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_24.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenA".VollPuffer_25.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_26.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_27.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_28.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_29.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_30.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_31.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_32.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_33.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_34.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_35.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_36.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_37.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_38.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_39.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_40.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_41.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_42.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_43.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_44.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_45.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_46.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_47.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_48.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_49.Status2.Alles_ausfahren_OUT
      O      "DVollPufferStreckenB".VollPuffer_50.Status2.Alles_ausfahren_OUT
      =      "DVPAuslagern".Simulation_Auslagern.Auslagern_aktiv
      BEC

      L      0
      T      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Aktiv


--- NW 2: Puffer aus Ausfahrliste holen ---
      L      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
      T      VollPuffer
      L      0
      <>I
      JC     Check

      L      16#F100                                         // 1.Eintrag lesen !!! (da noch 2.Suche erforderlich!)
      T      PARA

      L      "DLVollPuffer_ShopGroup_abrufen".Datenlistenkopf.AnzahlEintraege
      L      0
      ==I
      BEC

      CAC
L100: T      Schleife1

// Einträge lesen:
CALL FC "DatenOut" (SSDB:=102, SSDW:=0, PARA:=PARA, SEARCHDATEN:=P#M200.0, RE_VAL:="MB219", OUTDATEN:=P#M220.0, Position:="DVPAuslagern".Simulation_Auslagern.Position)   // Reihenfolge abrufen

      L      16#FF00                                         // Nächsten Eintrag lesen !!! (Vergleich ausserhalb s.u.)
      T      PARA

      JBI    OkVP

      BEU

OkVP: L      "MW220"
      T      VollPuffer
      T      "DVPAuslagern".Simulation_Auslagern.Last_Check


--- NW 3: VP mit 0815-ShopGroup, 5 Daten und Sensor in Schleuse ? ---
Check: CALL FC "PufferZeiger_ermitteln" (Puffer_X:=VollPuffer, Puffer_DB:=VP_DB, Puffer_DW:=VP_DW, Error:="M199.0")

      A      "M199.0"
      BEC

// Ziel-Pointer erzeugen: (PLC-Daten)
      L      VP_DW
      ITD
      T      AR1Start                                        // Startwert mit Offset 0

// Hat Lager Shopgroup 815 ?:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#88                                         // Offset für ShopGroup_Out
      SLD    3
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      OPN    DB[VP_DB]                                       // AMR-DB öffnen

      L      DBD [AR1Zeiger]
      L      DINT#815
      <>D
      JC     next

// Hat Lager unten 5 Trolleys ?:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#516                                        // Offset für Anzahl OUT-DL
      SLD    3
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      OPN    DB[VP_DB]                                       // AMR-DB öffnen

      L      DBW [AR1Zeiger]
      L      0
      ==I
      JC     next

// Sensor BSchleuse_Out:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#2                                          // Offset für B-Schleuse out
      SLD    3
      L      3                                               // Damit DBX_Bit 3
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      OPN    DB[VP_DB]                                       // AMR-DB öffnen
      AN     DBX [AR1Zeiger]                                 // Trolley in Schleuse
      JC     next

// Sensor BVollpuffer-Einfahrt:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#2                                          // BVollpuffer-Einfahrt
      SLD    3
      L      1                                               // Damit DBX_Bit 1
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      OPN    DB[VP_DB]                                       // AMR-DB öffnen
      AN     DBX [AR1Zeiger]                                 // Stau simuliert
      JC     next

      L      VollPuffer
      T      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check

      AN     "100ms-Impuls"
      BEC

      L      "DVPAuslagern".Simulation_Auslagern.Wartezeit
      +      +1
      T      "DVPAuslagern".Simulation_Auslagern.Wartezeit

      L      30                                              // 3s rum
      <I
      BEC                                                    // Warten

// Alles auslagern:
      L      AR1Start                                        // Startwert mit Offset 0
      +      DINT#29                                         // Offset für Status 2 HighByte
      SLD    3
      L      4                                               // Damit DBX_Bit 4
      OD
      T      AR1Zeiger                                       // Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      OPN    DB[VP_DB]                                       // AMR-DB öffnen
      SET
      S      DBX [AR1Zeiger]                                 // Alles auslagern

      L      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
      T      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Aktiv

      L      0
      T      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check
      T      "DVPAuslagern".Simulation_Auslagern.Last_Check
      T      "DVPAuslagern".Simulation_Auslagern.Wartezeit

      BEU

next: L      0
      T      "DVPAuslagern".Simulation_Auslagern.Wartezeit
      T      "DVPAuslagern".Simulation_Auslagern.Vollpuffer_Check // Puffer verwerfen

      L      Schleife1
      LOOP   L100


--- NW 4: Ende ---
      BE

