-> Hier kostenlos registrieren
Zeit2:=TON.ET ist nur eine Zuweisung. In Zeit2 wird der Wert geschrieben, den der TON bei seinem letzten Aufruf in ET geschrieben hat, also der Wert, der auch schon in Zeit1 geschrieben wurde.
Mit TON(ET=>Zeit2) wird der Timer dagegen ein zweites Mal aufgerufen. Meine Hoffnung war, das er dabei auch ET erneut aktualisiert. Das scheint bei Deiner Steuerung ja auch so zu sein, aber das Beispiel
Beckhoff zeigt, dass nicht jede Steuerung das so macht. Vermutlich werden bei Beckhoff die ET's aller TON's nicht bei ihrem Aufruf im Programm, sondern nur einmal vor Beginn des Programmzyklus aktualisiert.
Sehen kann man das, wenn man eine sehr lange Zykluszeit vorwählt, in der die Entwicklungsumgebung ohne weiteres ihre Online-Anzeige mehrmals pro Programmzyklus aktualisieren kann. Bei einer Zykluszeit von z. B. 500 ms kann man dann sehen, dass die ET's aller TON's immer Vielfache von 500 ms sind, es gibt nie Zwischenwerte.
Hi StructeredTrash
da es den Aufruf mit ET=>Zeit2 jetzt leider in B&R nicht gibt habe ich es doch nochmal mit Zeit2:=TON.ET gemacht und siehe da, es funktioniert.
Der Code sieht so jetzt doch wieder so aus:
TON(IN:=Start, PT:=t#100s);
IF Start=TRUE THEN
U:=230;
Zeit1:=TON.ET;
FOR i:=0 TO 3000000 BY 1 DO
wert:=wert+1;
x:=x+1;
RR:=RR+1;
P:=(U*U) /RR;
y:=SQRT(x);
z:=SIN;
e:=EXP(x);
m:=ATAN(e);
END_FOR;
TON(IN:=Start,
PT:=t#100s);
Zeit2:=TON.ET;
Start:=False;
END_IF;
Dauer:=#Zeit2-#Zeit1;
Du sagtest doch, dass sich bei TwinCat ET nur alle 500ms also bei jedem Programmyyklus aktualisiert.
Aber es scheint zu funktionieren.
Es wird mir eine Dauer von 15-17ms ausgegeben.
Warum geht es jetzt doch obwohl es sich nur alle 500ms aktualisiert?
Oder habe ich jetzt komplett einen Denkfehler?????
Vielen Dank Gruß