ET von TON ablöschen

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo, ich möchte in meinem Programm einen Laufenden Timer wieder von 0 starten lassen. aber das startsignal nich twegnehmen, sondern einfach den ET Wert auf 0 schreiben. Wie geht das? also welches format brauche ich?
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.627
Punkte Reaktionen
3.482
Warum so kompliziert und nicht eine einfache Löschflanke (1 Zyklus lang false) in das Startsignal einfügen?
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Ja o kso könnte man es auhc machen. Dachte mir eben, dann fehlt kein Zyklus. Aber anscheinen kann man et nicht beschreiben. schade, dann fehlt mir immer ein zyklus
 

StructuredTrash

Well-known member
Beiträge
1.100
Punkte Reaktionen
291
Wenn das Programm in einem festen Zykluszeitraster läuft wie z. B. bei TwinCat, geht so etwas besser mit einem Zykluszähler. Wenn der Zähler den Sollwert erreicht, eine BOOL-Variable für einen Zyklus auf TRUE setzen (als Ersatz für TON.Q) und noch im selben Zyklus den Zähler wieder auf 0 setzen.
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
ok

Hatte ich mir auch schon gedacht, aber wollte was bauen, was in seunden angegebne werden kann und was zyklus unabhängig ist. trotzdem danke.
 

Oberchefe

Well-known member
Beiträge
2.269
Punkte Reaktionen
363
Zuviel Werbung?
->Hier kostenlos registrieren
Aber anscheinen kann man et nicht beschreiben. schade, dann fehlt mir immer ein zyklus

Hab's in Codesys noch nicht probiert, in Siemens und anderen Steuerungen mit SCL/strukturiertem Text kann man das so lösen, dass man mit einer Bedingung das IN auf 0 setzt, dann den Timer aufruft damit er aktualisiert wird, dann das IN wieder auf 1, dann den Timer nochmals aufrufen. Als Bedingung für die Aktion musst Du natürlich gegebenenfalls mit überprüfen, ob der IN vorher gesetzt ist.
 

StructuredTrash

Well-known member
Beiträge
1.100
Punkte Reaktionen
291
Hab's in Codesys noch nicht probiert, in Siemens und anderen Steuerungen mit SCL/strukturiertem Text kann man das so lösen, dass man mit einer Bedingung das IN auf 0 setzt, dann den Timer aufruft damit er aktualisiert wird, dann das IN wieder auf 1, dann den Timer nochmals aufrufen. Als Bedingung für die Aktion musst Du natürlich gegebenenfalls mit überprüfen, ob der IN vorher gesetzt ist.
Das geht auch mit CoDeSys. Zumindest bei TwinCat wird aber TON.StartTime dabei immer um PT+1 Zykluszeit erhöht, bei der klassischen Variante mit IN=False für einen Zyklus sogar um PT+2 Zykluszeiten. Wenn es genau sein soll, kommt man um eigene Lösungen wie in #4 beschrieben kaum herum.
 

Oberchefe

Well-known member
Beiträge
2.269
Punkte Reaktionen
363
Hab's eben im Simulator ausprobiert (Wago Zielsystem), da scheint 3S tatsächlich ihre Timer "tunen" zu wollen, selbst bei einer festen Task von 100ms ist der Timer mit 1000ms 2 Programmzyklen eher fertig. Die "klassische" Variante:
MeinTimer(IN:=NOT MeinTimer.Q , PT:=t#1000ms , Q=> , ET=> );
scheint damit schon recht nah an den Sollwert des Timers zu kommen, bei der 100ms Task werden bei mir meist 10 Zyklen gezählt, manchmal aber auch 11.
 

bits'bytes

Well-known member
Beiträge
347
Punkte Reaktionen
52
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
das Problem mit Zykluszählern ist immer dass es irgendwann schief geht. Eines Tages wird sich die Programmzyklus Zeit ändern z.B. von 50 ms auf 100 ms .... Das wird dann schon ein Kollege machen :) und der hat dann viel Freude wenn der Timer dann um Hälfte langsamer zählt. Irgendwann stolpert man dann drüber.


Code:
myTimer FUB TON()
....
....

if (ResetTimer) then
  myTimer.IN = 0
  myTimer FUB TON()
  myTimer.IN = 1
  myTimer FUB TON()
endif


Habe das zwar noch nicht genauer nachkontrolliert (da ich keinen Bedarf sah) - kann mir nicht vorstellen was schiefgehen sollte. Zumindest bei B&R sind die Timer ja Zykluszeit unabhängig, sonst könnte man ja eh gleich wieder Zähler einbauen.

bg
bb
 
Zuletzt bearbeitet:

StructuredTrash

Well-known member
Beiträge
1.100
Punkte Reaktionen
291
Hab's eben im Simulator ausprobiert (Wago Zielsystem), da scheint 3S tatsächlich ihre Timer "tunen" zu wollen, selbst bei einer festen Task von 100ms ist der Timer mit 1000ms 2 Programmzyklen eher fertig.
Das ist der Ausgleich zu Beckhoff, wo es ja 1 bzw. 2 Zyklen länger dauert. Damit laufen dann alle weltweit eingesetzten CoDeSys-Timer im Mittel genau.;)
Hallo,
das Problem mit Zykluszählern ist immer dass es irgendwann schief geht. Eines Tages wird sich die Programmzyklus Zeit ändern z.B. von 50 ms auf 100 ms .... Das wird dann schon ein Kollege machen :) und der hat dann viel Freude wenn der Timer dann um Hälfte langsamer zählt. Irgendwann stolpert man dann drüber.
Man kann ja den Sollwert als TIME vorgeben, die eingestelle Zykluszeit auslesen und damit die Soll-Zyklusanzahl berechnen (sagt ein ehemaliger Stolperer ;))
 
Oben