147 lines
3.0 KiB
Plaintext
147 lines
3.0 KiB
Plaintext
FUNCTION_BLOCK "MAusfahrPrio_ABP"
|
|
TITLE = Prio beim Ausfahren aus ABP
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
BG_Haupt_Schleuse : Bool; // Trolley ist in Schleuse auf Hauptstrecke
|
|
Haupt_Schleuse_geöffnet : Bool; // Schleuse hat geöffnet
|
|
BG_ABP_Schleuse : Bool; // Trolley ist in Schleuse von ABP-Einfahrt
|
|
ABP_Schleuse_geöffnet : Bool; // Schleuse hat geöffnet
|
|
Aktive_ABP : Int;
|
|
END_VAR
|
|
|
|
VAR
|
|
"OUT.Haupt_Schleuse_starten" : Bool;
|
|
"Out.ABP_Schleuse_starten" : Bool;
|
|
Dyn : Struct
|
|
Anzahl_Haupt : Int;
|
|
Wartezeit : Int;
|
|
END_STRUCT;
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
Check_ok : Bool;
|
|
Partner : Int;
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
NETWORK
|
|
TITLE = Haupt-Schleuse ist gestartet
|
|
U #Haupt_Schleuse_geöffnet;
|
|
U #"OUT.Haupt_Schleuse_starten";
|
|
R #"OUT.Haupt_Schleuse_starten";
|
|
SPBN En01;//Negierter Sprung
|
|
|
|
L #Dyn.Anzahl_Haupt;
|
|
+ 1;
|
|
T #Dyn.Anzahl_Haupt;
|
|
|
|
L 8;
|
|
<=I;
|
|
SPB En01;
|
|
|
|
T #Dyn.Anzahl_Haupt ;//Maximum übergeben
|
|
|
|
En01: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = ABP-Schleuse ist gestartet
|
|
U #ABP_Schleuse_geöffnet;
|
|
U #"Out.ABP_Schleuse_starten";
|
|
R #"Out.ABP_Schleuse_starten";
|
|
SPBN En02 ;//Negierter Sprung
|
|
|
|
L 0;
|
|
T #Dyn.Anzahl_Haupt;
|
|
|
|
En02: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Wartezeit, wenn beide Schleusen geschlossen
|
|
UN #Haupt_Schleuse_geöffnet;
|
|
UN #ABP_Schleuse_geöffnet;
|
|
SPB Geschlossen;
|
|
|
|
L 0;
|
|
T #Dyn.Wartezeit;
|
|
|
|
SET;
|
|
R #Check_ok;
|
|
|
|
SPA En03;
|
|
|
|
Geschlossen: UN "1s-Impuls";
|
|
SPB En03;
|
|
|
|
L #Dyn.Wartezeit;
|
|
+ 1;
|
|
T #Dyn.Wartezeit;
|
|
|
|
L 5;
|
|
>=I;
|
|
S #Check_ok;
|
|
SPBN En03;//Negierter Sprung
|
|
|
|
T #Dyn.Wartezeit;//Zeit einfrieren
|
|
|
|
En03: NOP 0;
|
|
|
|
NETWORK
|
|
TITLE = Check, wer dran ist
|
|
|
|
//Trolley nicht mehr in Schleuse:
|
|
UN #BG_Haupt_Schleuse;
|
|
R #"OUT.Haupt_Schleuse_starten";
|
|
|
|
UN #BG_ABP_Schleuse;
|
|
R #"Out.ABP_Schleuse_starten";
|
|
|
|
//Schon entschieden:
|
|
U #"OUT.Haupt_Schleuse_starten";
|
|
U #BG_Haupt_Schleuse;
|
|
O;
|
|
U #"Out.ABP_Schleuse_starten";
|
|
U #BG_ABP_Schleuse;
|
|
O #Haupt_Schleuse_geöffnet;
|
|
O #ABP_Schleuse_geöffnet;
|
|
BEB;
|
|
|
|
//Relevante Partner:
|
|
L #Aktive_ABP;
|
|
+ -1 ;//sich selbst abziehen
|
|
T #Partner;
|
|
|
|
L 0;
|
|
<=I ;//Kein weiterer Partner mehr!
|
|
U #BG_ABP_Schleuse;
|
|
S #"Out.ABP_Schleuse_starten";
|
|
BEB;
|
|
|
|
//Check, wer dran ist:
|
|
L #Dyn.Anzahl_Haupt;//Gefahrene Trolleys
|
|
L #Partner;//Andere Partner, die fahren sollten
|
|
<I;//noch nicht erreicht
|
|
U #BG_Haupt_Schleuse;
|
|
S #"OUT.Haupt_Schleuse_starten";
|
|
BEB;
|
|
|
|
//Wartezeit vorbei?:
|
|
UN #Check_ok;
|
|
BEB;
|
|
|
|
U #BG_ABP_Schleuse;
|
|
S #"Out.ABP_Schleuse_starten";
|
|
BEB;
|
|
|
|
U #BG_Haupt_Schleuse;
|
|
S #"OUT.Haupt_Schleuse_starten";
|
|
|
|
BEA;
|
|
NETWORK
|
|
TITLE = Ende
|
|
BE;
|
|
|
|
END_FUNCTION_BLOCK
|
|
|