All articles
Tuning July 28, 2026 21 min read

Ziegler–Nichols PID Tuning: Complete Open-Loop and Closed-Loop Guide

Run reaction-curve and ultimate-cycle Ziegler–Nichols tests, compute Kp, Ti and Td from K, τ, L or Ku, Pu, and know when the rule is too aggressive.

John Ziegler and Nathaniel Nichols published their tuning rules in 1942 because plant engineers needed something they could do with a chart recorder and a pneumatic controller, not a frequency-response laboratory. The paper is short. The method is not a philosophy of optimal control. It is a recipe that turns two experiments — an open-loop bump that produces an S-shaped reaction curve, or a closed-loop hunt for the ultimate gain — into three numbers for a PID. Those numbers were chosen so that a load disturbance would die with quarter-amplitude decay: each successive peak about one quarter of the one before it. That target is aggressive by modern standards. It is also why a textbook Ziegler–Nichols (ZN) loop still overshoots 20–50 % on a clean first-order-plus-dead-time (FOPDT) plant, and why you should treat the formulas as a starting point rather than a commissioning destination.

The rules survive because they are fast to compute and they force you to look at the plant. If you can write down process gain K, apparent time constant τ and apparent dead time L, or if you can measure ultimate gain Ku and ultimate period Pu without putting the unit into a trip, you already know more than a faceplate tweak session ever will. PID Solver 360 implements both the open-loop reaction-curve rule and the closed-loop ultimate-cycle rule on the same FOPDT model, so you can compare them with SIMC and IMC before you download gains to a DCS.

This guide walks through both experiments in the order a practising engineer should use them: identify the plant from a bump when you can, fall back to a carefully limited ultimate-cycle test only when an open-loop step is impossible, compute P, PI and PID gains, then detune and verify in closed-loop simulation. The running numbers are a jacketed temperature loop with K = 1.6 °C/%, τ = 105 s and L = 21 s. Every formula below is evaluated on that plant so you can reproduce the arithmetic by hand.

What quarter-amplitude decay actually means

Ziegler and Nichols did not minimise integral absolute error. They wanted a disturbance response that an operator could read on a circular chart: a few visible swings, then quiet. Quarter-amplitude decay means that if the first peak of error after a load step is A, the next peak of the same sign is about A/4. In the complex plane that is a damping ratio near ζ ≈ 0.21, which is underdamped on purpose. The corresponding overshoot on a setpoint step is typically 25–40 % for a lag-dominant FOPDT plant and can exceed 50 % when dead time is a larger fraction of τ.

That intent still matters. If your specification is “no overshoot on a grade change”, ZN is the wrong first recipe. If your specification is “knock a feed disturbance down quickly and accept a swing”, ZN is closer to the brief. The gap between those two jobs is why later rules — IMC/Lambda, SIMC, AMIGO, Tyreus–Luyben — exist. They keep the FOPDT experiment and throw away the quarter-decay target.

Quarter-amplitude decay is a 1940s operator preference, not a robustness specification. A gain margin of 1.7 and a phase margin near 25° is a common ZN outcome. Many plants want twice that margin.

Quarter-amplitude decay after a load disturbance

Each successive peak is about one quarter of the previous — the target Ziegler and Nichols designed for. Modern specs usually want less oscillation.

A second piece of history is controller form. The original rules assume the ideal (ISA) PID

u = Kp [ e + (1/Ti) ∫ e dt + Td de/dt ]

with Ti and Td in time units. Parallel form u = Kp e + Ki ∫ e + Kd ė is not the same triple. PID Solver 360 reports both, but if you copy only Kp into a parallel block and leave Ki = Kp you will wind the valve. Always convert, or enter Ti and Td in the form your DCS actually implements. See the PID equation guide if the three industrial forms are still fuzzy.

The plant the rules assume

Both ZN methods were derived for a self-regulating process that looks like FOPDT after a step:

G(s) = K · e^(−L s) / (τ s + 1)

K is how far PV moves per unit of MV once everything has settled. τ is the lag of the S-curve after the delay. L is the apparent delay: transport, analyser cycle, valve stroke, and the higher-order lags you have lumped into a delay. The dimensionless ratio R = L/τ tells you whether the loop is lag-dominant (R well below 0.5) or delay-heavy. Open-loop ZN scales Kp as τ/(K L), so a 20 % error in a small L wrecks the gain. That is the first reason noisy reaction curves and ZN do not mix.

Integrating processes — level with a valve, some gas-pressure headers, inventory on a totaliser — do not have a finite K. The PV ramps instead of settling. Classic open-loop ZN is then undefined. Closed-loop ZN can still find a Ku if the integrator plus delay can be driven to the stability boundary, but the quarter-decay PID that follows is usually too hot. Use an integrating-specific rule, or SIMC for K/s · e^(−Ls), not the reaction-curve table.

Open-loop method: the reaction curve

The open-loop test is the one you should run whenever the loop can sit in manual without an incident. It is also the test that produces the K, τ and L fields in PID Solver 360.

Designing the bump

Put the controller in manual. Wait until PV and MV are as steady as the process ever gets. Record both. Then step MV by a known Δu and hold it. Do not pulse. Do not ramp. A step is the only input whose response is the reaction curve the 1942 construction uses.

Size Δu so that PV moves several times the noise band but stays inside the linear region of the valve and the process. On a 0–100 % valve, 5–10 % is a typical start. A 1 % bump on a noisy temperature transmitter is a random walk, not a model. A 25 % bump that parks the valve at 98 % is a saturation test, not a FOPDT test. If the installed valve characteristic is equal-percentage, K will change with the operating point; bump around the normal throughput, not at the low-fire stop.

Hold the step until PV has clearly finished moving. For a first-order lag that means several time constants after the delay: a practical wait is about L + 5τ. Cutting the test at 63 % of the final change is the most common way to underestimate τ and invent a small L. If you cannot wait that long, you do not yet have a reaction-curve model; you have a truncated transient.

Log time with enough resolution that L is not one sample. A 1-second scan on a loop with L = 4 s is already coarse. A 10-second historian compression on a flow loop is useless. Export t, MV and PV; FOPDT identification from a step test covers the reading of the curve in more detail than this article will repeat.

Reading K, τ and L

Process gain is not optional and not a fit parameter you should “adjust to make ZN look nicer”:

K = ΔPV_ss / ΔMV

Use consistent units. If PV is in °C and MV in %, K is °C/% and Kp will be %/°C. If both are in fraction of span, K is dimensionless. Mixing a normalised K = 1.2 with a DCS that expects %/% is how loops get a factor-of-a-hundred gain error.

The original Ziegler–Nichols construction draws a tangent at the inflection of the S-curve. The intercept of that tangent with the initial PV line is L. The intercept with the final PV line, minus L, is τ. On a clean laboratory recorder that works. On a noisy industrial trend the inflection is an argument, and two engineers will disagree on L by a factor of two. Prefer the two-point reading:

  • t28 — time from the MV step to 28.3 % of the final PV change
  • t63 — time to 63.2 % of the final PV change
τ ≈ 1.5 (t63 − t28)
L ≈ 1.5 t28 − 0.5 t63

If L comes out negative, the process is not delay-like at this resolution; do not feed L = 0 into open-loop ZN. Kp diverges as 1/L. Use IMC with a reasonable λ instead, which is what PID Solver 360 does when L/τ is below about 0.01.

Open-loop P, PI and PID formulas

With K, τ and L in hand, the classic table is

P:   Kp = τ / (K L)

PI:  Kp = 0.9 τ / (K L)
     Ti = 3.33 L

PID: Kp = 1.2 τ / (K L)
     Ti = 2 L
     Td = 0.5 L

Notice what is missing: there is no closed-loop time constant you get to pick. Speed is implied by L. Integral time is a multiple of dead time, not of τ. On a lag-dominant heater (τ ≫ L) that makes a large Kp and a short Ti, which is exactly the aggressive quarter-decay design. On a delay-dominant analyser loop (L ≳ τ) the same table still produces a formula, but the loop is working against delay it cannot cancel, and overshoot plus oscillation get worse. That is Cohen–Coon’s neighbourhood, covered in the dead-time article, not ZN’s sweet spot.

There is no derivative on the PI row. If the PV is noisy, stop at PI. ZN PID sets Td = L/2, which is a lot of derivative on a delay-heavy plant and will chatter a valve if the transmitter is not filtered. A derivative filter Tf ≈ Td/8 to Td/10 is mandatory in any DCS implementation; the 1942 paper does not mention one.

Worked open-loop example: jacketed vessel

Take a steam-jacketed vessel used as a preheater. At the normal rate, a bump test gives

K  = 1.6 °C/%
τ  = 105 s
L  = 21 s
R  = L/τ = 0.20

The process is lag-dominant with a non-trivial transport delay in the jacket and the thermowell. Open-loop ZN PID is then

Kp = 1.2 × 105 / (1.6 × 21) = 126 / 33.6 = 3.75 %/°C
Ti = 2 × 21 = 42 s
Td = 0.5 × 21 = 10.5 s

Open-loop ZN PI is

Kp = 0.9 × 105 / (1.6 × 21) = 2.81 %/°C
Ti = 3.33 × 21 = 70 s

Open-loop P-only is Kp = 105 / 33.6 = 3.13 %/°C. That loop will hold a constant load with offset. The offset on a 5 °C load-equivalent disturbance is about 5 / (1 + K Kp) ≈ 0.5 °C, which is why almost nobody commissions P-only on temperature.

Enter K = 1.6, tau = 105, L = 21 in the auto tuner and select Ziegler–Nichols (open loop). You should see the same PID triple, converted to parallel Ki = Kp/Ti and Kd = Kp Td if you need those. For this plant Ki = 3.75 / 42 ≈ 0.089 %/°C/s and Kd = 3.75 × 10.5 ≈ 39.4 %·s/°C.

Closed-loop setpoint step: ZN PID vs SIMC PI

ZN open-loop PID compared with SIMC PI (τc = L) on the same FOPDT plant.

Those gains are not yet a finished controller. They are the quarter-decay starting point. The next sections explain why the overshoot will look alarming, how the closed-loop experiment compares, and how to detune.

Closed-loop method: the ultimate cycle

When you cannot take the loop to manual — a critical pressure controller, a cascade slave that must keep running, a unit where a 10 % valve step is a quality event — Ziegler and Nichols offered a second experiment. Increase proportional gain with Ti infinite (integral off) and Td = 0 until the loop sustains a steady oscillation. That gain is Ku. The period of the oscillation is Pu. The PID is then a fraction of Ku and a fraction of Pu.

Finding Ku and Pu without wrecking the unit

This is the dangerous test. A sustained oscillation at the ultimate gain is, by definition, the stability boundary. On a fired heater, a reactor temperature, or anything with a high-PV trip, you do not get to “find Ku” by walking up to the edge. The professional version of the test is a relay or a carefully limited proportional hunt:

  • Start from a conservative Kp that already regulates.
  • Disable integral and derivative.
  • Raise Kp in small steps and wait several apparent periods between steps.
  • Stop at a decaying oscillation you can measure, or at a small-amplitude limit cycle if the actuator has backlash, and back off.
  • Never let PV enter an alarm deadband in order to finish the table.

If the loop has a tight PV-high trip, do not run this test. Identify FOPDT from historical steps or from a tiny bump at a safe operating point, then compute Ku and Pu from the model. For a FOPDT plant the ultimate frequency ωu solves

atan(τ ωu) + L ωu = π

and

Ku = sqrt(1 + (τ ωu)²) / |K|
Pu = 2π / ωu

PID Solver 360 does that calculation internally for the closed-loop ZN option, so you can obtain Ku and Pu from K, τ and L without oscillating the live plant. That is the right use of the ultimate-cycle formulas in 2026. The live hunt is a last resort.

A practical field approximation when you only have a decaying ring: if successive peaks decay with ratio r (peak two over peak one) at period P, you are below Ku. Do not multiply Kp by 1/r and call it Ku. That overestimates and is how people push a loop over the edge. Measure two or three gain values and interpolate, or go back to a bump test.

Closed-loop P, PI and PID formulas

The classic ultimate-cycle table is

P:   Kp = 0.50 Ku

PI:  Kp = 0.45 Ku
     Ti = Pu / 1.2

PID: Kp = 0.60 Ku
     Ti = Pu / 2
     Td = Pu / 8

Tyreus–Luyben, which you will see next to ZN in the tuner, is the same experiment with a calmer table: Kp = Ku/2.2, Ti = 2.2 Pu, Td = Pu/6.3. If ZN closed-loop looks wild in simulation, Tyreus–Luyben is the first detune that still uses Ku and Pu.

Closed-loop numbers on the same jacket

For K = 1.6, τ = 105 s, L = 21 s the phase-crossover solution is

Ku ≈ 5.31 %/°C
Pu ≈ 78.1 s

Closed-loop ZN PID is then

Kp = 0.60 × 5.31 = 3.19 %/°C
Ti = 78.1 / 2 = 39.1 s
Td = 78.1 / 8 = 9.77 s

Closed-loop ZN PI is Kp = 0.45 × 5.31 = 2.39 %/°C and Ti = 78.1 / 1.2 = 65.1 s. Compare with the open-loop PID of Kp = 3.75, Ti = 42 s, Td = 10.5 s. The two experiments do not give identical triples. They were never claimed to. Open-loop ZN on this lag-dominant plant is a little hotter on gain; closed-loop ZN is a little shorter on Ti. Both will overshoot on a setpoint step. Both are in the same neighbourhood, which is the sanity check: if your bump-test ZN and your model-based Ku ZN differ by a factor of two, the FOPDT fit is wrong or the live hunt was limited by a sticky valve.

Tyreus–Luyben on the same Ku, Pu is Kp = 2.42 %/°C, Ti = 172 s, Td = 12.4 s. That is the loop you actually want to try first on a vessel that operators watch.

Why 20–50 % overshoot is typical

People are surprised by ZN overshoot because the paper never advertised a setpoint-step specification. Quarter-amplitude decay is a disturbance story. A unit step in setpoint on a ZN PID is a different input: it hits proportional and derivative immediately, slams the valve, and the delayed plant catches up late. Typical numbers on a FOPDT plant with R around 0.2:

  • Setpoint-step overshoot: 25–45 %
  • Peak MV excursion: often to the clamp on the first second if the step is large
  • Gain margin: roughly 1.7–2.0 (4.5–6 dB)
  • Phase margin: often 20–30°

Those margins are below what gain and phase margin practice would call comfortable. A 20 % increase in process gain — a valve that has been stroking higher, a cleaner heat-transfer surface, a composition change — eats the gain margin. That is why a ZN loop that looked fine at Monday’s rate rings on Thursday’s rate.

Derivative on measurement (the usual DCS default) adds a further kick on a noisy PV, which looks like extra overshoot even when the linear simulation was tidy. If you must keep ZN PID, put derivative on PV, filter it, and evaluate overshoot on a filtered trend, not on a 100 ms scan that nobody uses for control.

Two-degree-of-freedom (setpoint weighting) is the civilised fix when you like ZN’s load response but hate the SP step. Keep the feedback PID, set the proportional setpoint weight b to 0.2–0.5, and the overshoot drops without giving away disturbance rejection. Many DCS PID blocks expose b. The 1942 table does not.

When not to use Ziegler–Nichols

ZN is a tool with a short list of plants it was built for: self-regulating, modest delay, reasonably linear, reasonably quiet PV, a valve that can move. Outside that list the same formulas still produce numbers. The numbers are just the wrong loop.

Integrating processes

A pure integrator plus delay does not settle in open loop. There is no K in the FOPDT sense. Forcing a reaction-curve K from a truncated ramp underestimates gain and overestimates τ. The resulting Kp is large and the level (or pressure) loop cycles. Use an integrating model in the solver, SIMC for K/s, or a lambda rule for tanks. Do not “guess L from the first wiggle” and run the PID table.

Noisy measurements

Open-loop ZN needs a trustworthy L. Noise on the S-curve moves the 28 % and 63 % crossings and, worse, the tangent. Closed-loop ZN PID puts Td = Pu/8 on that same noise. Flow loops with orifice-plate bounce, and pH loops with mixer splash, will have the valve hunting even when the linear PV looks acceptable. Filter the PV for identification, or stop at PI, or switch to IMC/SIMC which do not require a large Td.

Slow and nonlinear valves

ZN assumes the MV you write is the MV the plant sees. A control valve with a 15-second stroke time, positioner overshoot, or a large dead band adds dynamics that are not in the FOPDT fit you took from a slow temperature bump. The ultimate-cycle test is even worse: the limit cycle may be stiction, not Ku. If the valve cannot complete a step in a small fraction of L, fix the actuator or include its lag in the model. Tuning around a broken valve produces a high-gain controller that chatters metal.

Delay-free and delay-dominant extremes

If L is negligible compared with τ, open-loop ZN asks for infinite Kp. A clean electrical heater with a fast thermocouple can look like that. IMC with λ of order τ is the stable answer. If L/τ is near or above one, ZN still computes, but the quarter-decay target fights the delay and robustness collapses. Cohen–Coon was written for that region and is still aggressive; IMC and SIMC with λ of order L are the industrial default. See Cohen–Coon for dead-time plants and IMC / Lambda explained.

Safety-critical and quality-critical loops

If a 30 % PV overshoot is a trip, a relief, or off-spec product you cannot reblend, do not download ZN because a textbook said so. Simulate first. Detune. Prefer SIMC. The method is not “wrong”; it is solving a different problem than your unit has.

Ziegler–Nichols versus SIMC and IMC

A fair comparison uses the same jacket model and the same PID structure, then looks at a setpoint step and a load step. IMC with the half-rule (the form PID Solver 360 uses) is

Kp = (τ + L/2) / (K (λ + L/2))
Ti = τ + L/2
Td = τ L / (2τ + L)

SIMC PI (Skogestad) is

Kp = (1/K) · τ / (τc + L)
Ti = min(τ, 4 (τc + L))

For the jacket, IMC with λ = L = 21 s gives Kp ≈ 1.97 %/°C, Ti = 115.5 s, Td ≈ 8.9 s. SIMC with τc = L gives Kp = 1.56 %/°C, Ti = 105 s, Td = 0. ZN open-loop PID was Kp = 3.75, Ti = 42 s, Td = 10.5 s. The pattern is always the same: ZN uses about twice the gain and half the integral time of a modern robust PI. That is the quarter-decay versus “keep a reasonable modulus margin” split.

On a load disturbance at the plant input, ZN often wins on peak error and on time to return. On a setpoint step, SIMC and IMC win on overshoot and on MV activity. On a +30 % error in K or L, ZN is the one that oscillates. If you only remember one comparison, remember that. A more complete method survey sits in PID tuning methods; this article’s job is to make ZN honest, not to replace that comparison.

IMC also gives you a knob. λ is a closed-loop time constant you choose. ZN gives you no knob except “multiply Kp by 0.7 when it looks lively”. That detune is effective, but it is ad hoc. If you find yourself always detuning ZN by the same factor, you are reinventing Lambda tuning with extra steps. Start at IMC or SIMC.

Detuning after Ziegler–Nichols

Assume you computed the table and the simulation looks like a saw. Do not throw the identification away. Detune in a fixed order so you know what you changed.

First, cut Kp. A factor of 0.6–0.8 on the ZN PID gain, leaving Ti and Td alone, is the classic field move. It buys gain margin cheaper than stretching Ti. Second, if the loop still rings, increase Ti toward τ rather than toward 2L. ZN’s Ti = 2L is short for a lag-dominant plant; moving Ti to τ/2 or τ is halfway to IMC. Third, reduce Td or add a filter. If MV is noisy, derivative is the problem, not the solution.

Setpoint weighting, as noted above, is a detune that does not sacrifice load response. Anti-windup is not optional once Kp is large: a ZN PID will saturate on a big SP step, and without back-calculation the integral will keep winding. Anti-windup is part of commissioning this method, not an advanced extra.

If after two detune passes the loop still needs a story, switch methods. You are spending time to recover a 1942 target you did not want.

Verifying in simulation before the DCS

Put the FOPDT plant and the candidate gains into the closed-loop simulator. Use a sample time well below L and below τ/20. Run three experiments, not one.

A unit setpoint step from the identification condition: read overshoot, rise time, settling to 2 %, and whether MV hit a clamp. If overshoot is above 20 % and your operators will not accept it, you are not done. A load step on the plant input (a disturbance in PID Solver 360): this is the test ZN was designed for; peak error and IAE matter more than overshoot here. A robustness case: repeat both tests with K up 20 % and L up 30 %. If the detuned ZN survives those, it is closer to plant-ready. If it does not, SIMC will.

Watch units. The simulator is only as good as K. A dimensionless model with K = 1.6 and a DCS that works in percent of PV span will not match. Scale the plant the way the controller is scaled, then compare.

Finally, download to a development controller or a tracking block, make a small SP step, and compare the first 2–3 minutes with the simulation. If they disagree, the model is wrong — usually L or a valve that was already near a stop. Do not add gain to make the plant “catch up” to a bad model.

The docs page in PID Solver 360 lists the exact controller form and plant fields the simulator uses. Match those before you argue with the plot.

Commissioning checklist for a Ziegler–Nichols loop

Use this as a gate, not as decoration.

Confirm the process is self-regulating and that a bump can finish at steady state. Record ΔMV, ΔPV, t28 and t63, and write K, τ, L on the loop sheet. Reject L = 0. Compute open-loop PI and PID; if the PV is noisy, keep PI. Compute model-based Ku and Pu and the closed-loop table as a cross-check; investigate if Kp differs by more than about 30 %. Simulate SP and load steps; if overshoot exceeds what operations will live with, detune Kp or switch to SIMC. Check derivative filter, action (reverse/direct), and anti-windup. Only then make a live step smaller than the identification bump.

If the loop is a temperature controller on a vessel like the example, expect SIMC or IMC to be the gains you leave in the DCS, and ZN to be the gains you used to understand how aggressive “textbook” is. That is a successful use of Ziegler–Nichols: it calibrates your sense of gain, then you choose not to run that hot.

A last operational note. Document which experiment you ran. “ZN” on a loop sheet is ambiguous. Write “ZN open PID from bump 2026-03-12, K=1.6, tau=105 s, L=21 s, then Kp×0.7”. The next engineer should be able to reproduce the arithmetic without interviewing the night shift. PID Solver 360 will recompute the table from those three plant numbers in a few seconds; the historian will not.

Ziegler–Nichols remains worth learning because every later rule is a commentary on it. Once you have seen quarter-amplitude decay on a plot, you recognise it in the field, and you know that the cure is not more gain. It is a different target, a better model, and a simulation before the download.

Try it in the solver

Put this into practice — model your process, auto-tune it and check the stability margins.

Launch PID Solver 360