Files
HundM_awl/=A01+UH06-KF00/Programmbausteine/Module/MAusfahrPrio_ABP.awl
T

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