TIA Timer in Case schalten nicht

Matze12345

Level-2
Beiträge
19
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
image.jpgHey ich habe folgendes Problem :

bei dem ersten Ablauf in meinem Case schritt funktioniert alles. Wenn ich aber den Case int 2: erneut aufrufe geht es nicht mehr warum ?
Sorry für die dumme frage muss erst reinkommen ☹️

LG Matze
 
Ein Timer der innerhalb einer Bedingung (hier: case) aufgerufen wird kann nur dann gestartet, aktualisiert/geprüft, gestoppt werden wenn der case aktiv ist.
In diesem Fall also wie de hollander schrieb stecke den SCL-Code in REGIONs und am Ende kommt dann die Region Timer hinzu. Der Timer würde bei Dir dann geändert am IN und muss die Case-Bedingung mitbekommen.

geht
du musst den Timer nur 2x aufrufen und den Reset_Timer nutzen
Du baust Fehler ein die keiner mehr suchen will.
Das ist miserabler Programmierstil.
 
Grundregel: Timer immer unbedingt aufrufen, nicht nur bedingt (nur manchmal bei bestimmten Bedingungen).
Wenn Timer in Schrittketten verwendet werden, dann in den Schrittketten/Case nur Steuervariablen steuern und die Timer selber außerhalb der Case immer aufrufen.
Grund: Timer müssen Flanken der Eingangssignale erkennen können. Wenn man anfängt, Timer an vielen Stellen bedingt aufzurufen, dann schleichen sich leicht/oft Fehler ein, dass Timer bei bestimmten Bedingungen dann doch nicht oder nicht korrekt aufgerufen werden, weil der Programmierer halt doch nicht perfekt das Chaos beherrscht. Und die vielen verteilten Aufrufe machen das Programm unübersichtlich und extrem schwer beobachtbar.
 
Zuletzt bearbeitet:
Sowas bitte nur ausserhalb vom Case, die Bedingung für den Timer und die Auswertung kann trotzdem im Case stattfinden, bzw den In vom Timer so belegen, dass er nur für den bestimmten Fall aktiv ist
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe auch mal sowas gemacht. du kannst dann unterhalb deiner Caseanweisungen die timer platzieren und als Auslöser dann den jeweiligen step in den Eingang vom Timer schreiben
kleiner Auszug als Beispiel:
....
210:
#TurnIn := FALSE;
#Forward := FALSE;
#TurnOut := TRUE;
IF #Timer_2.Q THEN
#step := 220;
END_IF;
....
END_CASE;

#Timer_2(IN :=(#step=110 OR #step=210 OR #step=230),PT := #Time);
 
Zuletzt bearbeitet:
Das ist nur ein Auszug aus einer längeren Kette. Schon klar, dass es der codeschnipsel für sich alleine keinen Sinn macht. Falls das nicht klar nicht dann aber jetzt :)
 
Letztlich ist es egal, wie oder wo der Timer programmiert wird.
Wichtig ist das dieser einen Signalwechsel am Eingangssignal erkennt.
Gerade in SPL oder Case Verteiler wird hier oft der Fehler gemacht!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich werde nach wie vor Timer und Zähler Außerhalb von Case lassen. Das führt in der Regel seltener zu unschönen Problemen wie die TON ist kürzer als der Schritt aktiv ist oder es gibt keinen Signalwechsel am IN und die Zeit macht einfach nichts.

Daher gilt für mich KISS > Keep it Simple Smart...
 
Zurück
Oben