Positional and incremental (velocity) algorithms

Two ways to compute a PID output in a PLC: the full output value every sample or its increment. Equations, how they differ under saturation and mode switching, where an incremental output is needed (pulse-driven actuators).

In short. The positional algorithm computes the whole output u[k] every sample and stores the integral. The incremental one computes only the increment Δu[k] and adds it to the previous output. With the same settings and no limits they give the same output. The difference is in saturation, mode switching and actuators that need a "more/less" signal.

Equations

Parallel form, backward Euler (discretisation), without D for simplicity.

Positional:
    i[k] = i[k−1] + Ki·Ts·e[k]
    u[k] = sat( Kp·e[k] + i[k] )

Incremental:
    Δu[k] = Kp·(e[k] − e[k−1]) + Ki·Ts·e[k]
    u[k] = sat( u[k−1] + Δu[k] )

sat — limiting the output to [uMin, uMax].

Example without limits

Kc = 2.5 %/%, Ti = 40 s (Ki = 0.0625 1/s), Ts = 1 s; from sample 1 the error steps to 2 % and stays constant.

SamplePositional: Kp·e + iIncremental: u[k−1] + Δu
12.5·2 + 0.125 = 5.1250 + (5 + 0.125) = 5.125
25 + 0.25 = 5.255.125 + (0 + 0.125) = 5.25
35 + 0.375 = 5.3755.25 + 0.125 = 5.375

The result is identical: the incremental algorithm is the same formula written in differences.

How they differ

PositionalIncremental
Stateintegral i[k]previous output u[k−1]
Saturationthe integral keeps growing — anti-windup is neededthe output sits at the limit, there is "nowhere" to integrate: protection is built in
Manual → autothe integral must be aligned with the manual outputbumpless by construction: starts from the current output (bumpless transfer)
Controller without I (P, PD)worksP without I is not possible: the output bias is undefined, the output drifts
"More/less" outputmust be differentiatednatural: Δu → pulse duration

Pulse output

Motorised actuators without a position feedback (three-point drives) are commanded "open" and "close". The incremental algorithm fits here: Δu is converted to a pulse duration through the full-stroke time.

pulse duration = |Δu| / 100 % · full-stroke time

Example: Δu = 0.5 %, full-stroke time 60 s → a 0.3 s pulse. Pulses shorter than the minimum actuator on-time are accumulated or dropped — this adds a dead band (dead band).

Typical mistakes

  • An incremental P controller without an integral — the output drifts with noise.
  • A positional controller without anti-windup on a process where the output often hits a limit.
  • Limiting the wrong signal: in the incremental algorithm the output u[k] has to be limited, not Δu; a rate limit on Δu is a separate function.
  • Lost position: with pulse control and no feedback the computed and real actuator positions drift apart; periodic synchronisation at the end stops is needed.

Limits

Real PLC blocks may combine the approaches: a positional PID with output tracking, a "step" controller with an actuator position model. Check the algorithm and the meaning of the parameters in the documentation of the block version.

Loading the map…

Sources

  1. Åström & Murray — Feedback Systems, 2nd ed. (2020), ch. 11 «PID Control», §11.5 Implementation (velocity/incremental algorithm) — Caltech / Lund University
  2. MathWorks — Discrete-Time PID Controller block: discrete integrator and output saturation (R2026b) — MathWorks

Updated 2026-10-12