From f320551b5251bd70a4a7d82d3a01f7638adfea56 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Wed, 8 Jul 2026 16:23:49 +0200 Subject: [PATCH] alle automatisch konvertierten .scl eingecheckt --- .../=A01+UH06-KF00/AMRZeiger_ermitteln.scl | 45 +++ .../=A01+UH06-KF00/AMR_TrolleyVersorgung.scl | 108 ++++++ .../=A01+UH06-KF00/Abführung_OmniFahren.scl | 81 ++++ .../=A01+UH06-KF00/Daten_Host_senden.scl | 30 ++ .../Daten_von_Host_empfangen.scl | 30 ++ SCL-Export/=A01+UH06-KF00/HWtoAMR_Bereich.scl | 19 + .../=A01+UH06-KF00/HWtoAMR_OmniFahren.scl | 214 +++++++++++ SCL-Export/=A01+UH06-KF00/HWtoOB_Bereich.scl | 19 + .../=A01+UH06-KF00/HWtoOB_OmniFahren.scl | 192 ++++++++++ .../LeerTrolley to AMR-Platz ermitteln.scl | 60 +++ .../MHMÜbergang_ohne_Schleuse_AMR.scl | 79 ++++ SCL-Export/=A01+UH06-KF00/MPS1_OmniFahren.scl | 175 +++++++++ SCL-Export/=A01+UH06-KF00/MPS2_OmniFahren.scl | 177 +++++++++ SCL-Export/=A01+UH06-KF00/MPS3_OmniFahren.scl | 175 +++++++++ SCL-Export/=A01+UH06-KF00/PS1_OmniFahren.scl | 241 ++++++++++++ SCL-Export/=A01+UH06-KF00/PS2_OmniFahren.scl | 173 +++++++++ SCL-Export/=A01+UH06-KF00/PS3_OmniFahren.scl | 204 ++++++++++ SCL-Export/=A01+UH06-KF00/PS4_OmniFahren.scl | 171 +++++++++ SCL-Export/=A01+UH06-KF00/PS5_OmniFahren.scl | 197 ++++++++++ .../=A01+UH06-KF00/Trolley_DL_Check_ID.scl | 47 +++ .../=A01+UH06-KF00/Trolleydaten_löschen.scl | 36 ++ .../Trolleydaten_neu_anlegen.scl | 51 +++ .../=A01+UH06-KF00/Trolleydaten_ändern.scl | 43 +++ .../=A01+UH06-KF00/Wandel_FC_für_DB1000.scl | 24 ++ .../=A01+UH07-KF00/Daten_Host_senden.scl | 39 ++ .../Daten_von_Host_empfangen.scl | 35 ++ SCL-Export/=A01+UH07-KF00/EP_Bereich.scl | 20 + SCL-Export/=A01+UH07-KF00/EP_OmniFahren.scl | 75 ++++ SCL-Export/=A01+UH07-KF00/EP_Ziel_FC.scl | 108 ++++++ SCL-Export/=A01+UH07-KF00/EPtoLP_Bereich.scl | 19 + .../=A01+UH07-KF00/EPtoLP_OmniFahren.scl | 299 +++++++++++++++ SCL-Export/=A01+UH07-KF00/HWtoOB_Bereich.scl | 19 + .../=A01+UH07-KF00/HWtoVP_OmniFahren.scl | 352 ++++++++++++++++++ SCL-Export/=A01+UH07-KF00/LP_Bereich.scl | 24 ++ SCL-Export/=A01+UH07-KF00/LP_OmniFahren.scl | 70 ++++ SCL-Export/=A01+UH07-KF00/LPtoHW_Bereich.scl | 19 + .../=A01+UH07-KF00/LPtoHW_OmniFahren.scl | 332 +++++++++++++++++ .../Leerpuffer to Raus-Lager ermitteln.scl | 45 +++ .../Leerpuffer to Rein-Lager ermitteln.scl | 48 +++ .../Leerpuffer_Raus-Lager ermitteln.scl | 45 +++ .../Leerpuffer_Rein-Lager ermitteln.scl | 48 +++ .../MHMÜbergang_ohne_Schleuse.scl | 76 ++++ .../Port1_Telegramme_auswerten.scl | 24 +- .../Port2_Telegramme_auswerten.scl | 28 +- .../=A01+UH07-KF00/PufferZeiger_ermitteln.scl | 46 +++ .../Reservierung_in_Puffer_eintragen.scl | 77 ++++ .../SchleusenZeiger_ermitteln.scl | 42 +++ .../ShopGroup to Raus-Lager ermitteln.scl | 49 +++ .../ShopGroup_Raus-Lager ermitteln.scl | 49 +++ .../ShopGroup_Rein-Lager ermitteln.scl | 52 +++ .../=A01+UH07-KF00/Trolley_DL_Check_ID.scl | 50 +++ .../=A01+UH07-KF00/Trolley_DL_Neue_Pos.scl | 64 ++++ .../=A01+UH07-KF00/Trolleydaten_löschen.scl | 36 ++ .../Trolleydaten_neu_anlegen.scl | 51 +++ .../=A01+UH07-KF00/Trolleydaten_ändern.scl | 43 +++ SCL-Export/=A01+UH07-KF00/VP_Bereich.scl | 24 ++ SCL-Export/=A01+UH07-KF00/VPtoEP_Bereich.scl | 19 + .../=A01+UH07-KF00/VPtoEP_OmniFahren.scl | 252 +++++++++++++ .../=A01+UH07-KF00/Wandel_FC_für_DB1000.scl | 24 ++ 59 files changed, 5172 insertions(+), 22 deletions(-) create mode 100644 SCL-Export/=A01+UH06-KF00/AMRZeiger_ermitteln.scl create mode 100644 SCL-Export/=A01+UH06-KF00/AMR_TrolleyVersorgung.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Abführung_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Daten_Host_senden.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Daten_von_Host_empfangen.scl create mode 100644 SCL-Export/=A01+UH06-KF00/HWtoAMR_Bereich.scl create mode 100644 SCL-Export/=A01+UH06-KF00/HWtoAMR_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/HWtoOB_Bereich.scl create mode 100644 SCL-Export/=A01+UH06-KF00/HWtoOB_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/LeerTrolley to AMR-Platz ermitteln.scl create mode 100644 SCL-Export/=A01+UH06-KF00/MHMÜbergang_ohne_Schleuse_AMR.scl create mode 100644 SCL-Export/=A01+UH06-KF00/MPS1_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/MPS2_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/MPS3_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/PS1_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/PS2_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/PS3_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/PS4_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/PS5_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Trolley_DL_Check_ID.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Trolleydaten_löschen.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Trolleydaten_neu_anlegen.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Trolleydaten_ändern.scl create mode 100644 SCL-Export/=A01+UH06-KF00/Wandel_FC_für_DB1000.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Daten_Host_senden.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Daten_von_Host_empfangen.scl create mode 100644 SCL-Export/=A01+UH07-KF00/EP_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/EP_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/EP_Ziel_FC.scl create mode 100644 SCL-Export/=A01+UH07-KF00/EPtoLP_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/EPtoLP_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/HWtoOB_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/HWtoVP_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/LP_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/LP_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/LPtoHW_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/LPtoHW_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Leerpuffer to Raus-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Leerpuffer to Rein-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Leerpuffer_Raus-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Leerpuffer_Rein-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/MHMÜbergang_ohne_Schleuse.scl create mode 100644 SCL-Export/=A01+UH07-KF00/PufferZeiger_ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Reservierung_in_Puffer_eintragen.scl create mode 100644 SCL-Export/=A01+UH07-KF00/SchleusenZeiger_ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/ShopGroup to Raus-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/ShopGroup_Raus-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/ShopGroup_Rein-Lager ermitteln.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Trolley_DL_Check_ID.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Trolley_DL_Neue_Pos.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Trolleydaten_löschen.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Trolleydaten_neu_anlegen.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Trolleydaten_ändern.scl create mode 100644 SCL-Export/=A01+UH07-KF00/VP_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/VPtoEP_Bereich.scl create mode 100644 SCL-Export/=A01+UH07-KF00/VPtoEP_OmniFahren.scl create mode 100644 SCL-Export/=A01+UH07-KF00/Wandel_FC_für_DB1000.scl diff --git a/SCL-Export/=A01+UH06-KF00/AMRZeiger_ermitteln.scl b/SCL-Export/=A01+UH06-KF00/AMRZeiger_ermitteln.scl new file mode 100644 index 0000000..f0e7818 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/AMRZeiger_ermitteln.scl @@ -0,0 +1,45 @@ +FUNCTION "AMRZeiger_ermitteln" : Void +{ 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 + AMR_X : Word; // AMR zum Beeinflussen + MW224 : Word; // war "MW224" + MW226 : Word; // war "MW226" + END_VAR + + VAR_OUTPUT + AMR_DB : Int; + AMR_DW : Int; + Error : Bool; + g_6_HMI_Err_UH06_AMR : Word; // war "6_HMI_Err_UH06_AMR" + MW200 : Word; // war "MW200" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Zeiger für AMR_X ermitteln + #MW200 := #AMR_X; + // Einsprung AMR ermitteln: + "DatenOut"(SSDB := 276, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M200.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // Eintrag lesen + #g_6_HMI_Err_UH06_AMR.Logistik.DB276_Err := (#MB199 AND 2#1111111) <> 0; + #Error := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + #AMR_DB := #MW224; + #AMR_DW := #MW226; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/AMR_TrolleyVersorgung.scl b/SCL-Export/=A01+UH06-KF00/AMR_TrolleyVersorgung.scl new file mode 100644 index 0000000..b06ea93 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/AMR_TrolleyVersorgung.scl @@ -0,0 +1,108 @@ +FUNCTION_BLOCK "AMR_TrolleyVersorgung" +{ 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 + BG3481 : Word; // war "BG3481" + 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" + DPS5_OmniFahren : Word; // war "DPS5_OmniFahren" + MB3481 : Byte; // war "MB3481" + END_VAR + + VAR_OUTPUT + Arbeitsplatz : Word; + END_VAR + + VAR + Last_Arbeitsplatz : Word; + END_VAR + + VAR_TEMP + ArbeitsPlatz_zum_Versorgen : Word; + Freiplätze_Arbeitsplatz : Int; + END_VAR + +BEGIN + REGION Initialisierung + #ArbeitsPlatz_zum_Versorgen := 0; + #Freiplätze_Arbeitsplatz := 0; + END_REGION + + REGION Arbeitsplatz PS5 mit größtem Bedarf? + IF #DPS5_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DPS5_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#A500; + END_IF; + END_REGION + + REGION Arbeitsplatz PS4 mit größtem Bedarf? + IF #DPS4_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DPS4_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#A400; + END_IF; + END_REGION + + REGION Arbeitsplatz PS3 mit größtem Bedarf? + IF #DPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#A300; + END_IF; + END_REGION + + REGION Arbeitsplatz PS2 mit größtem Bedarf? + IF #DPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#A200; + END_IF; + END_REGION + + REGION Arbeitsplatz PS1 mit größtem Bedarf? + IF #DPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#A100; + END_IF; + END_REGION + + REGION Versorgung von MPS von Schleuse 3481 sichergestellt? + IF #BG3481 OR #MB3481 THEN GOTO Fertig; END_IF; + END_REGION + + REGION Arbeitsplatz MPS3 mit größtem Bedarf? + IF #DMPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DMPS3_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#B300; + END_IF; + END_REGION + + REGION Arbeitsplatz MPS2 mit größtem Bedarf? + IF #DMPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DMPS2_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#B200; + END_IF; + END_REGION + + REGION Arbeitsplatz MPS1 mit größtem Bedarf? + IF #DMPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze > #Freiplätze_Arbeitsplatz THEN + #Freiplätze_Arbeitsplatz := #DMPS1_OmniFahren.Sks_Arbeitsplatz.Dyn.HMI.Frei_Plätze; + #ArbeitsPlatz_zum_Versorgen := 16#B100; + END_IF; + END_REGION + + REGION Arbeitsplatz übergeben + #Arbeitsplatz := #ArbeitsPlatz_zum_Versorgen; + #Last_Arbeitsplatz := #ArbeitsPlatz_zum_Versorgen; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/Abführung_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/Abführung_OmniFahren.scl new file mode 100644 index 0000000..80191e4 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Abführung_OmniFahren.scl @@ -0,0 +1,81 @@ +FUNCTION_BLOCK "Abführung_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 + g_6_HMI_Err_UH06_AMR : Word; // war "6_HMI_Err_UH06_AMR" + DHWtoOB_OmniFahren : Word; // war "DHWtoOB_OmniFahren" + DHWtoOB_Sensoren : Word; // war "DHWtoOB_Sensoren" + END_VAR + + VAR_IN_OUT + BG3540 : Word; // war "BG3540" + BG3541 : Word; // war "BG3541" + BG3542 : Word; // war "BG3542" + BG3543 : Word; // war "BG3543" + BG3570 : Word; // war "BG3570" + 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" + DHWtoOB_Antriebe : Word; // war "DHWtoOB_Antriebe" + MA0112 : Bool; // war "MA0112" + MA0113 : Bool; // war "MA0113" + MB3540 : Byte; // war "MB3540" + MB3543 : Byte; // war "MB3543" + END_VAR + + VAR + Schleuse_3540 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3543 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + 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_3540.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3543.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3540.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); + #Schleuse_3543.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06.BereichErr); + END_REGION + + REGION Störungen quittieren + #ErrQuit := #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse hinter MPS1 + #Schleuse_3540(Schleusen_Nr := 3540, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3541, B_InSchleuse := #BG3540, B_AusSchleuse := #BG3542, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_BG3542.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0112, Antrieb_plus_aktiv := #MA0112, Schleuse_geöffnet := #MB3540, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_3540.Stat.Ast, Error := %DB608.DBW350, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0112.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse vor BST 4 + #Fahren_Ok := (((NOT (#g_6_HMI_Err_UH06_AMR.System.Gesamt_Feueralarm) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Feueralarm)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Geschlossen)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Störung)) AND #DHWtoOB_OmniFahren.Schleuse_3546.Dyn.Sk.Bereich_ok; // / UN #Trolleys_starten.Wartezeit_aktiv //Neu: Vor AFS runter + #Stau_raus := #DHWtoOB_Sensoren.Stau_BG3570.Stat.B_Akt OR #DHWtoOB_Sensoren.Stau_BG3544.Stat.B_Akt; + #Schleuse_3543(Schleusen_Nr := 3543, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3542, B_InSchleuse := #BG3543, B_AusSchleuse := #BG3570, B_Stau_raus := #Stau_raus, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := #MA0112, Antrieb_plus_aktiv := #MA0113, Schleuse_geöffnet := #MB3543, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_3543.Stat.Ast, Error := %DB608.DBW352, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0112.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_PS, Antrieb_plus_vor := #DHWtoOB_Antriebe.MA0113.Stat.A_vor, Antrieb_plus_start := #DHWtoOB_Antriebe.MA0113.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/Daten_Host_senden.scl b/SCL-Export/=A01+UH06-KF00/Daten_Host_senden.scl new file mode 100644 index 0000000..57e202c --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Daten_Host_senden.scl @@ -0,0 +1,30 @@ +FUNCTION_BLOCK "Daten_Host_senden" +{ 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 + Port1_SendFIFO : Word; // war "Port1_SendFIFO" + END_VAR + + VAR_OUTPUT + g_6_HMI_Err_UH06_AMR : Word; // war "6_HMI_Err_UH06_AMR" + END_VAR + + VAR + Port1_senden { S7_SetPoint := 'False'} : "Port1_Daten_senden"; + END_VAR + +BEGIN + REGION Daten über Port 1 senden + #Port1_senden(); + IF #Port1_SendFIFO.ANZAHL > 70 THEN #g_6_HMI_Err_UH06_AMR.Kommunikation.SendFIFO_Port1 := TRUE; END_IF; + IF #Port1_SendFIFO.ANZAHL < 40 THEN #g_6_HMI_Err_UH06_AMR.Kommunikation.SendFIFO_Port1 := FALSE; END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/Daten_von_Host_empfangen.scl b/SCL-Export/=A01+UH06-KF00/Daten_von_Host_empfangen.scl new file mode 100644 index 0000000..741e734 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Daten_von_Host_empfangen.scl @@ -0,0 +1,30 @@ +FUNCTION_BLOCK "Daten_von_Host_empfangen" +{ 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_IN_OUT + M8999_0 : Bool; // war "M8999.0" + MW196 : Word; // war "MW196" + END_VAR + + VAR + Port1_empfangen { S7_SetPoint := 'False'} : "Port1_Daten_empfangen"; + END_VAR + +BEGIN + REGION Testdaten übergeben + IF #M8999_0 THEN #M8999_0 := FALSE; END_IF; + IF #M8999_0 THEN "DBMOV"(QuellDB := 8999, QuellDW := 0, ZielDB := 9001, ZielDW := 0, Anzahl_DW := 15, RE_VAL := #MW196); END_IF; + END_REGION + + REGION Daten über Port 1 empfangen + #Port1_empfangen(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/HWtoAMR_Bereich.scl b/SCL-Export/=A01+UH06-KF00/HWtoAMR_Bereich.scl new file mode 100644 index 0000000..20a54e3 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoAMR_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "HWtoAMR_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DHWtoAMR_Sensoren"(); + "DHWtoAMR_OmniFahren"(); + "DHWtoAMR_Zylinder"(); + "DHWtoAMR_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/HWtoAMR_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/HWtoAMR_OmniFahren.scl new file mode 100644 index 0000000..7528de6 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoAMR_OmniFahren.scl @@ -0,0 +1,214 @@ +FUNCTION_BLOCK "HWtoAMR_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 + g_6_HMI_Err_UH06_AMR : Word; // war "6_HMI_Err_UH06_AMR" + END_VAR + + VAR_IN_OUT + BG3000 : Word; // war "BG3000" + BG3001 : Word; // war "BG3001" + BG3002 : Word; // war "BG3002" + BG3004 : Word; // war "BG3004" + BG3005 : Word; // war "BG3005" + BG3006 : Word; // war "BG3006" + BG3017 : Word; // war "BG3017" + BG3061 : Word; // war "BG3061" + BG3062 : Word; // war "BG3062" + BG3063 : Word; // war "BG3063" + BG3555 : Word; // war "BG3555" + BG3556 : Word; // war "BG3556" + BG3557 : Word; // war "BG3557" + BG3561 : Word; // war "BG3561" + BG3562 : Word; // war "BG3562" + BG3563 : Word; // war "BG3563" + BG3564 : Word; // war "BG3564" + BG3565 : Word; // war "BG3565" + BG3566 : Word; // war "BG3566" + DAMR_Bereich : Word; // war "DAMR_Bereich" + DArbeitspl_tze_Antriebe : Word; // war "DArbeitsplätze_Antriebe" + DHWtoAMR_Antriebe : Word; // war "DHWtoAMR_Antriebe" + DHWtoAMR_Sensoren : Word; // war "DHWtoAMR_Sensoren" + DHWtoAMR_Zylinder : Word; // war "DHWtoAMR_Zylinder" + DSchnittstelle_zu_Outbound : Word; // war "DSchnittstelle_zu_Outbound" + MA0061 : Bool; // war "MA0061" + MA0116 : Bool; // war "MA0116" + MA0130 : Bool; // war "MA0130" + MA0131 : Bool; // war "MA0131" + MA0203 : Bool; // war "MA0203" + MA0204 : Bool; // war "MA0204" + MA0205 : Bool; // war "MA0205" + MB3000 : Byte; // war "MB3000" + MB3004 : Byte; // war "MB3004" + MB3005 : Byte; // war "MB3005" + MB3061 : Byte; // war "MB3061" + MB3562 : Byte; // war "MB3562" + MB3565 : Byte; // war "MB3565" + END_VAR + + VAR + Frei200 { S7_SetPoint := 'True'} : Array[1..100] of Int; + Schleuse_3061 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_3005 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3004 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3000 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3555 : "MHMOmniBereich_Plus"; + Schleuse_3562 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3556 : "MHMOmniBereich_Plus"; + Schleuse_3565 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Übergang_3063 : "MHMÜbergang_ohne_Schleuse_AMR"; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3061.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3005.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3004.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3000.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Bereich_3555.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3562.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Bereich_3556.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3565.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3061.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3005.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3004.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3000.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Bereich_3555.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Schleuse_3562.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Bereich_3556.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Schleuse_3565.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + END_REGION + + REGION Störungen quittieren UZ6104 + #ErrQuit := (#DAMR_Bereich.A01_UZ6104.StOk_aktiv OR #DAMR_Bereich.A01_UC061.StOk_aktiv) OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Übergang 3063 (Übernahme von Outbound / UH07) + IF #DSchnittstelle_zu_Outbound.From_UH07.MA0203_A_start THEN #DHWtoAMR_Antriebe.MA0203.Stat.A_start := TRUE; END_IF; + IF #DSchnittstelle_zu_Outbound.From_UH07.MA0203_A_vor THEN #DHWtoAMR_Antriebe.MA0203.Stat.A_vor := TRUE; END_IF; + #B_vor_Schleuse := #DSchnittstelle_zu_Outbound.From_UH07.MA0203_A_start OR #DSchnittstelle_zu_Outbound.From_UH07.MA0203_A_vor; + #DSchnittstelle_zu_Outbound.To_UH07.MA0203_aktiv := #MA0203; + #DSchnittstelle_zu_Outbound.To_UH07.MA0203_kein_Stau := (#Schleuse_3061.Dyn.Sk.Bereich_ok AND #Schleuse_3061.Dyn.Sk.Auto_akt) AND NOT (#Übergang_3063.Am_Übergang.Stat.B_Akt); + #Übergang_3063(ErrQuit := #ErrQuit, B_Am_Übergang := #BG3063, B_Stau_Antrieb_plus := #DHWtoAMR_Sensoren.Stau_BG3062.Stat.B_Akt, Antrieb_aktiv := #MA0203, Antrieb_plus_aktiv := #MA0204, Antrieb_vor := #DHWtoAMR_Antriebe.MA0203.Stat.A_vor, Antrieb_start := #DHWtoAMR_Antriebe.MA0203.Stat.A_start, Antrieb_stop := #DHWtoAMR_Antriebe.MA0203.Stat.Stop_vor, Antrieb_plus_vor := #DHWtoAMR_Antriebe.MA0204.Stat.A_vor, Antrieb_plus_start := #DHWtoAMR_Antriebe.MA0204.Stat.A_start); + END_REGION + + REGION Störungen anzeigen UZ6104 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ6104.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UC061.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ6102 + #ErrQuit := (#DAMR_Bereich.A01_UZ6102.StOk_aktiv OR #DAMR_Bereich.A01_UC061.StOk_aktiv) OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse 3061 + #Schleuse_3061(Schleusen_Nr := 3061, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3062, B_InSchleuse := #BG3061, B_Zähl := #BG3006, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3006.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0204, Antrieb_plus_aktiv := #MA0205, Schleuse_geöffnet := #MB3061, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3061.Stat.Ast, Error := %DB608.DBW212, Antrieb_Schleuse_vor := #DHWtoAMR_Antriebe.MA0204.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoAMR_Antriebe.MA0204.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoAMR_Antriebe.MA0204.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoAMR_Antriebe.MA0204.Stat.A_PS, Antrieb_plus_vor := #DHWtoAMR_Antriebe.MA0205.Stat.A_vor, Antrieb_plus_start := #DHWtoAMR_Antriebe.MA0205.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ6102 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ6102.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UC061.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ6102/6101 + #ErrQuit := (#DAMR_Bereich.A01_UZ6102.StOk_aktiv OR #DAMR_Bereich.A01_UC061.StOk_aktiv) OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse 3005 + #Schleuse_3005(Schleusen_Nr := 3005, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3006, B_InSchleuse := #BG3005, B_AusSchleuse := #BG3017, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3017.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0205, Schleuse_geöffnet := #MB3005, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3005.Stat.Ast, Error := %DB608.DBW204, Antrieb_Schleuse_vor := #DHWtoAMR_Antriebe.MA0205.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoAMR_Antriebe.MA0205.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoAMR_Antriebe.MA0205.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoAMR_Antriebe.MA0205.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // da schon oben verwendet | da schon oben verwendet + END_REGION + + REGION Störungen anzeigen UZ6102/6101 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ6102.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UC061.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ6101 + #ErrQuit := #DAMR_Bereich.A01_UC061.StOk_aktiv OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse 3004 (vor BST 3) + #Fahren_Ok := (((NOT (#g_6_HMI_Err_UH06_AMR.System.Gesamt_Feueralarm) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Feueralarm)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Geschlossen)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Störung)) AND #Schleuse_3000.Dyn.Sk.Bereich_ok; + #Schleuse_3004(Schleusen_Nr := 3004, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3017, B_InSchleuse := #BG3004, B_AusSchleuse := #BG3002, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3002.Stat.B_Akt, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := #MA0205, Schleuse_geöffnet := #MB3004, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3004.Stat.Ast, Error := %DB608.DBW202, Antrieb_Schleuse_vor := #DHWtoAMR_Antriebe.MA0205.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoAMR_Antriebe.MA0205.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoAMR_Antriebe.MA0205.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoAMR_Antriebe.MA0205.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Kein Antrieb + END_REGION + + REGION Störungen anzeigen UZ6101 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UC061.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0620 + #ErrQuit := #DAMR_Bereich.A01_UZ0620.StOk_aktiv OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse 3000 + #Schleuse_3000(Schleusen_Nr := 3000, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3002, B_InSchleuse := #BG3000, B_AusSchleuse := #BG3001, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3001.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0130, Schleuse_geöffnet := #MB3000, RestZeit_Bereich_plus := #Bereich_3555.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3000.Stat.Ast, Error := %DB608.DBW200, Antrieb_Schleuse_vor := , Antrieb_plus_vor := #Bereich_3555.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); // Kein Antrieb + END_REGION + + REGION Bereich 3555 + #B_vor_Schleuse := #BG3001 AND #MB3000; + #Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3561.Stat.B_Akt OR #DHWtoAMR_Sensoren.Stau_BG3557.Stat.B_Akt; + #Bereich_3555(Bereichs_Nr := 3555, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3555, B_Zähl := #BG3557, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0130, Antrieb_plus_aktiv := #MA0131, Antrieb_Bereich_vor := #DHWtoAMR_Antriebe.MA0130.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoAMR_Antriebe.MA0130.Stat.Stop_vor, Error := %DB608.DBW172, Antrieb_Bereich_start := #DHWtoAMR_Antriebe.MA0130.Stat.A_start, Antrieb_plus_vor := #DHWtoAMR_Antriebe.MA0131.Stat.A_vor, Antrieb_plus_start := #DHWtoAMR_Antriebe.MA0131.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3562 + #Schleuse_3562(Schleusen_Nr := 3562, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3561, B_InSchleuse := #BG3562, B_AusSchleuse := #BG3563, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3563.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0131, Antrieb_plus_aktiv := #MA0116, Schleuse_geöffnet := #MB3562, RestZeit_Bereich_plus := #Bereich_3556.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3562.Stat.Ast, Error := %DB608.DBW358, Antrieb_Schleuse_vor := #DHWtoAMR_Antriebe.MA0131.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoAMR_Antriebe.MA0131.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoAMR_Antriebe.MA0131.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoAMR_Antriebe.MA0131.Stat.A_PS, Antrieb_plus_vor := #Bereich_3556.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 3556 + #B_vor_Schleuse := #BG3563 AND #MB3562; + #Bereich_3556(Bereichs_Nr := 3556, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3556, B_Zähl := #BG3564, B_Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3564.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0116, Antrieb_plus_aktiv := 1, Antrieb_Bereich_vor := #DHWtoAMR_Antriebe.MA0116.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoAMR_Antriebe.MA0116.Stat.Stop_vor, Error := %DB608.DBW174, Antrieb_Bereich_start := #DHWtoAMR_Antriebe.MA0116.Stat.A_start, Antrieb_plus_vor := , Antrieb_minus_vor := #DHWtoAMR_Antriebe.MA0131.Stat.A_vor, hStOk := #ErrAnz); // Ohne Antrieb + END_REGION + + REGION Schleuse 3565 (vor BST 4) + #Fahren_Ok := ((NOT (#g_6_HMI_Err_UH06_AMR.System.Gesamt_Feueralarm) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Feueralarm)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Geschlossen)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST4_Störung); + #Stau_raus := #DHWtoAMR_Sensoren.Stau_BG3566.Stat.B_Akt OR #DHWtoAMR_Sensoren.Stau_BG3567.Stat.B_Akt; + #Schleuse_3565(Schleusen_Nr := 3565, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3564, B_InSchleuse := #BG3565, B_AusSchleuse := #BG3566, B_Stau_raus := #Stau_raus, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0061, Schleuse_geöffnet := #MB3565, Y_Schleuse_Auf := #DHWtoAMR_Zylinder.Schleuse_3565.Stat.Ast, Error := %DB608.DBW360, Antrieb_Schleuse_vor := , Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0061.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0061.Stat.A_start, hStOk := #ErrAnz); // ohne Antrieb | Ohne Antrieb + END_REGION + + REGION Störungen anzeigen UZ0620 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0620.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/HWtoOB_Bereich.scl b/SCL-Export/=A01+UH06-KF00/HWtoOB_Bereich.scl new file mode 100644 index 0000000..c86d546 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoOB_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "HWtoOB_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DHWtoOB_Sensoren"(); + "DHWtoOB_OmniFahren"(); + "DHWtoOB_Zylinder"(); + "DHWtoOB_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/HWtoOB_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/HWtoOB_OmniFahren.scl new file mode 100644 index 0000000..61191d4 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoOB_OmniFahren.scl @@ -0,0 +1,192 @@ +FUNCTION_BLOCK "HWtoOB_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 + g_1s_Impuls : Word; // war "1s-Impuls" + g_6_HMI_Err_UH06_AMR : Word; // war "6_HMI_Err_UH06_AMR" + BG3544 : Word; // war "BG3544" + BG3570 : Word; // war "BG3570" + END_VAR + + VAR_IN_OUT + BG3010 : Word; // war "BG3010" + BG3011 : Word; // war "BG3011" + BG3012 : Word; // war "BG3012" + BG3013 : Word; // war "BG3013" + BG3014 : Word; // war "BG3014" + BG3015 : Word; // war "BG3015" + BG3016 : Word; // war "BG3016" + BG3066 : Word; // war "BG3066" + BG3070 : Word; // war "BG3070" + BG3071 : Word; // war "BG3071" + BG3073 : Word; // war "BG3073" + BG3545 : Word; // war "BG3545" + BG3546 : Word; // war "BG3546" + BG3550 : Word; // war "BG3550" + BG3551 : Word; // war "BG3551" + BG3552 : Word; // war "BG3552" + BG3554 : Word; // war "BG3554" + DAMR_Bereich : Word; // war "DAMR_Bereich" + DHWtoOB_Antriebe : Word; // war "DHWtoOB_Antriebe" + DHWtoOB_Sensoren : Word; // war "DHWtoOB_Sensoren" + DHWtoOB_Zylinder : Word; // war "DHWtoOB_Zylinder" + DSchnittstelle_zu_Outbound : Word; // war "DSchnittstelle_zu_Outbound" + MA0113 : Bool; // war "MA0113" + MA0114 : Bool; // war "MA0114" + MA0115 : Bool; // war "MA0115" + MA0117 : Bool; // war "MA0117" + MA0200 : Bool; // war "MA0200" + MA0201 : Bool; // war "MA0201" + MA0202 : Bool; // war "MA0202" + MB3010 : Byte; // war "MB3010" + MB3012 : Byte; // war "MB3012" + MB3014 : Byte; // war "MB3014" + MB3070 : Byte; // war "MB3070" + MB3073 : Byte; // war "MB3073" + MB3546 : Byte; // war "MB3546" + MB3552 : Byte; // war "MB3552" + END_VAR + + VAR + Schleuse_3546 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3550 : "MHMOmniBereich_Plus"; + Schleuse_3552 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3016 : "MHMOmniBereich_Plus"; + Schleuse_3014 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3012 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3010 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_3070 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3073 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Trolleys_starten : Struct + Flanke : Bool; + Wartezeit_aktiv : Bool; + Timer_Wartenzeit { S7_SetPoint := 'True'} : Int; + END_STRUCT; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + tGen1_Flanke : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3546.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Bereich_3550.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3552.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Bereich_3016.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3014.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3012.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3010.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3070.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3073.Dyn.Sk.Auto_akt := #DAMR_Bereich.A01_UH06.AnlageEin; + #Schleuse_3546.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Bereich_3550.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Schleuse_3552.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Bereich_3016.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Schleuse_3014.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UH06_Halle4.BereichErr); + #Schleuse_3012.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3010.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3070.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + #Schleuse_3073.Dyn.Sk.Bereich_ok := NOT (#DAMR_Bereich.A01_UC061.BereichErr); + END_REGION + + REGION Störungen quittieren UZ0620 + #ErrQuit := #DAMR_Bereich.A01_UZ0620.StOk_aktiv OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) + #tGen1_Flanke := #MB3546 AND NOT #Trolleys_starten.Flanke; + #Trolleys_starten.Flanke := #MB3546; + IF #tGen1_Flanke THEN #Trolleys_starten.Wartezeit_aktiv := TRUE; END_IF; + IF #tGen1_Flanke THEN #Trolleys_starten.Timer_Wartenzeit := 15; END_IF; + IF NOT (#Trolleys_starten.Wartezeit_aktiv) OR ((#MB3546 AND NOT (#MA0113)) OR NOT (#g_1s_Impuls)) THEN GOTO Wait; END_IF; + #Trolleys_starten.Timer_Wartenzeit := #Trolleys_starten.Timer_Wartenzeit + -1; + IF (#Trolleys_starten.Timer_Wartenzeit + -1) > 0 THEN GOTO Wait; END_IF; + #Trolleys_starten.Wartezeit_aktiv := FALSE; + Wait: ; + END_REGION + + REGION Schleuse 3546 (hinter BST 4) + #B_vor_Schleuse := #BG3570 OR #BG3544; + #Start_ok := NOT (#Trolleys_starten.Wartezeit_aktiv); + #Schleuse_3546(Schleusen_Nr := 3546, ErrQuit := #ErrQuit, B_VorSchleuse := #B_vor_Schleuse, B_InSchleuse := #BG3546, B_AusSchleuse := #BG3545, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3545.Stat.B_Akt, Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0113, Antrieb_plus_aktiv := #MA0114, Schleuse_geöffnet := #MB3546, RestZeit_Bereich_plus := #Bereich_3550.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3546.Stat.Ast, Error := %DB608.DBW354, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0113.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0113.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0113.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0113.Stat.A_PS, Antrieb_plus_vor := #Bereich_3550.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 3550 + #B_vor_Schleuse := #BG3545 AND #MB3546; + #Bereich_3550(Bereichs_Nr := 3550, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3550, B_Zähl := #BG3551, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3551.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0114, Antrieb_plus_aktiv := #MA0115, Antrieb_Bereich_vor := #DHWtoOB_Antriebe.MA0114.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoOB_Antriebe.MA0114.Stat.Stop_vor, Error := %DB608.DBW170, Antrieb_Bereich_start := #DHWtoOB_Antriebe.MA0114.Stat.A_start, Antrieb_plus_vor := #DHWtoOB_Antriebe.MA0115.Stat.A_vor, Antrieb_plus_start := #DHWtoOB_Antriebe.MA0115.Stat.A_start, Antrieb_minus_vor := #DHWtoOB_Antriebe.MA0113.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3552 + #Schleuse_3552(Schleusen_Nr := 3552, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3551, B_InSchleuse := #BG3552, B_AusSchleuse := #BG3554, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3554.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0115, Antrieb_plus_aktiv := #MA0117, Schleuse_geöffnet := #MB3552, RestZeit_Bereich_plus := #Bereich_3016.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3552.Stat.Ast, Error := %DB608.DBW356, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0115.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0115.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0115.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0115.Stat.A_PS, Antrieb_plus_vor := #Bereich_3016.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 3016 + #B_vor_Schleuse := #BG3554 AND #MB3552; + #Bereich_3016(Bereichs_Nr := 3016, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3016, B_Zähl := #BG3015, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3015.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0117, Antrieb_plus_aktiv := 1, Antrieb_Bereich_vor := #DHWtoOB_Antriebe.MA0117.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoOB_Antriebe.MA0117.Stat.Stop_vor, Error := %DB608.DBW154, Antrieb_Bereich_start := #DHWtoOB_Antriebe.MA0117.Stat.A_start, Antrieb_plus_vor := , Antrieb_minus_vor := #DHWtoOB_Antriebe.MA0115.Stat.A_vor, hStOk := #ErrAnz); // Ohne Antrieb + END_REGION + + REGION Schleuse 3014 (vor BST 3) + #Fahren_Ok := (((NOT (#g_6_HMI_Err_UH06_AMR.System.Gesamt_Feueralarm) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Feueralarm)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Geschlossen)) AND NOT (#g_6_HMI_Err_UH06_AMR.System.BST3_Störung)) AND #Schleuse_3012.Dyn.Sk.Bereich_ok; + #Stau_raus := #DHWtoOB_Sensoren.Stau_BG3013.Stat.B_Akt; + #Schleuse_3014(Schleusen_Nr := 3014, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3015, B_InSchleuse := #BG3014, B_AusSchleuse := #BG3013, B_Stau_raus := #Stau_raus, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0200, Schleuse_geöffnet := #MB3014, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3014.Stat.Ast, Error := %DB608.DBW210, Antrieb_Schleuse_vor := , Antrieb_plus_vor := #DHWtoOB_Antriebe.MA0200.Stat.A_vor, Antrieb_plus_start := #DHWtoOB_Antriebe.MA0200.Stat.A_start, hStOk := #ErrAnz); // ohne Antrieb | Ohne Antrieb + END_REGION + + REGION Störungen anzeigen UZ0620 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0620.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ6101 + #ErrQuit := #DAMR_Bereich.A01_UC061.StOk_aktiv OR #DAMR_Bereich.A01_UH06.StOk_aktiv; + END_REGION + + REGION Schleuse 3012 (hinter BST 3) + #Schleuse_3012(Schleusen_Nr := 3012, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3013, B_InSchleuse := #BG3012, B_AusSchleuse := #BG3011, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3011.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0200, Antrieb_plus_aktiv := #MA0200, Schleuse_geöffnet := #MB3012, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3012.Stat.Ast, Error := %DB608.DBW208, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0200.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0200.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0200.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0200.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // wie oben + END_REGION + + REGION Schleuse 3010 + #Schleuse_3010(Schleusen_Nr := 3010, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3011, B_InSchleuse := #BG3010, B_Zähl := #BG3071, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3071.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0200, Antrieb_plus_aktiv := #MA0201, Schleuse_geöffnet := #MB3010, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3010.Stat.Ast, Error := %DB608.DBW206, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0200.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0200.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0200.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0200.Stat.A_PS, Antrieb_plus_vor := #DHWtoOB_Antriebe.MA0201.Stat.A_vor, Antrieb_plus_start := #DHWtoOB_Antriebe.MA0201.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3070 + #Schleuse_3070(Schleusen_Nr := 3070, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3071, B_InSchleuse := #BG3070, B_AusSchleuse := #BG3066, B_Stau_raus := #DHWtoOB_Sensoren.Stau_BG3066.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0201, Antrieb_plus_aktiv := #MA0202, Schleuse_geöffnet := #MB3070, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3070.Stat.Ast, Error := %DB608.DBW214, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0201.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0201.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0201.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0201.Stat.A_PS, Antrieb_plus_vor := #DHWtoOB_Antriebe.MA0202.Stat.A_vor, Antrieb_plus_start := #DHWtoOB_Antriebe.MA0202.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3073 (Übergabe an Outbound / UH07) + #DSchnittstelle_zu_Outbound.To_UH07.MA0200_A_vor := FALSE; + #DSchnittstelle_zu_Outbound.To_UH07.MA0200_A_start := FALSE; + #Schleuse_3073(Schleusen_Nr := 3073, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3066, B_InSchleuse := #BG3073, B_Zähl := #DSchnittstelle_zu_Outbound.From_UH07.BG3724_aktiv, B_Stau_raus := 0, Start_Ok := #DSchnittstelle_zu_Outbound.From_UH07.MA0200_kein_Stau, Antrieb_Schleuse_aktiv := #MA0202, Antrieb_plus_aktiv := #DSchnittstelle_zu_Outbound.From_UH07.MA0200_aktiv, Schleuse_geöffnet := #MB3073, Y_Schleuse_Auf := #DHWtoOB_Zylinder.Schleuse_3073.Stat.Ast, Error := %DB608.DBW362, Antrieb_Schleuse_vor := #DHWtoOB_Antriebe.MA0202.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoOB_Antriebe.MA0202.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoOB_Antriebe.MA0202.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoOB_Antriebe.MA0202.Stat.A_PS, Antrieb_plus_vor := #DSchnittstelle_zu_Outbound.To_UH07.MA0200_A_vor, Antrieb_plus_start := #DSchnittstelle_zu_Outbound.To_UH07.MA0200_A_start, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ6101 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UC061.StOk_blinken := TRUE; + #DAMR_Bereich.A01_UH06.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/LeerTrolley to AMR-Platz ermitteln.scl b/SCL-Export/=A01+UH06-KF00/LeerTrolley to AMR-Platz ermitteln.scl new file mode 100644 index 0000000..adde7a9 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/LeerTrolley to AMR-Platz ermitteln.scl @@ -0,0 +1,60 @@ +FUNCTION "LeerTrolley to AMR-Platz ermitteln" : Void +{ 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 + Erlaubter_Bereich : Word; // 0=Alles ok, A000=nur PS, B000=nur MPS ok + M198_7 : Bool; // war "M198.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + AMR_Platz : Word; // AMR-Platz ermitteln + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MW196 : Word; // war "MW196" + END_VAR + + VAR_TEMP + DLDB : Int; + Para : Word; + END_VAR + +BEGIN + REGION Initialisierung + #AMR_Platz := 16#0; + #DLDB := 1112; + END_REGION + + REGION Werden 12->1 Trolley(s) benötigt? + NextDL: ; + #Para := 16#F100; + "DatenOut"(SSDB := #DLDB, SSDW := 0, PARA := #Para, SEARCHDATEN := P#M200.0, RE_VAL := #MB198, OUTDATEN := P#M220.0, Position := #MW196); + IF #M198_7 THEN GOTO Check; END_IF; + // Nächst kleiner benötigte Stückzahl: + #DLDB := #DLDB + -1; + IF (#DLDB + -1) >= 1101 THEN GOTO NextDL; END_IF; + RETURN; + END_REGION + + REGION Check, ob Bereich ok + IF #Erlaubter_Bereich = 16#0 THEN GOTO AMR; END_IF; + IF ((#MW220 AND 16#F000) = #Erlaubter_Bereich) AND (#MW220 <> 16#0) THEN GOTO AMR; END_IF; + // Nächsetn Eintrag lesen: + #Para := 16#FF00; + GOTO Next; + END_REGION + + REGION Puffer aufbereiten + #AMR_Platz := #MW220; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/MHMÜbergang_ohne_Schleuse_AMR.scl b/SCL-Export/=A01+UH06-KF00/MHMÜbergang_ohne_Schleuse_AMR.scl new file mode 100644 index 0000000..1902b75 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/MHMÜbergang_ohne_Schleuse_AMR.scl @@ -0,0 +1,79 @@ +FUNCTION_BLOCK "MHMÜbergang_ohne_Schleuse_AMR" +{ 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 + ErrQuit : Bool; + B_Anfang : Bool; + B_Am_Übergang : Bool; + B_Stau_Antrieb_plus : Bool; + Antrieb_aktiv : Bool; + Antrieb_plus_aktiv : Bool; + END_VAR + + VAR_IN_OUT + Antrieb_vor : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Antrieb_plus_vor : Bool; + Antrieb_plus_start : Bool; + END_VAR + + VAR + Am_Übergang { S7_SetPoint := 'False'} : "MSensoren"; + Stau_Antrieb_plus : "MSensoren"; + Stau_B_Anfang : "MSensoren"; + END_VAR + + VAR_TEMP + Antrieb : Bool; + Antrieb_gestoppt : Bool; + END_VAR + +BEGIN + REGION Antrieb ansteuern + #Antrieb_gestoppt := FALSE; + IF #B_Anfang OR #ErrQuit THEN #Antrieb_start := TRUE; END_IF; + IF (#B_Anfang AND NOT (#Stau_B_Anfang.Stat.B_Akt)) OR #ErrQuit THEN #Antrieb_vor := TRUE; END_IF; + IF NOT (#Am_Übergang.Stat.B_Akt) THEN GOTO Nix; END_IF; + IF NOT (#Am_Übergang.Stat.B_Akt) AND #Stau_Antrieb_plus.Stat.B_Akt THEN + #Antrieb_stop := TRUE; + #Antrieb_gestoppt := TRUE; + GOTO Nix; + END_IF; + IF NOT (#Stau_Antrieb_plus.Stat.B_Akt) THEN #Antrieb_plus_vor := TRUE; END_IF; + #Antrieb_plus_start := TRUE; + IF NOT (#Antrieb_plus_aktiv) THEN + #Antrieb_stop := TRUE; + #Antrieb_gestoppt := TRUE; + GOTO Nix; + END_IF; + #Antrieb_vor := TRUE; + Nix: ; + END_REGION + + REGION Antrieb plus zusätzlich ansteuern + IF #B_Stau_Antrieb_plus OR #ErrQuit THEN #Antrieb_plus_start := TRUE; END_IF; + IF FALSE THEN #Antrieb_plus_vor := TRUE; END_IF; + END_REGION + + REGION Stau B_Anfang + #Stau_B_Anfang(ESensor := #B_Anfang, T_Ein := 1, T_Aus := 100, tein_aktiv := #Antrieb_aktiv, taus_aktiv := 1); + END_REGION + + REGION Trolley ist am Übergang + #Antrieb := (#Antrieb_aktiv AND #Antrieb_plus_aktiv) AND NOT (#Antrieb_gestoppt); + #Am_Übergang(ESensor := #B_Am_Übergang, T_Ein := 1, T_Aus := 100, tein_aktiv := 1, taus_aktiv := #Antrieb); + END_REGION + + REGION Stau im Förderer plus + #Stau_Antrieb_plus(ESensor := #B_Stau_Antrieb_plus, T_Ein := 100, T_Aus := 50, tein_aktiv := 1, taus_aktiv := 1); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/MPS1_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/MPS1_OmniFahren.scl new file mode 100644 index 0000000..a146a87 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/MPS1_OmniFahren.scl @@ -0,0 +1,175 @@ +FUNCTION_BLOCK "MPS1_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_OUTPUT + PF0056 : Word; // war "PF0056" + PF3444 : Word; // war "PF3444" + END_VAR + + VAR_IN_OUT + BG3444 : Word; // war "BG3444" + BG3450 : Word; // war "BG3450" + BG3451 : Word; // war "BG3451" + BG3452 : Word; // war "BG3452" + BG3453 : Word; // war "BG3453" + BG3455 : Word; // war "BG3455" + BG3461 : Word; // war "BG3461" + BG3465 : Word; // war "BG3465" + BG3470 : Word; // war "BG3470" + BG3471 : Word; // war "BG3471" + BG3473 : Word; // war "BG3473" + BG3541 : Word; // war "BG3541" + 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" + MA0106 : Bool; // war "MA0106" + MA0107 : Bool; // war "MA0107" + MA0110 : Bool; // war "MA0110" + MA0111 : Bool; // war "MA0111" + MA0112 : Bool; // war "MA0112" + MB3450 : Byte; // war "MB3450" + MB3452 : Byte; // war "MB3452" + MB3453 : Byte; // war "MB3453" + MB3455 : Byte; // war "MB3455" + MB3461 : Byte; // war "MB3461" + MB3465 : Byte; // war "MB3465" + MB3471 : Byte; // war "MB3471" + MB3473 : Byte; // war "MB3473" + 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; + 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_UZ0601.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0601.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start := TRUE; + END_IF; + END_REGION + + REGION Schleuse vor Einfahrt + #Schleuse_vor_Einfahrt(Schleusen_Nr := 3450, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3444, B_InSchleuse := #BG3450, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0112, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3450, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_MPS1.Stat.Ast, Error := %DB608.DBW326, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0112.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_PS, hStOk := #ErrAnz); // Über Weiche_Einfahrt | Über Weiche_Einfahrt | Über Weiche_Einfahrt + END_REGION + + REGION Weiche Einfahrt + #Weiche_Einfahrt(Weichen_Nr := 3452, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_MPS1.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_MPS1.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0112, Antrieb_Gerade_aktiv := #MA0112, Antrieb_Abzweig_aktiv := #MA0106, Weiche_ist_AST := #MB3452, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_MPS1.Stat.Ast, Error := %DB608.DBW328, Antrieb_Weiche_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_Weiche_stop := #DArbeitspl_tze_Antriebe.MA0112.Stat.Stop_vor, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#B100, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3453, B_an_Platz_1 := #BG3455, B_an_Platz_2 := #BG3461, B_an_Platz_3 := #BG3465, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_MPS1.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3471, Y_Vorstau := #MB3453, Y_Platz_1 := #MB3455, Y_Platz_2 := #MB3461, Y_Platz_3 := #MB3465, Antrieb_Vorstau_aktiv := #MA0106, Antrieb_Nachstau_1_aktiv := #MA0107, Antrieb_Nachstau_2_aktiv := #MA0111, Antrieb_Nachstau_3_aktiv := #MA0110, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_MPS1.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_MPS1.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_MPS1.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_MPS1.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS1".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS1".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.DBW110, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0056 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3444 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3453, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3452, B_InSchleuse := #BG3453, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0106, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3453, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_MPS1.Stat.Ast, Error := %DB608.DBW330, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS1".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3455, ErrQuit := #ErrQuit, B_InSchleuse := #BG3455, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0107, Schleuse_geöffnet := #MB3455, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_MPS1.Stat.Ast, Error := %DB608.DBW332, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS1".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 := 3461, ErrQuit := #ErrQuit, B_InSchleuse := #BG3461, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0111, Schleuse_geöffnet := #MB3461, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_MPS1.Stat.Ast, Error := %DB608.DBW334, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS1".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 := 3465, ErrQuit := #ErrQuit, B_InSchleuse := #BG3465, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0110, Schleuse_geöffnet := #MB3465, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_MPS1.Stat.Ast, Error := %DB608.DBW336, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".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 := 3471, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3470, B_InSchleuse := #BG3471, B_AusSchleuse := #BG3541, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS1.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0110, Antrieb_plus_aktiv := #MA0112, Schleuse_geöffnet := #MB3471, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_MPS1.Stat.Ast, Error := %DB608.DBW338, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS1".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, hStOk := #ErrAnz); + IF #MB3471 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS1.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 := 3473, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3451, B_InSchleuse := #BG3473, B_AusSchleuse := #BG3541, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS1.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0112, Antrieb_plus_aktiv := #MA0112, Schleuse_geöffnet := #MB3473, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_MPS1.Stat.Ast, Error := %DB608.DBW340, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0112.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_PS, hStOk := #ErrAnz); + IF #MB3473 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS1.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 Ausfahr-Priorität + #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3473, Haupt_Schleuse_geöffnet := #MB3473, BG_ABP_Schleuse := #BG3471, ABP_Schleuse_geöffnet := #MB3471, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0601.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/MPS2_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/MPS2_OmniFahren.scl new file mode 100644 index 0000000..1a9ceb5 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/MPS2_OmniFahren.scl @@ -0,0 +1,177 @@ +FUNCTION_BLOCK "MPS2_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_OUTPUT + PF0054 : Word; // war "PF0054" + PF3420 : Word; // war "PF3420" + END_VAR + + VAR_IN_OUT + BG3414 : Word; // war "BG3414" + BG3421 : Word; // war "BG3421" + BG3422 : Word; // war "BG3422" + BG3423 : Word; // war "BG3423" + BG3425 : Word; // war "BG3425" + BG3431 : Word; // war "BG3431" + BG3435 : Word; // war "BG3435" + BG3440 : Word; // war "BG3440" + BG3441 : Word; // war "BG3441" + BG3443 : Word; // war "BG3443" + BG3444 : Word; // war "BG3444" + BG3445 : Word; // war "BG3445" + 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" + MA0101 : Bool; // war "MA0101" + MA0102 : Bool; // war "MA0102" + MA0103 : Bool; // war "MA0103" + MA0104 : Bool; // war "MA0104" + MA0105 : Bool; // war "MA0105" + MA0112 : Bool; // war "MA0112" + MB3421 : Byte; // war "MB3421" + MB3422 : Byte; // war "MB3422" + MB3423 : Byte; // war "MB3423" + MB3425 : Byte; // war "MB3425" + MB3431 : Byte; // war "MB3431" + MB3435 : Byte; // war "MB3435" + MB3441 : Byte; // war "MB3441" + MB3443 : Byte; // war "MB3443" + 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; + 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_UZ0602.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0602.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS2".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS2".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start := TRUE; + END_IF; + END_REGION + + REGION Schleuse vor Einfahrt + #Schleuse_vor_Einfahrt(Schleusen_Nr := 3421, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3414, B_InSchleuse := #BG3421, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0105, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3421, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_MPS2.Stat.Ast, Error := %DB608.DBW310, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_PS, hStOk := #ErrAnz); // Über Weiche_Einfahrt | Über Weiche_Einfahrt | Über Weiche_Einfahrt + END_REGION + + REGION Weiche Einfahrt + #Weiche_Einfahrt(Weichen_Nr := 3422, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_MPS2.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_MPS2.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0105, Antrieb_Gerade_aktiv := #MA0105, Antrieb_Abzweig_aktiv := #MA0101, Weiche_ist_AST := #MB3422, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_MPS2.Stat.Ast, Error := %DB608.DBW312, Antrieb_Weiche_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Weiche_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#B200, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3423, B_an_Platz_1 := #BG3425, B_an_Platz_2 := #BG3431, B_an_Platz_3 := #BG3435, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_MPS2.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3441, Y_Vorstau := #MB3423, Y_Platz_1 := #MB3425, Y_Platz_2 := #MB3431, Y_Platz_3 := #MB3435, Antrieb_Vorstau_aktiv := #MA0101, Antrieb_Nachstau_1_aktiv := #MA0102, Antrieb_Nachstau_2_aktiv := #MA0103, Antrieb_Nachstau_3_aktiv := #MA0104, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_MPS2.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_MPS2.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_MPS2.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_MPS2.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS2".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS2".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.DBW112, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0054 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3420 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3423, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3422, B_InSchleuse := #BG3423, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0101, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3423, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_MPS2.Stat.Ast, Error := %DB608.DBW314, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS2".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3425, ErrQuit := #ErrQuit, B_InSchleuse := #BG3425, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0102, Schleuse_geöffnet := #MB3425, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_MPS2.Stat.Ast, Error := %DB608.DBW316, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS2".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 := 3431, ErrQuit := #ErrQuit, B_InSchleuse := #BG3431, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0103, Schleuse_geöffnet := #MB3431, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_MPS2.Stat.Ast, Error := %DB608.DBW318, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS2".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 := 3435, ErrQuit := #ErrQuit, B_InSchleuse := #BG3435, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0104, Schleuse_geöffnet := #MB3435, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_MPS2.Stat.Ast, Error := %DB608.DBW320, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".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 := 3441, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3440, B_InSchleuse := #BG3441, B_AusSchleuse := #BG3444, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS2.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0104, Antrieb_plus_aktiv := #MA0112, Schleuse_geöffnet := #MB3441, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_MPS2.Stat.Ast, Error := %DB608.DBW322, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS2".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, hStOk := #ErrAnz); + IF #MB3441 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS2.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 := 3443, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3445, B_InSchleuse := #BG3443, B_AusSchleuse := #BG3444, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS2.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0105, Antrieb_plus_aktiv := #MA0112, Schleuse_geöffnet := #MB3443, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_MPS2.Stat.Ast, Error := %DB608.DBW324, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0112.Stat.A_start, hStOk := #ErrAnz); + IF #MB3443 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS2.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 Ausfahr-Priorität + #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3443, Haupt_Schleuse_geöffnet := #MB3443, BG_ABP_Schleuse := #BG3441, ABP_Schleuse_geöffnet := #MB3441, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0602.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/MPS3_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/MPS3_OmniFahren.scl new file mode 100644 index 0000000..d5cf64d --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/MPS3_OmniFahren.scl @@ -0,0 +1,175 @@ +FUNCTION_BLOCK "MPS3_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_OUTPUT + PF0052 : Word; // war "PF0052" + PF3384 : Word; // war "PF3384" + END_VAR + + VAR_IN_OUT + BG3384 : Word; // war "BG3384" + BG3390 : Word; // war "BG3390" + BG3391 : Word; // war "BG3391" + BG3392 : Word; // war "BG3392" + BG3393 : Word; // war "BG3393" + BG3395 : Word; // war "BG3395" + BG3401 : Word; // war "BG3401" + BG3405 : Word; // war "BG3405" + BG3410 : Word; // war "BG3410" + BG3411 : Word; // war "BG3411" + BG3413 : Word; // war "BG3413" + BG3414 : Word; // war "BG3414" + 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" + MA0095 : Bool; // war "MA0095" + MA0096 : Bool; // war "MA0096" + MA0097 : Bool; // war "MA0097" + MA0100 : Bool; // war "MA0100" + MA0105 : Bool; // war "MA0105" + MB3390 : Byte; // war "MB3390" + MB3392 : Byte; // war "MB3392" + MB3393 : Byte; // war "MB3393" + MB3395 : Byte; // war "MB3395" + MB3401 : Byte; // war "MB3401" + MB3405 : Byte; // war "MB3405" + MB3411 : Byte; // war "MB3411" + MB3413 : Byte; // war "MB3413" + 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; + 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_UZ0603.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0603.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start := TRUE; + END_IF; + END_REGION + + REGION Schleuse vor Einfahrt + #Schleuse_vor_Einfahrt(Schleusen_Nr := 3390, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3384, B_InSchleuse := #BG3390, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0105, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3390, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_MPS3.Stat.Ast, Error := %DB608.DBW294, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_PS, hStOk := #ErrAnz); // Über Weiche_Einfahrt | Über Weiche_Einfahrt | Über Weiche_Einfahrt + END_REGION + + REGION Weiche Einfahrt + #Weiche_Einfahrt(Weichen_Nr := 3392, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_MPS3.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_MPS3.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0105, Antrieb_Gerade_aktiv := #MA0105, Antrieb_Abzweig_aktiv := #MA0095, Weiche_ist_AST := #MB3392, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_MPS3.Stat.Ast, Error := %DB608.DBW296, Antrieb_Weiche_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Weiche_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#B300, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3393, B_an_Platz_1 := #BG3395, B_an_Platz_2 := #BG3401, B_an_Platz_3 := #BG3405, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_MPS3.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3411, Y_Vorstau := #MB3393, Y_Platz_1 := #MB3395, Y_Platz_2 := #MB3401, Y_Platz_3 := #MB3405, Antrieb_Vorstau_aktiv := #MA0095, Antrieb_Nachstau_1_aktiv := #MA0096, Antrieb_Nachstau_2_aktiv := #MA0097, Antrieb_Nachstau_3_aktiv := #MA0100, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_MPS3.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_MPS3.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_MPS3.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_MPS3.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS3".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS3".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.DBW114, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0052 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3384 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3393, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3392, B_InSchleuse := #BG3393, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0095, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3393, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_MPS3.Stat.Ast, Error := %DB608.DBW298, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_MPS3".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3395, ErrQuit := #ErrQuit, B_InSchleuse := #BG3395, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0096, Schleuse_geöffnet := #MB3395, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_MPS3.Stat.Ast, Error := %DB608.DBW300, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_MPS3".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 := 3401, ErrQuit := #ErrQuit, B_InSchleuse := #BG3401, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0097, Schleuse_geöffnet := #MB3401, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_MPS3.Stat.Ast, Error := %DB608.DBW302, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_MPS3".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 := 3405, ErrQuit := #ErrQuit, B_InSchleuse := #BG3405, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0100, Schleuse_geöffnet := #MB3405, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_MPS3.Stat.Ast, Error := %DB608.DBW304, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".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 := 3411, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3410, B_InSchleuse := #BG3411, B_AusSchleuse := #BG3414, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS3.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0100, Antrieb_plus_aktiv := #MA0105, Schleuse_geöffnet := #MB3411, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_MPS3.Stat.Ast, Error := %DB608.DBW306, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_MPS3".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, hStOk := #ErrAnz); + IF #MB3411 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS3.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 := 3413, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3391, B_InSchleuse := #BG3413, B_AusSchleuse := #BG3414, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_MPS3.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0105, Antrieb_plus_aktiv := #MA0105, Schleuse_geöffnet := #MB3413, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_MPS3.Stat.Ast, Error := %DB608.DBW308, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0105.Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // s.o. | s.o. + IF #MB3413 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_MPS3.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 Ausfahr-Priorität + #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3413, Haupt_Schleuse_geöffnet := #MB3413, BG_ABP_Schleuse := #BG3411, ABP_Schleuse_geöffnet := #MB3411, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0603.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/PS1_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/PS1_OmniFahren.scl new file mode 100644 index 0000000..42ebc46 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/PS1_OmniFahren.scl @@ -0,0 +1,241 @@ +FUNCTION_BLOCK "PS1_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 + BG3323 : Word; // war "BG3323" + BG3361 : Word; // war "BG3361" + MA0062 : Bool; // war "MA0062" + MA0094 : Bool; // war "MA0094" + MB3351 : Byte; // war "MB3351" + MB3361 : Byte; // war "MB3361" + MB3481 : Byte; // war "MB3481" + MB3482 : Byte; // war "MB3482" + END_VAR + + VAR_OUTPUT + DPS2_OmniFahren : Word; // war "DPS2_OmniFahren" + PF0050 : Word; // war "PF0050" + PF3360 : Word; // war "PF3360" + END_VAR + + VAR_IN_OUT + BG3330 : Word; // war "BG3330" + BG3353 : Word; // war "BG3353" + BG3362 : Word; // war "BG3362" + BG3363 : Word; // war "BG3363" + BG3365 : Word; // war "BG3365" + BG3371 : Word; // war "BG3371" + BG3375 : Word; // war "BG3375" + BG3380 : Word; // war "BG3380" + BG3381 : Word; // war "BG3381" + BG3383 : Word; // war "BG3383" + BG3384 : Word; // war "BG3384" + 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" + MA0087 : Bool; // war "MA0087" + MA0090 : Bool; // war "MA0090" + MA0091 : Bool; // war "MA0091" + MA0092 : Bool; // war "MA0092" + MA0093 : Bool; // war "MA0093" + MA0105 : Bool; // war "MA0105" + MB3353 : Byte; // war "MB3353" + MB3362 : Byte; // war "MB3362" + MB3363 : Byte; // war "MB3363" + MB3365 : Byte; // war "MB3365" + MB3371 : Byte; // war "MB3371" + MB3375 : Byte; // war "MB3375" + MB3381 : Byte; // war "MB3381" + MB3383 : Byte; // war "MB3383" + 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; + 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_vor : 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_UZ0611.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0611.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0094.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start := TRUE; + END_IF; + END_REGION + + REGION Schleuse vor Einfahrt + #Schleuse_vor_Einfahrt(Schleusen_Nr := 3353, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3330, B_InSchleuse := #BG3353, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0087, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3353, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_PS1.Stat.Ast, Error := %DB608.DBW276, 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 + IF #MB3353 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS2.Stat.Ast := FALSE; END_IF; + IF #Schleuse_vor_Einfahrt.Dyn.Status.Trolley_draussen THEN + #DPS2_OmniFahren.Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := FALSE; + #DPS2_OmniFahren.Vorfahrt_Ausfahrweiche."WeicheByPass_von_Haupt-Sep_belegt" := FALSE; + END_IF; + END_REGION + + REGION Weiche Einfahrt + #Antrieb_vor := FALSE; + #Antrieb_start := FALSE; + #Antrieb_stop := FALSE; + #Antrieb_aktiv := (#MA0094 AND #MA0087) AND #MA0062; + #Weiche_Einfahrt(Weichen_Nr := 3362, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS2.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_PS1.Stat.B_Akt, Antrieb_Weiche_aktiv := #Antrieb_aktiv, Antrieb_Gerade_aktiv := #MA0087, Antrieb_Abzweig_aktiv := #MA0090, Weiche_ist_AST := #MB3362, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_PS1.Stat.Ast, Error := %DB608.DBW280, Antrieb_Weiche_vor := #Antrieb_vor, Antrieb_Weiche_stop := #Antrieb_stop, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + IF #Antrieb_vor THEN + #DArbeitspl_tze_Antriebe.MA0094.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0094.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_start := TRUE; + END_IF; + IF #Antrieb_start THEN + #DArbeitspl_tze_Antriebe.MA0094.Stat.Stop_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.Stop_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.Stop_vor := TRUE; + END_IF; + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#A100, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3363, B_an_Platz_1 := #BG3365, B_an_Platz_2 := #BG3371, B_an_Platz_3 := #BG3375, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_PS1.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3381, Y_Vorstau := #MB3363, Y_Platz_1 := #MB3365, Y_Platz_2 := #MB3371, Y_Platz_3 := #MB3375, Antrieb_Vorstau_aktiv := #MA0090, Antrieb_Nachstau_1_aktiv := #MA0091, Antrieb_Nachstau_2_aktiv := #MA0092, Antrieb_Nachstau_3_aktiv := #MA0093, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_PS1.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_PS1.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_PS1.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_PS1.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS1".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS1".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.DBW100, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0050 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3360 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3363, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3362, B_InSchleuse := #BG3363, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0090, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3363, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_PS1.Stat.Ast, Error := %DB608.DBW282, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS1".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3365, ErrQuit := #ErrQuit, B_InSchleuse := #BG3365, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0091, Schleuse_geöffnet := #MB3365, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_PS1.Stat.Ast, Error := %DB608.DBW284, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS1".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 := 3371, ErrQuit := #ErrQuit, B_InSchleuse := #BG3371, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0092, Schleuse_geöffnet := #MB3371, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_PS1.Stat.Ast, Error := %DB608.DBW286, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS1".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 := 3375, ErrQuit := #ErrQuit, B_InSchleuse := #BG3375, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0093, Schleuse_geöffnet := #MB3375, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_PS1.Stat.Ast, Error := %DB608.DBW288, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".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 := 3381, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3380, B_InSchleuse := #BG3381, B_AusSchleuse := #BG3384, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS1.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0093, Antrieb_plus_aktiv := #MA0105, Schleuse_geöffnet := #MB3381, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_PS1.Stat.Ast, Error := %DB608.DBW290, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS1".Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, hStOk := #ErrAnz); + IF #MB3381 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS1.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 + IF #MB3351 OR #MB3353 THEN #DArbeitspl_tze_Zylinder.Weiche_3361.Stat.Ast := FALSE; END_IF; + IF #MB3481 AND #MB3482 THEN #DArbeitspl_tze_Zylinder.Weiche_3361.Stat.Ast := TRUE; END_IF; + IF (#Schleuse_vor_Ausfahrt.Dyn.Status.Trolley_fährt_in_Schleuse AND NOT (#BG3323)) AND NOT (#MB3361) THEN #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor := TRUE; END_IF; + IF #Schleuse_vor_Ausfahrt.Dyn.Status.Trolley_fährt_in_Schleuse AND NOT (#BG3323) THEN + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor := TRUE; + END_IF; + IF #DArbeitspl_tze_Sensoren.An_BG3383.Stat.B_Akt AND NOT (#BG3383) THEN #DArbeitspl_tze_Antriebe.MA0094.Stat.A_vor := TRUE; END_IF; + #B_aktiv := (((#MB3481 AND #MB3482) OR #MB3351) OR #MB3353) OR #BG3361; + #Antrieb_vor := FALSE; + #Antrieb_start := FALSE; + #Antrieb_stop := FALSE; + #Antrieb_aktiv := (#MA0094 AND #MA0087) AND #MA0062; + #Schleuse_vor_Ausfahrt(Schleusen_Nr := 3383, ErrQuit := #ErrQuit, B_VorSchleuse := #B_aktiv, B_InSchleuse := #BG3383, B_AusSchleuse := #BG3384, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS1.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #Antrieb_aktiv, Antrieb_plus_aktiv := #MA0105, Schleuse_geöffnet := #MB3383, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_PS1.Stat.Ast, Error := %DB608.DBW292, Antrieb_Schleuse_vor := #Antrieb_vor, Antrieb_Schleuse_start := #Antrieb_start, Antrieb_Schleuse_stop := #Antrieb_stop, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe.MA0094.Stat.A_PS, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_vor, Antrieb_plus_start := #DArbeitspl_tze_Antriebe.MA0105.Stat.A_start, hStOk := #ErrAnz); + IF #Antrieb_vor THEN + #DArbeitspl_tze_Antriebe.MA0094.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_vor := TRUE; + END_IF; + IF #Antrieb_start THEN + #DArbeitspl_tze_Antriebe.MA0094.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.A_start := TRUE; + END_IF; + IF #Antrieb_stop THEN + #DArbeitspl_tze_Antriebe.MA0094.Stat.Stop_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0087.Stat.Stop_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0062.Stat.Stop_vor := TRUE; + END_IF; + IF #MB3383 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS1.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 Ausfahr-Priorität + #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3383, Haupt_Schleuse_geöffnet := #MB3383, BG_ABP_Schleuse := #BG3381, ABP_Schleuse_geöffnet := #MB3381, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0611.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/PS2_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/PS2_OmniFahren.scl new file mode 100644 index 0000000..9feadbb --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/PS2_OmniFahren.scl @@ -0,0 +1,173 @@ +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 diff --git a/SCL-Export/=A01+UH06-KF00/PS3_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/PS3_OmniFahren.scl new file mode 100644 index 0000000..dd1d32e --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/PS3_OmniFahren.scl @@ -0,0 +1,204 @@ +FUNCTION_BLOCK "PS3_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 + BG3331 : Word; // war "BG3331" + MB3322 : Byte; // war "MB3322" + END_VAR + + VAR_OUTPUT + DPS4_OmniFahren : Word; // war "DPS4_OmniFahren" + PF0044 : Word; // war "PF0044" + PF3300 : Word; // war "PF3300" + END_VAR + + VAR_IN_OUT + BG3270 : Word; // war "BG3270" + BG3293 : Word; // war "BG3293" + BG3294 : Word; // war "BG3294" + BG3302 : Word; // war "BG3302" + BG3303 : Word; // war "BG3303" + BG3305 : Word; // war "BG3305" + BG3311 : Word; // war "BG3311" + BG3315 : Word; // war "BG3315" + BG3320 : Word; // war "BG3320" + BG3321 : Word; // war "BG3321" + BG3322 : Word; // war "BG3322" + BG3323 : Word; // war "BG3323" + 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" + MA0076 : Bool; // war "MA0076" + MA0077 : Bool; // war "MA0077" + MA0080 : Bool; // war "MA0080" + MA0081 : Bool; // war "MA0081" + MA0082 : Bool; // war "MA0082" + MA0087 : Bool; // war "MA0087" + MB3293 : Byte; // war "MB3293" + MB3302 : Byte; // war "MB3302" + MB3303 : Byte; // war "MB3303" + MB3305 : Byte; // war "MB3305" + MB3311 : Byte; // war "MB3311" + MB3315 : Byte; // war "MB3315" + MB3321 : Byte; // war "MB3321" + MB3323 : Byte; // war "MB3323" + 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; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_AusSchleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_vor : Bool; + Antrieb_start : Bool; + Antrieb_PS : 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_UZ0613.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0613.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0082.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 := 3293, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3270, B_InSchleuse := #BG3293, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0082, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3293, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_PS3.Stat.Ast, Error := %DB608.DBW246, 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 + IF #MB3293 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS4.Stat.Ast := FALSE; END_IF; + IF #Schleuse_vor_Einfahrt.Dyn.Status.Trolley_draussen THEN #DPS4_OmniFahren.Vorfahrt_Ausfahrweiche."Weiche_von_Haupt-Sep_belegt" := FALSE; END_IF; + END_REGION + + REGION Weiche Einfahrt + #Weiche_Einfahrt(Weichen_Nr := 3302, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS4.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_PS3.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0082, Antrieb_Gerade_aktiv := #MA0082, Antrieb_Abzweig_aktiv := #MA0076, Weiche_ist_AST := #MB3302, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_PS3.Stat.Ast, Error := %DB608.DBW248, 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_PS3".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#A300, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3303, B_an_Platz_1 := #BG3305, B_an_Platz_2 := #BG3311, B_an_Platz_3 := #BG3315, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_PS3.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3321, Y_Vorstau := #MB3303, Y_Platz_1 := #MB3305, Y_Platz_2 := #MB3311, Y_Platz_3 := #MB3315, Antrieb_Vorstau_aktiv := #MA0076, Antrieb_Nachstau_1_aktiv := #MA0077, Antrieb_Nachstau_2_aktiv := #MA0080, Antrieb_Nachstau_3_aktiv := #MA0081, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_PS3.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_PS3.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_PS3.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_PS3.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS3".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS3".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.DBW104, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0044 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3300 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3303, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3302, B_InSchleuse := #BG3303, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0076, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3303, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_PS3.Stat.Ast, Error := %DB608.DBW250, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS3".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3305, ErrQuit := #ErrQuit, B_InSchleuse := #BG3305, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0077, Schleuse_geöffnet := #MB3305, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_PS3.Stat.Ast, Error := %DB608.DBW252, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS3".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 := 3311, ErrQuit := #ErrQuit, B_InSchleuse := #BG3311, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0080, Schleuse_geöffnet := #MB3311, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_PS3.Stat.Ast, Error := %DB608.DBW254, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS3".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 := 3315, ErrQuit := #ErrQuit, B_InSchleuse := #BG3315, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0081, Schleuse_geöffnet := #MB3315, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_PS3.Stat.Ast, Error := %DB608.DBW256, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".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 := 3321, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3320, B_InSchleuse := #BG3321, B_AusSchleuse := #BG3322, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS3.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0081, Antrieb_plus_aktiv := #MA0087, Schleuse_geöffnet := #MB3321, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_PS3.Stat.Ast, Error := %DB608.DBW258, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".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 #MB3321 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS3.Stat.Ast := TRUE; END_IF; + IF #Schleuse_Ausfahrt.Dyn.Status.Trolley_draussen THEN #Vorfahrt_Ausfahrweiche."Weiche_von_Ausfahr-Sep_belegt" := FALSE; END_IF; + IF (#MB3322 AND #BG3322) AND NOT (#BG3331) THEN #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS3".Stat.A_vor := TRUE; END_IF; + END_REGION + + REGION Schleuse Hauptstrecke vor Ausfahrt + IF #Schleuse_vor_Ausfahrt.Dyn.Status.Trolley_fährt_in_Schleuse AND NOT (#BG3323) THEN #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor := TRUE; END_IF; + #Antrieb_vor := FALSE; + #Antrieb_start := FALSE; + #Antrieb_PS := FALSE; + #Schleuse_vor_Ausfahrt(Schleusen_Nr := 3323, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3294, B_InSchleuse := #BG3323, B_AusSchleuse := #BG3322, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS3.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0087, Antrieb_plus_aktiv := #MA0087, Schleuse_geöffnet := #MB3323, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Ausfahrt_PS3.Stat.Ast, Error := %DB608.DBW260, Antrieb_Schleuse_vor := #Antrieb_vor, Antrieb_Schleuse_start := #Antrieb_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe.MA0087.Stat.Stop_vor, Antrieb_Schleuse_PS := #Antrieb_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // s.o. | s.o. + IF #Antrieb_vor THEN + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_vor := TRUE; + #DArbeitspl_tze_Antriebe.MA0082.Stat.A_vor := TRUE; + END_IF; + IF #Antrieb_start THEN + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe.MA0082.Stat.A_start := TRUE; + END_IF; + IF #Antrieb_PS THEN + #DArbeitspl_tze_Antriebe.MA0087.Stat.A_PS := TRUE; + #DArbeitspl_tze_Antriebe.MA0082.Stat.A_PS := TRUE; + END_IF; + IF #MB3323 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS3.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 Ausfahr-Priorität + #Prio_Ausfahrt(BG_Haupt_Schleuse := #BG3323, Haupt_Schleuse_geöffnet := #MB3323, BG_ABP_Schleuse := #BG3321, ABP_Schleuse_geöffnet := #MB3321, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0613.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/PS4_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/PS4_OmniFahren.scl new file mode 100644 index 0000000..563ecb6 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/PS4_OmniFahren.scl @@ -0,0 +1,171 @@ +FUNCTION_BLOCK "PS4_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 + BG3294 : Word; // war "BG3294" + BG3302 : Word; // war "BG3302" + DZuf_hrung_OmniFahren : Word; // war "DZuführung_OmniFahren" + END_VAR + + VAR_OUTPUT + PF0042 : Word; // war "PF0042" + PF3270 : Word; // war "PF3270" + END_VAR + + VAR_IN_OUT + BG3263 : Word; // war "BG3263" + BG3271 : Word; // war "BG3271" + BG3272 : Word; // war "BG3272" + BG3273 : Word; // war "BG3273" + BG3275 : Word; // war "BG3275" + BG3281 : Word; // war "BG3281" + BG3285 : Word; // war "BG3285" + BG3290 : Word; // war "BG3290" + BG3291 : Word; // war "BG3291" + BG3293 : Word; // war "BG3293" + 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" + MA0072 : Bool; // war "MA0072" + MA0073 : Bool; // war "MA0073" + MA0074 : Bool; // war "MA0074" + MA0075 : Bool; // war "MA0075" + MA0082 : Bool; // war "MA0082" + MB3271 : Byte; // war "MB3271" + MB3272 : Byte; // war "MB3272" + MB3273 : Byte; // war "MB3273" + MB3275 : Byte; // war "MB3275" + MB3281 : Byte; // war "MB3281" + MB3285 : Byte; // war "MB3285" + MB3291 : Byte; // war "MB3291" + MB3293 : Byte; // war "MB3293" + 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; + "Weiche_von_Ausfahr-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_UZ0614.StOk_aktiv; + IF #DAMR_Bereich.A01_UZ0614.StOk_aktiv THEN + #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS4".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS4".Stat.A_start := TRUE; + #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".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 := 3271, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3263, B_InSchleuse := #BG3271, B_AusSchleuse := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0082, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3271, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vor_Einfahrt_PS4.Stat.Ast, Error := %DB608.DBW232, 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 := 3272, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #DArbeitspl_tze_Sensoren.Stau_nach_Einfahrt_PS4.Stat.B_Akt, B_Ziel_abzweig := #DArbeitspl_tze_Sensoren.Stau_Einfahrt_PS4.Stat.B_Akt, Antrieb_Weiche_aktiv := #MA0082, Antrieb_Gerade_aktiv := #MA0082, Antrieb_Abzweig_aktiv := #MA0072, Weiche_ist_AST := #MB3272, Y_Weiche_abzweig := #DArbeitspl_tze_Zylinder.Weiche_Einfahrt_PS4.Stat.Ast, Error := %DB608.DBW234, 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_PS4".Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.Stop_vor, hStOk := #ErrAnz); // s.o. | s.o. + END_REGION + + REGION Schrittketten Arbeitsplätze ver-/entsorgen + #Sks_Arbeitsplatz(Arbeitsplatz_Nr := 16#A400, ErrQuit := #ErrQuit, B_In_Schleuse_Vorstau := #BG3273, B_an_Platz_1 := #BG3275, B_an_Platz_2 := #BG3281, B_an_Platz_3 := #BG3285, B_Nachstau_Einfahrt := #DArbeitspl_tze_Sensoren.Stau_Ausfahrt_PS4.Stat.B_Akt, B_Nachstau_Ausfahrt := #BG3291, Y_Vorstau := #MB3273, Y_Platz_1 := #MB3275, Y_Platz_2 := #MB3281, Y_Platz_3 := #MB3285, Antrieb_Vorstau_aktiv := #MA0072, Antrieb_Nachstau_1_aktiv := #MA0073, Antrieb_Nachstau_2_aktiv := #MA0074, Antrieb_Nachstau_3_aktiv := #MA0075, Y_Weiche_zu_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz1_PS4.Stat.Ast, Y_Weiche_zu_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_zu_Platz2_PS4.Stat.Ast, Y_Weiche_von_Platz_1 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz1_PS4.Stat.Ast, Y_Weiche_von_Platz_2 := #DArbeitspl_tze_Zylinder.Weiche_von_Platz2_PS4.Stat.Ast, Antrieb_Nachstau_1_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS4".Stat.A_vor, Antrieb_Nachstau_2_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS4".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.DBW106, Antrieb_Vorstau_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.A_vor, Antrieb_Nachstau_3_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".Stat.A_vor, hStOk := #ErrAnz); // XY00: X=A(PS), X=B(MPS), Y= Nummer des Platzes + #PF0042 := #DAMR_Bereich.A01_UH06.AnlageEin AND #Sks_Arbeitsplatz.Dyn.Status.Arbeitsplatz_aktiviert; + #PF3270 := #Sks_Arbeitsplatz.Dyn.SS.Externe_Anzeige; + END_REGION + + REGION Schleuse Vorstau + #Schleuse_Vorstau(Schleusen_Nr := 3273, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3272, B_InSchleuse := #BG3273, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0072, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB3273, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Vorstau_PS4.Stat.Ast, Error := %DB608.DBW236, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Einfahrt_PS4".Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse Platz 1 + #Schleuse_Platz_1(Schleusen_Nr := 3275, ErrQuit := #ErrQuit, B_InSchleuse := #BG3275, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0073, Schleuse_geöffnet := #MB3275, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz1_PS4.Stat.Ast, Error := %DB608.DBW238, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau1_PS4".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 := 3281, ErrQuit := #ErrQuit, B_InSchleuse := #BG3281, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0074, Schleuse_geöffnet := #MB3281, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz2_PS4.Stat.Ast, Error := %DB608.DBW240, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Nachstau2_PS4".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 := 3285, ErrQuit := #ErrQuit, B_InSchleuse := #BG3285, Start_Ok := 1, Antrieb_Schleuse_aktiv := 1, Antrieb_plus_aktiv := #MA0075, Schleuse_geöffnet := #MB3285, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Platz3_PS4.Stat.Ast, Error := %DB608.DBW242, Antrieb_plus_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".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 := (#BG3302 AND #DZuf_hrung_OmniFahren.Alle_ABPs_anfahren) OR (#BG3294 AND NOT (#DZuf_hrung_OmniFahren.Alle_ABPs_anfahren)); + #Schleuse_Ausfahrt(Schleusen_Nr := 3291, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3290, B_InSchleuse := #BG3291, B_AusSchleuse := #B_AusSchleuse, B_Stau_raus := #DArbeitspl_tze_Sensoren.Stau_nach_Ausfahrt_PS4.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0075, Antrieb_plus_aktiv := #MA0082, Schleuse_geöffnet := #MB3291, Y_Schleuse_Auf := #DArbeitspl_tze_Zylinder.Schleuse_Ausfahrt_PS4.Stat.Ast, Error := %DB608.DBW244, Antrieb_Schleuse_vor := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".Stat.A_vor, Antrieb_Schleuse_start := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".Stat.A_start, Antrieb_Schleuse_stop := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".Stat.Stop_vor, Antrieb_Schleuse_PS := #DArbeitspl_tze_Antriebe."MA _Ausfahrt_PS4".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 #MB3291 THEN #DArbeitspl_tze_Zylinder.Weiche_Ausfahrt_PS4.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 := #BG3293, Haupt_Schleuse_geöffnet := #MB3293, BG_ABP_Schleuse := #BG3291, ABP_Schleuse_geöffnet := #MB3291, Aktive_ABP := #DPS5_OmniFahren.Aktivierte_ABPs); + END_REGION + + REGION Störungen anzeigen + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DAMR_Bereich.A01_UZ0614.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH06-KF00/PS5_OmniFahren.scl b/SCL-Export/=A01+UH06-KF00/PS5_OmniFahren.scl new file mode 100644 index 0000000..d78e87c --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/PS5_OmniFahren.scl @@ -0,0 +1,197 @@ +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 diff --git a/SCL-Export/=A01+UH06-KF00/Trolley_DL_Check_ID.scl b/SCL-Export/=A01+UH06-KF00/Trolley_DL_Check_ID.scl new file mode 100644 index 0000000..aba5865 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Trolley_DL_Check_ID.scl @@ -0,0 +1,47 @@ +FUNCTION "Trolley_DL_Check_ID" : Void +{ 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 + TrolleyID : DInt; + TrolleyDL_OutDaten : Word; // war "TrolleyDL_OutDaten" + END_VAR + + VAR_OUTPUT + Check_EndZiel : Word; // Ziel + Check_ZwischenZiel : Word; // Für Weiche,... + Check_Variante : Int; // Variante auf Trolley + Check_Standort : Word; // Standort (Puffer, Heber, unterwegs) + Check_ShopGroup : DInt; + Err : Bool; + MD220 : DWord; // war "MD220" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + MW196 : Word; // war "MW196" + END_VAR + +BEGIN + REGION Trolley auslesen + #MD220 := #TrolleyID; + "DatenOut"(SSDB := 1000, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := DB1011.DBX0.0, Position := #MW196); // Eintrag lesen + #Err := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + END_REGION + + REGION Relevante Daten übergeben + #Check_EndZiel := #TrolleyDL_OutDaten.OUTDaten.EndZiel; + #Check_ZwischenZiel := #TrolleyDL_OutDaten.OUTDaten.ZwischenZiel; + #Check_Variante := #TrolleyDL_OutDaten.OUTDaten.ShopGroup; + #Check_Standort := #TrolleyDL_OutDaten.OUTDaten.Standort; + #Check_ShopGroup := #TrolleyDL_OutDaten.OUTDaten.ShopGroup; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/Trolleydaten_löschen.scl b/SCL-Export/=A01+UH06-KF00/Trolleydaten_löschen.scl new file mode 100644 index 0000000..a8230c1 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Trolleydaten_löschen.scl @@ -0,0 +1,36 @@ +FUNCTION "Trolleydaten_löschen" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_SearchDaten : Word; // war "TrolleyDL_SearchDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MW200 : Word; // war "MW200" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolleydaten auslesen und verändern + #TrolleyDL_SearchDaten.SEARCHDaten.TrolleyID := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#E100, SEARCHDATEN := %DB1012.DBX0.0, RE_VAL := #MB198, Position := #MW200, OUTDATEN := %DB1011.DBX0.0); // Eintrag lesen + austragen + RETURN; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/Trolleydaten_neu_anlegen.scl b/SCL-Export/=A01+UH06-KF00/Trolleydaten_neu_anlegen.scl new file mode 100644 index 0000000..20b943a --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Trolleydaten_neu_anlegen.scl @@ -0,0 +1,51 @@ +FUNCTION "Trolleydaten_neu_anlegen" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + Endziel : Word; + ShopGroup : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_INDaten : Word; // war "TrolleyDL_INDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + END_VAR + + VAR_TEMP + Lager_DB : Int; + Lager_DW : Int; + SSDW : Int; + Position : Int; + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Erst mal alte Daten löschen + "Trolleydaten_löschen"(MB198 => "MB198", MW200 => "MW200", TrolleyDL_SearchDaten => "TrolleyDL_SearchDaten"); + END_REGION + + REGION Trolleydaten speichern + #TrolleyDL_INDaten.INDaten.TrolleyID := #TrolleyID; + #TrolleyDL_INDaten.INDaten.EndZiel := #Endziel; + #TrolleyDL_INDaten.INDaten.ShopGroup := #ShopGroup; + #TrolleyDL_INDaten.INDaten.ZwischenZiel := 0; + #TrolleyDL_INDaten.INDaten.Standort := 0; + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1010.DBX0.0, RE_VAL := #MB198); // Daten in Datenbank schreiben: + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/Trolleydaten_ändern.scl b/SCL-Export/=A01+UH06-KF00/Trolleydaten_ändern.scl new file mode 100644 index 0000000..c6c678d --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Trolleydaten_ändern.scl @@ -0,0 +1,43 @@ +FUNCTION "Trolleydaten_ändern" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + Endziel : Word; + ShopGroup : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_OutDaten : Word; // war "TrolleyDL_OutDaten" + TrolleyDL_SearchDaten : Word; // war "TrolleyDL_SearchDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MW200 : Word; // war "MW200" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolleydaten auslesen und verändern + #TrolleyDL_SearchDaten.SEARCHDaten.TrolleyID := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#0000, SEARCHDATEN := %DB1012.DBX0.0, RE_VAL := #MB198, Position := #MW200, OUTDATEN := %DB1011.DBX0.0); // Eintrag lesen + IF #MB198 <> 2#10000000 THEN RETURN; END_IF; + IF #Endziel <> -1 THEN #TrolleyDL_OutDaten.OUTDaten.EndZiel := #Endziel; END_IF; + IF #ShopGroup <> -1 THEN #TrolleyDL_OutDaten.OUTDaten.ShopGroup := #ShopGroup; END_IF; + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1011.DBX0.0, RE_VAL := #MB198); + RETURN; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/Wandel_FC_für_DB1000.scl b/SCL-Export/=A01+UH06-KF00/Wandel_FC_für_DB1000.scl new file mode 100644 index 0000000..1d9bbd6 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Wandel_FC_für_DB1000.scl @@ -0,0 +1,24 @@ +FUNCTION "Wandel_FC_für_DB1000" : Void +{ 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 + MD94 : DWord; // war "MD94" + END_VAR + + VAR_OUTPUT + MW92 : Word; // war "MW92" + END_VAR + +BEGIN + REGION Wandeln der Daten + #MW92 := #MD94 + -6040000; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Daten_Host_senden.scl b/SCL-Export/=A01+UH07-KF00/Daten_Host_senden.scl new file mode 100644 index 0000000..6162a82 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Daten_Host_senden.scl @@ -0,0 +1,39 @@ +FUNCTION_BLOCK "Daten_Host_senden" +{ 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 + Port1_SendFIFO : Word; // war "Port1_SendFIFO" + Port2_SendFIFO : Word; // war "Port2_SendFIFO" + SF0002 : Word; // war "SF0002" + END_VAR + + VAR_OUTPUT + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + END_VAR + + VAR + Port1_senden { S7_SetPoint := 'False'} : "Port1_Daten_senden"; + Port2_senden { S7_SetPoint := 'False'} : "Port2_Daten_senden"; + END_VAR + +BEGIN + REGION Daten über Port 1 senden + #Port1_senden(); + IF #Port1_SendFIFO.ANZAHL > 70 THEN #g_7_HMI_Err_UH07_OB.Kommunikation.SendFIFO_Port1 := TRUE; END_IF; + IF (#Port1_SendFIFO.ANZAHL < 40) AND #SF0002 THEN #g_7_HMI_Err_UH07_OB.Kommunikation.SendFIFO_Port1 := FALSE; END_IF; + END_REGION + + REGION Daten über Port 2 senden + #Port2_senden(); + IF #Port2_SendFIFO.ANZAHL > 70 THEN #g_7_HMI_Err_UH07_OB.Kommunikation.SendFIFO_Port2 := TRUE; END_IF; + IF (#Port2_SendFIFO.ANZAHL < 40) AND #SF0002 THEN #g_7_HMI_Err_UH07_OB.Kommunikation.SendFIFO_Port2 := FALSE; END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/Daten_von_Host_empfangen.scl b/SCL-Export/=A01+UH07-KF00/Daten_von_Host_empfangen.scl new file mode 100644 index 0000000..44114ba --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Daten_von_Host_empfangen.scl @@ -0,0 +1,35 @@ +FUNCTION_BLOCK "Daten_von_Host_empfangen" +{ 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_IN_OUT + M8999_0 : Bool; // war "M8999.0" + MW196 : Word; // war "MW196" + END_VAR + + VAR + Port1_empfangen { S7_SetPoint := 'False'} : "Port1_Daten_empfangen"; + Port2_empfangen { S7_SetPoint := 'False'} : "Port2_Daten_empfangen"; + END_VAR + +BEGIN + REGION Testdaten übergeben + IF #M8999_0 THEN #M8999_0 := FALSE; END_IF; + IF #M8999_0 THEN "DBMOV"(QuellDB := 8999, QuellDW := 0, ZielDB := 9001, ZielDW := 0, Anzahl_DW := 15, RE_VAL := #MW196); END_IF; + END_REGION + + REGION Daten über Port 1 empfangen + #Port1_empfangen(); + END_REGION + + REGION Daten über Port 2 empfangen + #Port2_empfangen(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/EP_Bereich.scl b/SCL-Export/=A01+UH07-KF00/EP_Bereich.scl new file mode 100644 index 0000000..35fd50a --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/EP_Bereich.scl @@ -0,0 +1,20 @@ +FUNCTION "EP_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DEP_Sensoren"(); + "DEP_OmniFahren"(); + "DEntnahmePufferStrecken"(); + "DEP_Sorter"(); + "DEP_Zylinder"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/EP_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/EP_OmniFahren.scl new file mode 100644 index 0000000..3f16c96 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/EP_OmniFahren.scl @@ -0,0 +1,75 @@ +FUNCTION_BLOCK "EP_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_OUTPUT + DEP_Sorter : Word; // war "DEP_Sorter" + END_VAR + + VAR_IN_OUT + BG4502 : Word; // war "BG4502" + BG4503 : Word; // war "BG4503" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + DVPtoEP_Antriebe : Word; // war "DVPtoEP_Antriebe" + MA0325 : Bool; // war "MA0325" + MB4503 : Byte; // war "MB4503" + END_VAR + + VAR + Schleuse_4503 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + EP_1_voll { S7_SetPoint := 'True'} : Bool; + EP_2_voll { S7_SetPoint := 'True'} : Bool; + EP_3_voll { S7_SetPoint := 'True'} : Bool; + EP_4_voll { S7_SetPoint := 'True'} : Bool; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_4503.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4503.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + END_REGION + + REGION Störungen quittieren UZ7402 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7402.StOk_aktiv OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4503 + #Schleuse_4503(Schleusen_Nr := 4503, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4502, B_InSchleuse := #BG4503, B_AusSchleuse := , Antrieb_Schleuse_aktiv := #MA0325, Schleuse_geöffnet := #MB4503, Error := %DB708.DBW564, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0325.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0325.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0325.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0325.Stat.A_PS, hStOk := #ErrAnz); // weiterfahrt über Sorter-Sep + IF #Schleuse_4503.Dyn.Status.Reset_aktiv THEN + #DEP_Sorter.Sorter_MB4503.Dyn.Scanner.Rec_IDX := 0; + #DEP_Sorter.Sorter_MB4503.Separator.Default_Ziel := 0; + #DEP_Sorter.Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel := 0; + END_IF; + END_REGION + + REGION Störungen anzeigen UZ7402 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7402.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/EP_Ziel_FC.scl b/SCL-Export/=A01+UH07-KF00/EP_Ziel_FC.scl new file mode 100644 index 0000000..7284be5 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/EP_Ziel_FC.scl @@ -0,0 +1,108 @@ +FUNCTION "EP_Ziel_FC" : Void +{ 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 + g_10s_Impuls : Word; // war "10s-Impuls" + DEP_Sensoren : Word; // war "DEP_Sensoren" + EP_TravelFIFO : Bool; // war "EP_TravelFIFO" + Error_Bit : Bool; // war "Error.Bit" + MB4503 : Byte; // war "MB4503" + MW190 : Word; // war "MW190" + SGes : Word; // war "SGes" + END_VAR + + VAR_OUTPUT + DEP_Sorter : Word; // war "DEP_Sorter" + Daten_f_r_SendFIFO : Word; // war "Daten_für_SendFIFO" + M180_6 : Bool; // war "M180.6" + END_VAR + + VAR_IN_OUT + DEP_OmniFahren : Word; // war "DEP_OmniFahren" + MB199 : Byte; // war "MB199" + MW194 : Word; // war "MW194" + END_VAR + + VAR_TEMP + Ziel_hex : Word; + Ziel_int : Int; + Zielebene : Word; + Error : Byte; + Position : Int; + Lager_DB : Int; + Lager_DW : Int; + AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) + AR1Start : DInt; // Startwert mit Offset 0 + SSDW : Int; + EndZiel : Word; + Variante : Int; + AbrufID : DInt; + Fahrlisten_TrolleyID : DInt; + Fahrlisten_AbrufID : DInt; + Fahrlisten_Lager : Int; + Trolley_unbekannt : Bool; // Trolley ist nicht in DL + Express_Abruf : Bool; + "Error.Bit" : Bool; + END_VAR + +BEGIN + REGION Rückmeldung + #M180_6 := FALSE; + END_REGION + + REGION Schleuse 4503: Weiterfahren erlaubt ? (Sorter EP) + IF #MW190 <> 4503 THEN GOTO X4503E; END_IF; + IF (#EP_TravelFIFO.Travel_FIFO_BG4527.FIFO.ANZAHL <> 0) OR #MB4503 THEN RETURN; END_IF; + IF #SGes.Ohne_PC_Fahren THEN GOTO Sim; END_IF; + IF #SGes.Ohne_PC_Fahren AND NOT (#DEP_OmniFahren.Schleuse_4503.Status2.Telegramm_gesendet) THEN GOTO T4503; END_IF; + SimOk: ; + "BCD (4stellig)_to_INT"(BCD_Wert := #MW194, Int_Wert := #Ziel_int); + IF (#Ziel_int = 1) AND NOT (#DEP_Sensoren.Stau_EP1.Stat.B_Akt) THEN GOTO ZielOk; END_IF; + IF (#Ziel_int = 2) AND NOT (#DEP_Sensoren.Stau_EP2.Stat.B_Akt) THEN GOTO ZielOk; END_IF; + IF (#Ziel_int = 3) AND NOT (#DEP_Sensoren.Stau_EP3.Stat.B_Akt) THEN GOTO ZielOk; END_IF; + IF (#Ziel_int = 4) AND NOT (#DEP_Sensoren.Stau_EP4.Stat.B_Akt) THEN GOTO ZielOk; END_IF; + IF ((#Ziel_int = 4) AND NOT (#DEP_Sensoren.Stau_EP4.Stat.B_Akt)) AND #g_10s_Impuls THEN #DEP_OmniFahren.Schleuse_4503.Status2.Telegramm_gesendet := FALSE; END_IF; + RETURN; + ZielOk: ; + #DEP_Sorter.Sorter_MB4503.Separator.Default_Ziel := #Ziel_int + 200; + #DEP_Sorter.Sorter_MB4503.Dyn.Scanner.Rec_DEST_Ziel := #Ziel_int + 200; + #DEP_Sorter.Sorter_MB4503.Dyn.Scanner.Rec_IDX := #DEP_OmniFahren.Schleuse_4503.Dyn.TrolleyID_Schleuse; + IF FALSE THEN #M180_6 := TRUE; END_IF; + RETURN; + T4503: ; + IF #DEP_OmniFahren.Schleuse_4503.Dyn.TrolleyID_Schleuse = 0 THEN RETURN; END_IF; + #Daten_f_r_SendFIFO."Status_2_Bit[0]" := #DEP_Sensoren.Stau_EP1.Stat.B_Akt; + #Daten_f_r_SendFIFO."Status_2_Bit[1]" := #DEP_Sensoren.Stau_EP2.Stat.B_Akt; + #Daten_f_r_SendFIFO."Status_2_Bit[2]" := #DEP_Sensoren.Stau_EP3.Stat.B_Akt; + #Daten_f_r_SendFIFO."Status_2_Bit[3]" := #DEP_Sensoren.Stau_EP4.Stat.B_Akt; + "Daten_für_SendFIFO"("TelegrammKennung[1]" := 'G', "TelegrammKennung[2]" := 'O', "TelegrammKennung[3]" := 'H', "TelegrammKennung[4]" := 'D', "TelegrammKennung[5]" := 'R', "TelegrammKennung[6]" := 'e', "TelegrammKennung[7]" := 'q', "TelegrammKennung[8]" := 'M', TrolleyID := #DEP_OmniFahren.Schleuse_4503.Dyn.TrolleyID_Schleuse, StationsNr := 4503, Port := 2, Ret_Val_FIFO_IN := #MB199, Error := ##Error_Bit); + IF NOT (##Error_Bit) THEN #DEP_OmniFahren.Schleuse_4503.Status2.Telegramm_gesendet := TRUE; END_IF; + RETURN; + Sim: ; + IF #DEP_Sensoren.Stau_EP1.Stat.B_Akt THEN #DEP_OmniFahren.EP_1_voll := TRUE; END_IF; + IF NOT (#DEP_OmniFahren.EP_1_voll) THEN GOTO StartSim; END_IF; + IF NOT (#DEP_OmniFahren.EP_1_voll) AND #DEP_Sensoren.Stau_EP2.Stat.B_Akt THEN #DEP_OmniFahren.EP_2_voll := TRUE; END_IF; + IF NOT (#DEP_OmniFahren.EP_2_voll) THEN GOTO StartSim; END_IF; + IF NOT (#DEP_OmniFahren.EP_2_voll) AND #DEP_Sensoren.Stau_EP3.Stat.B_Akt THEN #DEP_OmniFahren.EP_3_voll := TRUE; END_IF; + IF NOT (#DEP_OmniFahren.EP_3_voll) THEN GOTO StartSim; END_IF; + IF NOT (#DEP_OmniFahren.EP_3_voll) AND #DEP_Sensoren.Stau_EP4.Stat.B_Akt THEN #DEP_OmniFahren.EP_4_voll := TRUE; END_IF; + IF NOT (#DEP_OmniFahren.EP_4_voll) THEN GOTO StartSim; END_IF; + #DEP_OmniFahren.EP_1_voll := FALSE; + #DEP_OmniFahren.EP_2_voll := FALSE; + #DEP_OmniFahren.EP_3_voll := FALSE; + #DEP_OmniFahren.EP_4_voll := FALSE; + RETURN; + StartSim: ; + #MW194 := 16#4; + GOTO SimOk; + X4503E: ; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/EPtoLP_Bereich.scl b/SCL-Export/=A01+UH07-KF00/EPtoLP_Bereich.scl new file mode 100644 index 0000000..dec82a5 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/EPtoLP_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "EPtoLP_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DEPtoLP_Sensoren"(); + "DEPtoLP_OmniFahren"(); + "DEPtoLP_Zylinder"(); + "DEPtoLP_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/EPtoLP_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/EPtoLP_OmniFahren.scl new file mode 100644 index 0000000..365dbfc --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/EPtoLP_OmniFahren.scl @@ -0,0 +1,299 @@ +FUNCTION_BLOCK "EPtoLP_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 + g_1s_Impuls : Word; // war "1s-Impuls" + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + MB4445 : Byte; // war "MB4445" + MB4457 : Byte; // war "MB4457" + END_VAR + + VAR_IN_OUT + BG3303 : Word; // war "BG3303" + BG3304 : Word; // war "BG3304" + BG3367 : Word; // war "BG3367" + BG3370 : Word; // war "BG3370" + BG3372 : Word; // war "BG3372" + BG3373 : Word; // war "BG3373" + BG3377 : Word; // war "BG3377" + BG4455 : Word; // war "BG4455" + BG4456 : Word; // war "BG4456" + BG4457 : Word; // war "BG4457" + BG4460 : Word; // war "BG4460" + BG4461 : Word; // war "BG4461" + BG4462 : Word; // war "BG4462" + BG4463 : Word; // war "BG4463" + BG4464 : Word; // war "BG4464" + BG4465 : Word; // war "BG4465" + BG4466 : Word; // war "BG4466" + BG4467 : Word; // war "BG4467" + BG4511 : Word; // war "BG4511" + BG4512 : Word; // war "BG4512" + BG4513 : Word; // war "BG4513" + BG4514 : Word; // war "BG4514" + BG4515 : Word; // war "BG4515" + BG4516 : Word; // war "BG4516" + BG4517 : Word; // war "BG4517" + BG4520 : Word; // war "BG4520" + BG4521 : Word; // war "BG4521" + BG4522 : Word; // war "BG4522" + BG4531 : Word; // war "BG4531" + BG4532 : Word; // war "BG4532" + DEPtoLP_Antriebe : Word; // war "DEPtoLP_Antriebe" + DEPtoLP_Sensoren : Word; // war "DEPtoLP_Sensoren" + DEPtoLP_Zylinder : Word; // war "DEPtoLP_Zylinder" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + MA0062 : Bool; // war "MA0062" + MA0063 : Bool; // war "MA0063" + MA0064 : Bool; // war "MA0064" + MA0326 : Bool; // war "MA0326" + MA0327 : Bool; // war "MA0327" + MA0330 : Bool; // war "MA0330" + MA0331 : Bool; // war "MA0331" + MA0332 : Bool; // war "MA0332" + MA0333 : Bool; // war "MA0333" + MB3303 : Byte; // war "MB3303" + MB3370 : Byte; // war "MB3370" + MB4462 : Byte; // war "MB4462" + MB4463 : Byte; // war "MB4463" + MB4466 : Byte; // war "MB4466" + MB4512 : Byte; // war "MB4512" + MB4516 : Byte; // war "MB4516" + MB4520 : Byte; // war "MB4520" + MB4522 : Byte; // war "MB4522" + MB4532 : Byte; // war "MB4532" + END_VAR + + VAR + Schleuse_4512 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_4532 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_4516 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_4520 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_4456 : "MHMOmniBereich_Plus"; + Schleuse_4466 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_4462 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Bereich_4465 : "MHMOmniBereich_Plus"; + Schleuse_3370 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3373 : "MHMOmniBereich_Plus"; + Schleuse_3303 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_4522 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_4463 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Übergang_4514 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse"; + Trolleys_starten : Struct + Flanke : Bool; + Wartezeit_aktiv : Bool; + Timer_Wartenzeit { S7_SetPoint := 'True'} : Int; + END_STRUCT; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + tGen1_Flanke : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_4512.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4532.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4516.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4522.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4520.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4456.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4466.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4462.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4463.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4465.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3370.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_3373.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3303.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4512.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4532.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4516.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4522.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4520.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Bereich_4456.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4466.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4462.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4463.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Bereich_4465.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_3370.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Bereich_3373.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3303.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + END_REGION + + REGION Störungen quittieren UZ7402/7403 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7402.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7403.StOk_aktiv) OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4512 + #Schleuse_4512(Schleusen_Nr := 4512, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4511, B_InSchleuse := #BG4512, B_Zähl := #BG4531, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4531.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0326, Schleuse_geöffnet := #MB4512, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4512.Stat.Ast, Error := %DB708.DBW576, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0326.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0326.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0326.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0326.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Schleuse 4532 + #Stau_raus := #DEPtoLP_Sensoren.Stau_BG4513.Stat.B_Akt; // / O "DEP>LP_Sensoren".Stau_BG4515.Stat.B_Akt + #Schleuse_4532(Schleusen_Nr := 4532, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4531, B_InSchleuse := #BG4532, B_Zähl := #BG4513, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0326, Antrieb_plus_aktiv := #MA0326, Schleuse_geöffnet := #MB4532, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4532.Stat.Ast, Error := %DB708.DBW578, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0326.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0326.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0326.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0326.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION MA0326 / Übergang 4514 + #Übergang_4514(ErrQuit := #ErrQuit, B_Anfang := #BG4513, B_Am_Übergang := #BG4514, B_Stau_Antrieb_plus := #BG4515, Antrieb_aktiv := #MA0326, Antrieb_plus_aktiv := #MA0327, Antrieb_vor := #DEPtoLP_Antriebe.MA0326.Stat.A_vor, Antrieb_start := #DEPtoLP_Antriebe.MA0326.Stat.A_start, Antrieb_stop := #DEPtoLP_Antriebe.MA0326.Stat.A_PS, Antrieb_plus_vor := #DEPtoLP_Antriebe.MA0327.Stat.A_vor, Antrieb_plus_start := #DEPtoLP_Antriebe.MA0327.Stat.A_start); + END_REGION + + REGION Schleuse 4516 + #Schleuse_4516(Schleusen_Nr := 4516, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4515, B_InSchleuse := #BG4516, B_AusSchleuse := #BG4517, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4517.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0327, Antrieb_plus_aktiv := #MA0327, Schleuse_geöffnet := #MB4516, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4516.Stat.Ast, Error := %DB708.DBW566, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0327.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0327.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0327.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Schleuse 4522 + #Schleuse_4522(Schleusen_Nr := 4522, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4517, B_InSchleuse := #BG4522, B_AusSchleuse := #BG4521, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4521.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0327, Antrieb_plus_aktiv := #MA0327, Schleuse_geöffnet := #MB4522, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4522.Stat.Ast, Error := %DB708.DBW582, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0327.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0327.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0327.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) + #tGen1_Flanke := #MB4520 AND NOT #Trolleys_starten.Flanke; + #Trolleys_starten.Flanke := #MB4520; + IF #tGen1_Flanke THEN #Trolleys_starten.Wartezeit_aktiv := TRUE; END_IF; + IF #tGen1_Flanke THEN #Trolleys_starten.Timer_Wartenzeit := 15; END_IF; + IF NOT (#Trolleys_starten.Wartezeit_aktiv) OR ((#MB4520 AND NOT (#MA0327)) OR NOT (#g_1s_Impuls)) THEN GOTO Wait; END_IF; + #Trolleys_starten.Timer_Wartenzeit := #Trolleys_starten.Timer_Wartenzeit + -1; + IF (#Trolleys_starten.Timer_Wartenzeit + -1) > 0 THEN GOTO Wait; END_IF; + #Trolleys_starten.Wartezeit_aktiv := FALSE; + Wait: ; + END_REGION + + REGION Schleuse 4520 + #Fahren_Ok := NOT (#Trolleys_starten.Wartezeit_aktiv); + #B_vor_Schleuse := #BG4517 OR #BG4521; + #Schleuse_4520(Schleusen_Nr := 4520, ErrQuit := #ErrQuit, B_VorSchleuse := #B_vor_Schleuse, B_InSchleuse := #BG4520, B_AusSchleuse := #BG4455, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4455.Stat.B_Akt, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := #MA0327, Antrieb_plus_aktiv := #MA0330, Schleuse_geöffnet := #MB4520, RestZeit_Bereich_plus := #Bereich_4456.Dyn.Restzeit, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4520.Stat.Ast, Error := %DB708.DBW568, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0327.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0327.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0327.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0327.Stat.A_PS, Antrieb_plus_vor := #Bereich_4456.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7402/7403 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7402.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7403.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7402/7401 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7402.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7401.StOk_aktiv) OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 4456 + #B_vor_Schleuse := #MB4520 AND #BG4455; + #Stau_raus := #DEPtoLP_Sensoren.Stau_BG4457.Stat.B_Akt OR #DEPtoLP_Sensoren.Stau_BG4467.Stat.B_Akt; + #Bereich_4456(Bereichs_Nr := 4456, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4456, B_Zähl := #BG4467, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0330, Antrieb_plus_aktiv := #MA0331, Antrieb_Bereich_vor := #DEPtoLP_Antriebe.MA0330.Stat.A_vor, Antrieb_Bereich_stop := #DEPtoLP_Antriebe.MA0330.Stat.Stop_vor, Error := %DB708.DBW478, Antrieb_Bereich_start := #DEPtoLP_Antriebe.MA0330.Stat.A_start, Antrieb_plus_vor := #DEPtoLP_Antriebe.MA0331.Stat.A_vor, Antrieb_plus_start := #DEPtoLP_Antriebe.MA0331.Stat.A_start, Antrieb_minus_vor := #DEPtoLP_Antriebe.MA0327.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7402/7401 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7402.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7401.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7401 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7401.StOk_aktiv OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4466 + #Start_ok := NOT (#MB4445) AND NOT (#MB4457); + #Schleuse_4466(Schleusen_Nr := 4466, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4457, B_InSchleuse := #BG4466, B_Zähl := #BG4461, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4461.Stat.B_Akt, Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0331, Antrieb_plus_aktiv := #MA0332, Schleuse_geöffnet := #MB4466, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4466.Stat.Ast, Error := %DB708.DBW562, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0331.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0331.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0331.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0331.Stat.A_PS, Antrieb_plus_vor := #DEPtoLP_Antriebe.MA0332.Stat.A_vor, Antrieb_plus_start := #DEPtoLP_Antriebe.MA0332.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 4462 + #Schleuse_4462(Schleusen_Nr := 4462, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4461, B_InSchleuse := #BG4462, B_Zähl := #BG4460, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4460.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0332, Schleuse_geöffnet := #MB4462, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4462.Stat.Ast, Error := %DB708.DBW560, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0332.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0332.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0332.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0332.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 4463 + #Schleuse_4463(Schleusen_Nr := 4463, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4460, B_InSchleuse := #BG4463, B_AusSchleuse := #BG4464, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG4464.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0332, Antrieb_plus_aktiv := #MA0333, Schleuse_geöffnet := #MB4463, RestZeit_Bereich_plus := #Bereich_4465.Dyn.Restzeit, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_4463.Stat.Ast, Error := %DB708.DBW584, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0332.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0332.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0332.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0332.Stat.A_PS, Antrieb_plus_vor := #Bereich_4465.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 4465 (vor BST 1) + #Fahren_Ok := ((((NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle3) AND NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle4)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Feueralarm)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Geschlossen)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Störung)) AND #Schleuse_3370.Dyn.Sk.Bereich_ok; + #Bereich_4465(Bereichs_Nr := 4465, ErrQuit := #ErrQuit, B_BereichsAnfang := #BG4464, B_BereichsEnde := #BG4465, B_Zähl := #BG3367, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG3367.Stat.B_Akt, Start_Ok := #Fahren_Ok, Antrieb_Bereich_aktiv := #MA0333, Antrieb_plus_aktiv := #MA0062, Antrieb_Bereich_vor := #DEPtoLP_Antriebe.MA0333.Stat.A_vor, Antrieb_Bereich_stop := #DEPtoLP_Antriebe.MA0333.Stat.Stop_vor, Error := %DB708.DBW480, Antrieb_Bereich_start := #DEPtoLP_Antriebe.MA0333.Stat.A_start, Antrieb_plus_vor := #DEPtoLP_Antriebe.MA0062.Stat.A_vor, Antrieb_plus_start := #DEPtoLP_Antriebe.MA0062.Stat.A_start, Antrieb_minus_vor := #DEPtoLP_Antriebe.MA0332.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7401 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7401.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0701 + #ErrQuit := #DOutbound_Bereich.A01_UZ0701.StOk_aktiv OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3370 (hinter BST 1) + IF #Bereich_4465.Dyn.Status.Trolley_fährt_aus OR (#DEPtoLP_Sensoren.Stau_BG3367.Stat.B_Akt AND NOT (#BG3370)) THEN #DEPtoLP_Antriebe.MA0062.Stat.A_vor := TRUE; END_IF; + #Stau_raus := (#DEPtoLP_Sensoren.Stau_BG3371.Stat.B_Akt OR #DEPtoLP_Sensoren.Stau_BG3372.Stat.B_Akt) OR #DEPtoLP_Sensoren.Stau_BG3377.Stat.B_Akt; + #Schleuse_3370(Schleusen_Nr := 3370, ErrQuit := #ErrQuit, B_VorSchleuse := #DEPtoLP_Sensoren.Stau_BG3367.Stat.B_Akt, B_InSchleuse := #BG3370, B_AusSchleuse := #BG3372, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0062, Antrieb_plus_aktiv := #MA0063, Schleuse_geöffnet := #MB3370, RestZeit_Bereich_plus := #Bereich_3373.Dyn.Restzeit, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_3370.Stat.Ast, Error := %DB708.DBW532, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0062.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0062.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0062.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0062.Stat.A_PS, Antrieb_plus_vor := #Bereich_3373.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ0701 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0701.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0701/0702 + #ErrQuit := (#DOutbound_Bereich.A01_UZ0701.StOk_aktiv OR #DOutbound_Bereich.A01_UZ0702.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 3373 (Runter ins EG) + #B_vor_Schleuse := #MB3370 AND #BG3372; + #Stau_raus := #DEPtoLP_Sensoren.Stau_BG3376.Stat.B_Akt OR #DEPtoLP_Sensoren.Stau_BG3377.Stat.B_Akt; + #Bereich_3373(Bereichs_Nr := 3373, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3373, B_Zähl := #BG3377, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0063, Antrieb_plus_aktiv := #MA0064, Antrieb_Bereich_vor := #DEPtoLP_Antriebe.MA0063.Stat.A_vor, Antrieb_Bereich_stop := #DEPtoLP_Antriebe.MA0063.Stat.Stop_vor, Error := %DB708.DBW456, Antrieb_Bereich_start := #DEPtoLP_Antriebe.MA0063.Stat.A_start, Antrieb_plus_vor := #DEPtoLP_Antriebe.MA0064.Stat.A_vor, Antrieb_plus_start := #DEPtoLP_Antriebe.MA0064.Stat.A_start, Antrieb_minus_vor := #DEPtoLP_Antriebe.MA0062.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ0701/0702 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0701.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ0702.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0702 + #ErrQuit := #DOutbound_Bereich.A01_UZ0702.StOk_aktiv OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3303 + #Schleuse_3303(Schleusen_Nr := 3303, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3377, B_InSchleuse := #BG3303, B_AusSchleuse := #BG3304, B_Stau_raus := #DEPtoLP_Sensoren.Stau_BG3304.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0064, Antrieb_plus_aktiv := #MA0064, Schleuse_geöffnet := #MB3303, Y_Schleuse_Auf := #DEPtoLP_Zylinder.Schleuse_3303.Stat.Ast, Error := %DB708.DBW522, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0064.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0064.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0064.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0064.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // wie oben + END_REGION + + REGION Störungen anzeigen UZ0702 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0702.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/HWtoOB_Bereich.scl b/SCL-Export/=A01+UH07-KF00/HWtoOB_Bereich.scl new file mode 100644 index 0000000..8ba1040 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/HWtoOB_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "HWtoOB_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DHWtoVP_Sensoren"(); + "DHWtoVP_OmniFahren"(); + "DHWtoVP_Zylinder"(); + "DHWtoVP_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/HWtoVP_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/HWtoVP_OmniFahren.scl new file mode 100644 index 0000000..8b2426c --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/HWtoVP_OmniFahren.scl @@ -0,0 +1,352 @@ +FUNCTION_BLOCK "HWtoVP_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 + BG3133 : Word; // war "BG3133" + DI0246 : Word; // war "DI0246" + DI0247 : Word; // war "DI0247" + MB4210 : Byte; // war "MB4210" + MB4223 : Byte; // war "MB4223" + END_VAR + + VAR_OUTPUT + DQ0246 : Word; // war "DQ0246" + DQ0247 : Word; // war "DQ0247" + PF0136 : Word; // war "PF0136" + END_VAR + + VAR_IN_OUT + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + BG3127 : Word; // war "BG3127" + BG3130 : Word; // war "BG3130" + BG3131 : Word; // war "BG3131" + BG3132 : Word; // war "BG3132" + BG3134 : Word; // war "BG3134" + BG3135 : Word; // war "BG3135" + BG3136 : Word; // war "BG3136" + BG3141 : Word; // war "BG3141" + BG3142 : Word; // war "BG3142" + BG3143 : Word; // war "BG3143" + BG3144 : Word; // war "BG3144" + BG3145 : Word; // war "BG3145" + BG3724 : Word; // war "BG3724" + BG3725 : Word; // war "BG3725" + BG3730 : Word; // war "BG3730" + BG3731 : Word; // war "BG3731" + BG4200 : Word; // war "BG4200" + BG4201 : Word; // war "BG4201" + BG4202 : Word; // war "BG4202" + BG4203 : Word; // war "BG4203" + BG4204 : Word; // war "BG4204" + BG4205 : Word; // war "BG4205" + BG4206 : Word; // war "BG4206" + BG4207 : Word; // war "BG4207" + BG4211 : Word; // war "BG4211" + BG4212 : Word; // war "BG4212" + BG4213 : Word; // war "BG4213" + BG4214 : Word; // war "BG4214" + BG4215 : Word; // war "BG4215" + BG4216 : Word; // war "BG4216" + BG4217 : Word; // war "BG4217" + DHWtoVP_Antriebe : Word; // war "DHWtoVP_Antriebe" + DHWtoVP_Sensoren : Word; // war "DHWtoVP_Sensoren" + DHWtoVP_Zylinder : Word; // war "DHWtoVP_Zylinder" + DLPtoHW_Antriebe : Word; // war "DLPtoHW_Antriebe" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + DSchnittstelle_zu_AMR : Word; // war "DSchnittstelle_zu_AMR" + MA0140 : Bool; // war "MA0140" + MA0141 : Bool; // war "MA0141" + MA0142 : Bool; // war "MA0142" + MA0143 : Bool; // war "MA0143" + MA0144 : Bool; // war "MA0144" + MA0200 : Bool; // war "MA0200" + MA0201 : Bool; // war "MA0201" + MA0260 : Bool; // war "MA0260" + MA0261 : Bool; // war "MA0261" + MA0262 : Bool; // war "MA0262" + MA0263 : Bool; // war "MA0263" + MA0264 : Bool; // war "MA0264" + MB3131 : Byte; // war "MB3131" + MB3134 : Byte; // war "MB3134" + MB3136 : Byte; // war "MB3136" + MB3140 : Byte; // war "MB3140" + MB3141 : Byte; // war "MB3141" + MB3143 : Byte; // war "MB3143" + MB3725 : Byte; // war "MB3725" + MB4200 : Byte; // war "MB4200" + MB4207 : Byte; // war "MB4207" + MB4212 : Byte; // war "MB4212" + MB4214 : Byte; // war "MB4214" + MB4217 : Byte; // war "MB4217" + END_VAR + + VAR + Schleuse_3725 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3731 : "MHMOmniBereich_Plus"; + Schleuse_4200 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_4203 : "MHMOmniBereich_Plus"; + Schleuse_4207 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_4212 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_4214 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3145 : "MHMOmniBereich_Plus"; + Schleuse_3143 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_3141 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Weiche_3140 : "MHMOmniWeiche_Plus"; + Schleuse_3131 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3134 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3136 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_4217 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Übergang_4205 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse"; + Test_RFID : Struct + Flanke : Bool; + Stop_Wegen_Test : Bool; + END_STRUCT; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_vor : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3725.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_3731.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4200.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4203.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4217.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4207.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4212.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4214.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_3145.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3143.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3141.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Weiche_3140.Dyn.Status.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3131.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3134.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3136.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3725.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC072.BereichErr); + #Bereich_3731.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC072.BereichErr); + #Schleuse_4200.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Bereich_4203.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4217.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4207.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4212.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4214.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Bereich_3145.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3143.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3141.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Weiche_3140.Dyn.Status.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3131.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3134.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3136.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + END_REGION + + REGION Störungen quittieren UZ7202 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7202.StOk_aktiv OR #DOutbound_Bereich.A01_UC072.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3725 (vor AFS) + IF #DSchnittstelle_zu_AMR.From_UH06.MA0200_A_vor THEN #DHWtoVP_Antriebe.MA0200.Stat.A_vor := TRUE; END_IF; + IF #DSchnittstelle_zu_AMR.From_UH06.MA0200_A_start THEN #DHWtoVP_Antriebe.MA0200.Stat.A_start := TRUE; END_IF; + #DSchnittstelle_zu_AMR.To_UH06.MA0200_kein_Stau := (#Schleuse_3725.Dyn.Sk.Bereich_ok AND #Schleuse_3725.Dyn.Sk.Auto_akt) AND NOT (#DHWtoVP_Sensoren.Stau_BG3724.Stat.B_Akt); + #DSchnittstelle_zu_AMR.To_UH06.MA0200_aktiv := #MA0200; + #DSchnittstelle_zu_AMR.To_UH06.BG3724_aktiv := #BG3724; + #Schleuse_3725(Schleusen_Nr := 3725, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3724, B_InSchleuse := #BG3725, B_AusSchleuse := #BG3730, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG3730.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0200, Antrieb_plus_aktiv := #MA0201, Schleuse_geöffnet := #MB3725, RestZeit_Bereich_plus := #Bereich_3731.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3725.Stat.Ast, Error := %DB708.DBW536, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0200.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0200.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0200.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0200.Stat.A_PS, Antrieb_plus_vor := #Bereich_3731.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 3731 (vor BST 2) + #Fahren_Ok := ((((NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle3) AND NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle4)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Feueralarm)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Geschlossen)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Störung)) AND #Schleuse_4200.Dyn.Sk.Bereich_ok; + #B_vor_Schleuse := #BG3730 AND #MB3725; + #Stau_raus := #DHWtoVP_Sensoren.Stau_BG4201.Stat.B_Akt; + #Bereich_3731(Bereichs_Nr := 3731, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3731, B_Zähl := #BG4201, B_Stau_raus := #Stau_raus, Start_Ok := #Fahren_Ok, Antrieb_Bereich_aktiv := #MA0201, Antrieb_plus_aktiv := #MA0260, Antrieb_Bereich_vor := #DHWtoVP_Antriebe.MA0201.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoVP_Antriebe.MA0201.Stat.Stop_vor, Error := %DB708.DBW458, Antrieb_Bereich_start := #DHWtoVP_Antriebe.MA0201.Stat.A_start, Antrieb_plus_vor := #DHWtoVP_Antriebe.MA0260.Stat.A_vor, Antrieb_plus_start := #DHWtoVP_Antriebe.MA0260.Stat.A_start, Antrieb_minus_vor := #DHWtoVP_Antriebe.MA0200.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7202 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7202.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC072.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7202/7302 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7202.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7302.StOk_aktiv) OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4200 (hinter BST 2) + #Schleuse_4200(Schleusen_Nr := 4200, ErrQuit := #ErrQuit, B_InSchleuse := #BG4200, B_AusSchleuse := #BG4202, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG4202.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0260, Antrieb_plus_aktiv := #MA0261, Schleuse_geöffnet := #MB4200, RestZeit_Bereich_plus := #Bereich_4203.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_4200.Stat.Ast, Error := %DB708.DBW538, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0260.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0260.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0260.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0260.Stat.A_PS, Antrieb_plus_vor := #Bereich_4203.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Bereich 4203 + #B_vor_Schleuse := #BG4202 AND #MB4200; + #Stau_raus := #DHWtoVP_Sensoren.Stau_BG4204.Stat.B_Akt OR #DHWtoVP_Sensoren.Stau_BG4206.Stat.B_Akt; + #Bereich_4203(Bereichs_Nr := 4203, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4203, B_Zähl := #BG4204, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0261, Antrieb_plus_aktiv := #MA0262, Antrieb_Bereich_vor := #DHWtoVP_Antriebe.MA0261.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoVP_Antriebe.MA0261.Stat.Stop_vor, Error := %DB708.DBW464, Antrieb_Bereich_start := #DHWtoVP_Antriebe.MA0261.Stat.A_start, Antrieb_plus_vor := #DHWtoVP_Antriebe.MA0262.Stat.A_vor, Antrieb_plus_start := #DHWtoVP_Antriebe.MA0262.Stat.A_start, Antrieb_minus_vor := #DHWtoVP_Antriebe.MA0260.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7202/7302 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7202.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7302.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7302/7303 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7302.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7303.StOk_aktiv) OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION MA0262 / Übergang 4205 + #Übergang_4205(ErrQuit := #ErrQuit, B_Anfang := #BG4204, B_Am_Übergang := #BG4205, B_Stau_Antrieb_plus := #BG4206, Antrieb_aktiv := #MA0262, Antrieb_plus_aktiv := #MA0263, Antrieb_vor := #DHWtoVP_Antriebe.MA0262.Stat.A_vor, Antrieb_start := #DHWtoVP_Antriebe.MA0262.Stat.A_start, Antrieb_stop := #DHWtoVP_Antriebe.MA0262.Stat.A_PS, Antrieb_plus_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_plus_start := #DHWtoVP_Antriebe.MA0263.Stat.A_start); + END_REGION + + REGION Schleuse 4217 (Vor RFID-Gate) + #Start_ok := #DI0246 OR #DI0247; // / UN #Test_RFID.Stop_Wegen_Test + #g_7_HMI_Err_UH07_OB.RFID_Gate.Gate_nicht_bereit := (#BG4217 AND NOT (#MB4217)) AND NOT (#Start_ok); + #g_7_HMI_Err_UH07_OB.RFID_Gate.Gate_ByPAss := #DI0247; + #Schleuse_4217(Schleusen_Nr := 4217, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4206, B_InSchleuse := #BG4217, B_Zähl := #BG4216, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG4216.Stat.B_Akt, Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0263, Antrieb_plus_aktiv := #MA0263, Schleuse_geöffnet := #MB4217, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_4217.Stat.Ast, Error := %DB708.DBW580, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0263.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0263.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0263.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // da schon oben verwendet | da schon oben verwendet + #DQ0246 := #Schleuse_4217.Dyn.Sk.Bereich_ok; + #DQ0247 := #MB4217; + END_REGION + + REGION Schleuse 4207 (Plus) + #Stau_raus := #DHWtoVP_Sensoren.Stau_BG4210.Stat.B_Akt OR #DHWtoVP_Sensoren.Stau_BG4211.Stat.B_Akt; + #Start_ok := NOT (#MB4223) AND NOT (#MB4210); + #Schleuse_4207(Schleusen_Nr := 4207, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4216, B_InSchleuse := #BG4207, B_Zähl := #BG4211, B_Stau_raus := #Stau_raus, Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0263, Antrieb_plus_aktiv := #MA0264, Schleuse_geöffnet := #MB4207, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_4207.Stat.Ast, Error := %DB708.DBW540, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0263.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0263.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0263.Stat.A_PS, Antrieb_plus_vor := #DLPtoHW_Antriebe.MA0264.Stat.A_vor, Antrieb_plus_start := #DLPtoHW_Antriebe.MA0264.Stat.A_start, hStOk := #ErrAnz); + IF #MA0263 AND ((#Schleuse_4207.Dyn.Raus_Trolleys > 0) OR #BG4211) THEN #DLPtoHW_Antriebe.MA0264.Stat.A_vor := TRUE; END_IF; + END_REGION + + REGION Störungen anzeigen UZ7302/7303 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7302.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7303 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7303.StOk_aktiv OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4212 + #Schleuse_4212(Schleusen_Nr := 4212, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4211, B_InSchleuse := #BG4212, B_AusSchleuse := #BG4213, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG4213.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0263, Antrieb_plus_aktiv := #MA0263, Schleuse_geöffnet := #MB4212, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_4212.Stat.Ast, Error := %DB708.DBW542, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0263.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0263.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0263.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // da schon oben verwendet | da schon oben verwendet + END_REGION + + REGION Schleuse 4214 + #Schleuse_4214(Schleusen_Nr := 4214, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4213, B_InSchleuse := #BG4214, B_AusSchleuse := #BG4215, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG4215.Stat.B_Akt, Start_Ok := #Bereich_3145.Dyn.Sk.Bereich_ok, Antrieb_Schleuse_aktiv := #MA0263, Antrieb_plus_aktiv := #MA0140, Schleuse_geöffnet := #MB4214, RestZeit_Bereich_plus := #Bereich_3145.Dyn.Restzeit, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_4214.Stat.Ast, Error := %DB708.DBW544, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0263.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0263.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0263.Stat.A_PS, Antrieb_plus_vor := #Bereich_3145.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7303 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7303/7101 + #ErrQuit := (((#DOutbound_Bereich.A01_UZ7303.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7101.StOk_aktiv) OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UC071.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 3145 + #B_vor_Schleuse := #BG4215 AND #MB4214; + #Bereich_3145(Bereichs_Nr := 3145, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3145, B_Zähl := #BG3144, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG3144.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0140, Antrieb_plus_aktiv := #MA0141, Antrieb_Bereich_vor := #DHWtoVP_Antriebe.MA0140.Stat.A_vor, Antrieb_Bereich_stop := #DHWtoVP_Antriebe.MA0140.Stat.Stop_vor, Error := %DB708.DBW450, Antrieb_Bereich_start := #DHWtoVP_Antriebe.MA0140.Stat.A_start, Antrieb_plus_vor := #DHWtoVP_Antriebe.MA0141.Stat.A_vor, Antrieb_plus_start := #DHWtoVP_Antriebe.MA0141.Stat.A_start, Antrieb_minus_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7303/7101 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7101.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC071.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7101/7102 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7101.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7102.StOk_aktiv) OR #DOutbound_Bereich.A01_UC071.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3143 + #Schleuse_3143(Schleusen_Nr := 3143, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3144, B_InSchleuse := #BG3143, B_Zähl := #BG3142, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG3142.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0141, Antrieb_plus_aktiv := #MA0141, Schleuse_geöffnet := #MB3143, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3143.Stat.Ast, Error := %DB708.DBW514, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0141.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0141.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0141.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0141.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3141 (vor Weiche zum KontrollPlatz) + #Start_ok := NOT (#MB3136); + #Schleuse_3141(Schleusen_Nr := 3141, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3142, B_InSchleuse := #BG3141, B_Zähl := , B_Stau_raus := , Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0141, Antrieb_plus_aktiv := #MA0141, Schleuse_geöffnet := #MB3141, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3141.Stat.Ast, Error := %DB708.DBW512, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0141.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0141.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0141.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0141.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // über Weiche | über Ziel-FC | über Weiche | über Weiche + IF #MB3141 THEN #DHWtoVP_Zylinder.Weiche_3137.Stat.Ast := FALSE; END_IF; + END_REGION + + REGION Weiche 3140 (zum Kontrollplatz) + #Antrieb_vor := FALSE; + #Antrieb_stop := FALSE; + #Antrieb_aktiv := #MA0141 AND #MA0143; + #Weiche_3140(Weichen_Nr := 3140, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #BG3127, B_Ziel_abzweig := #BG3130, Antrieb_Weiche_aktiv := #Antrieb_aktiv, Antrieb_Gerade_aktiv := #MA0144, Antrieb_Abzweig_aktiv := #MA0142, Weiche_ist_AST := #MB3140, Y_Weiche_abzweig := #DHWtoVP_Zylinder.Weiche_3140.Stat.Ast, Error := %DB708.DBW510, Antrieb_Weiche_vor := #Antrieb_vor, Antrieb_Weiche_stop := #Antrieb_stop, Antrieb_Weiche_gerade_vor := #DHWtoVP_Antriebe.MA0144.Stat.A_vor, Antrieb_Weiche_gerade_stop := #DHWtoVP_Antriebe.MA0144.Stat.Stop_vor, Antrieb_Weiche_abzweig_vor := #DHWtoVP_Antriebe.MA0142.Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DHWtoVP_Antriebe.MA0142.Stat.Stop_vor, hStOk := #ErrAnz); + IF #Antrieb_vor THEN + #DHWtoVP_Antriebe.MA0141.Stat.A_vor := TRUE; + #DHWtoVP_Antriebe.MA0143.Stat.A_vor := TRUE; + END_IF; + IF #Antrieb_stop THEN + #DHWtoVP_Antriebe.MA0141.Stat.Stop_vor := TRUE; + #DHWtoVP_Antriebe.MA0142.Stat.Stop_vor := TRUE; + END_IF; + IF FALSE THEN + #DHWtoVP_Antriebe.MA0141.Stat.Stop_vor := TRUE; + #DHWtoVP_Antriebe.MA0142.Stat.Stop_vor := TRUE; + #DHWtoVP_Antriebe.MA0144.Stat.Stop_vor := TRUE; + END_IF; + END_REGION + + REGION Schleuse 3131(vor Kontrollplatz) + #Stau_raus := #DHWtoVP_Sensoren.Stau_BG3132.Stat.B_Akt OR #DHWtoVP_Sensoren.Stau_BG3133.Stat.B_Akt; + #Schleuse_3131(Schleusen_Nr := 3131, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3130, B_InSchleuse := #BG3131, B_AusSchleuse := #BG3132, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0142, Antrieb_plus_aktiv := #MA0142, Schleuse_geöffnet := #MB3131, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3131.Stat.Ast, Error := %DB708.DBW504, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0142.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0142.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0142.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0142.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3134 (Kontrollplatz) + #B_vor_Schleuse := (#BG3133 AND NOT (#BG3134)) OR #BG3132; + IF #Schleuse_3134.Dyn.Sk.Akt_Schritt <> 12 THEN #PF0136 := FALSE; END_IF; + #Schleuse_3134(Schleusen_Nr := 3134, ErrQuit := #ErrQuit, B_VorSchleuse := #B_vor_Schleuse, B_InSchleuse := #BG3134, B_AusSchleuse := #BG3135, B_Stau_raus := #DHWtoVP_Sensoren.Stau_BG3135.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0142, Antrieb_plus_aktiv := #MA0143, Schleuse_geöffnet := #MB3134, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3134.Stat.Ast, Error := %DB708.DBW506, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0142.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0142.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0142.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0142.Stat.A_PS, Antrieb_plus_vor := #DHWtoVP_Antriebe.MA0143.Stat.A_vor, Antrieb_plus_start := #DHWtoVP_Antriebe.MA0143.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3136 (vor Weiche aus KontrollPlatz) + IF #BG3135 AND (NOT (#Schleuse_3136.Dyn.Error.Err_Stau_Einfahrt) OR NOT (#BG3136)) THEN #DHWtoVP_Antriebe.MA0143.Stat.A_vor := TRUE; END_IF; + #Start_ok := NOT (#MB3141); + #Schleuse_3136(Schleusen_Nr := 3136, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3135, B_InSchleuse := #BG3136, B_Zähl := , B_Stau_raus := , Start_Ok := #Start_ok, Antrieb_Schleuse_aktiv := #MA0143, Antrieb_plus_aktiv := #MA0141, Schleuse_geöffnet := #MB3136, Y_Schleuse_Auf := #DHWtoVP_Zylinder.Schleuse_3136.Stat.Ast, Error := %DB708.DBW508, Antrieb_Schleuse_vor := #DHWtoVP_Antriebe.MA0143.Stat.A_vor, Antrieb_Schleuse_start := #DHWtoVP_Antriebe.MA0143.Stat.A_start, Antrieb_Schleuse_stop := #DHWtoVP_Antriebe.MA0143.Stat.Stop_vor, Antrieb_Schleuse_PS := #DHWtoVP_Antriebe.MA0143.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // über Weiche | über Ziel-FC | über Weiche | über Weiche + IF #MB3136 THEN #DHWtoVP_Zylinder.Weiche_3137.Stat.Ast := TRUE; END_IF; + END_REGION + + REGION Störungen anzeigen UZ7101/7102 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7101.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7102.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC071.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/LP_Bereich.scl b/SCL-Export/=A01+UH07-KF00/LP_Bereich.scl new file mode 100644 index 0000000..5fc6d03 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/LP_Bereich.scl @@ -0,0 +1,24 @@ +FUNCTION "LP_Bereich" : Void +{ 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). + +BEGIN + REGION Durchfahr- / Saugmodus + END_REGION + + REGION Baustein-Aufrufe + "DLP_Sensoren"(); + "DLP_OmniFahren"(); + "DLeerPufferStrecken"(); + "DLP_Sorter"(); + "DLP_Auslagern"(); + "DLP_Zylinder"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/LP_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/LP_OmniFahren.scl new file mode 100644 index 0000000..bbd9cf3 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/LP_OmniFahren.scl @@ -0,0 +1,70 @@ +FUNCTION_BLOCK "LP_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_OUTPUT + DLP_Sorter : Word; // war "DLP_Sorter" + END_VAR + + VAR_IN_OUT + BG3304 : Word; // war "BG3304" + BG3305 : Word; // war "BG3305" + DEPtoLP_Antriebe : Word; // war "DEPtoLP_Antriebe" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + MA0064 : Bool; // war "MA0064" + MB3305 : Byte; // war "MB3305" + END_VAR + + VAR + Schleuse_3305 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3305.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3305.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + END_REGION + + REGION Störungen quittieren UZ0702 + #ErrQuit := #DOutbound_Bereich.A01_UZ0702.StOk_aktiv OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3305 + #Schleuse_3305(Schleusen_Nr := 3305, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3304, B_InSchleuse := #BG3305, B_AusSchleuse := , Antrieb_Schleuse_aktiv := #MA0064, Schleuse_geöffnet := #MB3305, Error := %DB708.DBW524, Antrieb_Schleuse_vor := #DEPtoLP_Antriebe.MA0064.Stat.A_vor, Antrieb_Schleuse_start := #DEPtoLP_Antriebe.MA0064.Stat.A_start, Antrieb_Schleuse_stop := #DEPtoLP_Antriebe.MA0064.Stat.Stop_vor, Antrieb_Schleuse_PS := #DEPtoLP_Antriebe.MA0064.Stat.A_PS, hStOk := #ErrAnz); // weiterfahrt über Sorter-Sep + IF #Schleuse_3305.Dyn.Status.Reset_aktiv THEN + #DLP_Sorter.Sorter_MB3305.Dyn.Scanner.Rec_IDX := 0; + #DLP_Sorter.Sorter_MB3305.Separator.Default_Ziel := 0; + #DLP_Sorter.Sorter_MB3305.Dyn.Scanner.Rec_DEST_Ziel := 0; + END_IF; + END_REGION + + REGION Störungen anzeigen UZ0702 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0702.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/LPtoHW_Bereich.scl b/SCL-Export/=A01+UH07-KF00/LPtoHW_Bereich.scl new file mode 100644 index 0000000..0607a87 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/LPtoHW_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "LPtoHW_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DLPtoHW_Sensoren"(); + "DLPtoHW_OmniFahren"(); + "DLPtoHW_Zylinder"(); + "DLPtoHW_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/LPtoHW_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/LPtoHW_OmniFahren.scl new file mode 100644 index 0000000..aef847e --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/LPtoHW_OmniFahren.scl @@ -0,0 +1,332 @@ +FUNCTION_BLOCK "LPtoHW_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 + g_1s_Impuls : Word; // war "1s-Impuls" + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + Clock_5Hz : Word; // war "Clock_5Hz" + DLeerPufferStrecken : Word; // war "DLeerPufferStrecken" + END_VAR + + VAR_OUTPUT + PF0033 : Word; // war "PF0033" + PF0044 : Word; // war "PF0044" + PF0046 : Word; // war "PF0046" + END_VAR + + VAR_IN_OUT + BG3322 : Word; // war "BG3322" + BG3323 : Word; // war "BG3323" + BG3325 : Word; // war "BG3325" + BG3326 : Word; // war "BG3326" + BG3342 : Word; // war "BG3342" + BG3343 : Word; // war "BG3343" + BG3344 : Word; // war "BG3344" + BG3345 : Word; // war "BG3345" + BG3720 : Word; // war "BG3720" + BG3721 : Word; // war "BG3721" + BG3722 : Word; // war "BG3722" + BG3723 : Word; // war "BG3723" + BG3732 : Word; // war "BG3732" + BG4211 : Word; // war "BG4211" + BG4220 : Word; // war "BG4220" + BG4221 : Word; // war "BG4221" + BG4224 : Word; // war "BG4224" + BG4225 : Word; // war "BG4225" + BG4226 : Word; // war "BG4226" + BG4227 : Word; // war "BG4227" + BG4231 : Word; // war "BG4231" + BG4232 : Word; // war "BG4232" + BG4233 : Word; // war "BG4233" + BG4235 : Word; // war "BG4235" + BG4236 : Word; // war "BG4236" + DHWtoVP_Antriebe : Word; // war "DHWtoVP_Antriebe" + DLPtoHW_Antriebe : Word; // war "DLPtoHW_Antriebe" + DLPtoHW_Sensoren : Word; // war "DLPtoHW_Sensoren" + DLPtoHW_Zylinder : Word; // war "DLPtoHW_Zylinder" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + DSchnittstelle_zu_AMR : Word; // war "DSchnittstelle_zu_AMR" + MA0065 : Bool; // war "MA0065" + MA0066 : Bool; // war "MA0066" + MA0202 : Bool; // war "MA0202" + MA0203 : Bool; // war "MA0203" + MA0263 : Bool; // war "MA0263" + MA0264 : Bool; // war "MA0264" + MA0265 : Bool; // war "MA0265" + MA0266 : Bool; // war "MA0266" + MA0267 : Bool; // war "MA0267" + MA0270 : Bool; // war "MA0270" + MB3323 : Byte; // war "MB3323" + MB3325 : Byte; // war "MB3325" + MB3342 : Byte; // war "MB3342" + MB3345 : Byte; // war "MB3345" + MB3722 : Byte; // war "MB3722" + MB4221 : Byte; // war "MB4221" + MB4223 : Byte; // war "MB4223" + MB4227 : Byte; // war "MB4227" + MB4235 : Byte; // war "MB4235" + END_VAR + + VAR + Schleuse_3342 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3323 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3325 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Bereich_4236 : "MHMOmniBereich_Plus"; + Schleuse_4221 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Weiche_4223 : "MHMOmniWeiche_Plus"; + Schleuse_4227 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_4232 : "MHMOmniBereich_Plus"; + Schleuse_4235 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3732 : "MHMOmniBereich_Plus"; + Schleuse_3722 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_3345 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Übergang_4225 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse"; + Trolleys_starten : Struct + Flanke : Bool; + Wartezeit_aktiv : Bool; + Timer_Wartenzeit { S7_SetPoint := 'True'} : Int; + END_STRUCT; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_vor : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + tGen1_Flanke : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3342.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3323.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3345.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3325.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4236.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4221.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Weiche_4223.Dyn.Status.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4227.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4232.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4235.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_3732.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3722.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3342.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3323.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3345.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3325.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Bereich_4236.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_4221.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Weiche_4223.Dyn.Status.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4227.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Bereich_4232.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Schleuse_4235.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC073.BereichErr); + #Bereich_3732.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC072.BereichErr); + #Schleuse_3722.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC072.BereichErr); + END_REGION + + REGION Störungen quittieren UZ0703 + #ErrQuit := #DOutbound_Bereich.A01_UZ0703.StOk_aktiv OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3342 (Vor BeladePlatz) + #Stau_raus := #DLPtoHW_Sensoren.An_BG3323.Stat.B_Akt; + #B_nach_Schleuse := #DLPtoHW_Sensoren.An_BG3323.Stat.B_Akt; + #Schleuse_3342(Schleusen_Nr := 3342, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3322, B_InSchleuse := #BG3342, B_AusSchleuse := #B_nach_Schleuse, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0065, Antrieb_plus_aktiv := #MA0065, Schleuse_geöffnet := #MB3342, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_3342.Stat.Ast, Error := %DB708.DBW572, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0065.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0065.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0065.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Schleuse 3323 (BeladePlatz) + #PF0046 := #DOutbound_Bereich.A01_UH07.AnlageEin AND ((#DLeerPufferStrecken.DurchfahrModus.Aktiv AND #Clock_5Hz) OR NOT (#DLeerPufferStrecken.DurchfahrModus.Aktiv)); // Beladung bereit bei Dauerlicht + IF #Schleuse_3323.Dyn.Sk.Akt_Schritt <> 12 THEN + #PF0033 := FALSE; + #PF0044 := FALSE; + END_IF; + #Schleuse_3323(Schleusen_Nr := 3323, ErrQuit := #ErrQuit, B_VorSchleuse := #MB3342, B_InSchleuse := #BG3323, B_AusSchleuse := #BG3343, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3343.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0065, Schleuse_geöffnet := #MB3323, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_3323.Stat.Ast, Error := %DB708.DBW526, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0065.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0065.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0065.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 3345 (Hinter BeladePlatz) + #Schleuse_3345(Schleusen_Nr := 3345, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3343, B_InSchleuse := #BG3345, B_AusSchleuse := #BG3344, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3344.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0065, Schleuse_geöffnet := #MB3345, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_3345.Stat.Ast, Error := %DB708.DBW586, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0065.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0065.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0065.Stat.A_PS, hStOk := #ErrAnz); + END_REGION + + REGION Wartezeit bis erneuter Trolleystart sinnvoll (wegen Staubildung) + #tGen1_Flanke := #MB3325 AND NOT #Trolleys_starten.Flanke; + #Trolleys_starten.Flanke := #MB3325; + IF #tGen1_Flanke THEN #Trolleys_starten.Wartezeit_aktiv := TRUE; END_IF; + IF #tGen1_Flanke THEN #Trolleys_starten.Timer_Wartenzeit := 15; END_IF; + IF NOT (#Trolleys_starten.Wartezeit_aktiv) OR ((#MB3325 AND NOT (#MA0065)) OR NOT (#g_1s_Impuls)) THEN GOTO Wait; END_IF; + #Trolleys_starten.Timer_Wartenzeit := #Trolleys_starten.Timer_Wartenzeit + -1; + IF (#Trolleys_starten.Timer_Wartenzeit + -1) > 0 THEN GOTO Wait; END_IF; + #Trolleys_starten.Wartezeit_aktiv := FALSE; + Wait: ; + END_REGION + + REGION Schleuse 3325 + #Fahren_Ok := NOT (#Trolleys_starten.Wartezeit_aktiv); + #B_vor_Schleuse := #BG3343 OR #BG3344; + #Schleuse_3325(Schleusen_Nr := 3325, ErrQuit := #ErrQuit, B_VorSchleuse := #B_vor_Schleuse, B_InSchleuse := #BG3325, B_Zähl := #BG3326, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3326.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0065, Antrieb_plus_aktiv := #MA0066, Schleuse_geöffnet := #MB3325, RestZeit_Bereich_plus := #Bereich_4236.Dyn.Restzeit, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_3325.Stat.Ast, Error := %DB708.DBW574, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0065.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0065.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0065.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0065.Stat.A_PS, Antrieb_plus_vor := #Bereich_4236.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ0703 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0703.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0703/7303 + #ErrQuit := (#DOutbound_Bereich.A01_UZ0703.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7303.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 4236 + #B_vor_Schleuse := #BG3326 AND #MB3325; + #Fahren_Ok := #Schleuse_4221.Dyn.Sk.Bereich_ok AND NOT (#BG4221); + #Bereich_4236(Bereichs_Nr := 4236, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4236, B_Zähl := #BG4220, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG4220.Stat.B_Akt, Start_Ok := #Schleuse_4221.Dyn.Sk.Bereich_ok, Antrieb_Bereich_aktiv := #MA0066, Antrieb_plus_aktiv := #MA0264, Antrieb_Bereich_vor := #DLPtoHW_Antriebe.MA0066.Stat.A_vor, Antrieb_Bereich_stop := #DLPtoHW_Antriebe.MA0066.Stat.Stop_vor, Error := %DB708.DBW472, Antrieb_Bereich_start := #DLPtoHW_Antriebe.MA0066.Stat.A_start, Antrieb_plus_vor := #DLPtoHW_Antriebe.MA0264.Stat.A_vor, Antrieb_plus_start := #DLPtoHW_Antriebe.MA0264.Stat.A_start, Antrieb_minus_vor := #DLPtoHW_Antriebe.MA0065.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ0703/7303 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0703.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7303 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7303.StOk_aktiv OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 4221 (vor ByPass) + #Schleuse_4221(Schleusen_Nr := 4221, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4220, B_InSchleuse := #BG4221, B_Zähl := , B_Stau_raus := , Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0264, Antrieb_plus_aktiv := 1, Schleuse_geöffnet := #MB4221, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_4221.Stat.Ast, Error := %DB708.DBW550, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0264.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0264.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0264.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0264.Stat.A_PS, Antrieb_plus_vor := , Antrieb_plus_start := , hStOk := #ErrAnz); // über Weiche | über Weiche | über Weiche | über Weiche + END_REGION + + REGION Weiche 4223 (ByPass zu VP) + #Antrieb_vor := FALSE; + #Antrieb_stop := FALSE; + #Antrieb_aktiv := #MA0264 AND #MA0265; + #Weiche_4223(Weichen_Nr := 4223, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #BG4224, B_Ziel_abzweig := #BG4211, Antrieb_Weiche_aktiv := #Antrieb_aktiv, Antrieb_Gerade_aktiv := #MA0265, Antrieb_Abzweig_aktiv := #MA0263, Weiche_ist_AST := #MB4223, Y_Weiche_abzweig := #DLPtoHW_Zylinder.Weiche_4223.Stat.Ast, Error := %DB708.DBW546, Antrieb_Weiche_vor := #Antrieb_vor, Antrieb_Weiche_stop := #Antrieb_stop, Antrieb_Weiche_gerade_vor := , Antrieb_Weiche_gerade_stop := , Antrieb_Weiche_abzweig_vor := #DHWtoVP_Antriebe.MA0263.Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DHWtoVP_Antriebe.MA0263.Stat.Stop_vor, hStOk := #ErrAnz); // schon gesetzt | schon gesetzt + IF #Antrieb_vor THEN + #DLPtoHW_Antriebe.MA0264.Stat.A_vor := TRUE; + #DLPtoHW_Antriebe.MA0265.Stat.A_vor := TRUE; + END_IF; + IF #Antrieb_stop THEN + #DLPtoHW_Antriebe.MA0264.Stat.Stop_vor := TRUE; + #DLPtoHW_Antriebe.MA0265.Stat.Stop_vor := TRUE; + END_IF; + IF #Weiche_4223.Dyn.Status.Weiche_frei THEN #DLPtoHW_Zylinder.Weiche_4223.Stat.Ast := FALSE; END_IF; + END_REGION + + REGION Störungen anzeigen UZ7303 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7303/7302 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7303.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7302.StOk_aktiv) OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION MA0265 / Übergang 4225 + #Übergang_4225(ErrQuit := #ErrQuit, B_Anfang := #BG4224, B_Am_Übergang := #BG4225, B_Stau_Antrieb_plus := #BG4226, Antrieb_aktiv := #MA0265, Antrieb_plus_aktiv := #MA0266, Antrieb_vor := #DLPtoHW_Antriebe.MA0265.Stat.A_vor, Antrieb_start := #DLPtoHW_Antriebe.MA0265.Stat.A_start, Antrieb_stop := #DLPtoHW_Antriebe.MA0265.Stat.A_PS, Antrieb_plus_vor := #DLPtoHW_Antriebe.MA0266.Stat.A_vor, Antrieb_plus_start := #DLPtoHW_Antriebe.MA0266.Stat.A_start); + END_REGION + + REGION Schleuse 4227 + #Schleuse_4227(Schleusen_Nr := 4227, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4225, B_InSchleuse := #BG4227, B_AusSchleuse := #BG4231, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG4231.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0266, Antrieb_plus_aktiv := #MA0267, Schleuse_geöffnet := #MB4227, RestZeit_Bereich_plus := #Bereich_4232.Dyn.Restzeit, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_4227.Stat.Ast, Error := %DB708.DBW548, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0266.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0266.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0266.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0266.Stat.A_PS, Antrieb_plus_vor := #Bereich_4232.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7303/7302 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7303.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7302.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7302 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7302.StOk_aktiv OR #DOutbound_Bereich.A01_UC073.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 4232 + #B_vor_Schleuse := #BG4231 AND #MB4227; + #Stau_raus := #DLPtoHW_Sensoren.Stau_BG4233.Stat.B_Akt OR #DLPtoHW_Sensoren.Stau_BG4234.Stat.B_Akt; + #Bereich_4232(Bereichs_Nr := 4232, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4232, B_Zähl := #BG4233, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0267, Antrieb_plus_aktiv := #MA0270, Antrieb_Bereich_vor := #DLPtoHW_Antriebe.MA0267.Stat.A_vor, Antrieb_Bereich_stop := #DLPtoHW_Antriebe.MA0267.Stat.Stop_vor, Error := %DB708.DBW470, Antrieb_Bereich_start := #DLPtoHW_Antriebe.MA0267.Stat.A_start, Antrieb_plus_vor := #DLPtoHW_Antriebe.MA0270.Stat.A_vor, Antrieb_plus_start := #DLPtoHW_Antriebe.MA0270.Stat.A_start, Antrieb_minus_vor := #DLPtoHW_Antriebe.MA0266.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 4235 (vor BST 2) + #Fahren_Ok := ((((NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle3) AND NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle4)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Feueralarm)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Geschlossen)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST2_Störung)) AND #Bereich_3732.Dyn.Sk.Bereich_ok; + #Schleuse_4235(Schleusen_Nr := 4235, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4233, B_InSchleuse := #BG4235, B_AusSchleuse := #BG3720, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3720.Stat.B_Akt, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := #MA0270, Antrieb_plus_aktiv := #MA0202, Schleuse_geöffnet := #MB4235, RestZeit_Bereich_plus := #Bereich_3732.Dyn.Restzeit, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_4235.Stat.Ast, Error := %DB708.DBW552, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0270.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0270.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0270.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0270.Stat.A_PS, Antrieb_plus_vor := #Bereich_3732.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7302 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7302.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC073.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7202 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7202.StOk_aktiv OR #DOutbound_Bereich.A01_UC072.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 3732 (hinter BST 2) + #B_vor_Schleuse := #BG3720 AND #MB4235; + #Bereich_3732(Bereichs_Nr := 3732, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3732, B_Zähl := #BG3721, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3721.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0202, Antrieb_plus_aktiv := #MA0203, Antrieb_Bereich_vor := #DLPtoHW_Antriebe.MA0202.Stat.A_vor, Antrieb_Bereich_stop := #DLPtoHW_Antriebe.MA0202.Stat.Stop_vor, Error := %DB708.DBW460, Antrieb_Bereich_start := #DLPtoHW_Antriebe.MA0202.Stat.A_start, Antrieb_plus_vor := #DLPtoHW_Antriebe.MA0203.Stat.A_vor, Antrieb_plus_start := #DLPtoHW_Antriebe.MA0203.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7202 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7202.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC072.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7202/7201 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7202.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7201.StOk_aktiv) OR #DOutbound_Bereich.A01_UC072.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3722 (Übergabe an AMR / UH06) + #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_vor := FALSE; + #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_start := FALSE; + #Schleuse_3722(Schleusen_Nr := 3722, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3721, B_InSchleuse := #BG3722, B_Zähl := #BG3723, B_Stau_raus := #DLPtoHW_Sensoren.Stau_BG3723.Stat.B_Akt, Start_Ok := #DSchnittstelle_zu_AMR.From_UH06.MA0203_kein_Stau, Antrieb_Schleuse_aktiv := #MA0203, Antrieb_plus_aktiv := #DSchnittstelle_zu_AMR.From_UH06.MA0203_aktiv, Schleuse_geöffnet := #MB3722, Y_Schleuse_Auf := #DLPtoHW_Zylinder.Schleuse_3722.Stat.Ast, Error := %DB708.DBW534, Antrieb_Schleuse_vor := #DLPtoHW_Antriebe.MA0203.Stat.A_vor, Antrieb_Schleuse_start := #DLPtoHW_Antriebe.MA0203.Stat.A_start, Antrieb_Schleuse_stop := #DLPtoHW_Antriebe.MA0203.Stat.Stop_vor, Antrieb_Schleuse_PS := #DLPtoHW_Antriebe.MA0203.Stat.A_PS, Antrieb_plus_vor := #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_vor, Antrieb_plus_start := #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_start, hStOk := #ErrAnz); + IF #DLPtoHW_Sensoren.Fährt_zu_UH06.Stat.B_Akt THEN + #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_vor := TRUE; + #DSchnittstelle_zu_AMR.To_UH06.MA0203_A_start := TRUE; + #DLPtoHW_Antriebe.MA0203.Stat.A_vor := TRUE; + END_IF; + END_REGION + + REGION Störungen anzeigen UZ7202/7201 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7202.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7201.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC072.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/Leerpuffer to Raus-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/Leerpuffer to Raus-Lager ermitteln.scl new file mode 100644 index 0000000..2e21cd7 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Leerpuffer to Raus-Lager ermitteln.scl @@ -0,0 +1,45 @@ +FUNCTION "Leerpuffer to Raus-Lager ermitteln" : Void +{ 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 + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Int; // Puffer ermitteln + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Puffer_ShopGroup : Int; + Position : Int; + Schleife : Int; // Loopzähler + Puffer_Zähler : Int; + Puffer_DW : Int; + AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) + AR1Start : DInt; // Startwert mit Offset 0 + END_VAR + +BEGIN + REGION Aktiver Puffer zum Ausfahren + #Puffer := 0; + END_REGION + + REGION Aktiven Puffer zum Auslagern suchen ? + "DatenOut"(SSDB := 502, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer Leerpuffer ausfahren | 1.Eintrag lesen + IF NOT (#M199_7) THEN RETURN; END_IF; + #Puffer := #MW220; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Leerpuffer to Rein-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/Leerpuffer to Rein-Lager ermitteln.scl new file mode 100644 index 0000000..c263501 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Leerpuffer to Rein-Lager ermitteln.scl @@ -0,0 +1,48 @@ +FUNCTION "Leerpuffer to Rein-Lager ermitteln" : Void +{ 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 + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Word; // Puffer ermitteln + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Aktiver Puffer zum Einfahren + #Puffer := 16#0; + END_REGION + + REGION Aktiven Puffer zum Einlagern suchen ? + "DatenOut"(SSDB := 501, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer Leerpuffer einfahren | 1.Eintrag lesen + IF #M199_7 THEN GOTO Puffer; END_IF; + END_REGION + + REGION Leerer Puffer vorhanden? + "DatenOut"(SSDB := 500, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer leer | 1.Eintrag lesen + IF #M199_7 THEN GOTO Puffer; END_IF; + RETURN; + END_REGION + + REGION Puffer aufbereiten + #Puffer := INT_TO_BCD16(#MW220) OR 16#A000; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Leerpuffer_Raus-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/Leerpuffer_Raus-Lager ermitteln.scl new file mode 100644 index 0000000..6a4c42f --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Leerpuffer_Raus-Lager ermitteln.scl @@ -0,0 +1,45 @@ +FUNCTION "Leerpuffer_Raus-Lager ermitteln" : Void +{ 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 + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Int; // Puffer ermitteln + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Puffer_ShopGroup : Int; + Position : Int; + Schleife : Int; // Loopzähler + Puffer_Zähler : Int; + Puffer_DW : Int; + AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) + AR1Start : DInt; // Startwert mit Offset 0 + END_VAR + +BEGIN + REGION Aktiver Puffer zum Ausfahren + #Puffer := 0; + END_REGION + + REGION Aktiven Puffer zum Auslagern suchen ? + "DatenOut"(SSDB := 502, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer Leerpuffer ausfahren | 1.Eintrag lesen + IF NOT (#M199_7) THEN RETURN; END_IF; + #Puffer := #MW220; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Leerpuffer_Rein-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/Leerpuffer_Rein-Lager ermitteln.scl new file mode 100644 index 0000000..c3fef78 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Leerpuffer_Rein-Lager ermitteln.scl @@ -0,0 +1,48 @@ +FUNCTION "Leerpuffer_Rein-Lager ermitteln" : Void +{ 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 + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Word; // Puffer ermitteln + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Aktiver Puffer zum Einfahren + #Puffer := 16#0; + END_REGION + + REGION Aktiven Puffer zum Einlagern suchen ? + "DatenOut"(SSDB := 501, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer Leerpuffer einfahren | 1.Eintrag lesen + IF #M199_7 THEN GOTO Puffer; END_IF; + END_REGION + + REGION Leerer Puffer vorhanden? + "DatenOut"(SSDB := 500, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer leer | 1.Eintrag lesen + IF #M199_7 THEN GOTO Puffer; END_IF; + RETURN; + END_REGION + + REGION Puffer aufbereiten + #Puffer := INT_TO_BCD16(#MW220) OR 16#A000; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/MHMÜbergang_ohne_Schleuse.scl b/SCL-Export/=A01+UH07-KF00/MHMÜbergang_ohne_Schleuse.scl new file mode 100644 index 0000000..2945a5f --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/MHMÜbergang_ohne_Schleuse.scl @@ -0,0 +1,76 @@ +FUNCTION_BLOCK "MHMÜbergang_ohne_Schleuse" +{ 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 + ErrQuit : Bool; + B_Anfang : Bool; + B_Am_Übergang : Bool; + B_Stau_Antrieb_plus : Bool; + Antrieb_aktiv : Bool; + Antrieb_plus_aktiv : Bool; + END_VAR + + VAR_IN_OUT + Antrieb_vor : Bool; + Antrieb_start : Bool; + Antrieb_stop : Bool; + Antrieb_plus_vor : Bool; + Antrieb_plus_start : Bool; + END_VAR + + VAR + Am_Übergang { S7_SetPoint := 'False'} : "MSensoren"; + Stau_Antrieb_plus : "MSensoren"; + END_VAR + + VAR_TEMP + Antrieb : Bool; + Antrieb_gestoppt : Bool; + END_VAR + +BEGIN + REGION Antrieb ansteuern + #Antrieb_gestoppt := FALSE; + IF #ErrQuit OR #B_Anfang THEN + #Antrieb_start := TRUE; + #Antrieb_vor := TRUE; + END_IF; + IF NOT (#Am_Übergang.Stat.B_Akt) THEN GOTO Nix; END_IF; + IF NOT (#Am_Übergang.Stat.B_Akt) AND #Stau_Antrieb_plus.Stat.B_Akt THEN + #Antrieb_stop := TRUE; + #Antrieb_gestoppt := TRUE; + GOTO Nix; + END_IF; + IF NOT (#Stau_Antrieb_plus.Stat.B_Akt) THEN #Antrieb_plus_vor := TRUE; END_IF; + #Antrieb_plus_start := TRUE; + IF NOT (#Antrieb_plus_aktiv) THEN + #Antrieb_stop := TRUE; + #Antrieb_gestoppt := TRUE; + GOTO Nix; + END_IF; + #Antrieb_vor := TRUE; + Nix: ; + END_REGION + + REGION Antrieb plus zusätzlich ansteuern + IF #B_Stau_Antrieb_plus OR #ErrQuit THEN #Antrieb_plus_start := TRUE; END_IF; + IF FALSE THEN #Antrieb_plus_vor := TRUE; END_IF; + END_REGION + + REGION Trolley ist am Übergang + #Antrieb := (#Antrieb_aktiv AND #Antrieb_plus_aktiv) AND NOT (#Antrieb_gestoppt); + #Am_Übergang(ESensor := #B_Am_Übergang, T_Ein := 1, T_Aus := 50, tein_aktiv := 1, taus_aktiv := #Antrieb); + END_REGION + + REGION Stau im Förderer plus + #Stau_Antrieb_plus(ESensor := #B_Stau_Antrieb_plus, T_Ein := 100, T_Aus := 50, tein_aktiv := 1, taus_aktiv := 1); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/Port1_Telegramme_auswerten.scl b/SCL-Export/=A01+UH07-KF00/Port1_Telegramme_auswerten.scl index 141fbe3..50d6441 100644 --- a/SCL-Export/=A01+UH07-KF00/Port1_Telegramme_auswerten.scl +++ b/SCL-Export/=A01+UH07-KF00/Port1_Telegramme_auswerten.scl @@ -29,21 +29,25 @@ FUNCTION "Port1_Telegramme_auswerten" : Void BEGIN REGION Telegrammkopf übergeben RETURN; - %LB20 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[1]; - %LB21 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[2]; - %LB22 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[3]; - %LB23 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[4]; - %LB24 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[5]; - %LB25 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[6]; - %LB26 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[7]; - %LB27 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[8]; - %LB28 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[9]; - %LB29 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[10]; + // Kennung A: + #LB20 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[1]; + #LB21 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[2]; + #LB22 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[3]; + #LB23 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[4]; + // Kennung B: + #LB24 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[5]; + #LB25 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[6]; + #LB26 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[7]; + #LB27 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[8]; + // Kennung C: + #LB28 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[9]; + #LB29 := #SS_Port1_EmpfangsDaten.Port1.TelegrammKennung[10]; END_REGION REGION BReqM-Telegramm ? (VollPuffer auslagern) IF #Teleg_Kennung_A <> 'BReq' THEN GOTO NoBREQM; END_IF; IF #Teleg_Kennung_B <> 'M' THEN GOTO NoBREQM; END_IF; + // Gewollten Trolley markieren RETURN; NoBREQM: ; END_REGION diff --git a/SCL-Export/=A01+UH07-KF00/Port2_Telegramme_auswerten.scl b/SCL-Export/=A01+UH07-KF00/Port2_Telegramme_auswerten.scl index 4797d53..9e67ae3 100644 --- a/SCL-Export/=A01+UH07-KF00/Port2_Telegramme_auswerten.scl +++ b/SCL-Export/=A01+UH07-KF00/Port2_Telegramme_auswerten.scl @@ -26,24 +26,28 @@ FUNCTION "Port2_Telegramme_auswerten" : Void BEGIN REGION Telegrammkopf übergeben - %LB20 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[1]; - %LB21 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[2]; - %LB22 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[3]; - %LB23 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[4]; - %LB24 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[5]; - %LB25 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[6]; - %LB26 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[7]; - %LB27 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[8]; - %LB28 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[9]; - %LB29 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[10]; + // Kennung A: + #LB20 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[1]; + #LB21 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[2]; + #LB22 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[3]; + #LB23 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[4]; + // Kennung B: + #LB24 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[5]; + #LB25 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[6]; + #LB26 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[7]; + #LB27 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[8]; + // Kennung C: + #LB28 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[9]; + #LB29 := #SS_Port2_EmpfangsDaten.Port2.TelegrammKennung[10]; END_REGION REGION GOHDRespM-Telegramm ? (Entscheidungsreaktion) IF #Teleg_Kennung_A <> 'GOHD' THEN GOTO NoGOHDRespM; END_IF; IF #Teleg_Kennung_B <> 'Resp' THEN GOTO NoGOHDRespM; END_IF; IF #Teleg_Kennung_C <> 'M$00' THEN GOTO NoGOHDRespM; END_IF; - "INT_to_BCD (4stellig)"(Int_Wert := #SS_Port2_EmpfangsDaten.Port2.Puffer_LinienNr, BCD_Wert := #EndZiel); // Neu: Eintrag in Trolley-DB: - "Trolleydaten_ändern"(Gesamt_Trolley_DL := 1000, TrolleyID := #SS_Port2_EmpfangsDaten.Port2.TrolleyID, Endziel := #EndZiel, ShopGroup := #SS_Port2_EmpfangsDaten.Port2.StoreGroup); + // Neu: Eintrag in Trolley-DB: + "INT_to_BCD (4stellig)"(Int_Wert := #SS_Port2_EmpfangsDaten.Port2.Puffer_LinienNr, BCD_Wert := #EndZiel); + "Trolleydaten_ändern"(MB198 => "MB198", MW200 => "MW200", TrolleyDL_OutDaten => "TrolleyDL_OutDaten", TrolleyDL_SearchDaten => "TrolleyDL_SearchDaten"); RETURN; NoGOHDRespM: ; END_REGION diff --git a/SCL-Export/=A01+UH07-KF00/PufferZeiger_ermitteln.scl b/SCL-Export/=A01+UH07-KF00/PufferZeiger_ermitteln.scl new file mode 100644 index 0000000..e7461ff --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/PufferZeiger_ermitteln.scl @@ -0,0 +1,46 @@ +FUNCTION "PufferZeiger_ermitteln" : Void +{ 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 + Puffer_X : Int; // Puffer zum Auslagern + MW224 : Word; // war "MW224" + MW226 : Word; // war "MW226" + END_VAR + + VAR_OUTPUT + Puffer_DB : Int; + Puffer_DW : Int; + Error : Bool; + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + MW200 : Word; // war "MW200" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Zeiger für Puffer_X ermitteln + #MW200 := #Puffer_X; + #Error := #Puffer_X = 0; + IF #Puffer_X = 0 THEN RETURN; END_IF; + "DatenOut"(SSDB := 275, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M200.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // Einsprung Puffer ermitteln: | Eintrag lesen + #g_7_HMI_Err_UH07_OB.Logistik.DB275_Err := (#MB199 AND 2#1111111) <> 0; + #Error := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + #Puffer_DB := #MW224; + #Puffer_DW := #MW226; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Reservierung_in_Puffer_eintragen.scl b/SCL-Export/=A01+UH07-KF00/Reservierung_in_Puffer_eintragen.scl new file mode 100644 index 0000000..05a1c2a --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Reservierung_in_Puffer_eintragen.scl @@ -0,0 +1,77 @@ +FUNCTION "Reservierung_in_Puffer_eintragen" : Void +{ 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 + TrolleyID : DInt; + Ziel : Int; + ShopGroup : DInt; + Gesamt_Trolley_DL : Int; + MW224 : Word; // war "MW224" + MW226 : Word; // war "MW226" + SGes : Word; // war "SGes" + END_VAR + + VAR_OUTPUT + MD220 : DWord; // war "MD220" + MD224 : DWord; // war "MD224" + MW220 : Word; // war "MW220" + TrolleyDL_INDaten : Word; // war "TrolleyDL_INDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Lager_DB : Int; + Lager_DW : Int; + SSDW : Int; + Position : Int; + LeerPuffer : Bool; + VollPuffer : Bool; + END_VAR + +BEGIN + REGION TrolleyID + Ziel bekannt -> Reservierung im Puffer + IF #TrolleyID = 0 THEN RETURN; END_IF; + IF #Ziel = 0 THEN RETURN; END_IF; + #LeerPuffer := (0 >= 1) AND (0 <= 10); + #VollPuffer := (0 >= 101) AND (0 <= 151); + #MW220 := #Ziel; + "DatenOut"(SSDB := 275, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // Eintrag lesen + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + #Lager_DB := #MW224; + #Lager_DW := #MW226; + #MD220 := #TrolleyID; + #MD224 := #ShopGroup; + #SSDW := #Lager_DW + 200; + "DatenIn"(SSDB := #Lager_DB, SSDW := #SSDW, INDATEN := P#M220.0, RE_VAL := #MB198); + END_REGION + + REGION BC in Trolley-DL eintragen + IF #Gesamt_Trolley_DL = 0 THEN RETURN; END_IF; + #TrolleyDL_INDaten.INDaten.TrolleyID := #TrolleyID; + #TrolleyDL_INDaten.INDaten.EndZiel := #Ziel; + #TrolleyDL_INDaten.INDaten.ShopGroup := #ShopGroup; + IF #LeerPuffer THEN GOTO Standort; END_IF; + IF #LeerPuffer AND #VollPuffer THEN GOTO Standort; END_IF; + Standort: ; + #TrolleyDL_INDaten.INDaten.Standort := 16#0; + #TrolleyDL_INDaten.INDaten.LastTime.Jahr := #SGes.DATE_TIME.Jahr; + #TrolleyDL_INDaten.INDaten.LastTime.Monat := #SGes.DATE_TIME.Monat; + #TrolleyDL_INDaten.INDaten.LastTime.Tag := #SGes.DATE_TIME.Tag; + #TrolleyDL_INDaten.INDaten.LastTime.Stunde := #SGes.DATE_TIME.Stunde; + #TrolleyDL_INDaten.INDaten.LastTime.Minute := #SGes.DATE_TIME.Minute; + #TrolleyDL_INDaten.INDaten.LastTime.Sekunde := #SGes.DATE_TIME.Sekunde; + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1010.DBX0.0, RE_VAL := #MB198); // Daten in Datenbank schreiben: + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/SchleusenZeiger_ermitteln.scl b/SCL-Export/=A01+UH07-KF00/SchleusenZeiger_ermitteln.scl new file mode 100644 index 0000000..7eaccaa --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/SchleusenZeiger_ermitteln.scl @@ -0,0 +1,42 @@ +FUNCTION "SchleusenZeiger_ermitteln" : Void +{ 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 + Schleuse_X : Int; // Schleuse zum Beeinflussen + MW224 : Word; // war "MW224" + MW226 : Word; // war "MW226" + END_VAR + + VAR_OUTPUT + Schleusen_DB : Int; + Schleusen_DW : Int; + Error : Bool; + MW200 : Word; // war "MW200" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Zeiger für Schleuse_X ermitteln + #MW200 := #Schleuse_X; + "DatenOut"(SSDB := 274, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M200.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // Einsprung Schleuse ermitteln: | Eintrag lesen + #Error := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + #Schleusen_DB := #MW224; + #Schleusen_DW := #MW226; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/ShopGroup to Raus-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/ShopGroup to Raus-Lager ermitteln.scl new file mode 100644 index 0000000..141c16d --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/ShopGroup to Raus-Lager ermitteln.scl @@ -0,0 +1,49 @@ +FUNCTION "ShopGroup to Raus-Lager ermitteln" : Void +{ 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 + ShopGroup : DInt; // Aufgrunf dieser ShopGroup + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Int; // Puffer ermitteln + MD220 : DWord; // war "MD220" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Puffer_ShopGroup : Int; + Position : Int; + Schleife : Int; // Loopzähler + Puffer_Zähler : Int; + Puffer_DW : Int; + AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) + AR1Start : DInt; // Startwert mit Offset 0 + END_VAR + +BEGIN + REGION Aktiver Puffer für diese ShopGroup zum Abrufen + #Puffer := 0; + #MD220 := #ShopGroup; + IF #ShopGroup = 0 THEN RETURN; END_IF; + END_REGION + + REGION Puffer mit dieser ShopGroup zum Abrufen aktiv? + "DatenOut"(SSDB := 102, SSDW := 0, PARA := 16#0202, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer ShopGroupn abrufen | Eintrag lesen (ab 2.DW) + IF NOT (#M199_7) THEN RETURN; END_IF; + #Puffer := #MW220; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/ShopGroup_Raus-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/ShopGroup_Raus-Lager ermitteln.scl new file mode 100644 index 0000000..1a736f0 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/ShopGroup_Raus-Lager ermitteln.scl @@ -0,0 +1,49 @@ +FUNCTION "ShopGroup_Raus-Lager ermitteln" : Void +{ 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 + ShopGroup : DInt; // Aufgrunf dieser ShopGroup + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Int; // Puffer ermitteln + MD220 : DWord; // war "MD220" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Puffer_ShopGroup : Int; + Position : Int; + Schleife : Int; // Loopzähler + Puffer_Zähler : Int; + Puffer_DW : Int; + AR1Zeiger : DWord; // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes) + AR1Start : DInt; // Startwert mit Offset 0 + END_VAR + +BEGIN + REGION Aktiver Puffer für diese ShopGroup zum Abrufen + #Puffer := 0; + #MD220 := #ShopGroup; + IF #ShopGroup = 0 THEN RETURN; END_IF; + END_REGION + + REGION Puffer mit dieser ShopGroup zum Abrufen aktiv? + "DatenOut"(SSDB := 102, SSDW := 0, PARA := 16#0202, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer ShopGroupn abrufen | Eintrag lesen (ab 2.DW) + IF NOT (#M199_7) THEN RETURN; END_IF; + #Puffer := #MW220; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/ShopGroup_Rein-Lager ermitteln.scl b/SCL-Export/=A01+UH07-KF00/ShopGroup_Rein-Lager ermitteln.scl new file mode 100644 index 0000000..a2bf6aa --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/ShopGroup_Rein-Lager ermitteln.scl @@ -0,0 +1,52 @@ +FUNCTION "ShopGroup_Rein-Lager ermitteln" : Void +{ 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 + ShopGroup : DInt; // Aufgrunf dieser ShopGroup + M199_7 : Bool; // war "M199.7" + MW220 : Word; // war "MW220" + END_VAR + + VAR_OUTPUT + Puffer : Word; // Puffer ermitteln + MD220 : DWord; // war "MD220" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + END_VAR + + VAR_TEMP + Position : Int; + END_VAR + +BEGIN + REGION Aktives Puffer für diese ShopGroup zum Einfahren + #Puffer := 16#0; + #MD220 := #ShopGroup; + IF (#ShopGroup < 0) AND (#ShopGroup <> -1) THEN RETURN; END_IF; + END_REGION + + REGION Puffer mit dieser ShopGroup schon zum Einlagern aktiv? + "DatenOut"(SSDB := 101, SSDW := 0, PARA := 16#0202, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer ShopGroup einfahren | Eintrag lesen (ab 2.DW) + IF #M199_7 THEN GOTO Puffer; END_IF; + END_REGION + + REGION Leeres Puffer vorhanden? + "DatenOut"(SSDB := 100, SSDW := 0, PARA := 16#F100, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := P#M220.0, Position := #Position); // DL Puffer leer | 1.Eintrag lesen + IF #M199_7 THEN GOTO Puffer; END_IF; + RETURN; + END_REGION + + REGION Puffer aufbereiten + #Puffer := INT_TO_BCD16(#MW220) OR 16#B000; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Trolley_DL_Check_ID.scl b/SCL-Export/=A01+UH07-KF00/Trolley_DL_Check_ID.scl new file mode 100644 index 0000000..6083dbc --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Trolley_DL_Check_ID.scl @@ -0,0 +1,50 @@ +FUNCTION "Trolley_DL_Check_ID" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + TrolleyDL_OutDaten : Word; // war "TrolleyDL_OutDaten" + END_VAR + + VAR_OUTPUT + Check_EndZiel : Word; // Ziel + Check_ZwischenZiel : Word; // Für Weiche,... + Check_ShopGroup : DInt; // Shop-Gruppe + Check_Standort : Word; // Standort (Puffer, unterwegs) + Err : Bool; + MD220 : DWord; // war "MD220" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + MW196 : Word; // war "MW196" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolley auslesen + #MD220 := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := %DB1011.DBX0.0, Position := #MW196); // Eintrag lesen + #Err := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + END_REGION + + REGION Relevante Daten übergeben + #Check_EndZiel := #TrolleyDL_OutDaten.OUTDaten.EndZiel; + #Check_ZwischenZiel := #TrolleyDL_OutDaten.OUTDaten.ZwischenZiel; + #Check_ShopGroup := #TrolleyDL_OutDaten.OUTDaten.ShopGroup; + #Check_Standort := #TrolleyDL_OutDaten.OUTDaten.Standort; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Trolley_DL_Neue_Pos.scl b/SCL-Export/=A01+UH07-KF00/Trolley_DL_Neue_Pos.scl new file mode 100644 index 0000000..d130b08 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Trolley_DL_Neue_Pos.scl @@ -0,0 +1,64 @@ +FUNCTION "Trolley_DL_Neue_Pos" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + Position : Word; + ShopGroup : DInt; + SGes : Word; // war "SGes" + END_VAR + + VAR_OUTPUT + Err : Bool; + MD220 : DWord; // war "MD220" + TrolleyDL_OutDaten : Word; // war "TrolleyDL_OutDaten" + END_VAR + + VAR_IN_OUT + MB199 : Byte; // war "MB199" + MW196 : Word; // war "MW196" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolley auslesen + #MD220 := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#0000, SEARCHDATEN := P#M220.0, RE_VAL := #MB199, OUTDATEN := %DB1011.DBX0.0, Position := #MW196); // Eintrag lesen + #Err := (#MB199 AND 2#1111111) <> 0; + IF (#MB199 AND 2#1111111) <> 0 THEN RETURN; END_IF; + END_REGION + + REGION Zeit übegeben + #TrolleyDL_OutDaten.OUTDaten.TrolleyID := #TrolleyID; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Jahr := #SGes.DATE_TIME.Jahr; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Monat := #SGes.DATE_TIME.Monat; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Tag := #SGes.DATE_TIME.Tag; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Stunde := #SGes.DATE_TIME.Stunde; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Minute := #SGes.DATE_TIME.Minute; + #TrolleyDL_OutDaten.OUTDaten.LastTime.Sekunde := #SGes.DATE_TIME.Sekunde; + END_REGION + + REGION Neue Position übergeben + IF #Position <> 0 THEN #TrolleyDL_OutDaten.OUTDaten.Standort := #Position; END_IF; + END_REGION + + REGION ShopGroup übergeben ? (bei 0 nichts ändern!) + IF #ShopGroup <> 0 THEN #TrolleyDL_OutDaten.OUTDaten.ShopGroup := #ShopGroup; END_IF; + END_REGION + + REGION Daten schreiben + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1011.DBX0.0, RE_VAL := #MB199); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Trolleydaten_löschen.scl b/SCL-Export/=A01+UH07-KF00/Trolleydaten_löschen.scl new file mode 100644 index 0000000..99c60a0 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Trolleydaten_löschen.scl @@ -0,0 +1,36 @@ +FUNCTION "Trolleydaten_löschen" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_SearchDaten : Word; // war "TrolleyDL_SearchDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MW200 : Word; // war "MW200" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolleydaten auslesen und verändern + #TrolleyDL_SearchDaten.SEARCHDaten.TrolleyID := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#E100, SEARCHDATEN := %DB1012.DBX0.0, RE_VAL := #MB198, OUTDATEN := %DB1011.DBX0.0, Position := #MW200); // Eintrag lesen + austragen + RETURN; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Trolleydaten_neu_anlegen.scl b/SCL-Export/=A01+UH07-KF00/Trolleydaten_neu_anlegen.scl new file mode 100644 index 0000000..20b943a --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Trolleydaten_neu_anlegen.scl @@ -0,0 +1,51 @@ +FUNCTION "Trolleydaten_neu_anlegen" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + Endziel : Word; + ShopGroup : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_INDaten : Word; // war "TrolleyDL_INDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + END_VAR + + VAR_TEMP + Lager_DB : Int; + Lager_DW : Int; + SSDW : Int; + Position : Int; + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Erst mal alte Daten löschen + "Trolleydaten_löschen"(MB198 => "MB198", MW200 => "MW200", TrolleyDL_SearchDaten => "TrolleyDL_SearchDaten"); + END_REGION + + REGION Trolleydaten speichern + #TrolleyDL_INDaten.INDaten.TrolleyID := #TrolleyID; + #TrolleyDL_INDaten.INDaten.EndZiel := #Endziel; + #TrolleyDL_INDaten.INDaten.ShopGroup := #ShopGroup; + #TrolleyDL_INDaten.INDaten.ZwischenZiel := 0; + #TrolleyDL_INDaten.INDaten.Standort := 0; + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1010.DBX0.0, RE_VAL := #MB198); // Daten in Datenbank schreiben: + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/Trolleydaten_ändern.scl b/SCL-Export/=A01+UH07-KF00/Trolleydaten_ändern.scl new file mode 100644 index 0000000..b4087d5 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Trolleydaten_ändern.scl @@ -0,0 +1,43 @@ +FUNCTION "Trolleydaten_ändern" : Void +{ 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 + Gesamt_Trolley_DL : Int; + TrolleyID : DInt; + Endziel : Word; + ShopGroup : DInt; + END_VAR + + VAR_OUTPUT + TrolleyDL_OutDaten : Word; // war "TrolleyDL_OutDaten" + TrolleyDL_SearchDaten : Word; // war "TrolleyDL_SearchDaten" + END_VAR + + VAR_IN_OUT + MB198 : Byte; // war "MB198" + MW200 : Word; // war "MW200" + END_VAR + +BEGIN + REGION GesamtTrolly-DL angegeben? + IF #Gesamt_Trolley_DL <= 0 THEN RETURN; END_IF; + END_REGION + + REGION Trolleydaten auslesen und verändern + #TrolleyDL_SearchDaten.SEARCHDaten.TrolleyID := #TrolleyID; + "DatenOut"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, PARA := 16#0000, SEARCHDATEN := %DB1012.DBX0.0, RE_VAL := #MB198, OUTDATEN := %DB1011.DBX0.0, Position := #MW200); // Eintrag lesen + IF #MB198 <> 2#10000000 THEN RETURN; END_IF; + IF #Endziel <> -1 THEN #TrolleyDL_OutDaten.OUTDaten.EndZiel := #Endziel; END_IF; + IF #ShopGroup <> -1 THEN #TrolleyDL_OutDaten.OUTDaten.ShopGroup := #ShopGroup; END_IF; + "DatenIn"(SSDB := #Gesamt_Trolley_DL, SSDW := 0, INDATEN := %DB1011.DBX0.0, RE_VAL := #MB198); + RETURN; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/VP_Bereich.scl b/SCL-Export/=A01+UH07-KF00/VP_Bereich.scl new file mode 100644 index 0000000..148095e --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/VP_Bereich.scl @@ -0,0 +1,24 @@ +FUNCTION "VP_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DVP_Sensoren"(); + "DVP_OmniFahren"(); + "DVollPufferStrecken_A"(); + "DVollPufferStrecken_B"(); + "DVP_Sorter_A"(); + "DVP_Sorter_B"(); + "DVP_Auslagern"(); + "DVP_Zylinder"(); + "DVP_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/VPtoEP_Bereich.scl b/SCL-Export/=A01+UH07-KF00/VPtoEP_Bereich.scl new file mode 100644 index 0000000..4ce83ca --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/VPtoEP_Bereich.scl @@ -0,0 +1,19 @@ +FUNCTION "VPtoEP_Bereich" : Void +{ 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). + +BEGIN + REGION Baustein-Aufrufe + "DVPtoEP_Sensoren"(); + "DVPtoEP_OmniFahren"(); + "DVPtoEP_Zylinder"(); + "DVPtoEP_Antriebe"(); + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION diff --git a/SCL-Export/=A01+UH07-KF00/VPtoEP_OmniFahren.scl b/SCL-Export/=A01+UH07-KF00/VPtoEP_OmniFahren.scl new file mode 100644 index 0000000..bce53a5 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/VPtoEP_OmniFahren.scl @@ -0,0 +1,252 @@ +FUNCTION_BLOCK "VPtoEP_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 + g_7_HMI_Err_UH07_OB : Word; // war "7_HMI_Err_UH07_OB" + BG4453 : Word; // war "BG4453" + BG4530 : Word; // war "BG4530" + MA0332 : Bool; // war "MA0332" + END_VAR + + VAR_IN_OUT + BG3246 : Word; // war "BG3246" + BG3247 : Word; // war "BG3247" + BG3251 : Word; // war "BG3251" + BG3274 : Word; // war "BG3274" + BG3275 : Word; // war "BG3275" + BG3361 : Word; // war "BG3361" + BG3362 : Word; // war "BG3362" + BG3363 : Word; // war "BG3363" + BG3364 : Word; // war "BG3364" + BG3366 : Word; // war "BG3366" + BG4440 : Word; // war "BG4440" + BG4441 : Word; // war "BG4441" + BG4442 : Word; // war "BG4442" + BG4443 : Word; // war "BG4443" + BG4447 : Word; // war "BG4447" + BG4450 : Word; // war "BG4450" + BG4451 : Word; // war "BG4451" + BG4454 : Word; // war "BG4454" + BG4461 : Word; // war "BG4461" + BG4500 : Word; // war "BG4500" + BG4501 : Word; // war "BG4501" + BG4502 : Word; // war "BG4502" + DEPtoLP_Antriebe : Word; // war "DEPtoLP_Antriebe" + DOutbound_Bereich : Word; // war "DOutbound_Bereich" + DVPtoEP_Antriebe : Word; // war "DVPtoEP_Antriebe" + DVPtoEP_Sensoren : Word; // war "DVPtoEP_Sensoren" + DVPtoEP_Zylinder : Word; // war "DVPtoEP_Zylinder" + MA0060 : Bool; // war "MA0060" + MA0061 : Bool; // war "MA0061" + MA0151 : Bool; // war "MA0151" + MA0320 : Bool; // war "MA0320" + MA0321 : Bool; // war "MA0321" + MA0322 : Bool; // war "MA0322" + MA0323 : Bool; // war "MA0323" + MA0324 : Bool; // war "MA0324" + MA0325 : Bool; // war "MA0325" + MA0331 : Bool; // war "MA0331" + MB3247 : Byte; // war "MB3247" + MB3275 : Byte; // war "MB3275" + MB3363 : Byte; // war "MB3363" + MB3366 : Byte; // war "MB3366" + MB4443 : Byte; // war "MB4443" + MB4445 : Byte; // war "MB4445" + MB4450 : Byte; // war "MB4450" + END_VAR + + VAR + Schleuse_3247 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Schleuse_3275 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_3361 : "MHMOmniBereich_Plus"; + Schleuse_3363 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Schleuse_3366 { S7_SetPoint := 'False'} : "MHMOmniSchleuse"; + Bereich_4441 : "MHMOmniBereich_Plus"; + Schleuse_4443 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Weiche_4445 : "MHMOmniWeiche_Plus"; + Schleuse_4450 { S7_SetPoint := 'False'} : "MHMOmniSchleuse_Plus"; + Bereich_4454 : "MHMOmniBereich_Plus"; + Übergang_4501 { S7_SetPoint := 'False'} : "MHMÜbergang_ohne_Schleuse"; + END_VAR + + VAR_TEMP + ErrQuit : Bool; + ErrAnz : Bool; + Stau_raus : Bool; + Start_ok : Bool; + B_aktiv : Bool; + B_vor_Schleuse : Bool; + B_nach_Schleuse : Bool; + Antrieb_aktiv : Bool; + Antrieb_vor : Bool; + Antrieb_stop : Bool; + Fahren_Ok : Bool; + Antrieb_nicht_stoppen : Bool; + END_VAR + +BEGIN + REGION Systemzeug + #Schleuse_3247.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3275.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_3361.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3363.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3366.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4441.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4443.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Weiche_4445.Dyn.Status.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_4450.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Bereich_4454.Dyn.Sk.Auto_akt := #DOutbound_Bereich.A01_UH07.AnlageEin; + #Schleuse_3247.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Schleuse_3275.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC071.BereichErr); + #Bereich_3361.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3363.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Schleuse_3366.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UH07.BereichErr); + #Bereich_4441.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4443.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Weiche_4445.Dyn.Status.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Schleuse_4450.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + #Bereich_4454.Dyn.Sk.Bereich_ok := NOT (#DOutbound_Bereich.A01_UC074.BereichErr); + END_REGION + + REGION Störungen quittieren UZ7105 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7105.StOk_aktiv OR #DOutbound_Bereich.A01_UC071.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3247 + #Schleuse_3247(Schleusen_Nr := 3247, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3246, B_InSchleuse := #BG3247, B_Zähl := #BG3251, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG3251.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0151, Antrieb_plus_aktiv := #MA0151, Schleuse_geöffnet := #MB3247, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_3247.Stat.Ast, Error := %DB708.DBW520, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0151.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0151.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0151.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0151.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Schleuse 3275 + #Schleuse_3275(Schleusen_Nr := 3275, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3251, B_InSchleuse := #BG3275, B_AusSchleuse := #BG3274, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG3274.Stat.B_Akt, Start_Ok := #Bereich_3361.Dyn.Sk.Bereich_ok, Antrieb_Schleuse_aktiv := #MA0151, Antrieb_plus_aktiv := #MA0060, Schleuse_geöffnet := #MB3275, RestZeit_Bereich_plus := #Bereich_3361.Dyn.Restzeit, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_3275.Stat.Ast, Error := %DB708.DBW570, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0151.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0151.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0151.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0151.Stat.A_PS, Antrieb_plus_vor := #Bereich_3361.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7105 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7105.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC071.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7105/0701 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7105.StOk_aktiv OR #DOutbound_Bereich.A01_UZ0701.StOk_aktiv) OR #DOutbound_Bereich.A01_UC071.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 3361 + #B_vor_Schleuse := #BG3274 AND #MB3275; + #Bereich_3361(Bereichs_Nr := 3361, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG3361, B_Zähl := #BG3362, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG3362.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0060, Antrieb_plus_aktiv := #MA0061, Antrieb_Bereich_vor := #DVPtoEP_Antriebe.MA0060.Stat.A_vor, Antrieb_Bereich_stop := #DVPtoEP_Antriebe.MA0060.Stat.Stop_vor, Error := %DB708.DBW454, Antrieb_Bereich_start := #DVPtoEP_Antriebe.MA0060.Stat.A_start, Antrieb_plus_vor := #DVPtoEP_Antriebe.MA0061.Stat.A_vor, Antrieb_plus_start := #DVPtoEP_Antriebe.MA0061.Stat.A_start, Antrieb_minus_vor := #DVPtoEP_Antriebe.MA0151.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ7105/0701 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7105.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ0701.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC071.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ0701 + #ErrQuit := #DOutbound_Bereich.A01_UZ0701.StOk_aktiv OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Schleuse 3363 + #Schleuse_3363(Schleusen_Nr := 3363, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3362, B_InSchleuse := #BG3363, B_AusSchleuse := #BG3364, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG3364.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0061, Antrieb_plus_aktiv := #MA0061, Schleuse_geöffnet := #MB3363, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_3363.Stat.Ast, Error := %DB708.DBW528, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0061.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0061.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0061.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0061.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // Identisch + END_REGION + + REGION Schleuse 3366 (vor BST 1) + #Fahren_Ok := ((((NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle3) AND NOT (#g_7_HMI_Err_UH07_OB.System.Gesamt_Feueralarm_Halle4)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Feueralarm)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Geschlossen)) AND NOT (#g_7_HMI_Err_UH07_OB.System.BST1_Störung)) AND #Bereich_4441.Dyn.Sk.Bereich_ok; + #Schleuse_3366(Schleusen_Nr := 3366, ErrQuit := #ErrQuit, B_VorSchleuse := #BG3364, B_InSchleuse := #BG3366, B_AusSchleuse := #BG4440, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG4440.Stat.B_Akt, Start_Ok := #Fahren_Ok, Antrieb_Schleuse_aktiv := #MA0061, Antrieb_plus_aktiv := #MA0320, Schleuse_geöffnet := #MB3366, RestZeit_Bereich_plus := #Bereich_4441.Dyn.Restzeit, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_3366.Stat.Ast, Error := %DB708.DBW530, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0061.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0061.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0061.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0061.Stat.A_PS, Antrieb_plus_vor := #Bereich_4441.Dyn.Status.Trolley_kommt_in_Bereich, hStOk := #ErrAnz); + END_REGION + + REGION Störungen anzeigen UZ0701 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ0701.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7401 + #ErrQuit := (#DOutbound_Bereich.A01_UZ7401.StOk_aktiv OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 4441 (hinter BST 1) + IF #DVPtoEP_Sensoren.Stau_BG4440.Stat.B_Akt THEN #DVPtoEP_Antriebe.MA0320.Stat.A_start := TRUE; END_IF; + #B_vor_Schleuse := #BG4440 AND #MB3366; + #Bereich_4441(Bereichs_Nr := 4441, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4441, B_Zähl := #BG4442, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG4442.Stat.B_Akt, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0320, Antrieb_plus_aktiv := #MA0321, Antrieb_Bereich_vor := #DVPtoEP_Antriebe.MA0320.Stat.A_vor, Antrieb_Bereich_stop := #DVPtoEP_Antriebe.MA0320.Stat.Stop_vor, Error := %DB708.DBW474, Antrieb_Bereich_start := #DVPtoEP_Antriebe.MA0320.Stat.A_start, Antrieb_plus_vor := #DVPtoEP_Antriebe.MA0321.Stat.A_vor, Antrieb_plus_start := #DVPtoEP_Antriebe.MA0321.Stat.A_start, hStOk := #ErrAnz); + END_REGION + + REGION Schleuse 4443 + #Schleuse_4443(Schleusen_Nr := 4443, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4442, B_InSchleuse := #BG4443, B_Zähl := , B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG4445.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0321, Antrieb_plus_aktiv := , Schleuse_geöffnet := #MB4443, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_4443.Stat.Ast, Error := %DB708.DBW554, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0321.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0321.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0321.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0321.Stat.A_PS, Antrieb_plus_vor := , hStOk := #ErrAnz); // über Weiche | über Weiche | über Weiche + END_REGION + + REGION Weiche 4445 + #Antrieb_aktiv := #MA0321 AND #MA0332; + #Antrieb_vor := FALSE; + #Antrieb_stop := FALSE; + #Weiche_4445(Weichen_Nr := 4445, ErrQuit := #ErrQuit, Fahren_Ok := 1, B_Ziel_gerade := #BG4447, B_Ziel_abzweig := #BG4461, Antrieb_Weiche_aktiv := #Antrieb_aktiv, Antrieb_Gerade_aktiv := #MA0322, Antrieb_Abzweig_aktiv := #MA0331, Weiche_ist_AST := #MB4445, Y_Weiche_abzweig := #DVPtoEP_Zylinder.Weiche_4445.Stat.Ast, Error := %DB708.DBW556, Antrieb_Weiche_vor := #Antrieb_vor, Antrieb_Weiche_stop := #Antrieb_stop, Antrieb_Weiche_gerade_vor := #DVPtoEP_Antriebe.MA0322.Stat.A_vor, Antrieb_Weiche_gerade_stop := #DVPtoEP_Antriebe.MA0322.Stat.Stop_vor, Antrieb_Weiche_abzweig_vor := #DEPtoLP_Antriebe.MA0331.Stat.A_vor, Antrieb_Weiche_abzweig_stop := #DEPtoLP_Antriebe.MA0331.Stat.Stop_vor, hStOk := #ErrAnz); // da 2 Antriebe notwendig + IF #Antrieb_vor THEN + #DVPtoEP_Antriebe.MA0321.Stat.A_vor := TRUE; + #DEPtoLP_Antriebe.MA0332.Stat.A_vor := TRUE; + #DVPtoEP_Antriebe.MA0321.Stat.A_start := TRUE; + #DEPtoLP_Antriebe.MA0332.Stat.A_start := TRUE; + END_IF; + IF #Antrieb_stop THEN #DVPtoEP_Antriebe.MA0321.Stat.Stop_vor := TRUE; END_IF; + IF #Antrieb_stop AND #MB4445 THEN #DEPtoLP_Antriebe.MA0332.Stat.Stop_vor := TRUE; END_IF; + IF #Weiche_4445.Dyn.Status.Weiche_frei THEN #DVPtoEP_Zylinder.Weiche_4445.Stat.Ast := FALSE; END_IF; + END_REGION + + REGION Schleuse 4450 + #Antrieb_vor := FALSE; + #Schleuse_4450(Schleusen_Nr := 4450, ErrQuit := #ErrQuit, B_VorSchleuse := #BG4447, B_InSchleuse := #BG4450, B_Zähl := #BG4451, B_Stau_raus := #DVPtoEP_Sensoren.Stau_BG4451.Stat.B_Akt, Start_Ok := 1, Antrieb_Schleuse_aktiv := #MA0322, Antrieb_plus_aktiv := #MA0323, Schleuse_geöffnet := #MB4450, RestZeit_Bereich_plus := #Bereich_4454.Dyn.Restzeit, Y_Schleuse_Auf := #DVPtoEP_Zylinder.Schleuse_4450.Stat.Ast, Error := %DB708.DBW558, Antrieb_Schleuse_vor := #DVPtoEP_Antriebe.MA0322.Stat.A_vor, Antrieb_Schleuse_start := #DVPtoEP_Antriebe.MA0322.Stat.A_start, Antrieb_Schleuse_stop := #DVPtoEP_Antriebe.MA0322.Stat.Stop_vor, Antrieb_Schleuse_PS := #DVPtoEP_Antriebe.MA0322.Stat.A_PS, Antrieb_plus_vor := #Antrieb_vor, hStOk := #ErrAnz); + IF #Antrieb_vor THEN + #DVPtoEP_Antriebe.MA0322.Stat.A_vor := TRUE; + #Bereich_4454.Dyn.Status.Trolley_kommt_in_Bereich := TRUE; + END_IF; + END_REGION + + REGION Störungen anzeigen UZ7401 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7401.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Störungen quittieren UZ7401/7402 + #ErrQuit := ((#DOutbound_Bereich.A01_UZ7401.StOk_aktiv OR #DOutbound_Bereich.A01_UZ7402.StOk_aktiv) OR #DOutbound_Bereich.A01_UC074.StOk_aktiv) OR #DOutbound_Bereich.A01_UH07.StOk_aktiv; + END_REGION + + REGION Bereich 4454 + #B_vor_Schleuse := #BG4453 AND #MB4450; + #Stau_raus := (#DVPtoEP_Sensoren.Stau_BG4500.Stat.B_Akt OR #DVPtoEP_Sensoren.Stau_BG4530.Stat.B_Akt) OR #DVPtoEP_Sensoren.Stau_BG4502.Stat.B_Akt; + #Bereich_4454(Bereichs_Nr := 4454, ErrQuit := #ErrQuit, B_BereichsAnfang := #B_vor_Schleuse, B_BereichsEnde := #BG4454, B_Zähl := #BG4500, B_Stau_raus := #Stau_raus, Start_Ok := 1, Antrieb_Bereich_aktiv := #MA0323, Antrieb_plus_aktiv := #MA0324, Antrieb_Bereich_vor := #DVPtoEP_Antriebe.MA0323.Stat.A_vor, Antrieb_Bereich_stop := #DVPtoEP_Antriebe.MA0323.Stat.Stop_vor, Error := %DB708.DBW476, Antrieb_Bereich_start := #DVPtoEP_Antriebe.MA0323.Stat.A_start, Antrieb_plus_vor := #DVPtoEP_Antriebe.MA0324.Stat.A_vor, Antrieb_plus_start := #DVPtoEP_Antriebe.MA0324.Stat.A_start, Antrieb_minus_vor := #DVPtoEP_Antriebe.MA0322.Stat.A_vor, hStOk := #ErrAnz); + END_REGION + + REGION MA0324 / Übergang 4501 + #B_vor_Schleuse := #BG4500 OR #BG4530; + #Übergang_4501(ErrQuit := #ErrQuit, B_Anfang := #B_vor_Schleuse, B_Am_Übergang := #BG4501, B_Stau_Antrieb_plus := #BG4502, Antrieb_aktiv := #MA0324, Antrieb_plus_aktiv := #MA0325, Antrieb_vor := #DVPtoEP_Antriebe.MA0324.Stat.A_vor, Antrieb_start := #DVPtoEP_Antriebe.MA0324.Stat.A_start, Antrieb_stop := #DVPtoEP_Antriebe.MA0324.Stat.A_PS, Antrieb_plus_vor := #DVPtoEP_Antriebe.MA0325.Stat.A_vor, Antrieb_plus_start := #DVPtoEP_Antriebe.MA0325.Stat.A_start); + END_REGION + + REGION Störungen anzeigen UZ7401/7402 + IF #ErrAnz THEN + #ErrAnz := FALSE; + #DOutbound_Bereich.A01_UZ7401.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UZ7402.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UC074.StOk_blinken := TRUE; + #DOutbound_Bereich.A01_UH07.StOk_blinken := TRUE; + END_IF; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION_BLOCK diff --git a/SCL-Export/=A01+UH07-KF00/Wandel_FC_für_DB1000.scl b/SCL-Export/=A01+UH07-KF00/Wandel_FC_für_DB1000.scl new file mode 100644 index 0000000..1d9bbd6 --- /dev/null +++ b/SCL-Export/=A01+UH07-KF00/Wandel_FC_für_DB1000.scl @@ -0,0 +1,24 @@ +FUNCTION "Wandel_FC_für_DB1000" : Void +{ 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 + MD94 : DWord; // war "MD94" + END_VAR + + VAR_OUTPUT + MW92 : Word; // war "MW92" + END_VAR + +BEGIN + REGION Wandeln der Daten + #MW92 := #MD94 + -6040000; + END_REGION + + REGION Ende + RETURN; + END_REGION + +END_FUNCTION