codesys-newbie - 2023-08-11

Hi,

ich möchte 2 Timer laufen lassen. Dabei soll der eine Timer alle X Sekunden und der zweite Timer alle Y Sekunden ablaufen. Dann möchte ich jedesmal, wenn der 2. Tmer abläuft einen Wert (Value) um 100 / (X/Y) erhöhen. Damit würde ich eine Art Ladebalken visualisieren.

Beispiel:

X = 5s
Y = 50 ms
Value_init = 0

100 / (5000ms/50ms) = 1

Dann würde man bei jedem Schritt + 1 rechnen. So sollte ich von 0 auf 100 kommen bis zum Ende der 5s,
wenn ich die Berechnung alle 50 ms durchführe. Ich lande aber bei 61.

Kann sich das einer erklären?

Der Code würde wie folgt aussehen:

timerMotorSimulaton(IN := TRUE, PT := X);
timerMotorStep(IN := TRUE, PT := Y);

IF timerMotorStep.Q THEN

Value := Value + 100.0 / (TIME_TO_REAL(X)/TIME_TO_REAL(Y));
timerMotorStep(IN := FALSE);

END_IF

IF timerMotorSimulaton.Q THEN

timerMotorSimulaton(IN := FALSE);

END_IF