PID Tuning Methods Explained: Ziegler–Nichols, Cohen–Coon, IMC and Tyreus–Luyben
A practical comparison of classical PID tuning rules, FOPDT identification, and when to trust each formula versus numerical optimisation.
Most PID loops in industry are still tuned by eye: raise proportional gain until the process looks lively, add integral until offset disappears, then a little derivative if the trend is noisy enough to justify it. That works on slow heaters. It fails on meaningful dead time, a changing gain, or an operator who will not tolerate 40 % overshoot. The three-term controller is under-specified: infinitely many (Kp, Ti, Td) triples close the loop, and only a handful are acceptable. This article walks through the four rules that still earn their keep — Ziegler–Nichols (reaction curve and ultimate cycle), Cohen–Coon, IMC/Lambda, and Tyreus–Luyben — and shows when a formula is enough and when you should hand the same model to a numerical optimiser and a closed-loop simulation.
The working assumption is a first-order-plus-dead-time (FOPDT) plant. Almost every classical rule was derived for that structure. PID Solver 360 implements the formulas below, so you can drop a model into the auto tuner, compare methods side by side, and refine the winner in the optimiser against a cost you actually care about.
Why hand-tuning fails
A practising engineer who has sat in front of a DCS faceplate knows the failure modes. The first is time scale: a jacketed reactor with a 15-minute lag does not reveal itself in a five-minute tweak session, so each impatient bump of Kp lands after the previous one has already overshot. The second is coupling: integral moves loop phase, not just offset; derivative on noisy PV saturates the valve. The third is the plant you are not looking at. Load, composition and fouling change gain and dead time, so gains that were fine at 60 % throughput ring at 90 %.
Hand-tuning also hides the plant. Without a model you never know whether the loop is lag-dominant (L/τ small) or dead-time dominant (L/τ near or above one), and those regimes want different rules. Ziegler–Nichols on a delay-heavy FOPDT looks sharp on the design-model step and chatters under modest model error. After one overshoot into an alarm, operators demand sluggishness, offset returns, and the loop is declared broken. It was never designed. It was negotiated.
If you cannot write down K, τ and L — even as a back-of-envelope estimate from a historical step — you are not tuning a controller. You are guessing with extra steps.
A fourth failure is the wrong test on a live unit. Hunting Ku with a sustained oscillation is a laboratory method; on a fired-heater fuel-gas loop, or anything with a PV-high trip, it is an incident. Open-loop steps are safer if you can return the valve and wait for true steady state. Hand-tuning also rarely records controller form: parallel, ideal and series algorithms are not interchangeable without conversion, and derivative filters, sample time and anti-windup all change the loop. Copying three numbers between DCS brands is not a method.
Identifying a FOPDT model from a reaction curve
Every open-loop rule starts from the same experiment: controller in manual, PV as steady as it gets, step the output by a known Δu, record until PV has clearly settled. The S-shaped reaction curve of a self-regulating process is adequately described by
G(s) = K · e^(−L s) / (τ s + 1)where K is steady-state gain, τ is the apparent time constant, and L is apparent dead time — how far the PV eventually moves, and how long you wait.
Reading K, τ and L from the step response
The gain is unambiguous if the test is clean:
K = Δy_ss / ΔuKeep engineering units consistent. If the valve is in percent and PV is in degrees, K is in °C/% and Kp in %/°C. Mixing a normalised gain with an engineering-unit Kp is a classic factor-of-a-hundred error.
The original Ziegler–Nichols construction draws a tangent at the S-curve inflection: intercept with the initial PV is L; intercept with the final PV, minus L, is τ. On a noisy industrial trend that inflection is a matter of opinion, so later practice prefers the two-point method:
t1— time from the input step to 28.3 % of the final PV changet2— time to 63.2 % of the final change
τ ≈ 1.5 (t2 − t1)
L ≈ t2 − τThe 63.2 % point is the one-time-constant mark of a first-order lag; 28.3 % isolates τ from L. Do not invent L = 0 because the plot is busy: Ziegler–Nichols Kp then diverges.
A second-order overdamped pair τ1 > τ2 reduces to FOPDT by Skogestad’s half-rule: τ ≈ τ1 + τ2/2, L ≈ L0 + τ2/2. Confirm underdamped cases on the true second-order simulation. PID Solver 360 applies that reduction in the auto tuner.
Controllability: the L/τ ratio
Once you have K, τ and L, form
R = L / τThis is the most useful number in PID tuning: delay you cannot cancel, versus lag you can. Field bands:
R < 0.1— lag dominant. Ziegler–Nichols aggressive; IMC withλ ≈ τsleepy.0.1 ≤ R ≤ 0.5— mixed. All four methods are in their intended neighbourhood.R > 0.5— dead-time dominant. Gain must come down. Cohen–Coon was built for this region.
R also flags identification quality. If R is 0.03 and L came from a noisy tangent, a 50 % error in L wrecks Ziegler–Nichols (Kp scales as 1/L). IMC is gentler because λ sits beside L in the denominator. If R is 2, ask first whether the process is even FOPDT.
The running example is a self-regulating temperature loop
G(s) = 2.5 · e^(−15 s) / (120 s + 1)so K = 2.5, τ = 120 s, L = 15 s, and R = 0.125: a lag-dominant heater with non-trivial transport delay. Numbers below are exact for this model.
Ultimate gain Ku and ultimate period Pu
Closed-loop Ziegler–Nichols and Tyreus–Luyben use the ultimate point: the P-only gain Ku at which the loop sits on the verge of instability, and the period Pu of that oscillation.
On a plant the experiment is simple and unkind: P-only, raise Kp until PV holds a constant-amplitude oscillation. That Kp is Ku; time between peaks is Pu. The test assumes a finite ultimate gain and permission to sit on the edge of instability for several periods.
On a model you do not oscillate anything. For an FOPDT, ωu is the frequency at which arg G(jω) = −π:
atan(τ ω) + L ω = πThen
Ku = 1 / |G(jωu)|
Pu = 2π / ωuFor the heater, ωu ≈ 0.110 rad/s, Ku ≈ 5.28, Pu ≈ 57.2 s — the entire input to closed-loop Ziegler–Nichols and Tyreus–Luyben. PID Solver 360 computes them from the FOPDT rather than a live relay. A plant relay test remains the gold standard when the model is in doubt, if the unit can tolerate a few cycles. Two cautions: Ku includes valve, transmitter and filters (omit a sensor lag and you overstate it), and an integrator has no finite steady-state gain, so the FOPDT Ku is the wrong object.
Do not hunt for Ku on a live compressor recycle valve, a fired heater, or any loop whose PV-high trip is closer than one oscillation away. Compute Ku from a model or use a relay with a tight saturation limit.
Ziegler–Nichols: reaction curve and ultimate cycle
John Ziegler and Nathaniel Nichols published their rules in 1942. They remain the default “PID tuning” in many engineers’ heads: simple, and they produce a loop that moves. They were designed for quarter-amplitude decay — each successive peak one quarter of the previous, a damping ratio around 0.2. On a modern unit that looks like a loop one model error away from hunting.
Open-loop (reaction curve) formulas
From the FOPDT parameters, the original PID settings are
Kp = 1.2 · τ / (K · L)
Ti = 2 · L
Td = 0.5 · LPI companions are Kp = 0.9 τ / (K L), Ti = 3.3 L. P-only is Kp = τ / (K L). These are the ideal (ISA) form
C(s) = Kp (1 + 1/(Ti s) + Td s)Convert to parallel Ki = Kp / Ti, Kd = Kp Td before typing into a parallel algorithm. For the heater:
Kp = 3.84, Ti = 30 s, Td = 7.5 sTi and Td are set by dead time alone; τ scales only the gain. A badly read L is fatal: halve L and you double Kp while you also halve Ti.
Closed-loop (ultimate cycle) formulas
From Ku and Pu,
Kp = 0.6 · Ku
Ti = Pu / 2
Td = Pu / 8PI is Kp = 0.45 Ku, Ti = Pu / 1.2. P-only is Kp = 0.5 Ku. For the heater:
Kp ≈ 3.17, Ti ≈ 28.6 s, Td ≈ 7.15 sClose to the open-loop result for a genuine FOPDT; if the two columns disagree a lot, do not average them — revisit the identification. The Ziegler–Nichols PID locks Ti = 4 Td. Cutting only Kp and leaving Ti at Pu/2 is not a conservative Ziegler–Nichols controller; it still integrates on a fast horizon. Conservative variants change Ti as well — that is what Tyreus–Luyben does.
Quarter-amplitude decay and aggressiveness
Quarter-amplitude decay puts the dominant closed-loop poles closer to the imaginary axis than most modern robustness specifications allow. On a setpoint step you typically see:
- overshoot in the 20–50 % range on lag-dominant plants
- several visible cycles before settling
- a high complementary-sensitivity peak, so noise and unmodelled delay eat the margin
On a load disturbance the same aggressiveness is why Ziegler–Nichols still has defenders: high gain and short Ti reject a step quickly. Fine for an unwatched surge-tank level; not for a product-quality temperature. Use it as a fast initialisation, not a final answer. Simulate with the real dead time, derivative filter and valve limits. If you cannot live with the overshoot, switch to a damping rule or optimise — do not just nudge Kp.
Cohen–Coon for dead-time dominant plants
G. H. Cohen and G. A. Coon revisited reaction-curve tuning in 1953 for plants where dead time is a larger fraction of the lag — the region where Ziegler–Nichols, which never uses R except inside Kp, starts to misbehave. The Cohen–Coon PID is
R = L / τ
Kp = (1 / (K · R)) · (1.35 + R / 4)
Ti = L · (2.5 + 0.46 R) / (1 + 0.61 R)
Td = L · 0.37 / (1 + 0.19 R)For the heater, R = 0.125 yields
Kp = 4.42, Ti ≈ 35.6 s, Td ≈ 5.42 sCompared with open-loop Ziegler–Nichols this puts more gain, a longer integral time, and less derivative on a lag-dominant example. At small R the decay-ratio fit pushes Kp up. On a dead-time dominant plant (τ = 20 s, L = 20 s, R = 1) the same formulas back Kp off relative to 1.2 τ/(K L) and stretch Ti — something Ziegler–Nichols cannot do, because it never sees τ in Ti.
Practical reading:
- Use Cohen–Coon when the reaction curve is delay-shaped and you want disturbance rejection closer to Ziegler–Nichols than IMC, with some acknowledgement of
R. - Do not use it as a robustness method. The original paper optimises a model-based decay ratio. Expect a loop faster than Ziegler–Nichols on the design model and more brittle off it.
- Watch
Ti. It is a rational function ofR, not a fixed multiple ofL.
If the measurement is too noisy for derivative, use the PI Cohen–Coon set rather than zeroing Td on the PID set. On a regulator, judge Cohen–Coon on a load step, not a setpoint overshoot.
IMC and Lambda tuning: choosing the closed-loop time constant
Internal Model Control specialised to PID for an FOPDT plant lets you choose a speed. The design parameter is λ, the desired closed-loop time constant (Lambda tuning in the paper-industry literature). A first-order Padé delay plus IMC truncation to PID produces
Kp = (τ + L/2) / (K · (λ + L/2))
Ti = τ + L/2
Td = τ · L / (2 τ + L)Ti and Td come from the model; λ appears only in Kp. Increase λ and the gain falls, zeros stay put — a cleaner knob than cutting Kp on a Ziegler–Nichols set, which would leave a fast integral on a timid proportional term.
A common conservative choice is λ ≈ τ. For the heater:
Kp = 0.40, Ti = 127.5 s, Td ≈ 7.06 sAgainst Ziegler–Nichols (Kp = 3.84, Ti = 30 s) this is a different controller: about one-tenth the gain and four times the integral time. Little setpoint overshoot, slow load recovery — the bandwidth you asked for, not a defect.
Choosing λ in practice
Folklore, then a constraint:
λ ≈ Lfor an aggressive loop on a well-known plantλ ≈ 2 Las a default when dead time dominatesλ ≈ τto avoid exciting unmodelled high-frequency dynamicsλ ≥ 0.1 τas a floor so you do not cancel the plant pole too sharply
Do not choose λ smaller than the uncertainty in L. If dead time might be wrong by 5 seconds, λ = 3 s is wishful. Skogestad’s SIMC also shortens Ti for lag-dominant disturbance rejection (Ti = min(τ + L/2, 4(λ + L)) in one common statement). The pure IMC PID above is the textbook FOPDT form in PID Solver 360.
Lambda tuning is the right default for quality loops, poorly known gain, and loops that must not overshoot a spec. It is the wrong default for a level that should recover aggressively, or a delay so large that even λ ≈ L cannot meet settling time — in which case no PID will. Because λ is explicit, IMC documents intent: “IMC, λ = 120 s” is information. “Kp is 3.8” is a number.
Tyreus–Luyben: damping over speed
Tyreus and Luyben proposed a detuned ultimate-cycle rule that keeps Ziegler–Nichols’ experimental simplicity and throws away quarter-amplitude decay. For PID,
Kp = Ku / 2.2
Ti = 2.2 · Pu
Td = Pu / 6.3PI is Kp = Ku / 3.2, Ti = 2.2 Pu. For the heater:
Kp ≈ 2.40, Ti ≈ 126 s, Td ≈ 9.09 sClosed-loop Ziegler–Nichols on the same plant is Kp ≈ 3.17, Ti ≈ 28.6 s, Td ≈ 7.15 s. The decisive change is integral time: 126 s versus 29 s. Tyreus–Luyben integrates on the plant-lag scale, not the ultimate half-period. That is the behaviour most process engineers want on a distillation temperature or furnace pass: modest overshoot, a lazy sag on a disturbance, and margin that survives a 20 % error in K. You pay in settling time. With no robustness constraint it loses to Cohen–Coon and to ITAE optimisation; with +30 % dead time it often wins by remaining stable.
Use it when you have Ku and Pu, when oscillation has real cost, and when you want an industrial PID rather than a textbook decay ratio. It is not a substitute for an integrating-process rule, nor for constraint handling. A well-damped PID still saturates.
Comparing overshoot and robustness
The four methods answer four slightly different questions on the same plant. For the heater, ideal-form PID:
| Method | Kp | Ti (s) | Td (s) | Design intent | Typical setpoint overshoot | Robustness to +30 % L |
|---|---|---|---|---|---|---|
| Ziegler–Nichols (open) | 3.84 | 30 | 7.5 | Quarter-amplitude decay | High (20–50 %) | Fair to poor |
| Ziegler–Nichols (closed) | 3.17 | 28.6 | 7.15 | Same, from Ku, Pu | High | Fair to poor |
| Cohen–Coon | 4.42 | 35.6 | 5.42 | Decay ratio on FOPDT, including R | Highest of the four | Poor |
| IMC / Lambda (λ = τ) | 0.40 | 127.5 | 7.06 | Specified closed-loop lag | Low | Good |
| Tyreus–Luyben | 2.40 | 126 | 9.09 | Detuned ultimate cycle | Low to moderate | Good |
Overshoot tracks integral time more than Kp. Ziegler–Nichols with Ti = 30 s is already in the high-overshoot club even though Cohen–Coon has the highest Kp. IMC and Tyreus–Luyben share a long Ti and stay calm on a setpoint step. Cutting only Kp still overshoots if the integrator is wound up on a short horizon.
Disturbance rejection inverts the ranking. IMC at λ = τ is a poor regulator on a lag-dominant heater unless you shorten Ti or accept slower recovery. Ziegler–Nichols and Cohen–Coon look better on disturbance IAE and worse on setpoint overshoot. Judge a regulator on a load step, a tracker on a setpoint step.
Robustness is about unity-gain crossover, not the prettiness of the design-model step. Raising L by 30 % spends phase at crossover. High-Kp, short-Ti controllers have already used their margin; IMC with a large λ crosses over well below ωu. Simulate on the nominal plant and with K and L perturbed. Include the derivative filter Tf = Td / N (N typically 8 to 20) before you declare a winner.
A method that wins on the design model and loses when dead time is 30 % long is not the better method. It is the method that used up the margin you needed for the plant you do not fully know.
When the rules fail
Classical PID rules fail in three ways: the plant is not FOPDT, the experiment cannot be performed, or the real loop is not linear. Treating those as tuning problems wastes time.
Integrating processes
A level, a well-insulated batch temperature, or a weakly self-regulating gas header is not FOPDT. The reaction curve does not settle; K is undefined. Stopping the test early to invent a finite K produces a fiction. Use an integrator-plus-dead-time model
G(s) = Kp_process · e^(−L s) / sand a rule written for it (SIMC or a Tyreus–Luyben integrator variant), or simulate and optimise. An optimiser does not care that K is infinite.
Inverse response
A boiler drum level, a reboiler swell, or a recycle with two competing paths can step the wrong way first. The FOPDT fit misses the inverse lobe or swallows it as extra dead time. Inverse response is a right-half-plane zero; PID cannot cancel it. Aggressive Ziegler–Nichols or Cohen–Coon amplify the wrong-way move. IMC with a large λ is the safer analytical start; include the RHP zero in the simulation.
Constraints, saturation and windup
Every formula in this article is linear. Valves are not. If the PID asks for 140 % and the valve stops at 100 %, the integrator keeps accumulating until the error reverses — missing anti-windup, not “Ziegler–Nichols being too aggressive”. Hard PV constraints are worse: 25 % overshoot is a shutdown if it hits a trip. No classical rule takes a constraint as an input. Detune until the simulated peak is legal, rate-limit the setpoint, or run the optimiser against overshoot.
Other standard failures:
- Nonlinear gain (pH, square-root flow). One FOPDT at one operating point does not tune the rest of the range.
- Sample time comparable to `L`. Discrete PID with a slow scan is not the continuous controller in the formulas.
- Derivative on noisy PV without filtering. Filter first, then retune; do not zero
Tdand keep the PIDKp. - Cascade inner loop left in manual during identification. Place it in auto and
K,τ,Lall change.
A recommended workflow that ends in simulation
A formula is a first draft. This is what a careful job looks like in PID Solver 360.
- Write down the loop’s job. Regulator or tracker? Allowed overshoot? Valve limits? What happens if PV exceeds a trip? The methods disagree on exactly those axes.
- Get a model. Open-loop step at a representative operating point. Extract
K,τ,Lwith the two-point method. ComputeR = L/τ. If the process does not settle, use an integrating model. If it goes the wrong way first, include the inverse response.
- Generate the classical sets. Drop the model into the auto tuner. Record Ziegler–Nichols open and closed, Cohen–Coon, IMC at two or three values of
λ(λ = L,λ = τ, and something in between), and Tyreus–Luyben. Convert to the algorithm form your DCS actually implements.
- Simulate the nominal loop. Same plant, derivative filter, sample time and output limits; setpoint step and load disturbance. Discard any candidate that violates a hard constraint.
- Perturb the plant. Move
KandLby 20–30 % if the test was industrial. Discard candidates that oscillate. This is where Ziegler–Nichols and Cohen–Coon often leave, and IMC and Tyreus–Luyben earn their keep.
- Optimise from the survivor. Start the optimiser from the best classical set. Match the cost to the job: overshoot for a quality tracker, ITAE or a balanced cost for mixed duty. Do not start from
(1, 1, 1)on a plant withK = 2.5andτ = 120.
- Only then go to the plant. Correct form, anti-windup on, derivative filter on, documented fallback to the previous gains. Make a small setpoint change. Compare the live trend to the simulation. If they disagree, believe the plant, update the model, and return to step 4.
The classical methods are excellent at step 3 and silent at steps 4 to 7. A simulator does not replace a commissioning engineer. It replaces “try it and see whether the column floods”.
Putting the methods to work
One structural fact: Ziegler–Nichols and Cohen–Coon spend margin to buy speed; IMC and Tyreus–Luyben spend speed to buy margin. K, τ, L and R = L/τ tell you which purchase you can afford. Ku and Pu are the same information in the frequency domain. None of the formulas know about your trips, noisy transmitter, or sticking valve. Simulation does.
Use the auto tuner to evaluate every rule in this article on the same model, equations visible so a number is never an orphan. Use the optimiser when the real cost is overshoot, IAE, ITAE, or a compromise among them. Then look at the closed-loop charts before anyone puts the controller in automatic.
Put this into practice — model your process, auto-tune it and check the stability margins.
Launch PID Solver 360