Flankenerkennung funktioniert nicht

Idlewild

Level-1
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bei folgendem Code soll erkannt werden ob die Pause beginnt (False->True) oder ob die Pause endet (True->False). Aber die Flanken werden gar nicht erkannt bzw. die Werte der Funktionsblöcke R_Trig und F_Trig verändern sich gar nicht, kann mir jemand bitte sagen warum das so nicht funktioniert? Die Variable Pause verändert ihren Wert wie gewünscht ...

Code:
FUNCTION_BLOCK WARTEN
VAR_EXTERNAL
    PAUSE:BOOL;
END_VAR
VAR_INPUT
    ZEIT:TIME;
END_VAR
VAR_OUTPUT
    OK:BOOL:=FALSE;
    RESTZEIT:TIME:=t#0s;
END_VAR
VAR
    ZAB:TON;
    STARTPAUSE:R_TRIG;
    ENDEPAUSE:F_TRIG;
    PAUSENZEIT:TIME:=t#0s;
END_VAR

ZAB( PT:=ZEIT);

STARTPAUSE(CLK:=PAUSE);
ENDEPAUSE(CLK:=PAUSE);

IF STARTPAUSE.Q
THEN
PAUSENZEIT:=ZAB.PT-ZAB.ET;
ELSIF ENDEPAUSE.Q
THEN
ZAB(PT:=PAUSENZEIT);
PAUSENZEIT:=t#0s;
ELSE
;
END_IF

ZAB.IN:=NOT ZAB.Q;

IF ZAB.Q
THEN
OK:=TRUE;
ELSE
RESTZEIT:=ZAB.PT-ZAB.ET;
OK:=FALSE;
END_IF
 
Startpause.Q und Endpause.Q werden bei steigender bzw. fallender Flanke GENAU für einen Zyklus TRUE sein.
Wenn du das nicht glaubst, setze doch ein Bit z.B.

Code:
IF (Startpause.Q) then
bTest:=TRUE;
END_IF

Und schaue Online ob es gesetzt wurde.

Du solltest dir aber unbedingt mal angewöhnen Kommentare in deinen Code zu schreiben, damit man schnell versteht was du da machen möchtest.

Etwa so:

Code:
 (*das ist ein Kommentar *)

Gruß
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

Vielen Dank für die Antwort! Das mit dem Kommentieren mach ich noch ;)

So wie du das mit der Flankenerkennung habe ich es auch gemacht, aber es hat trotzdem nicht funktioniert. Aber der Fehler liegt glaube ich woanders. Eine Aktion einer Ablaufsteuerung ruf den oben beschriebenen Funktionsblock auf. Über die AS-Flag SFCPause wird die Ablaufsteuerung angehalten, dann pausiert auch der Funktionsblock aber der TON Timer läuft weiter. Ich glaube das die IF-Schleife also gar nicht ausgeführt wird, und daher auch nicht erkannt werden kann. Ist das so richtig?

Ich habe den Weg über AS-Flag gewählt, da dies einfacher war. Gibt es eine Möglichkeit weiterhin SFCPause zu nutzen und denoch die IF-Abfrage durchzuführen? Oder muss ich das Anhalten der Ablaufsteuerung anders umsetzen?

Grüße
 
Zurück
Oben