FUNCTION_BLOCK "PS2_OmniFahren" { S7_Optimized_Access := 'FALSE' } // Mechanische AWL->SCL-Konvertierung (awl2scl.py). Kontrollfluss per GOTO, // wo im Original mit Sprungmarken gearbeitet wurde. Vor Uebernahme in TIA // Portal pruefen/kompilieren (siehe SCL-Export/README.md). VAR_INPUT BG3361 : Word; // war "BG3361" BG3362 : Word; // war "BG3362" DZuf_hrung_OmniFahren : Word; // war "DZuführung_OmniFahren" END_VAR VAR_OUTPUT PF0046 : Word; // war "PF0046" PF3324 : Word; // war "PF3324" END_VAR VAR_IN_OUT BG3322 : Word; // war "BG3322" BG3331 : Word; // war "BG3331" BG3332 : Word; // war "BG3332" BG3333 : Word; // war "BG3333" BG3335 : Word; // war "BG3335" BG3341 : Word; // war "BG3341" BG3345 : Word; // war "BG3345" BG3350 : Word; // war "BG3350" BG3351 : Word; // war "BG3351" BG3353 : Word; // war "BG3353" DAMR_Bereich : Word; // war "DAMR_Bereich" DArbeitspl_tze_Antriebe : Word; // war "DArbeitsplätze_Antriebe" DArbeitspl_tze_Sensoren : Word; // war "DArbeitsplätze_Sensoren" DArbeitspl_tze_Zylinder : Word; // war "DArbeitsplätze_Zylinder" DPS5_OmniFahren : Word; // war "DPS5_OmniFahren" MA0083 : Bool; // war "MA0083" MA0084 : Bool; // war "MA0084" MA0085 : Bool; // war "MA0085" MA0086 : Bool; // war "MA0086" MA0087 : Bool; // war "MA0087" MB3331 : Byte; // war "MB3331" MB3332 : Byte; // war "MB3332" MB3333 : Byte; // war "MB3333" MB3335 : Byte; // war "MB3335" MB3341 : Byte; // war "MB3341" MB3345 : Byte; // war "MB3345" MB3351 : Byte; // war "MB3351" MB3353 : Byte; // war "MB3353" END_VAR VAR Schleuse_vor_Einfahrt { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; Weiche_Einfahrt { S7_SetPoint := 'False'} : "MHMOmniWeiche"; Schleuse_Vorstau { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; Sks_Arbeitsplatz { S7_SetPoint := 'False'} : "MHM_Arbeitsplatz"; Schleuse_Platz_1 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; Schleuse_Platz_2 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; Schleuse_Platz_3 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; Schleuse_Ausfahrt : "MHMOmniSchleuse"; Prio_Ausfahrt { S7_SetPoint := 'False'} : "MAusfahrPrio_ABP"; Vorfahrt_Ausfahrweiche : Struct "Weiche_von_Haupt-Sep_belegt" : Bool; "WeicheByPass_von_Haupt-Sep_belegt" : Bool; "Weiche_von_Ausfahr-Sep_belegt" : Bool; "Weiche_von_ByPass-Sep_belegt" : Bool; Haupstrecke_gefahren : Int; AMR_gefahren : Int; END_STRUCT; 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 REGION Systemzeug #Schleuse_vor_Einfahrt.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Weiche_Einfahrt.Dyn.Status.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Sks_Arbeitsplatz.Dyn.Sk_zum_Beladeplatz.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_Vorstau.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_Platz_1.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_Platz_2.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_Platz_3.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Sks_Arbeitsplatz.Dyn.Sk_aus_Beladeplatz.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_Ausfahrt.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; #Schleuse_vor_Einfahrt.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Weiche_Einfahrt.Dyn.Status.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Sks_Arbeitsplatz.Dyn.Sk_zum_Beladeplatz.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Schleuse_Vorstau.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Schleuse_Platz_1.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Schleuse_Platz_2.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Schleuse_Platz_3.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Sks_Arbeitsplatz.Dyn.Sk_aus_Beladeplatz.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); #Schleuse_Ausfahrt.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); END_REGION REGION Störungen quittieren #ErrQuit := #DAMR_Bereich.A01_UZ0612.StOk_aktiv; IF #DAMR_Bereich.A01_UZ0612.StOk_aktiv THEN #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_start := TRUE; #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS2".Stat.A_start := TRUE; #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS2".Stat.A_start := TRUE; #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_start := TRUE; #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start := TRUE; END_IF; END_REGION REGION Schleuse vor Einfahrt #Schleuse_vor_Einfahrt(Schleusen_Nr := 3331, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3322, B_InSchleuse := #BG3331, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0087, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3331, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_PS2.Stat.Ast, Error := %DB608.DBW262, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0087.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_PS, hStOk := #ErrAnz); // Über Weiche_Einfahrt | Über Weiche_Einfahrt | Über Weiche_Einfahrt END_REGION REGION Weiche Einfahrt #Weiche_Einfahrt(Weichen_Nr := 3332, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_PS2.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_PS2.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0087, Antrieb_Gerade_aktiv := #MA0087, Antrieb_Abzweig_aktiv := #MA0083, Weiche_ist_AST := #MB3332, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_PS2.Stat.Ast, Error := %DB608.DBW264, Antrieb_Weiche_vor := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor, Antrieb_Weiche_stop := #DArbeitspl_tze_Antriebe.MA0087.Stat.Stop_vor, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. END_REGION REGION Schrittketten Arbeitsplätze ver-/entsorgen #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#A200, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3333, B_an_Platz_1 := #BG3335, B_an_Platz_2 := #BG3341, B_an_Platz_3 := #BG3345, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_PS2.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3351, Y_Vorstau := #MB3333, Y_Platz_1 := #MB3335, Y_Platz_2 := #MB3341, Y_Platz_3 := #MB3345, Antrieb_Vorstau_aktiv := #MA0083, Antrieb_Nachstau_1_aktiv := #MA0084, Antrieb_Nachstau_2_aktiv := #MA0085, Antrieb_Nachstau_3_aktiv := #MA0086, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_PS2.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_PS2.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_PS2.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_PS2.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS2".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS2".Stat.A_vor, Trolley_hat_ABS_erreicht := #Schleuse_Vorstau.B_AusSchleuse, Reset_Vorstau_Schleuse := #Schleuse_Vorstau.Dyn.Sk.Reset, Reset_Platz_1_Stopper := #Schleuse_Platz_1.Dyn.Sk.Reset, Reset_Platz_2_Stopper := #Schleuse_Platz_2.Dyn.Sk.Reset, Reset_Platz_3_Stopper := #Schleuse_Platz_3.Dyn.Sk.Reset, Error := %DB608.DBW102, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes #PF0046 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; #PF3324 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; END_REGION REGION Schleuse Vorstau #Schleuse_Vorstau(Schleusen_Nr := 3333, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3332, B_InSchleuse := #BG3333, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0083, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3333, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_PS2.Stat.Ast, Error := %DB608.DBW266, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS2".Stat.A_PS, hStOk := #ErrAnz); END_REGION REGION Schleuse Platz 1 #Schleuse_Platz_1(Schleusen_Nr := 3335, ErrQuit := #ErrQuit, B_InSchleuse := #BG3335, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0084, Schleuse_geöffnet := #MB3335, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_PS2.Stat.Ast, Error := %DB608.DBW268, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS2".Stat.A_vor, hStOk := #ErrAnz); IF #Schleuse_Platz_1.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_1.Trolley_hat_Arbeitsplatz_verlassen := TRUE; END_IF; IF #Schleuse_Platz_1.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_1.TrolleyID_ausgefahren := #Schleuse_Platz_1.Dyn.TrolleyID_ausgefahren; END_IF; END_REGION REGION Schleuse Platz 2 #Schleuse_Platz_2(Schleusen_Nr := 3341, ErrQuit := #ErrQuit, B_InSchleuse := #BG3341, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0085, Schleuse_geöffnet := #MB3341, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_PS2.Stat.Ast, Error := %DB608.DBW270, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS2".Stat.A_vor, hStOk := #ErrAnz); IF #Schleuse_Platz_2.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_2.Trolley_hat_Arbeitsplatz_verlassen := TRUE; END_IF; IF #Schleuse_Platz_2.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_2.TrolleyID_ausgefahren := #Schleuse_Platz_2.Dyn.TrolleyID_ausgefahren; END_IF; END_REGION REGION Schleuse Platz 3 #Schleuse_Platz_3(Schleusen_Nr := 3345, ErrQuit := #ErrQuit, B_InSchleuse := #BG3345, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0086, Schleuse_geöffnet := #MB3345, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_PS2.Stat.Ast, Error := %DB608.DBW272, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_vor, hStOk := #ErrAnz); IF #Schleuse_Platz_3.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_3.Trolley_hat_Arbeitsplatz_verlassen := TRUE; END_IF; IF #Schleuse_Platz_3.Dyn.Status.Trolley_draussen THEN #Sks_Arbeitsplatz.Dyn.Platz_3.TrolleyID_ausgefahren := #Schleuse_Platz_3.Dyn.TrolleyID_ausgefahren; END_IF; END_REGION REGION Schleuse Ausfahrt #B_AusSchleuse := (#BG3362 AND #DZuf_hrung_OmniFahren.Alle_ABPs_anfahren) OR (#BG3361 AND NOT (#DZuf_hrung_OmniFahren.Alle_ABPs_anfahren)); #Schleuse_Ausfahrt(Schleusen_Nr := 3351, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3350, B_InSchleuse := #BG3351, B_AusSchleuse := #B_AusSchleuse, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS2.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0086, Antrieb_plus_aktiv := #MA0087, Schleuse_geöffnet := #MB3351, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_PS2.Stat.Ast, Error := %DB608.DBW274, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS2".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start, hStOk := #ErrAnz); IF #MB3351 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS2.Stat.Ast := TRUE; END_IF; IF #Schleuse_Ausfahrt.Dyn.Status.Trolley_draussen THEN #Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := FALSE; END_IF; END_REGION REGION Ausfahr-Priorität #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3353, Haupt_Schleuse_geöffnet := #MB3353, BG_ABP_Schleuse := #BG3351, ABP_Schleuse_geöffnet := #MB3351, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); END_REGION REGION Störungen anzeigen IF #ErrAnz THEN #ErrAnz := FALSE; #DAMR_Bereich.A01_UZ0612.StOk_blinken := TRUE; END_IF; END_REGION REGION Ende RETURN; END_REGION END_FUNCTION_BLOCK