furk - 2023-06-27

Hallo Leute,
ich bin neu in diesem Forum und ein Anfänger in Codesys. Ich arbeite an einem kleinen Projekt, bei dem es zwei Lampen (rote L1, grüne L2) und einen Taster (T1) gibt.

Die rote Lampe sollte mindestens 5 Sekunden und maximal 10 Sekunden lang eingeschaltet sein.

Wenn der Taster gedrückt wird, sollte nach 3s die rote Lampe ausgeschaltet und die grüne Lampe eingeschaltet werden. Die grüne Phase sollte 5 Sekunden dauern und dann sollte die rote Phase wieder beginnen. Ich habe das folgende Programm geschrieben und es werden keine Fehler angezeigt, aber leider funktioniert es nicht.

Ich wäre wirklich dankbar für jede Art von Hilfe.

PROGRAM Aufgabe2
VAR
zustand:UINT:=1;
R_Trig_Taster:R_TRIG;
timer3s:TON;
timer5s:TON;
timer10s:TON;
END_VAR

R_Trig_Taster(CLK:=GVL.T1);

CASE zustand OF
1://Rotphase
GVL.L1:=1;
GVL.L2:=0;

timer5s(IN:=TRUE,PT:=T#5S);

timer10s(IN:=TRUE,PT:=T#10S);

IF timer5s.Q=TRUE THEN
WHILE timer10s.Q=FALSE DO

 IF R_Trig_Taster.Q=TRUE THEN

timer3s(IN:=TRUE,PT:=T#3S);
 IF timer3s.Q=TRUE THEN
 zustand:=2;
 timer3s(IN:=FALSE,PT:=T#3S);
 timer5s(IN:=FALSE,PT:=T#5S);
timer10s(IN:=FALSE,PT:=T#10S);
 END_IF
 END_IF

END_WHILE

END_IF
IF timer10s.Q=TRUE THEN
zustand:=2;
timer5s(IN:=FALSE,PT:=T#5S);
timer10s(IN:=FALSE,PT:=T#10S);

END_IF

2://Grünphase
GVL.L1:=0;
GVL.L2:=1;

timer5s(IN:=TRUE,PT:=T#5S);

IF timer5s.Q=TRUE THEN
zustand:=1;
timer5s(IN:=FALSE,PT:=T#5S);
END_IF

END_CASE