Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
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?
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
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.
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.
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.
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.
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.
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.
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.
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 )