Files

198 lines
16 KiB
Plaintext

FUNCTION_BLOCK "PS5_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
DMPS1_OmniFahren : Word; // war "DMPS1_OmniFahren"
DMPS2_OmniFahren : Word; // war "DMPS2_OmniFahren"
DMPS3_OmniFahren : Word; // war "DMPS3_OmniFahren"
DPS1_OmniFahren : Word; // war "DPS1_OmniFahren"
DPS2_OmniFahren : Word; // war "DPS2_OmniFahren"
DPS3_OmniFahren : Word; // war "DPS3_OmniFahren"
DPS4_OmniFahren : Word; // war "DPS4_OmniFahren"
END_VAR
VAR_OUTPUT
PF0040 : Word; // war "PF0040"
PF3240 : Word; // war "PF3240"
END_VAR
VAR_IN_OUT
BG3241 : Word; // war "BG3241"
BG3242 : Word; // war "BG3242"
BG3243 : Word; // war "BG3243"
BG3244 : Word; // war "BG3244"
BG3245 : Word; // war "BG3245"
BG3251 : Word; // war "BG3251"
BG3255 : Word; // war "BG3255"
BG3260 : Word; // war "BG3260"
BG3262 : Word; // war "BG3262"
BG3263 : Word; // war "BG3263"
BG3264 : Word; // war "BG3264"
BG3265 : Word; // war "BG3265"
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"
MA0066 : Bool; // war "MA0066"
MA0067 : Bool; // war "MA0067"
MA0070 : Bool; // war "MA0070"
MA0071 : Bool; // war "MA0071"
MA0082 : Bool; // war "MA0082"
MB3241 : Byte; // war "MB3241"
MB3242 : Byte; // war "MB3242"
MB3243 : Byte; // war "MB3243"
MB3245 : Byte; // war "MB3245"
MB3251 : Byte; // war "MB3251"
MB3255 : Byte; // war "MB3255"
MB3262 : Byte; // war "MB3262"
MB3265 : Byte; // war "MB3265"
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";
Schleuse_vor_Ausfahrt { S7_SetPoint := 'False'} : "MHMOmniSchleuse";
Prio_Ausfahrt { S7_SetPoint := 'False'} : "MAusfahrPrio_ABP";
Vorfahrt_Ausfahrweiche : Struct
"Weiche_von_Haupt-Sep_belegt" : Bool;
"Weiche_von_Ausfahr-Sep_belegt" : Bool;
Haupstrecke_gefahren : Int;
AMR_gefahren : Int;
END_STRUCT;
Aktivierte_ABPs : Int;
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_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);
#Schleuse_vor_Ausfahrt.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr);
END_REGION
REGION Störungen quittieren
#ErrQuit := #DAMR_Bereich.A01_UZ0615.StOk_aktiv;
IF #DAMR_Bereich.A01_UZ0615.StOk_aktiv THEN
#DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_start := TRUE;
#DArbeitspl_tze_Antriebe."MA _Nachstau1_PS5".Stat.A_start := TRUE;
#DArbeitspl_tze_Antriebe."MA _Nachstau2_PS5".Stat.A_start := TRUE;
#DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.A_start := TRUE;
#DArbeitspl_tze_Antriebe.MA0082.Stat.A_start := TRUE;
END_IF;
END_REGION
REGION Schleuse vor Einfahrt
#Schleuse_vor_Einfahrt(Schleusen_Nr := 3241, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3244, B_InSchleuse := #BG3241, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0082, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3241, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_PS5.Stat.Ast, Error := %DB608.DBW216, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0082.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_PS, hStOk := #ErrAnz); // Über Weiche_Einfahrt | Über Weiche_Einfahrt | Über Weiche_Einfahrt
END_REGION
REGION Weiche Einfahrt
#Weiche_Einfahrt(Weichen_Nr := 3242, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_PS5.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_PS5.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0082, Antrieb_Gerade_aktiv := #MA0082, Antrieb_Abzweig_aktiv := #MA0066, Weiche_ist_AST := #MB3242, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_PS5.Stat.Ast, Error := %DB608.DBW218, Antrieb_Weiche_vor := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor, Antrieb_Weiche_stop := #DArbeitspl_tze_Antriebe.MA0082.Stat.Stop_vor, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o.
END_REGION
REGION Schrittketten Arbeitsplätze ver-/entsorgen
#Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#A500, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3243, B_an_Platz_1 := #BG3245, B_an_Platz_2 := #BG3251, B_an_Platz_3 := #BG3255, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_PS5.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3262, Y_Vorstau := #MB3243, Y_Platz_1 := #MB3245, Y_Platz_2 := #MB3251, Y_Platz_3 := #MB3255, Antrieb_Vorstau_aktiv := #MA0066, Antrieb_Nachstau_1_aktiv := #MA0067, Antrieb_Nachstau_2_aktiv := #MA0070, Antrieb_Nachstau_3_aktiv := #MA0071, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_PS5.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_PS5.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_PS5.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_PS5.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS5".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS5".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.DBW108, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes
#PF0040 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert;
#PF3240 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige;
END_REGION
REGION Schleuse Vorstau
#Schleuse_Vorstau(Schleusen_Nr := 3243, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3242, B_InSchleuse := #BG3243, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0066, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3243, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_PS5.Stat.Ast, Error := %DB608.DBW220, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS5".Stat.A_PS, hStOk := #ErrAnz);
END_REGION
REGION Schleuse Platz 1
#Schleuse_Platz_1(Schleusen_Nr := 3245, ErrQuit := #ErrQuit, B_InSchleuse := #BG3245, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0067, Schleuse_geöffnet := #MB3245, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_PS5.Stat.Ast, Error := %DB608.DBW222, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS5".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 := 3251, ErrQuit := #ErrQuit, B_InSchleuse := #BG3251, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0070, Schleuse_geöffnet := #MB3251, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_PS5.Stat.Ast, Error := %DB608.DBW224, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS5".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 := 3255, ErrQuit := #ErrQuit, B_InSchleuse := #BG3255, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0071, Schleuse_geöffnet := #MB3255, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_PS5.Stat.Ast, Error := %DB608.DBW226, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".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
#Schleuse_Ausfahrt(Schleusen_Nr := 3262, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3260, B_InSchleuse := #BG3262, B_AusSchleuse := #BG3263, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS5.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0071, Antrieb_plus_aktiv := #MA0082, Schleuse_geöffnet := #MB3262, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_PS5.Stat.Ast, Error := %DB608.DBW228, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS5".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_start, hStOk := #ErrAnz);
IF #MB3262 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS5.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 Schleuse Hauptstrecke vor Ausfahrt
#Schleuse_vor_Ausfahrt(Schleusen_Nr := 3265, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3264, B_InSchleuse := #BG3265, B_AusSchleuse := #BG3263, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS5.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0082, Antrieb_plus_aktiv := #MA0082, Schleuse_geöffnet := #MB3265, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_PS5.Stat.Ast, Error := %DB608.DBW230, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0082.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0082.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // s.o. | s.o.
IF #MB3265 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS5.Stat.Ast := FALSE; END_IF;
IF #Schleuse_vor_Ausfahrt.Dyn.Status.Trolley_draussen THEN #Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := FALSE; END_IF;
END_REGION
REGION Aktive Arbeitsplätze ermitteln (gilt für alle Prios)
#Aktivierte_ABPs := 0;
IF #Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DPS4_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DMPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DMPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
IF #DMPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.Status.Beladung_erfolgt THEN #Aktivierte_ABPs := #Aktivierte_ABPs + 1; END_IF;
END_REGION
REGION Ausfahr-Priorität
#Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3265, Haupt_Schleuse_geöffnet := #MB3265, BG_ABP_Schleuse := #BG3262, ABP_Schleuse_geöffnet := #MB3262, Aktive_ABP := #Aktivierte_ABPs);
END_REGION
REGION Störungen anzeigen
IF #ErrAnz THEN
#ErrAnz := FALSE;
#DAMR_Bereich.A01_UZ0615.StOk_blinken := TRUE;
END_IF;
END_REGION
REGION Ende
RETURN;
END_REGION
END_FUNCTION_BLOCK