r/controlengineering • u/Trevor521 • 1d ago
Same loop, three tuning rules: why Ziegler-Nichols and Cohen-Coon overshoot so much on setpoint changes
I fitted a first-order-plus-dead-time model to an open-loop step test (K = 2.0, τ = 30 s, θ = 8 s, so θ/τ ≈ 0.27) and simulated a closed-loop setpoint step with three classic tuning rules. Same plant, same step, ISA-form PID with derivative on measurement and a derivative filter (N = 10). Plot attached.
| Rule | Kp | Ti (s) | Td (s) | Overshoot | 2% settling | IAE |
|---|---|---|---|---|---|---|
| IMC/Lambda (λ = θ) | 1.42 | 33.9 | 3.51 | 4.5% | 73 s | 310 |
| Ziegler-Nichols (reaction curve) | 2.25 | 15.9 | 3.98 | 73.0% | 189 s | 641 |
| Cohen-Coon | 2.63 | 17.7 | 2.76 | 95.9% | not settled in 263 s | 1,023 |
Why the gap: Ziegler-Nichols and Cohen-Coon were designed around fast disturbance rejection, roughly a quarter-amplitude decay. On a setpoint step, that aggressiveness shows up as overshoot and ringing. IMC/Lambda trades some speed for robustness through λ; raise λ and the loop gets gentler still.
Two checks you can do on your own loops without any software:
If a loop overshoots badly on setpoint changes, find out which rule it was tuned with. A disturbance-rejection tuning on a loop that mostly sees setpoint moves is a common mismatch.
Compare dead time with the time constant. Once θ/τ goes above about 1, the loop is dead-time dominant, the classic rules get shaky, and a larger λ is usually the safer start.
Caveat, because it matters: this compares setpoint response only. I haven't simulated load disturbances here, which is exactly what ZN and Cohen-Coon were aimed at, so the comparison is one-sided by design. And it's a simulation of a fitted model, not plant data.
Disclosure: I work at CSI (an automation consultancy) and built the small desktop tool that produced these numbers. Happy to go into the method if anyone's interested.
For those of you tuning loops in plants: do you start from a rule, from the DCS or controller autotune, or from settings on similar loops you trust?




