FUNCTION_BLOCK "Zuführung_OmniFahren"
TITLE = Zuführung Arbeitsplätze
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR 
      Schleuse_3456 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
      Schleuse_3481 { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
      Weiche_3482 { S7_SetPoint := 'False'} : "MHMOmniWeiche";
      Schleuse_3487 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus";
      Übergang_3446 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse_AMR";
      Übergang_3485 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse_AMR";
      Übergang_3490 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse_AMR";
      Übergang_3240 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse_AMR";
      Übergang_3480 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse_AMR";
      Aufzug_freiräumen { S7_SetPoint := 'True'} : Bool;
      Tastensperre : Bool;
      Alle_ABPs_anfahren : Bool;
      Weiche_3482_frei { S7_SetPoint := 'True'} : Bool;   // Weiche noch nicht benutzt
   END_VAR

   VAR_TEMP 
      ErrQuit : Bool;
      ErrAnz : Bool;
      Stau_raus : Bool;
      Start_ok : Bool;
      B_aktiv : Bool;
      B_AusSchleuse : Bool;
      Antrieb_aktiv : Bool;
      Antrieb_start : Bool;
      Antrieb_stop : Bool;
      Fahren_Ok : Bool;
   END_VAR


BEGIN
NETWORK
TITLE = Systemzeug

//Zuführ-Bereich:
      U "DAMR_Bereich".A01_UH06.AnlageEin;
      = #Schleuse_3456.Dyn.Sk.Auto_akt;
      = #Schleuse_3481.Dyn.Sk.Auto_akt;
      = #Weiche_3482.Dyn.Status.Auto_akt;
      = #Schleuse_3487.Dyn.Sk.Auto_akt;

      UN "DAMR_Bereich".A01_UH06.BereichErr;
      = #Schleuse_3456.Dyn.Sk.Bereich_ok;
      = #Schleuse_3481.Dyn.Sk.Bereich_ok;
      = #Weiche_3482.Dyn.Status.Bereich_ok;
      = #Schleuse_3487.Dyn.Sk.Bereich_ok;

NETWORK
TITLE = Weiche 3482 noch nicht benutzt
      UN #Schleuse_3481.Status2."Weichen-Schritt";//Beide Quellen
      UN "DPS1_OmniFahren".Schleuse_vor_Einfahrt.Status2."Weichen-Schritt";
      = #Weiche_3482_frei;

NETWORK
TITLE = Störungen quittieren
      U "DAMR_Bereich".A01_UH06.StOk_aktiv;
      = #ErrQuit;

NETWORK
TITLE = Aufzugs-Bereich freiräumen
      U "SF3462";
      O "SF3463";
      FP #Tastensperre;
      SPBN NixAufzug;

      UN #Aufzug_freiräumen;
      = #Aufzug_freiräumen;

NixAufzug:      NOP 0;

      U #Aufzug_freiräumen;
      = "PF3462";
      = "PF3463";
      = "6_HMI_Err_UH06_AMR".System.Aufzug_Vorrang;

NETWORK
TITLE = Schleuse vor Aufzug
      U "BG3566";
      O "BG3567";
      = #B_aktiv;

      U "DArbeitsplätze_Sensoren".Stau_BG3457.Stat.B_Akt;
      O "DArbeitsplätze_Sensoren".Stau_BG3447.Stat.B_Akt;
      O #Übergang_3446.Am_Übergang.Stat.B_Akt;
      = #Stau_raus;

      UN #Aufzug_freiräumen;
      = #Fahren_Ok;

      CALL #Schleuse_3456
      (  Schleusen_Nr                := 3456 , 
         ErrQuit                     := #ErrQuit , 
         B_VorSchleuse               := #B_aktiv , 
         B_InSchleuse                := "BG3456" , 
         B_Zähl                      := "BG3457" , 
         B_Stau_raus                 := #Stau_raus , 
         Start_Ok                    := #Fahren_Ok , 
         Antrieb_Schleuse_aktiv      := "MA0061" , 
         Antrieb_plus_aktiv          := "MA0061" , 
         Schleuse_geöffnet           := "MB3456" , 
         Y_Schleuse_Auf              := "DArbeitsplätze_Zylinder".Schleuse_3456.Stat.Ast , 
         Error                       := %DB608.DBW342 , 
         Antrieb_Schleuse_vor        := "DArbeitsplätze_Antriebe".MA0061.Stat.A_vor , 
         Antrieb_Schleuse_start      := "DArbeitsplätze_Antriebe".MA0061.Stat.A_start , 
         Antrieb_Schleuse_stop       := "DArbeitsplätze_Antriebe".MA0061.Stat.Stop_vor , 
         Antrieb_Schleuse_PS         := "DArbeitsplätze_Antriebe".MA0061.Stat.A_PS , 
         hStOk                       := #ErrAnz
      );

      U "DArbeitsplätze_Sensoren".Stau_BG3457.Stat.B_Akt;
      UN "DArbeitsplätze_Sensoren".Stau_BG3447.Stat.B_Akt;
      S "DArbeitsplätze_Antriebe".MA0061.Stat.A_vor;
      S "DArbeitsplätze_Antriebe".MA0062.Stat.A_vor;

      U "DArbeitsplätze_Sensoren".Stau_BG3457.Stat.B_Akt;
      O "DArbeitsplätze_Sensoren".Stau_BG3457.Stat.B_Akt;
      S "DArbeitsplätze_Antriebe".MA0061.Stat.A_start;
      S "DArbeitsplätze_Antriebe".MA0062.Stat.A_start;

NETWORK
TITLE = MA0061/0062 / Übergang 3446
      CALL #Übergang_3446
      (  ErrQuit                     := #ErrQuit , 
         B_Anfang                    := "BG3457" , 
         B_Am_Übergang               := "BG3446" , 
         B_Stau_Antrieb_plus         := "BG3447" , 
         Antrieb_aktiv               := "MA0061" , 
         Antrieb_plus_aktiv          := "MA0062" , 
         Antrieb_vor                 := "DArbeitsplätze_Antriebe".MA0061.Stat.A_vor , 
         Antrieb_start               := "DArbeitsplätze_Antriebe".MA0061.Stat.A_start , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0062.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0062.Stat.A_start
      );

NETWORK
TITLE = MA0062/0063 / Übergang 3480
      U "BG3481";
      UN "MB3481";
      = #B_aktiv;

      CALL #Übergang_3480
      (  ErrQuit                     := #ErrQuit , 
         B_Anfang                    := "BG3447" , 
         B_Am_Übergang               := "BG3480" , 
         B_Stau_Antrieb_plus         := #B_aktiv , 
         Antrieb_aktiv               := "MA0062" , 
         Antrieb_plus_aktiv          := "MA0063" , 
         Antrieb_vor                 := "DArbeitsplätze_Antriebe".MA0062.Stat.A_vor , 
         Antrieb_start               := "DArbeitsplätze_Antriebe".MA0062.Stat.A_start , 
         Antrieb_stop                := "DArbeitsplätze_Antriebe".MA0062.Stat.A_PS , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0063.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0063.Stat.A_start
      );

NETWORK
TITLE = Schleuse vor 180 Grad-Bypass
      CALL #Schleuse_3481
      (  Schleusen_Nr                := 3481 , 
         ErrQuit                     := #ErrQuit , 
         B_VorSchleuse               := "BG3447" , 
         B_InSchleuse                := "BG3481" , 
         B_AusSchleuse               :=  , //von Weiche
         B_Stau_raus                 :=  , //von Weiche
         Start_Ok                    := 1 , 
         Antrieb_Schleuse_aktiv      := "MA0062" , 
         Antrieb_plus_aktiv          := "MA0063" , 
         Schleuse_geöffnet           := "MB3481" , 
         Y_Schleuse_Auf              := "DArbeitsplätze_Zylinder".Schleuse_3481.Stat.Ast , 
         Error                       := %DB608.DBW344 , 
         Antrieb_Schleuse_vor        := "DArbeitsplätze_Antriebe".MA0062.Stat.A_vor , 
         Antrieb_Schleuse_start      := "DArbeitsplätze_Antriebe".MA0062.Stat.A_start , 
         Antrieb_Schleuse_stop       := "DArbeitsplätze_Antriebe".MA0062.Stat.Stop_vor , 
         Antrieb_Schleuse_PS         := "DArbeitsplätze_Antriebe".MA0062.Stat.A_PS , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0063.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0063.Stat.A_start , 
         hStOk                       := #ErrAnz
      );

//ByPass-Weiche wieder freigeben:
      U #Schleuse_3481.Dyn.Status.Trolley_draussen;
      R "DPS2_OmniFahren".Vorfahrt_Ausfahrweiche."Weiche_von_ByPass-Sep_belegt";

NETWORK
TITLE = Weiche 180 Grad-Bypass
      CALL #Weiche_3482
      (  Weichen_Nr                  := 3482 , 
         ErrQuit                     := #ErrQuit , 
         Fahren_Ok                   := 1 , 
         B_Ziel_gerade               := "BG3483" , 
         B_Ziel_abzweig              := "BG3383" , 
         Antrieb_Weiche_aktiv        := "MA0063" , 
         Antrieb_Gerade_aktiv        := "MA0063" , 
         Antrieb_Abzweig_aktiv       := "MA0062" , 
         Weiche_ist_AST              := "MB3482" , 
         Y_Weiche_abzweig            := "DArbeitsplätze_Zylinder".Weiche_3482.Stat.Ast , 
         Error                       := %DB608.DBW346 , 
         Antrieb_Weiche_vor          := "DArbeitsplätze_Antriebe".MA0063.Stat.A_vor , 
         Antrieb_Weiche_stop         := "DArbeitsplätze_Antriebe".MA0063.Stat.Stop_vor , 
         Antrieb_Weiche_gerade_vor   :=  , //s.o.
         Antrieb_Weiche_gerade_stop  :=  , //s.o.
         Antrieb_Weiche_abzweig_vor  := "DArbeitsplätze_Antriebe".MA0062.Stat.A_vor , 
         Antrieb_Weiche_abzweig_stop := "DArbeitsplätze_Antriebe".MA0062.Stat.Stop_vor , 
         hStOk                       := #ErrAnz
      );

NETWORK
TITLE = MA0063 / Übergang 3485
      CALL #Übergang_3485
      (  ErrQuit                     := #ErrQuit , 
         B_Anfang                    := "BG3483" , 
         B_Am_Übergang               := "BG3485" , 
         B_Stau_Antrieb_plus         := "BG3484" , 
         Antrieb_aktiv               := "MA0063" , 
         Antrieb_plus_aktiv          := "MA0064" , 
         Antrieb_vor                 := "DArbeitsplätze_Antriebe".MA0063.Stat.A_vor , 
         Antrieb_start               := "DArbeitsplätze_Antriebe".MA0063.Stat.A_start , 
         Antrieb_stop                := "DArbeitsplätze_Antriebe".MA0063.Stat.A_PS , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0064.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0064.Stat.A_start
      );

NETWORK
TITLE = Schleuse vor 180 Grad-Turn
      CALL #Schleuse_3487
      (  Schleusen_Nr                := 3487 , 
         ErrQuit                     := #ErrQuit , 
         B_VorSchleuse               := "BG3484" , 
         B_InSchleuse                := "BG3487" , 
         B_Zähl                      := "BG3490" , 
         B_Stau_raus                 := "DArbeitsplätze_Sensoren".Stau_BG3486.Stat.B_Akt , 
         Start_Ok                    := 1 , 
         Antrieb_Schleuse_aktiv      := "MA0064" , 
         Antrieb_plus_aktiv          := "MA0064" , 
         Schleuse_geöffnet           := "MB3487" , 
         Y_Schleuse_Auf              := "DArbeitsplätze_Zylinder".Schleuse_3487.Stat.Ast , 
         Error                       := %DB608.DBW348 , 
         Antrieb_Schleuse_vor        := "DArbeitsplätze_Antriebe".MA0064.Stat.A_vor , 
         Antrieb_Schleuse_start      := "DArbeitsplätze_Antriebe".MA0064.Stat.A_start , 
         Antrieb_Schleuse_stop       := "DArbeitsplätze_Antriebe".MA0064.Stat.Stop_vor , 
         Antrieb_Schleuse_PS         := "DArbeitsplätze_Antriebe".MA0064.Stat.A_PS , 
         hStOk                       := #ErrAnz
      );

NETWORK
TITLE = MA0064 / Übergang 3490
      CALL #Übergang_3490
      (  ErrQuit                     := #ErrQuit , 
         B_Anfang                    := "MB3487" , 
         B_Am_Übergang               := "BG3490" , 
         B_Stau_Antrieb_plus         := "BG3486" , 
         Antrieb_aktiv               := "MA0064" , 
         Antrieb_plus_aktiv          := "MA0065" , 
         Antrieb_vor                 := "DArbeitsplätze_Antriebe".MA0064.Stat.A_vor , 
         Antrieb_start               := "DArbeitsplätze_Antriebe".MA0064.Stat.A_start , 
         Antrieb_stop                := "DArbeitsplätze_Antriebe".MA0064.Stat.A_PS , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0065.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0065.Stat.A_start
      );

NETWORK
TITLE = MA0065 / Übergang 3240
      CALL #Übergang_3240
      (  ErrQuit                     := #ErrQuit , 
         B_Anfang                    := "BG3486" , 
         B_Am_Übergang               := "BG3240" , 
         B_Stau_Antrieb_plus         := "BG3244" , 
         Antrieb_aktiv               := "MA0065" , 
         Antrieb_plus_aktiv          := "MA0082" , 
         Antrieb_vor                 := "DArbeitsplätze_Antriebe".MA0065.Stat.A_vor , 
         Antrieb_start               := "DArbeitsplätze_Antriebe".MA0065.Stat.A_start , 
         Antrieb_stop                := "DArbeitsplätze_Antriebe".MA0065.Stat.A_PS , 
         Antrieb_plus_vor            := "DArbeitsplätze_Antriebe".MA0082.Stat.A_vor , 
         Antrieb_plus_start          := "DArbeitsplätze_Antriebe".MA0082.Stat.A_start
      );

NETWORK
TITLE = Störungen anzeigen
      U #ErrAnz;
      R #ErrAnz;
      S "DAMR_Bereich".A01_UH06.StOk_blinken;

NETWORK
TITLE = Alle Arbeitsplätze anfahren
      CLR;//Für inbetriebnahme
      S #Alle_ABPs_anfahren;

NETWORK
TITLE = Simulation an ABP zum Weiterfahren
      UN "SGes".Ohne_PC_Fahren;
      SPB No;

//T21-28
      U "SF0057";
      L s5t#3s;
      SE "T28";
      U "T28";
      S "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0055";
      L s5t#3s;
      SE "T27";
      U "T27";
      S "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0053";
      L s5t#3s;
      SE "T26";
      U "T26";
      S "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0051";
      L s5t#3s;
      SE "T25";
      U "T25";
      S "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0047";
      L s5t#3s;
      SE "T24";
      U "T24";
      S "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0045";
      L s5t#3s;
      SE "T23";
      U "T23";
      S "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0043";
      L s5t#3s;
      SE "T22";
      U "T22";
      S "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

      U "SF0041";
      L s5t#3s;
      SE "T21";
      U "T21";
      S "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_1_freigegeben";
      S "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_2_freigegeben";
      S "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.SS."PC>Trolley_an_Platz_3_freigegeben";

No:      NOP 0;

NETWORK
TITLE = Ende
      BE;

END_FUNCTION_BLOCK

