Signal mit Ein- UND Ausschaltverzögerung?

mke

Level-2
Beiträge
27
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wie kann ich bei einem Signal Ein- und Ausschaltverzögerung implementieren? TON und TOF in Reihe führt leider dazu, dass bei einem schnellen Wiedereinschalten der Ausgang kurz auf FALSE geht, bevor er dann wieder eingeschaltet wird.

Viele Grüße, Max
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TON und TOF in Reihe führt leider dazu, dass bei einem schnellen Wiedereinschalten der Ausgang kurz auf FALSE geht, bevor er dann wieder eingeschaltet wird.
Ich komme ja aus der Siemens Ecke, aber warum sollte TON und TOF in Reihe nicht funktionieren?

Wie sehen dein Eingangssignal und dein Ausgangssignal aus? Wie sind die Zeiten (Eingangssignal, Pause, TON-Zeit, TOF-Zeit)? Kannst du einen Trace anzeigen?
z.B.:
1720609639447.png
1720609926422.png
 
TON und TOF in Reihe führt leider dazu, dass bei einem schnellen Wiedereinschalten der Ausgang kurz auf FALSE geht, bevor er dann wieder eingeschaltet wird.
Das ist richtig so, wenn die Ausschaltpause länger als das TOF ist.
Wenn das nicht das ist was du erwartest, dann musst du deine Aufgabe mal genauer erklären.
Wie hast du denn das "TON und TOF in Reihe" programmiert? Zeige uns mal deinen Code.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
der Code sieht so aus:

b_ton(N := b, PT := t#10s);
b_toff(IN := b_ton.Q, PT := t#10s);

Wenn b TRUE war und dann auf FALSE gesetzt wird, läuft der TOF-Timer bereits los. Wenn dann innerhalb der TOF-Verzögerung b wieder auf TRUE gesetzt wird, wird das Zwischensignal erst nach der TON-Zeit wieder aktiv, um den Ausgang zu setzen. In der Zwischenzeit ist TOF aber bereits abgelaufen und hat den Ausgang auf FALSE gesetzt, bevor er schlussendlich wieder auf TRUE gesetzt wird. Dieses zwischenzeitliche Setzen auf FALSE ist hier im aktuellen Fall nicht gewünscht.

Die Oscat-Lösung scheint so wie gewünscht zu funktionieren. Was ist genau das PRoblem mit bedingten Timer-Aufrufen?

Vielen Dank und viele Grüße,

Max
 
Die Oscat-Lösung scheint so wie gewünscht zu funktionieren. Was ist genau das PRoblem mit bedingten Timer-Aufrufen?
Das dies zu Fehlern führen kann. Hier mal ein Beispiel
Code:
CASE uiStep OF
  0:
      fbTON_Timer01(IN := TRUE, PT := T#2S);
      uiStep := 1;
  1:
      IF fbTON_Timer01.Q THEN
        xBool01 := TRUE;
        fbTON_Timer01(IN := FALSE, PT := T#2S);
        uiStep := 2;
      END_IF
  2:
...
END_CASE
Bei diesem Beispiel würde in Schritt 1 der Timerausgang Q nie auf TRUE gehen, da der Timer FB nur einmal zum Starten ausgeführt wird, aber dann nie wieder. Für Flankenbausteine gilt übrigens das Gleiche,
Besser ist es so:
Code:
fbTON_Timer01(PT := T#2S);
CASE uiStep OF
  0:
      fbTON_Timer01.IN := TRUE;
      uiStep := 1;
  1:
      IF fbTON_Timer01.Q THEN
        xBool01 := TRUE;
        fbTON_Timer01.IN := FALSE;
        uiStep := 2;
      END_IF
  2:
...
END_CASE
 
Aber das kann man doch mit der entsprechenden Sorgfalt vermeiden - die man ja sowieso immer wahren sollte.
 
Zurück
Oben