-> Hier kostenlos registrieren
Hallo Leute,
ich hoffe mir kann jemand helfen. Ich programmiere (oder versuche es zumindest) eine Ampelsteuerung mit Fußgängerübergang in SCL.
Allerdings hängt sie sich mitten im Programm auf und ich schaffe es nicht den Fehler zu beheben.
Er läuft ganz normal bis Fußgänger, sowie die Autos, Rot angezeigt bekommen. Bei dem Übergang von Rot auf Rot-Gelb hängt er sich dann auf.
Ich habe schon diverse Sachen versucht, aber nichts hilft ohne den Ablauf zu verändern.
Über einen Rat von euch würde ich mich sehr freuen!
ich hoffe mir kann jemand helfen. Ich programmiere (oder versuche es zumindest) eine Ampelsteuerung mit Fußgängerübergang in SCL.
Allerdings hängt sie sich mitten im Programm auf und ich schaffe es nicht den Fehler zu beheben.
Er läuft ganz normal bis Fußgänger, sowie die Autos, Rot angezeigt bekommen. Bei dem Übergang von Rot auf Rot-Gelb hängt er sich dann auf.
Ich habe schon diverse Sachen versucht, aber nichts hilft ohne den Ablauf zu verändern.
Über einen Rat von euch würde ich mich sehr freuen!
Code:
// Netzwerk 1: Ampelmerker
IF (NOT "Auto_Rot_Gelb_Phase_temp" AND ("Ampel_Merker" OR (NOT "Fusg_Verz_Gruen_temp" AND ("Schalter_links" OR "Schalter_rechts"))))=1
THEN
"Ampel_Merker" := 1;
END_IF;
// Netzwerk 2: Grün für Autos
IF (NOT "Ampel_Merker") =1
THEN
"Auto_Grün":=1;
END_IF;
// Netzwerk 3: Dauer Gelbphase
#Dauer_Gelbphase := S_ODTS(T_NO := "Auto_Gelb_Phase",
S := "Ampel_Merker",
TV := t#3s,
Q => "Auto_Gelb_temp");
// Netzwerk 4: Gelb für Autos
IF ("Ampel_Merker" AND ("Auto_Verz_Rot_temp" OR NOT "Auto_Gelb_temp")) =1
THEN
"Auto_Gelb" := 1; "Auto_Grün":=0;
END_IF;
// Netzwerk 5: Rot für Autos
IF ("Ampel_Merker" AND "Auto_Gelb_temp") =1
THEN
"Auto_Gelb" := 0; "Auto_Rot" := 1;
END_IF;
// Netzwerk 5.1: Rot-Gelb
IF ("Ampel_Merker" AND "Auto_Rot_Gelb_Phase_temp") =1
THEN
"Auto_Rot" := 1; "Auto_Gelb" := 1;
END_IF;
// Netzwerk 5.2: Rot-Gelb-Reset
// test negative Flanke
"RG_neg_FL" := "Auto_Rot_Gelb_Phase_temp" AND NOT "Auto_Rot_Gelb_Phase_temp_alt";
"Auto_Rot_Gelb_Phase_temp_alt" := "Auto_Rot_Gelb_Phase_temp";
IF "RG_neg_FL" =1
THEN
"Auto_Rot" := 0; "Auto_Gelb" := 0;
END_IF;
// Netzwerk 6: Dauer der Grünphase für Fußgänger
#Dauer_Grünphase_Fußgänger := S_ODTS(T_NO := "Fusg_Gruen_Phase",
S := "Auto_Rot",
TV := t#10s,
Q => "Fusg_Gruen_Phase_temp");
// Netzwerk 7: Grün für Fußgänger
IF (NOT "Fusg_Gruen_Phase_temp" AND "Auto_Rot") =1
THEN
"Fusg_Gruen" := 1; "Fusg_Rot" := 0;
END_IF;
// Netzwerk 8: Auto-Rotphase-Verzögerung
#Auto_Rotphase_verzögern := S_ODTS(T_NO := "Auto_Verz_Rot",
S := ("Ampel_Merker" AND "Fusg_Gruen_Phase_temp"),
TV := t#6s,
Q => "Auto_Verz_Rot_temp");
// Netzwerk 9: Rot für Fußgänger
IF (NOT "Ampel_Merker" OR ("Ampel_Merker" AND ("Fusg_Gruen_Phase_temp" OR NOT "Auto_Gelb_temp"))) =1
THEN
"Fusg_Rot" := 1; "Fusg_Gruen" := 0;
END_IF;
// Netzwerk 10: Dauer der Rot-Gelb-Phase
#Dauer_rot_gelb := S_ODTS(T_NO := "Auto_Rot_Gelb_Phase",
S := ("Ampel_Merker" AND "Auto_Verz_Rot_temp"),
TV := t#5s,
Q => "Auto_Rot_Gelb_Phase_temp");
// Netzwerk 11: Verzögerung für die nächste Grünanforderung
#Nächste_Fusg_Grün_Verzögerung := S_ODTS(T_NO := "Fusg_Verz_Gruen",
S := ("Ampel_Merker" AND "Auto_Grün"),
TV := t#1s,
Q => "Fusg_Verz_Gruen_temp");