-> Hier kostenlos registrieren
Hallo,
ich habe mir ein paar Tutorials angeschaut und auch die Doku in Codesys zu den Timern und da steht echt nicht viel. Daher möchte ich mein Problem hier diskutieren.
Der TON besitzt die Eingänge IN für das antriggern des Timers und PT für die Timerzeit. Der Timer liefert außerdem die Ausgänge ET für die bis Zeitpunkt x gezählte Zeit und Q für das Signalisieren, dass der Timer abgelaufen ist.
Wenn der Timer definiert ist (z.B. codesysTimer : TON
startet man diesen somit wie folgt:
codesysTimer(IN:= True, PT := T#4s);
Ich habe dabei gemerkt, dass ET immer dann aktualisiert wird, wenn die Zeile codesysTimer(IN:= True, PT := T#4s); ausgeführt wird.
Jetzt habe ich ein eigenes kleines Beispielprojekt geschrieben, wo der Timer alle x ms (z.B. 100 ms) ablaufen soll und einen Wert aktualisieren soll.
Dies soll solange geschehen, bis ein zweiter Timer y (z.B. 5s) abläuft. In dieser Zeit sollte der Wert 50-mal (5000ms/100ms) aktualisiert werden, stattdessen wird dieser nur 41-mal aktualisiert. Kann sich dieses Phänomen einer erklären?
Der Code:
tDurX:= T#100MS;
tDurY:= T#5S;
IF NOT timeExpired THEN
timerY(IN := TRUE, PT := tDurY);
timerX(IN := TRUE, PT := tDurX);
END_IF
IF timerX.Q THEN
CNT := CNT + 1;
value := value + 100 * (TIME_TO_REAL(tDurX)/(TIME_TO_REAL(tDurY)));
timerX(IN := FALSE);
END_IF
IF timerY.Q THEN
timerY(IN := FALSE);
timeExpired := TRUE;
END_IF
ich habe mir ein paar Tutorials angeschaut und auch die Doku in Codesys zu den Timern und da steht echt nicht viel. Daher möchte ich mein Problem hier diskutieren.
Der TON besitzt die Eingänge IN für das antriggern des Timers und PT für die Timerzeit. Der Timer liefert außerdem die Ausgänge ET für die bis Zeitpunkt x gezählte Zeit und Q für das Signalisieren, dass der Timer abgelaufen ist.
Wenn der Timer definiert ist (z.B. codesysTimer : TON

codesysTimer(IN:= True, PT := T#4s);
Ich habe dabei gemerkt, dass ET immer dann aktualisiert wird, wenn die Zeile codesysTimer(IN:= True, PT := T#4s); ausgeführt wird.
Jetzt habe ich ein eigenes kleines Beispielprojekt geschrieben, wo der Timer alle x ms (z.B. 100 ms) ablaufen soll und einen Wert aktualisieren soll.
Dies soll solange geschehen, bis ein zweiter Timer y (z.B. 5s) abläuft. In dieser Zeit sollte der Wert 50-mal (5000ms/100ms) aktualisiert werden, stattdessen wird dieser nur 41-mal aktualisiert. Kann sich dieses Phänomen einer erklären?
Der Code:
tDurX:= T#100MS;
tDurY:= T#5S;
IF NOT timeExpired THEN
timerY(IN := TRUE, PT := tDurY);
timerX(IN := TRUE, PT := tDurX);
END_IF
IF timerX.Q THEN
CNT := CNT + 1;
value := value + 100 * (TIME_TO_REAL(tDurX)/(TIME_TO_REAL(tDurY)));
timerX(IN := FALSE);
END_IF
IF timerY.Q THEN
timerY(IN := FALSE);
timeExpired := TRUE;
END_IF