Files
HundM_awl/=A01+UH07-KF00/Programmbausteine/Module/MAusfahrFreigabe.awl
T

566 lines
20 KiB
Plaintext

=== FB 181: MAusfahrFreigabe [STL] ===
INTERFACE:
Input:
Antrieb_aktiv : Bool
Kommt_1 : Bool // BM fährt aus Strecke ausgefahren
Kommt_2 : Bool // BM fährt aus Strecke ausgefahren
Kommt_3 : Bool // BM fährt aus Strecke ausgefahren
Kommt_4 : Bool // BM fährt aus Strecke ausgefahren
Kommt_5 : Bool // BM fährt aus Strecke ausgefahren
Kommt_6 : Bool // BM fährt aus Strecke ausgefahren
Kommt_7 : Bool // BM fährt aus Strecke ausgefahren
Kommt_8 : Bool // BM fährt aus Strecke ausgefahren
Kommt_9 : Bool // BM fährt aus Strecke ausgefahren
Kommt_10 : Bool // BM fährt aus Strecke ausgefahren
Kommt_11 : Bool // BM fährt aus Strecke ausgefahren
Kommt_12 : Bool // BM fährt aus Strecke ausgefahren
Kommt_13 : Bool // BM fährt aus Strecke ausgefahren
Kommt_14 : Bool // BM fährt aus Strecke ausgefahren
Kommt_15 : Bool // BM fährt aus Strecke ausgefahren
Kommt_16 : Bool // BM fährt aus Strecke ausgefahren
Kommt_17 : Bool // BM fährt aus Strecke ausgefahren
Kommt_18 : Bool // BM fährt aus Strecke ausgefahren
Kommt_19 : Bool // BM fährt aus Strecke ausgefahren
Kommt_20 : Bool // BM fährt aus Strecke ausgefahren
Kommt_21 : Bool // BM fährt aus Strecke ausgefahren
Kommt_22 : Bool // BM fährt aus Strecke ausgefahren
Kommt_23 : Bool // BM fährt aus Strecke ausgefahren
Kommt_24 : Bool // BM fährt aus Strecke ausgefahren
Kommt_25 : Bool // BM fährt aus Strecke ausgefahren
Vorbei_1 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_2 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_3 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_4 : Bool // BM ist an Sensor vorbeigefahren
Vorbei_5 : Bool // BM ist an Sensor vorbeigefahren
Nur_1 : Bool // Nachtriggern nur bei Vorbei_1
Output:
InOut:
Static:
Para : Struct
Sicherheit : Int := 60 // Sicherheitszeit dazu[100ms]
Abstand_Lines : Int := 20 // Abstand zwischen 2 Linien [100ms]
Position_Vorbei_1 : Int // Vorbei-Sensor in Höhe Linie X
Position_Vorbei_2 : Int // Vorbei-Sensor in Höhe Linie X
Position_Vorbei_3 : Int // Vorbei-Sensor in Höhe Linie X
Position_Vorbei_4 : Int // Vorbei-Sensor in Höhe Linie X
Position_Vorbei_5 : Int // Vorbei-Sensor in Höhe Linie X
Dyn : Struct
RestZeit : Int // BM noch unterwegs [s]
Aktiv_Line : Int // Aktive Linie
Last_Line : Int // Letzte aktive Linie
Nachtrigger_Freigabe : Int // Nachtriggern der Freigabe der ausfahrenden Linie
Out : Struct
Line_1_Ok : Bool
Line_2_Ok : Bool
Line_3_Ok : Bool
Line_4_Ok : Bool
Line_5_Ok : Bool
Line_6_Ok : Bool
Line_7_Ok : Bool
Line_8_Ok : Bool
Line_9_Ok : Bool
Line_10_Ok : Bool
Line_11_Ok : Bool
Line_12_Ok : Bool
Line_13_Ok : Bool
Line_14_Ok : Bool
Line_15_Ok : Bool
Line_16_Ok : Bool
Line_17_Ok : Bool
Line_18_Ok : Bool
Line_19_Ok : Bool
Line_20_Ok : Bool
Line_21_Ok : Bool
Line_22_Ok : Bool
Line_23_Ok : Bool
Line_24_Ok : Bool
Line_25_Ok : Bool
Temp:
Constant:
--- NW 1: Erst mal ---
SET
R Out.Line_1_Ok
R Out.Line_2_Ok
R Out.Line_3_Ok
R Out.Line_4_Ok
R Out.Line_5_Ok
R Out.Line_6_Ok
R Out.Line_7_Ok
R Out.Line_8_Ok
R Out.Line_9_Ok
R Out.Line_10_Ok
R Out.Line_11_Ok
R Out.Line_12_Ok
R Out.Line_13_Ok
R Out.Line_14_Ok
R Out.Line_15_Ok
R Out.Line_16_Ok
R Out.Line_17_Ok
R Out.Line_18_Ok
R Out.Line_19_Ok
R Out.Line_20_Ok
R Out.Line_21_Ok
R Out.Line_22_Ok
R Out.Line_23_Ok
R Out.Line_24_Ok
R Out.Line_25_Ok
--- NW 2: Vorbei.Sensoren auswerten ---
AN Vorbei_1
JC V002
L Para.Position_Vorbei_1
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // Neue RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert kleiner?
<I // Ja !
JC V002 // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
V002: AN Vorbei_2
O Nur_1 // Nachtriggern nur bei Vorbei_1
JC V003
L Para.Position_Vorbei_2
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // Neue RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert kleiner?
<I // Ja !
JC V003 // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
V003: AN Vorbei_3
O Nur_1 // Nachtriggern nur bei Vorbei_1
JC V004
L Para.Position_Vorbei_3
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // Neue RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert kleiner?
<I // Ja !
JC V004 // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
V004: AN Vorbei_4
O Nur_1 // Nachtriggern nur bei Vorbei_1
JC V005
L Para.Position_Vorbei_4
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // Neue RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert kleiner?
<I // Ja !
JC V005 // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
V005: AN Vorbei_5
O Nur_1 // Nachtriggern nur bei Vorbei_1
JC V00E
L Para.Position_Vorbei_5
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // Neue RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert kleiner?
<I // Ja !
JC V00E // Ohne Speicherung weiter
CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
V00E: NOP 0
--- NW 3: Aus-/vorbeifahrendes BM -> Aktivzeit speichern ---
L 25
A Kommt_25
JC Save
L 24
A Kommt_24
JC Save
L 23
A Kommt_23
JC Save
L 22
A Kommt_22
JC Save
L 21
A Kommt_21
JC Save
L 20
A Kommt_20
JC Save
L 19
A Kommt_19
JC Save
L 18
A Kommt_18
JC Save
L 17
A Kommt_17
JC Save
L 16
A Kommt_16
JC Save
L 15
A Kommt_15
JC Save
L 14
A Kommt_14
JC Save
L 13
A Kommt_13
JC Save
L 12
A Kommt_12
JC Save
L 11
A Kommt_11
JC Save
L 10
A Kommt_10
JC Save
L 9
A Kommt_9
JC Save
L 8
A Kommt_8
JC Save
L 7
A Kommt_7
JC Save
L 6
A Kommt_6
JC Save
L 5
A Kommt_5
JC Save
L 4
A Kommt_4
JC Save
L 3
A Kommt_3
JC Save
L 2
A Kommt_2
JC Save
L 1
A Kommt_1
JC Save
JU Zeit
Save: T Dyn.Aktiv_Line // Aktive Linie speichern
L Para.Abstand_Lines
*I
L Para.Sicherheit
+I // RestZeit ermitteln
L Dyn.RestZeit // Neuer Wert größer?
>=I // Ja !
JC Ok
// Ausgefahrene Stelle ist kleiner:
L 0 // Löschen
T Dyn.Aktiv_Line // Aktive Linie
T Dyn.Nachtrigger_Freigabe // Nachtriggern der Freigabe der ausfahrenden Linie
BEU
Ok: CAC // Neuen Wert übernehmen
T Dyn.RestZeit // Wert speichern
// Freigabe aus aktiver Linie verlängern aktivieren:
L Para.Sicherheit
L Para.Abstand_Lines
+I
L 10
/I
L 2 // /Nach 2 Sekunden
T Dyn.Nachtrigger_Freigabe // Nachtriggern der Freigabe der ausfahrenden Linie
--- NW 4: Aktiv-/Nachtrigger-Zeit verändern ---
Zeit: AN Antrieb_aktiv // Antrieb aktiv
ON "1s-Impuls" // 1s-Impuls
JC Chk
// BM ist unterwegs:
L Dyn.RestZeit
+ -10 // 10*100ms = 1s
T Dyn.RestZeit
L 0 // Minimum erreicht?
>I // Nein !
JC Trig
T Dyn.RestZeit // Minimum übergeben
// Freigabe nachtriggern:
Trig: L Dyn.Nachtrigger_Freigabe // Nachtriggern der Freigabe der ausfahrenden Linie
+ -1
T Dyn.Nachtrigger_Freigabe // Nachtriggern der Freigabe der ausfahrenden Linie
L 0 // Minimum erreicht?
>I // Nein !
JC Chk
T Dyn.Nachtrigger_Freigabe // Minimum übergeben
T Dyn.Aktiv_Line
T Dyn.Last_Line
--- NW 5: Nachtriggern der Freigabe der ausfahrenden Linie ---
Chk: L Dyn.Aktiv_Line // Aktive Linie
L Dyn.Last_Line
<>I // Unterschiedlich !
JC More
CAC
JL ENDE_Mig
JU ENDE_Mig // Bei 0
JU Li01 // Linie 1 war aktiv
JU Li02
JU Li03
JU Li04
JU Li05
JU Li06
JU Li07
JU Li08
JU Li09
JU Li10
JU Li11
JU Li12
JU Li13
JU Li14
JU Li15
JU Li16
JU Li17
JU Li18
JU Li19
JU Li20
JU Li21
JU Li22
JU Li23
JU Li24
JU Li25 // Linie 25 war aktiv
ENDE_Mig: JU More
Li01: SET
S Out.Line_1_Ok
BEU
Li02: SET
S Out.Line_2_Ok
BEU
Li03: SET
S Out.Line_3_Ok
BEU
Li04: SET
S Out.Line_4_Ok
BEU
Li05: SET
S Out.Line_5_Ok
BEU
Li06: SET
S Out.Line_6_Ok
BEU
Li07: SET
S Out.Line_7_Ok
BEU
Li08: SET
S Out.Line_8_Ok
BEU
Li09: SET
S Out.Line_9_Ok
BEU
Li10: SET
S Out.Line_10_Ok
BEU
Li11: SET
S Out.Line_11_Ok
BEU
Li12: SET
S Out.Line_12_Ok
BEU
Li13: SET
S Out.Line_13_Ok
BEU
Li14: SET
S Out.Line_14_Ok
BEU
Li15: SET
S Out.Line_15_Ok
BEU
Li16: SET
S Out.Line_16_Ok
BEU
Li17: SET
S Out.Line_17_Ok
BEU
Li18: SET
S Out.Line_18_Ok
BEU
Li19: SET
S Out.Line_19_Ok
BEU
Li20: SET
S Out.Line_20_Ok
BEU
Li21: SET
S Out.Line_21_Ok
BEU
Li22: SET
S Out.Line_22_Ok
BEU
Li23: SET
S Out.Line_23_Ok
BEU
Li24: SET
S Out.Line_24_Ok
BEU
Li25: SET
S Out.Line_25_Ok
BEU
More: NOP 0
--- NW 6: Freigaben an Pufferstrecken aufgrund der fahrenden BM ---
L Dyn.RestZeit
L 10
/I
JL Ende
JU Ok01 // Restzeit in 0 Sekunden
JU Ok01 // Restzeit in 1 Sekunden
JU Ok02 // Restzeit in 2 Sekunden
JU Ok02 // Restzeit in 3 Sekunden
JU Ok03 // Restzeit in 4 Sekunden
JU Ok03 // Restzeit in 5 Sekunden
JU Ok04 // Restzeit in 6 Sekunden
JU Ok04 // Restzeit in 7 Sekunden
JU Ok05 // Restzeit in 8 Sekunden
JU Ok05 // Restzeit in 9 Sekunden
JU Ok06 // Restzeit in 10 Sekunden
JU Ok06 // Restzeit in 11 Sekunden
JU Ok07 // Restzeit in 12 Sekunden
JU Ok07 // Restzeit in 13 Sekunden
JU Ok08 // Restzeit in 14 Sekunden
JU Ok08 // Restzeit in 15 Sekunden
JU Ok09 // Restzeit in 16 Sekunden
JU Ok09 // Restzeit in 17 Sekunden
JU Ok10 // Restzeit in 18 Sekunden
JU Ok10 // Restzeit in 19 Sekunden
JU Ok11 // Restzeit in 20 Sekunden
JU Ok11 // Restzeit in 21 Sekunden
JU Ok12 // Restzeit in 22 Sekunden
JU Ok12 // Restzeit in 23 Sekunden
JU Ok13 // Restzeit in 24 Sekunden
JU Ok13 // Restzeit in 25 Sekunden
JU Ok14 // Restzeit in 26 Sekunden
JU Ok14 // Restzeit in 27 Sekunden
JU Ok15 // Restzeit in 28 Sekunden
JU Ok15 // Restzeit in 29 Sekunden
JU Ok16 // Restzeit in 30 Sekunden
JU Ok16 // Restzeit in 31 Sekunden
JU Ok17 // Restzeit in 32 Sekunden
JU Ok17 // Restzeit in 33 Sekunden
JU Ok18 // Restzeit in 34 Sekunden
JU Ok18 // Restzeit in 35 Sekunden
JU Ok19 // Restzeit in 36 Sekunden
JU Ok19 // Restzeit in 33 Sekunden
JU Ok20 // Restzeit in 38 Sekunden
JU Ok20 // Restzeit in 39 Sekunden
JU Ok21 // Restzeit in 40 Sekunden
JU Ok21 // Restzeit in 41 Sekunden
JU Ok22 // Restzeit in 42 Sekunden
JU Ok22 // Restzeit in 43 Sekunden
JU Ok23 // Restzeit in 44 Sekunden
JU Ok23 // Restzeit in 45 Sekunden
JU Ok24 // Restzeit in 46 Sekunden
JU Ok24 // Restzeit in 43 Sekunden
JU Ok25 // Restzeit in 48 Sekunden
JU Ok25 // Restzeit in 49 Sekunden
Ende: JU En04
Ok01: SET
S Out.Line_1_Ok
Ok02: SET
S Out.Line_2_Ok
Ok03: SET
S Out.Line_3_Ok
Ok04: SET
S Out.Line_4_Ok
Ok05: SET
S Out.Line_5_Ok
Ok06: SET
S Out.Line_6_Ok
Ok07: SET
S Out.Line_7_Ok
Ok08: SET
S Out.Line_8_Ok
Ok09: SET
S Out.Line_9_Ok
Ok10: SET
S Out.Line_10_Ok
Ok11: SET
S Out.Line_11_Ok
Ok12: SET
S Out.Line_12_Ok
Ok13: SET
S Out.Line_13_Ok
Ok14: SET
S Out.Line_14_Ok
Ok15: SET
S Out.Line_15_Ok
Ok16: SET
S Out.Line_16_Ok
Ok17: SET
S Out.Line_17_Ok
Ok18: SET
S Out.Line_18_Ok
Ok19: SET
S Out.Line_19_Ok
Ok20: SET
S Out.Line_20_Ok
Ok21: SET
S Out.Line_21_Ok
Ok22: SET
S Out.Line_22_Ok
Ok23: SET
S Out.Line_23_Ok
Ok24: SET
S Out.Line_24_Ok
Ok25: SET
S Out.Line_25_Ok
En04: NOP 0
--- NW 7: Letzten aktiven Puffer speichern ---
L Dyn.Aktiv_Line // Aktive Linie
T Dyn.Last_Line // speichern
--- NW 8: Ende ---
BE