All articles
Tuning July 14, 2026 15 min read

IMC and Lambda PID Tuning Explained for FOPDT Loops

Internal model control and Lambda tuning for FOPDT plants: choosing λ, PI and half-rule PID formulas, robustness versus speed, SIMC, and a numeric example.

Lambda tuning is what most process-control engineers mean when they say they want a knob. Ziegler–Nichols and Cohen–Coon hand you a PID triple and a story about quarter-amplitude decay. Internal model control (IMC) starts from a different question: if I had a perfect model of the plant, what controller would make the closed-loop PV follow the setpoint with a first-order lag of time constant λ? For a first-order-plus-dead-time (FOPDT) process that question has a short answer, and the answer becomes a PI or a PID after you approximate the delay. Larger λ means a slower, more robust loop. Smaller λ means you are asking the plant to do something close to its physical limit. That trade-off is the whole method.

The practical payoff is that temperature loops, composition loops and many flow loops can be commissioned with one number an operations engineer understands: “make it behave like a 3-minute lag.” PID Solver 360 implements IMC / Lambda on a FOPDT (and on the half-rule reduction of a second-order plant) in the auto tuner. This article derives the PI formulas, the PID half-rule, what λ ≈ L, λ = 2L and λ = τ actually do, what happens when the model is wrong, and how SIMC sits next to IMC. The worked plant is a fired-heater coil outlet temperature with K = 3.2 °C/%, τ = 180 s and L = 25 s.

If your K, τ and L are still guesses, identify them first. Step-test FOPDT identification is the input; Lambda is the map from that input to gains you can defend.

The internal model control idea

Garcia and Morari’s IMC structure is a plant model sitting parallel to the real plant. The controller (the IMC filter times the invertible part of the model inverse) sees the mismatch between those two outputs plus the setpoint. If the model is perfect and there is no disturbance, the feedback signal is zero and you are running open-loop inverse control — which is why IMC can be aggressive. If the model is wrong, the feedback corrects. Dead time and right-half-plane zeros are not invertible; IMC leaves them in the “all-pass” part of the plant and does not try to cancel them. That is the theoretical reason Lambda tuning never claims to cancel L.

For a delay-free first-order plant K/(τs+1), the perfect inverse controller plus a low-pass filter 1/(λs+1) yields a PI. For FOPDT you cannot invert e^(−Ls). You approximate the delay — a first-order Padé is the usual PID route — or you treat the delay as a time you simply add to λ and stay with PI. Both approximations are in daily use. Neither is magic. Both are better than pretending L = 0.

The closed-loop you are aiming at, on the design model, is roughly

PV/SP ≈ e^(−L s) / (λ s + 1)

You cannot see the PV move before L. After that you asked for a first-order rise with time constant λ. Setpoint tracking is then almost decoupled from the PI/PID arithmetic: pick λ, get the tracking bandwidth. Disturbance rejection is not decoupled. A large λ makes a small Kp and a slow return from a load step. People who only look at SP steps commission sleepy loops that then fail the first feed change.

Lambda is a tracking specification that also sets load performance. If the loop’s job is disturbance rejection, do not celebrate a pretty SP step at λ = τ until you have simulated a load step.

The IMC controller is usually implemented as a standard PID in the DCS, not as an explicit model block. The formulas below are that conversion. You still need anti-windup, a derivative filter if Td ≠ 0, and the correct action. IMC does not replace the rest of PID engineering.

PI formulas for a FOPDT plant

The simplest useful conversion — delay not expanded, PI only — is

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

Ti equals the plant time constant. That is IMC cancelling the plant pole. Kp is the gain that, together with that cancellation, produces the requested λ after you treat the delay as extra lag in the filter. This PI is what many Lambda-tuning sheets in the pulp, paper and chemical industries still use.

Properties worth memorising:

  • If λ is fixed and L grows, Kp falls. The rule respects delay.
  • If L = 0, Kp = τ/(K λ), which is exact IMC PI for a first-order lag.
  • Ti does not depend on λ. Slowing the loop is a gain change, not an integral-time change. That is different from Ziegler–Nichols, where Ti is glued to L.

When is this PI enough? When the PV is noisy, when L/τ is not tiny, and when you do not need the extra phase from derivative. Most flow loops and many composition loops should stop here. Adding D to a noisy flow transmitter to chase a Lambda PID table is a valve-wear programme.

PID with the half-rule

To get a PID, approximate the delay with a first-order Padé and absorb half the delay into an extra lag:

e^(−L s) ≈ (1 − (L/2) s) / (1 + (L/2) s)

Skogestad’s half-rule for reducing a more complicated model to FOPDT does the same kind of split: half of the neglected lag goes to τ, half to L. For a FOPDT already in hand, the IMC PID that PID Solver 360 uses is

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

Td does not depend on λ. Derivative is set by the Padé / half-rule reduction, not by how fast you asked the loop to be. That surprises people who expect every coefficient to move when they drag λ. If MV gets noisy when you “slow the loop”, you did not change Td; you may have a filter problem or a different issue.

Ti = τ + L/2 is a little longer than the PI’s Ti = τ. The extra L/2 is the lag you invented to approximate the delay. On a temperature loop with τ = 180 s and L = 25 s, that is Ti = 192.5 s versus 180 s — a small shift. On a delay-dominant plant with τ = 35 s and L = 42 s, it is Ti = 56 s versus 35 s — a real change. Use the PID formulas when you actually implemented PID; do not mix PI Ti with PID Kp.

PID Solver 360’s default when λ is omitted is conservative: λ = τ. That is a sleepy heater setting, not a tight analyser setting. Always set λ on purpose.

Choosing λ

There is no single correct λ. There are three industrial landmarks and a constraint you should not violate.

Do not ask for `λ` much below `L`. The delay is a performance limit. λ = 0.2 L on a FOPDT PID is a request for a closed loop the Padé approximation cannot honestly deliver. You will get a large Kp, poor robustness, and a simulation that looks fast on the design model and rings when L is slightly long. A common lower bound is λ ≥ L for aggressive but still sane FOPDT PID, and λ ≥ 1.5 L if you want to sleep at night.

λ ≈ L

This is the fast industrial choice for self-regulating FOPDT: closed-loop lag similar to the delay you cannot beat. Tracking after the dead time is relatively crisp. Load rejection is good. Robustness is acceptable on a decent model, not generous. Use it when the identification is trustworthy, the valve is healthy, and a bit of overshoot is allowed. On the heater example this is λ = 25 s.

λ = 2L

The extra delay-worth of lag is the usual detune. Gain drops, overshoot drops, modulus margin improves, load IAE gets worse. This is the default I would download on a new temperature loop whose model came from one bump. If operations later want it faster, you have room to move toward λ = L rather than the other way around.

λ = τ

This is slow when τ ≫ L, which is exactly the jacketed-vessel and fired-heater case. The loop barely uses the bandwidth the plant offers. It is appropriate when the PV is terrible, the model is a guess, the heater is safety-critical, or you are cascading a slow master. It is inappropriate when you chose it because it is the software default and you did not look at L. On a delay-dominant plant where τ ≈ L, λ = τ and λ = L are the same order and the drama disappears.

A fourth landmark, used on some integrating and very slow temperature loops, is λ = 3L or a wall-clock number (“four minutes”). Write the number in seconds next to τ and L so you can see the ratios. “Lambda equals 60” means nothing if L is 80 s.

For cascade slaves, λ should be several times faster than the master’s λ, and still ≥ L_slave. Nested Lambdas that ignore the two dead times produce a pretty block diagram and a hunting slave.

Robustness versus speed

Linear robustness for these PIDs tracks λ almost monotonically. Increase λ, decrease Kp, increase gain and phase margins. Typical FOPDT behaviour:

  • λ = L — phase margin often in the 40–50° band on the design model; a +20 % gain error is usually survivable; a +40 % L error may not be
  • λ = 2L — visibly fatter margins; the first choice when the bump test was noisy
  • λ = τ with τ = 7 L — very fat margins and a load response operations will call “dead”

Margins are not the only robustness. High-frequency derivative action, valve stiction, and a wrong K at a different throughput are not fixed by λ alone. Simulate the design case, then a gain-error case, then a delay-error case in the simulator. Read gain and phase margin if you need to translate “it rings” into a number.

Speed is not only rise time. On a heater, MV rate-of-change limits and a fuel-gas pressure trip can make a λ = L PID unusable even if the linear PV looks fine. Watch the MV plot. Lambda tuning that ignores the actuator is still guesswork.

Lambda for temperature loops

Temperature is where Lambda tuning earned its keep. Typical fired-heater or exchanger loops have τ of one to several minutes and L of 15–40 s from transport, thermowell and analyser-or-sensor lag. Operators think in minutes. Saying “closed-loop time constant two minutes” is a better conversation than “Kp 1.6, Ti 193”.

Guidelines that survive contact with heaters:

Start with PI if the thermocouple is noisy or the well is long; the well is already a filter, and D on top of it doubles up. Use PID half-rule when the measurement is clean and L is well identified; Td will come out around L/2 times a τ/(τ + L/2) factor, often 8–15 s on the plants in this article’s range. That is enough to need Tf ≈ Td/8 and not enough to justify skipping the filter.

Pick λ from the duty, not from habit. A product-quality coil outlet that must reject feed-temperature changes wants λ near L to 2L. A metal-temperature skin-point that exists to protect tubes wants λ larger; you are not trying to win IAE, you are trying to never overshoot a trip. Those two loops can sit on the same heater with different λ.

Nonlinear gain is the usual temperature trap. K at 40 % fire is not K at 80 % fire. Lambda uses one K. Identify near the normal rate, and if the heater swings widely, either gain-schedule Kp (leave Ti from τ) or choose λ large enough that the high-gain end still has margin. A single aggressive λ = L tuned at low fire can oscillate at high fire.

Integrating-like behaviour shows up on some batch kettles and on well-insulated metal. If the bump does not settle, do not force a FOPDT K and a Lambda PI. Use an integrating model. IMC and SIMC both have integrating variants; the self-regulating formulas in this article do not apply.

What happens if the model is wrong

IMC’s honesty is also its failure mode: the controller contains the model. If you cancel a τ that is 50 % short, you have a zero in the wrong place. The loop still has feedback, so it may not go unstable, but the pretty e^(−Ls)/(λs+1) shape is gone.

Wrong K: Kp is scaled by 1/K. If true gain is higher than the model (cleaner tubes, a more open installed valve characteristic), the loop is tighter than you asked. Overshoot appears on SP steps. If true gain is lower (fouling), the loop is sluggish and offset takes longer to clear. Retune from a new bump when the exchanger has fouled; do not keep last year’s λ = L PID as a superstition.

Wrong τ: Ti tracks τ. Too-small Ti (you underestimated lag) gives a restless integral and can look like a Ziegler–Nichols hangover. Too-large Ti gives the long tail everyone blames on “too much I” while the real error was identification.

Wrong L: the dangerous one. Too-small L in the model produces too-large Kp for a given λ, and the real delay is longer than the controller allowed for. That is the classic IMC PID oscillator. Too-large L produces a conservative loop. When in doubt, bias L upward. A slightly sleepy heater is cheaper than a cycling one.

Wrong structure: a true underdamped second-order plant shoved into FOPDT will have a fictional L. Half-rule reduction of an overdamped pair is reasonable; reduction of a ringing pair is not. Simulate the second-order plant with the FOPDT-designed PID. PID Solver 360 can hold a second-order model; use it rather than arguing from the FOPDT plot alone.

The operational test is cheap. After commissioning, make a small SP step every few months on critical heaters and overlay the first-order-plus-delay shape you thought you bought. When the overlay fails, identify again. Lambda does not save you from a dead model.

How SIMC relates to IMC

Skogestad’s SIMC is IMC with two industrial corrections. For FOPDT the PI is

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

τc is the same kind of knob as λ. The default τc = L is the fast robust choice. The min on Ti is the important correction: for lag-dominant plants IMC’s Ti = τ is fine; for delay-dominant or integrating-adjacent plants a Ti as large as τ is too slow for load rejection, so SIMC caps it at 4(τc+L). On the heater below, τ = 180 s and 4(L+L) = 200 s, so the cap does not bind and SIMC PI at τc = L is almost the simple IMC PI with λ = L. On a delay-dominant analyser, the cap does bind and SIMC is clearly faster on load than textbook IMC PI.

SIMC is usually PI. IMC half-rule is PID. That is a practical fork: if you want D, use the half-rule PID and a filter; if you want the industrial PI default, use SIMC. PID Solver 360 lists both so you can see the fork on your numbers rather than treating them as rival religions. A broader comparison with Ziegler–Nichols and Cohen–Coon is in PID tuning methods.

For delay-dominant plants, SIMC with τc = L is the first controller I would simulate. For lag-dominant heaters with a clean PV, IMC PID at λ = 2L is a very defensible download. For anything with a political overshoot limit, start at λ = 2L or τc = 2L and only then tighten.

Numeric worked example: coil outlet temperature

Fired-heater coil outlet, self-regulating, identified at normal rate:

K  = 3.2 °C / %
τ  = 180 s
L  = 25 s
R  = L/τ ≈ 0.14

This is lag-dominant with enough delay that L = 0 would be a lie (thermowell plus ducting). All times in seconds, Kp in %/°C.

IMC PID half-rule, Ti and Td independent of λ:

Ti = 180 + 25/2 = 192.5 s
Td = 180 × 25 / (360 + 25) = 4500 / 385 = 11.7 s

λ = L = 25 s (fast):

Kp = 192.5 / (3.2 × (25 + 12.5)) = 192.5 / 120 = 1.60 %/°C

λ = 2L = 50 s (default detune):

Kp = 192.5 / (3.2 × (50 + 12.5)) = 192.5 / 200 = 0.96 %/°C

λ = τ = 180 s (conservative, solver default if you forget to set λ):

Kp = 192.5 / (3.2 × (180 + 12.5)) = 192.5 / 616 = 0.31 %/°C

The three controllers share Ti and Td and span a factor of five in Kp. That is the knob. In the simulator the λ = 25 s PID will track a setpoint change, after the 25 s delay, on a time scale of tens of seconds and will move fuel hard. The λ = 180 s PID will look almost like a slow operator. Most heater commissions should live near Kp = 0.96, not at either extreme.

Simple IMC PI with λ = L (no half-rule):

Kp = 180 / (3.2 × (25 + 25)) = 180 / 160 = 1.13 %/°C
Ti = 180 s

SIMC PI with τc = L:

Kp = (1/3.2) × 180 / (25 + 25) = 0.3125 × 3.6 = 1.13 %/°C
Ti = min(180, 4 × 50) = 180 s

SIMC and simple IMC PI match here because the Ti cap is inactive. SIMC with τc = 2L = 50 s is Kp = 0.75 %/°C, Ti = 180 s, close to the IMC PID at λ = 2L on gain and without derivative.

Ziegler–Nichols open PID on the same plant, so the contrast is numeric rather than rhetorical:

Kp = 1.2 × 180 / (3.2 × 25) = 216 / 80 = 2.70 %/°C
Ti = 50 s
Td = 12.5 s

ZN uses almost three times the conservative Lambda gain and an integral time a quarter as long. It will reject a feed-temperature slam faster and overshoot a setpoint change in the 25–40 % band. If the heater has a coil-outlet high trip 15 °C above normal, do not start there. Use Lambda, then tighten λ only if a simulated load step shows you missing a quality limit. The Ziegler–Nichols guide exists so you can recognise that aggressive corner, not so you apply it to tube-skin temperatures.

Enter K = 3.2, tau = 180, L = 25 and try λ of 25, 50 and 180 in the tuner. Overlay the three closed-loop plots. That picture teaches Lambda faster than a pole-zero argument.

Commissioning checklist

Identify FOPDT at the normal fire rate; write K, τ, L and R. Decide PI versus PID from PV noise, not from a desire to fill three boxes. Choose λ from the landmarks: 2L unless you have evidence for L or a reason for τ. Compute gains with the matching formula set (PI versus half-rule PID). Simulate SP step, load step, K +20 %, L +30 %. Inspect MV for rate and saturation; enable anti-windup. Set derivative filter if Td > 0. Download, make a small live SP step, overlay on the simulation. If they disagree, fix the model before shrinking λ.

Document λ on the loop sheet with the same prominence as Kp. A future detune should be a change in λ recomputed through the formula, not a random 0.8 factor on gain that breaks the Ti relationship.

Lambda tuning is not “the opposite of Ziegler–Nichols”. It is PID design with an explicit closed-loop time constant and a FOPDT model you are willing to maintain. When the model is kept honest, λ is the only conversation you need with operations. When the model is stale, no value of λ is a substitute for another bump test. Use PID Solver 360 to keep the arithmetic boring so that conversation can stay on the plant.

Try it in the solver

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

Launch PID Solver 360