88 lines
3.2 KiB
Plaintext
88 lines
3.2 KiB
Plaintext
FUNCTION_BLOCK "MAusfahrPrio_ABP"
|
|
{ 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
|
|
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;
|
|
g_1s_Impuls : Word; // war "1s-Impuls"
|
|
OUT_Haupt_Schleuse_starten : Bool; // war "OUT.Haupt_Schleuse_starten"
|
|
Out_ABP_Schleuse_starten : Bool; // war "Out.ABP_Schleuse_starten"
|
|
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
|
|
REGION Haupt-Schleuse ist gestartet
|
|
IF #Haupt_Schleuse_geöffnet AND ##OUT_Haupt_Schleuse_starten THEN ##OUT_Haupt_Schleuse_starten := FALSE; END_IF;
|
|
IF NOT (#Haupt_Schleuse_geöffnet AND ##OUT_Haupt_Schleuse_starten) THEN GOTO En01; END_IF;
|
|
#Dyn.Anzahl_Haupt := #Dyn.Anzahl_Haupt + 1;
|
|
IF (#Dyn.Anzahl_Haupt + 1) <= 8 THEN GOTO En01; END_IF;
|
|
#Dyn.Anzahl_Haupt := 8;
|
|
En01: ;
|
|
END_REGION
|
|
|
|
REGION ABP-Schleuse ist gestartet
|
|
IF #ABP_Schleuse_geöffnet AND ##Out_ABP_Schleuse_starten THEN ##Out_ABP_Schleuse_starten := FALSE; END_IF;
|
|
IF #ABP_Schleuse_geöffnet AND ##Out_ABP_Schleuse_starten THEN #Dyn.Anzahl_Haupt := 0; END_IF;
|
|
END_REGION
|
|
|
|
REGION Wartezeit, wenn beide Schleusen geschlossen
|
|
IF NOT (#Haupt_Schleuse_geöffnet) AND NOT (#ABP_Schleuse_geöffnet) THEN
|
|
#Dyn.Wartezeit := 0;
|
|
#Check_ok := FALSE;
|
|
GOTO En03;
|
|
END_IF;
|
|
IF NOT (#g_1s_Impuls) THEN GOTO En03; END_IF;
|
|
#Dyn.Wartezeit := #Dyn.Wartezeit + 1;
|
|
IF (#Dyn.Wartezeit + 1) >= 5 THEN #Check_ok := TRUE; END_IF;
|
|
IF (#Dyn.Wartezeit + 1) < 5 THEN GOTO En03; END_IF;
|
|
#Dyn.Wartezeit := 5;
|
|
En03: ;
|
|
END_REGION
|
|
|
|
REGION Check, wer dran ist
|
|
IF NOT (#BG_Haupt_Schleuse) THEN ##OUT_Haupt_Schleuse_starten := FALSE; END_IF;
|
|
IF NOT (#BG_ABP_Schleuse) THEN ##Out_ABP_Schleuse_starten := FALSE; END_IF;
|
|
IF (##OUT_Haupt_Schleuse_starten AND #BG_Haupt_Schleuse) OR (((##Out_ABP_Schleuse_starten AND #BG_ABP_Schleuse) OR #Haupt_Schleuse_geöffnet) OR #ABP_Schleuse_geöffnet) THEN RETURN; END_IF;
|
|
#Partner := #Aktive_ABP + -1;
|
|
IF ((#Aktive_ABP + -1) <= 0) AND #BG_ABP_Schleuse THEN
|
|
##Out_ABP_Schleuse_starten := TRUE;
|
|
RETURN;
|
|
END_IF;
|
|
IF (#Dyn.Anzahl_Haupt < #Partner) AND #BG_Haupt_Schleuse THEN
|
|
##OUT_Haupt_Schleuse_starten := TRUE;
|
|
RETURN;
|
|
END_IF;
|
|
IF NOT (#Check_ok) THEN RETURN; END_IF;
|
|
IF #BG_ABP_Schleuse THEN
|
|
##Out_ABP_Schleuse_starten := TRUE;
|
|
RETURN;
|
|
END_IF;
|
|
IF #BG_Haupt_Schleuse THEN ##OUT_Haupt_Schleuse_starten := TRUE; END_IF;
|
|
RETURN;
|
|
END_REGION
|
|
|
|
REGION Ende
|
|
RETURN;
|
|
END_REGION
|
|
|
|
END_FUNCTION_BLOCK
|