diff --git a/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Draussen_FC.scl b/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Draussen_FC.scl new file mode 100644 index 0000000..01c9fe9 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Draussen_FC.scl @@ -0,0 +1,138 @@ +FUNCTION "Arbeitsplatz_Draussen_FC" : Void +TITLE = Draussen-FC: AMR Arbeitsplaetze +{ S7_Optimized_Access := 'FALSE' } +AUTHOR : AE +FAMILY : Module +NAME : Draussen +//SCL-Portierung des AWL-Bausteins FC1182 "Arbeitsplatz_Draussen_FC" (verhaltensgleich). +// +//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung +//ueber Register" (ParameterPassing) aktiv und konnte daher nur per UC/CC aus AWL +//aufgerufen werden. Da der Baustein ausschliesslich den globalen Merker MW190 +//(Schleusen-Nr) liest und die Zielbausteine voll qualifiziert aufruft, gibt es +//keine echte Registerabhaengigkeit -> die Option entfaellt bei der SCL-Fassung, +//der Baustein ist damit direkt aus SCL aufrufbar (CASE 1182 in MHMOmniSchleuse). +// +//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L / NE_I / JC") +//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Die Merker-Schnittstelle +//(MW190 vom Aufrufer gesetzt) bleibt erhalten. +// +//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!): +// - Standort fuer Schleuse 3481 war im Original die Wort-Typkonstante "w#3481"; +// hier als W#16#3481 uebernommen. Wert pruefen! + VAR_TEMP + Position : Int; + WeichenZiel : Int; + END_VAR + +BEGIN + // NW1: Rueckmeldungen erst mal resetten (Weiterfahrt von Ziel-FC erlaubt) + "M180.6" := FALSE; + + // AWL: UC FC1182 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt) + CASE WORD_TO_INT("MW190") OF + + 3481: // Schleuse 3481: Ausgefahren? (Einfahrt 180 Grad-ByPass) + // Trolley am Arbeitsplatz reservieren: + "Reservierung_in_Arbeitsplatz_eintragen"( + TrolleyID := "DZuführung_OmniFahren".Schleuse_3481.Dyn.TrolleyID_Schleuse, + Ziel := "DZuführung_OmniFahren".Schleuse_3481.Dyn.Trolley_EndZiel, + Standort := W#16#3481, + Gesamt_Trolley_DL := 1000); + // Trolley an Arbeitsplatz uebergeben: + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DZuführung_OmniFahren".Schleuse_3481.Dyn.TrolleyID_Schleuse, + Ziel := "DZuführung_OmniFahren".Schleuse_3481.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#B300, + Gesamt_Trolley_DL := 1000); + + 3241: // Schleuse 3241: Ausgefahren? (Einfahrt PS5) + // Trolley am Arbeitsplatz reservieren: + "Reservierung_in_Arbeitsplatz_eintragen"( + TrolleyID := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + Standort := W#16#3250, + Gesamt_Trolley_DL := 1000); + // Trolley an Arbeitsplatz uebergeben: + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#A500, + Gesamt_Trolley_DL := 1000); + + 3271: // Schleuse 3271: Ausgefahren? (Einfahrt PS4) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DPS4_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS4_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#A400, + Gesamt_Trolley_DL := 1000); + + 3293: // Schleuse 3293: Ausgefahren? (Einfahrt PS3) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#A300, + Gesamt_Trolley_DL := 1000); + + 3331: // Schleuse 3331: Ausgefahren? (Einfahrt PS2) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#A200, + Gesamt_Trolley_DL := 1000); + + 3353: // Schleuse 3353: Ausgefahren? (Einfahrt PS1) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#A100, + Gesamt_Trolley_DL := 1000); + + 3390: // Schleuse 3390: Ausgefahren? (Einfahrt MPS3) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DMPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DMPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#B300, + Gesamt_Trolley_DL := 1000); + + 3421: // Schleuse 3421: Ausgefahren? (Einfahrt MPS2) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DMPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DMPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#B200, + Gesamt_Trolley_DL := 1000); + + 3450: // Schleuse 3450: Ausgefahren? (Einfahrt MPS1) + "Trolley_in_Arbeitsplatz_eingefahren"( + TrolleyID := "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Ziel := "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Trolley_EndZiel, + AusfahrZiel := W#16#B100, + Gesamt_Trolley_DL := 1000); + // Gerade? Also zum OB-Bereich? (AWL: L Weichen_Ziel / L 16#3451 / NE_I / BEC) + IF "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.Weichen_Ziel = W#16#3451 THEN + // Trolleydaten in DB1000 loeschen, da in AMR faehrt und danach kein Leser mehr! + "Trolleydaten_löschen"( + Gesamt_Trolley_DL := 1000, + TrolleyID := "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse); + END_IF; + + 3455: // Schleuse 3455: Ausgefahren? (Platz1 MPS1) + // Trolleydaten in DB1000 loeschen, da in AMR faehrt und danach kein Leser mehr! + "Trolleydaten_löschen"( + Gesamt_Trolley_DL := 1000, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse); + + 3461: // Schleuse 3461: Ausgefahren? (Platz2 MPS1) + "Trolleydaten_löschen"( + Gesamt_Trolley_DL := 1000, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse); + + 3465: // Schleuse 3465: Ausgefahren? (Platz3 MPS1) + "Trolleydaten_löschen"( + Gesamt_Trolley_DL := 1000, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse); + + ELSE + ; // unbekannte Schleusen-Nr -> nichts tun + END_CASE; +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Leser_FC.scl b/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Leser_FC.scl new file mode 100644 index 0000000..fe16176 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/Arbeitsplatz_Leser_FC.scl @@ -0,0 +1,348 @@ +FUNCTION "Arbeitsplatz_Leser_FC" : Void +TITLE = Leser-FC: AMR Arbeitsplätze +{ S7_Optimized_Access := 'FALSE' } +AUTHOR : AE +FAMILY : Module +NAME : Leser +//SCL-Portierung des AWL-Bausteins FC1180 "Arbeitsplatz_Leser_FC" (verhaltensgleich). +// +//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung +//ueber Register" (ParameterPassing) aktiv und konnte daher nur per UC/CC aus AWL +//aufgerufen werden. Da der Baustein ausschliesslich die globalen Merker MW190 +//(Schleusen-Nr) und M180.0/M180.1 (Lese-Status) liest und die Zielbausteine voll +//qualifiziert aufruft, gibt es keine echte Registerabhaengigkeit -> die Option +//entfaellt bei der SCL-Fassung, der Baustein ist direkt aus SCL aufrufbar +//(CASE 1180 in MHMOmniSchleuse). +// +//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L / NE_I / JC") +//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Case-Labels sind die dezimalen +//Int-Konstanten aus dem XML. Die Merker-Schnittstelle bleibt erhalten. +// +//Zweig-Muster je Schleuse (in JEDEM der 33 Netzwerke identisch geprueft): +// AN M180.0 / JC Y / BEU -> bei Lesefehler (M180.0=1): nichts tun +// Y: AN M180.1 / BEC -> nur weiter wenn unbekannt in TrolleysDL (M180.1=1) +// L TrolleyID / L DINT#0 / EQ_D / BEC -> nur weiter wenn TrolleyID <> 0 +// CALL Trolleydaten_neu_anlegen(...) +// => Aufruf nur wenn: NOT M180.0 AND M180.1 AND TrolleyID <> DINT#0 +// +//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!): +// - NW1 "Rueckmeldung" setzt den Scratch-Merker MW196 (evtl. Zwischenziel) auf 0 +// (AWL: L 0 / T MW196). Hier als "MW196" := W#16#0000; uebernommen. Falls das +// Symbol "MW196" in der Symboltabelle als Int deklariert ist, statt dessen +// "MW196" := 0; verwenden. +// - Endziel-Parameter war im Original die Wort-Literalkonstante 16#0000 -> hier W#16#0000. +// - ShopGroup-Parameter war die getypte Konstante DINT#0 -> 1:1 uebernommen. +// - Alle 33 Zweige nutzen das identische Muster; nur der Schleusen-DB-Pfad variiert. + VAR_TEMP + Zielebene : Word; + END_VAR + +BEGIN + // NW1 "Rueckmeldung": Zwischenziel-Scratch (MW196) zuruecksetzen (AWL: L 0 / T MW196) + "MW196" := W#16#0000; + + // AWL: UC FC1180 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt) + CASE WORD_TO_INT("MW190") OF + + 3481: // Schleuse 3481: (Vor 180 Grad-ByPass) + // Daten in Datenbank neu anlegen: + IF NOT "M180.0" AND "M180.1" AND ("DZuführung_OmniFahren".Schleuse_3481.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DZuführung_OmniFahren".Schleuse_3481.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DZuführung_OmniFahren".Schleuse_3481.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3241: // Schleuse 3241: (Vor Einfahrt PS5) + IF NOT "M180.0" AND "M180.1" AND ("DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS5_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3245: // Schleuse 3245: (ABP1/PS5) + IF NOT "M180.0" AND "M180.1" AND ("DPS5_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS5_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS5_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3251: // Schleuse 3251: (ABP2/PS5) + IF NOT "M180.0" AND "M180.1" AND ("DPS5_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS5_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS5_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3255: // Schleuse 3255: (ABP3/PS5) + IF NOT "M180.0" AND "M180.1" AND ("DPS5_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS5_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS5_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3271: // Schleuse 3271: (Vor Einfahrt PS4) + IF NOT "M180.0" AND "M180.1" AND ("DPS4_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS4_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS4_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3275: // Schleuse 3275: (ABP1/PS4) + IF NOT "M180.0" AND "M180.1" AND ("DPS4_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS4_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS4_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3281: // Schleuse 3281: (ABP2/PS4) + IF NOT "M180.0" AND "M180.1" AND ("DPS4_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS4_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS4_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3285: // Schleuse 3285: (ABP3/PS4) + IF NOT "M180.0" AND "M180.1" AND ("DPS4_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS4_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS4_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3293: // Schleuse 3293: (Vor Einfahrt PS3) + IF NOT "M180.0" AND "M180.1" AND ("DPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS3_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3305: // Schleuse 3305: (ABP1/PS3) + IF NOT "M180.0" AND "M180.1" AND ("DPS3_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS3_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS3_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3311: // Schleuse 3311: (ABP2/PS3) + IF NOT "M180.0" AND "M180.1" AND ("DPS3_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS3_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS3_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3315: // Schleuse 3315: (ABP3/PS3) + IF NOT "M180.0" AND "M180.1" AND ("DPS3_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS3_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS3_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3331: // Schleuse 3331: (Vor Einfahrt PS2) + IF NOT "M180.0" AND "M180.1" AND ("DPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS2_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3335: // Schleuse 3335: (ABP1/PS2) + IF NOT "M180.0" AND "M180.1" AND ("DPS2_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS2_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS2_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3341: // Schleuse 3341: (ABP2/PS2) + IF NOT "M180.0" AND "M180.1" AND ("DPS2_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS2_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS2_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3345: // Schleuse 3345: (ABP3/PS2) + IF NOT "M180.0" AND "M180.1" AND ("DPS2_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS2_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS2_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3353: // Schleuse 3353: (Vor Einfahrt PS1) + IF NOT "M180.0" AND "M180.1" AND ("DPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS1_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3365: // Schleuse 3365: (ABP1/PS1) + IF NOT "M180.0" AND "M180.1" AND ("DPS1_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS1_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS1_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3371: // Schleuse 3371: (ABP2/PS1) + IF NOT "M180.0" AND "M180.1" AND ("DPS1_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS1_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS1_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3375: // Schleuse 3375: (ABP3/PS1) + IF NOT "M180.0" AND "M180.1" AND ("DPS1_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DPS1_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DPS1_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3390: // Schleuse 3390: (Vor Einfahrt MPS3) + IF NOT "M180.0" AND "M180.1" AND ("DMPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS3_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS3_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3395: // Schleuse 3395: (ABP1/MPS3) + IF NOT "M180.0" AND "M180.1" AND ("DMPS3_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS3_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS3_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3401: // Schleuse 3401: (ABP2/MPS3) + IF NOT "M180.0" AND "M180.1" AND ("DMPS3_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS3_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS3_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3405: // Schleuse 3405: (ABP3/MPS3) + IF NOT "M180.0" AND "M180.1" AND ("DMPS3_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS3_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS3_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3421: // Schleuse 3421: (Vor Einfahrt MPS2) + IF NOT "M180.0" AND "M180.1" AND ("DMPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS2_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS2_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3425: // Schleuse 3425: (ABP1/MPS2) + IF NOT "M180.0" AND "M180.1" AND ("DMPS2_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS2_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS2_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3431: // Schleuse 3431: (ABP2/MPS2) + IF NOT "M180.0" AND "M180.1" AND ("DMPS2_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS2_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS2_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3435: // Schleuse 3435: (ABP3/MPS2) + IF NOT "M180.0" AND "M180.1" AND ("DMPS2_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS2_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS2_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3450: // Schleuse 3450: (Vor Einfahrt MPS1) + IF NOT "M180.0" AND "M180.1" AND ("DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS1_OmniFahren".Schleuse_vor_Einfahrt.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3455: // Schleuse 3455: (ABP1/MPS1) + IF NOT "M180.0" AND "M180.1" AND ("DMPS1_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS1_OmniFahren".Schleuse_Platz_1.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_1.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3461: // Schleuse 3461: (ABP2/MPS1) + IF NOT "M180.0" AND "M180.1" AND ("DMPS1_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS1_OmniFahren".Schleuse_Platz_2.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_2.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + 3465: // Schleuse 3465: (ABP3/MPS1) + IF NOT "M180.0" AND "M180.1" AND ("DMPS1_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse <> DINT#0) THEN + "Trolleydaten_neu_anlegen"( + Gesamt_Trolley_DL := "DMPS1_OmniFahren".Schleuse_Platz_3.Schleuse.Gesamt_Trolley_DL, + TrolleyID := "DMPS1_OmniFahren".Schleuse_Platz_3.Dyn.TrolleyID_Schleuse, + Endziel := W#16#0000, + ShopGroup := DINT#0); + END_IF; + + ELSE + ; // unbekannte Schleusen-Nr -> nichts tun + END_CASE; +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/HWtoAMR_Ziel_FC.scl b/SCL-Export/=A01+UH06-KF00/HWtoAMR_Ziel_FC.scl new file mode 100644 index 0000000..89a2a63 --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoAMR_Ziel_FC.scl @@ -0,0 +1,68 @@ +FUNCTION "HWtoAMRZielFC" : Void +TITLE = Ziel-FC: HW>AMR +{ S7_Optimized_Access := 'FALSE' } +AUTHOR : AE +FAMILY : Module +NAME : Ziel +//SCL-Portierung des AWL-Bausteins FC181 "HWtoAMRZielFC" (verhaltensgleich). +// +//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung +//ueber Register" (ParameterPassing) aktiv und konnte daher nur per UC/CC aus AWL +//aufgerufen werden. Da der Baustein ausschliesslich den globalen Merker MW190 +//(Schleusen-Nr) liest und nur den Merker M180.6 (Freigabe Weiterfahrt) setzt, +//gibt es keine echte Registerabhaengigkeit -> die Option entfaellt bei der +//SCL-Fassung, der Baustein ist damit direkt aus SCL aufrufbar (CASE 181 in +//MHMOmniSchleuse). +// +//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L / NE_I / JC") +//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Im Original wird nach einem +//Treffer die Weiterfahrt freigegeben und der Baustein sofort verlassen (BEU); +//da MW190 nur einen Wert hat, ist der CASE dazu aequivalent. Die Merker- +//Schnittstelle (MW190 vom Aufrufer gesetzt, M180.6 Rueckmeldung) bleibt erhalten. +// +//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!): +// - Der TIA-Bausteinname enthaelt kein '>' (XML =HWtoAMRZielFC), obwohl der +// Bausteintitel "Ziel-FC: HW>AMR" lautet. Der Aufruf in MHMOmniSchleuse.scl ist +// "HWtoAMRZielFC"() -> die Funktion heisst hier ebenso HWtoAMRZielFC (kein '>'). +// - MW190 wird als WORD_TO_INT(MW190) gegen die dezimalen Schleusen-Nrn verglichen +// (im AWL "L MW190 / L / NE_I", n als Int-Konstante 3004 bzw. 3565). + 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-Laenge <= 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; + END_VAR + +BEGIN + // NW1 "Rueckmeldung": Rueckmeldungen erst mal resetten + "M180.6" := FALSE; // Weiterfahrt von Ziel-FC (noch nicht erlaubt) + + // AWL: UC FC181 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt). + // Je Treffer wird die Weiterfahrt freigegeben (S M180.6) und der Baustein + // im Original per BEU verlassen. + CASE WORD_TO_INT("MW190") OF + + 3004: // NW2 - Schleuse 3004: (BST 3) + "M180.6" := TRUE; // Weiterfahrt ist erlaubt + + 3565: // NW3 - Schleuse 3565: (BST 4) + "M180.6" := TRUE; // Weiterfahrt ist erlaubt + + ELSE + ; // unbekannte Schleusen-Nr -> keine Weiterfahrt-Freigabe + END_CASE; +END_FUNCTION diff --git a/SCL-Export/=A01+UH06-KF00/HWtoOB_Ziel_FC.scl b/SCL-Export/=A01+UH06-KF00/HWtoOB_Ziel_FC.scl new file mode 100644 index 0000000..4c8e51b --- /dev/null +++ b/SCL-Export/=A01+UH06-KF00/HWtoOB_Ziel_FC.scl @@ -0,0 +1,63 @@ +FUNCTION "HWtoOB_Ziel_FC" : Void +TITLE = Ziel-FC: HW>OB +{ S7_Optimized_Access := 'FALSE' } +AUTHOR : AE +FAMILY : Module +NAME : Ziel +//SCL-Portierung des AWL-Bausteins FC2181 "HWtoOB_Ziel_FC" (verhaltensgleich). +//(Bausteintitel im AWL-Original: "Ziel-FC: HW>OB".) +// +//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung +//ueber Register" (ParameterPassing) aktiv und konnte daher nur per UC/CC aus AWL +//aufgerufen werden. Da der Baustein ausschliesslich den globalen Merker MW190 +//(Schleusen-Nr) liest und nur einen globalen Merker (M180.6) setzt/rueckstellt, +//gibt es keine echte Registerabhaengigkeit -> die Option entfaellt bei der +//SCL-Fassung, der Baustein ist damit direkt aus SCL aufrufbar +//(CASE 2181 in MHMOmniSchleuse). +// +//Der indirekte Dispatch (AWL: "L MW190 / L / NE_I / JC ") +//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Die Merker-Schnittstelle +//(MW190 vom Aufrufer gesetzt, M180.6 als Rueckmeldung) bleibt erhalten. +// +//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!): +// - Keine funktionalen Abweichungen. Der Baustein besitzt nur EINEN Dispatch-Zweig +// (Schleuse 3014). Das AWL beendet diesen Zweig mit BEU (unbedingtes Bausteinende); +// im SCL entspricht dies dem Ende des CASE-Zweiges (identisches Verhalten, da +// danach im Original nur noch das Bausteinende BE folgt). +// - Vergleich "L MW190 / L 3014 / NE_I" (Integer-Vergleich auf den Wort-Merker +// MW190) ist als WORD_TO_INT("MW190") ausgefuehrt. + 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; + END_VAR + +BEGIN + // NW1 Rueckmeldung: Rueckmeldungen erst mal resetten + "M180.6" := FALSE; // Weiterfahrt von Ziel-FC erlaubt + + // AWL: UC FC2181 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt) + CASE WORD_TO_INT("MW190") OF + + 3014: // NW2 Schleuse 3014: (BST 3) + "M180.6" := TRUE; // Weiterfahrt ist erlaubt + + ELSE + ; // unbekannte Schleusen-Nr -> nichts tun + END_CASE; +END_FUNCTION