TIA s7-1500 Timer resetieren

vollmi

Level-3
Beiträge
5.435
Reaktionspunkte
1.409
Zuviel Werbung?
-> Hier kostenlos registrieren
Hui bei der 1500 gibts für IEC timer tatsächliche eine Reset funktion. nur die Funktion wirft bei mir Fragen auf.

In der hilfe wird das so beschrieben
Code:
IF #started = false THEN
 
"TON_DB".TON(IN := "Tag_Start",
              PT := "Tag_PresetTime",
              Q => "Tag_Status",
              ET => "Tag_ElapsedTime");
 #started := true;
 END_IF;
 
 IF "TON_DB".ET < T#25s THEN
 RESET_TIMER(TIMER := "TON_DB");
 #started := false;
 END_IF;

Seit wann ist das gängige Programmierpraxis einen Timer bedingt auszuführen?
Bin ich der Einzige der dieses Geschwurbel in der Hilfe nicht so richtig versteht?

Wenn die Variable #started den Signalzustand "0" führt, dann wird die Anweisung "Einschaltverzögerung erzeugen" bei einer positiven Signalflanke am Operanden "Tag_Start" ausgeführt. Die im Instanz-Datenbaustein "TON_DB" abgelegte IEC-Zeit wird mit der Zeitdauer gestartet, die durch den Operanden "Tag_PresetTime" vorgegeben ist. Der Operand "Tag_Status" wird gesetzt, wenn die durch den Operanden "Tag_PresetTime" vorgegebene Zeitdauer abgelaufen ist. Der Parameter Q bleibt so lange gesetzt, wie der Operand "Tag_Start" noch den Signalzustand "1" führt. Wenn der Signalzustand am Starteingang von "1" auf "0" wechselt, wird der Operand am Parameter Q zurückgesetzt.
Wenn die abgelaufene Zeit der IEC-Zeit "TON_DB" kleiner als 25s ist, wird die Anweisung "Zeit rücksetzen" ausgeführt und die im Instanz-Datenbaustein "TON_DB" abgelegte Zeit zurückgesetzt.
 
Wobei es bei der 1200/1500 wahrscheinlich möglich ist den Timer in ner IF zu betrieben und dann außerhalb den ET abzufragen, da...
S7-1500-Hilfe "TON: Einschaltverzögerung erzeugen" schrieb:
Die Aktualisierung der Anweisungsdaten geschieht sowohl bei einem Aufruf der Anweisung als auch bei einem Zugriff auf die Ausgänge Q oder ET.
Damit können die Leute jetzt auch endlich das Ergebnis ihrer Timer, die sie in ner IF aufrufen, abfragen. Wahrscheinlich hat Siemens das Verhalten genau deswegen so implementiert. :rolleyes:
Aber da die IN-Werte nicht aktualisiert werden, halte ich es trotzdem für Blödsinn.

Was für mich keinen Sinn macht: Der Parameter "Tag_Start" hängt nicht direkt mit dem Signal "#started" zusammen.
Wäre "Tag_Start" = false würde der Timer nicht starten, #started aber trotzdem true werden.

Den nächsten Teil den ich nicht kapiere ist der mit "IF "TON_DB".ET < T#25s THEN".
Was soll den das bringen, ET ist beim Timerstart T#0ms, damit wird die Bedingung doch sofort erfüllt und der Timer rückgesetzt.

Das ganze Konstrukt würde ja funktionieren wen ET mit dem PT Wert beginne würde (also in dem Fall mit irgendwas > 25s) und dann runterzählen würde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Witzig ist ja. Q und ET auch bearbeitet werden wenn der Timer übersprungen wird.
Aber IN nicht. Da ist also ziemlich umdenken nötig. Früher hab ich den Timer über die Instanz zurückgesetzt hat super funktioniert, ist jetzt aber nicht mehr möglich.

mfg René
 
Einerseits ist es zwar gut dass man dem Timer jetzt T#0ms am PT vorgeben kann, andererseits werden wir einige Programmen anpassen müssen wenn wir die mal von der 300/400er portieren.
Ich bleib bei der Behauptung warum man das mit dem ET/Q so eingeführt hat.... :cool:

Aber, wie gesagt, das Codebeispiel da oben wirkt wie absoluter Blödsinn für mich. Hast du den Codeschnipsel schon mal ausprobiert ob er tut was er verspricht?
 
Jap hab ich mal geladen. Der macht wie erwartet nix dergleichen was da beschrieben steht. Der Schreiber hatte da offenbar auch keinen Durchblick mehr. Bin ich froh bin ich nicht der einzige.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man kann die Timer übrigens auch nur beobachten wenn Q oder ET auch wirklich abgefragt wird. Nur IN und PT anhängen und dann über die Instanz beobachten funktioniert nicht. die Instanz wird dann nicht aktualisiert.

Auch wird Reset anders bearbeitet je nachdem ob er vor dem Timeraufruf ausgeführt wird oder nachher.

Bsp TP. Wird der Reset ausgeführt im Ablauf vor dem Timeraufruf. Folgt Q direkt IN ohne die Zeit zu beachten.
Kommt Reset im Aufruf nach TP. Dann ist Q immer False unabhängig von IN.

mfG René
 
Zurück
Oben