All articles
Applications August 17, 2026 17 min read

Industrial PID Applications: Temperature, Flow, Level, Speed and Pressure

How PID loops behave on ovens, tanks, flow valves, DC motors, HVAC and pressure vessels — and how to tune each class of process.

A PID algorithm does not know whether it is heating an oven, filling a tank, or spinning a motor. It only sees error, time, and an output that must stay inside actuator limits. The same three terms that settle a DC motor in half a second will hunt a room-temperature loop for an hour, and a derivative gain that looks modest on a robot joint will shred a noisy flow transmitter. The practising engineer maps process physics onto a model, chooses a structure the plant can actually use, and judges the closed-loop step test on the right time scale. This article walks through the industrial loops that PID Solver 360 ships as working examples — temperature, tank level, flow, DC motor speed, gas pressure, HVAC, hydronic heating, a robot joint, and vehicle cruise — with plant numbers, actuator limits, and the tuning habits that make each class behave.

The PID is the same; the plant is not

In parallel form the controller is

u(s) = Kp e(s) + Ki e(s)/s + Kd s e(s)

or, on the ISA faceplate most DCS still show,

u(s) = Kp [ e(s) + e(s)/(Ti s) + Td s e(s) ]

with Ki = Kp/Ti and Kd = Kp Td. Neither equation contains thermal mass, pipe volume, or motor inertia. Those enter through the plant. Almost every loop below is a first-order-plus-dead-time (FOPDT) model

G(s) = K e^{-L s} / (τ s + 1)

or a pure first-order lag (L = 0), or a second-order pair when the mechanics are underdamped. K is steady-state gain in engineering units per percent (or per volt). τ is the dominant time constant. L is apparent dead time. The ratio L/τ is the most useful number on a loop sheet: near zero you can be aggressive; above about 0.3 dead time owns the bandwidth and derivative is a phase tool, not a noise amplifier you switch off by habit.

Actuator limits matter as much as poles. A heater that only adds heat, a valve that cannot go negative, a drive clamped at 24 V, a damper that can heat and cool — each saturation decides whether integral windup will ruin the first large setpoint step. PID Solver 360 exposes uMin/uMax on every example for that reason.

Classify the loop before you touch a gain

Before changing Kp, write down four facts: the quantity, expected τ and L, whether the process is self-regulating or integrating, and whether the measurement is quiet enough for derivative. Most temperature, flow, pressure, and speed loops are self-regulating. A gravity-drained tank is self-regulating once linearised around an operating level. A true integrator 1/(A s) appears on surge tanks with pumped, level-independent outflow.

Noise decides derivative. Flow orifices and many pressure transmitters are broadband; RTDs behind thermowells are quiet enough for Kd; encoder speed can be differentiated if the sample is short. The table uses time constants typical of the PID Solver 360 library.

Loop classTypical τDead time LL/τDerivativeStructure
DC motor speed0.2–0.5 s~0~0Optional, tinyPI or light PID
Liquid flow1–5 s0.2–1 s0.15–0.3Off (Kd = 0)PI
Gas pressure10–40 ssmalllowModest, filteredPI or PID
Tank level30–120 s2–8 s0.05–0.15SometimesPI or PID
Electric oven60–300 s10–40 s0.1–0.2YesPID
Vehicle cruise8–20 s0.4–1.5 s~0.05LightPI or PID
Hydronic heating200–600 s30–90 s0.1–0.2Yes, filteredPID
HVAC zone air300–800 s40–120 s0.1–0.2Yes, filteredPID
Robot joint0.05–0.2 s (1/ωn)~0~0EssentialPID

Do not copy gains across rows. A Kp of 12 is timid on a motor in rpm/V and violent on a 0–100 percent level valve. Match the simulation horizon to τ: a 6 s run that looks finished on a motor has not left the dead-time region of an oven. Set duration to at least 8(τ + L).

Temperature control on electric ovens

Physics and the FOPDT numbers

An electric oven is thermal mass heated by a resistive element and cooled by losses to ambient. Energy balance on the chamber is close to

C dT/dt = P u − (T − Tamb)/R

where C is thermal capacity, R is resistance to ambient, P is heater power at 100 percent, and u is duty cycle. Open-loop gain is K = P R in °C per fraction of power; the time constant is τ = R C. Thermowell, mixing, and heater lag appear as dead time. The temperature example is therefore FOPDT with K = 2.5 °C/%, τ = 120 s, L = 15 s — a small production oven, not a kiln. L/τ = 0.125 is lag-dominated, so PID can be tight without becoming a dead-time compensator.

From 20 °C to 180 °C the linear model wants a steady duty of 160/2.5 = 64 percent. Real gain is not constant: near ambient K looks larger; at 250 °C radiation grows and K falls. Retune at the production setpoint, not on a convenient 30 °C bump.

Actuator, structure, and a decent step test

The heater is one-sided: uMin = 0, uMax = 100 percent. You cannot cool except by waiting, so do not demand a 5 percent overshoot spec on a large heat-up. During the first minutes the error is huge, the output sits at 100 percent, and the integrator keeps accumulating unless you freeze it or use back-calculation. Without anti-windup the chamber overshoots while the heater is still stuck on.

Recommended structure is PID. Derivative buys back the phase that L = 15 s stole, and the measurement is slow enough that Kd is usable. Library starting point: Kp = 3.8, Ki = 0.06, Kd = 25, derivative on measurement so a recipe change does not spike the SSR. Filter D with N around 8–12. If you only have PI, drop Kp and accept a slower rise.

A good heat-up: output goes to the high clamp, then comes off the stop before the PV is within a few degrees of setpoint. Temperature rises on a smooth S-curve after the 15 s delay, overshoot stays under about 8–12 °C on a 160 °C step, and there is at most one gentle undershoot. Settling to ±2 °C should occur well inside an hour; the example runs 1200 s. Three rings means Kp or Kd is too large relative to L. A 40-minute creep at 64 percent fire is timid integral. A long sit 5 °C high after overshoot is windup.

Pitfalls: tuning on a 5 °C step around 180 °C then using the same gains for a cold start; ignoring SSR cycle time so effective L is larger than the model; a sensor in a dead pocket; derivative on error so every setpoint change slams the heater.

Tank level: storage, valves, and a deceptively simple FOPDT

Hydraulics after linearisation

A gravity-drained tank with an inlet control valve is the textbook self-regulating level loop. Mass balance is

A dh/dt = q_in(u) − a √(2 g h)

Linearised at height h0, outflow becomes a resistance and the plant looks first-order: gain K in metres per percent valve, time constant τ = A / (dq_out/dh) at h0. Valve stroke and the transmitter add a few seconds of dead time. The tank level example uses K = 0.8 m/%, τ = 60 s, L = 4 s, setpoint 2.5 m from 0.5 m, and a 0–100 percent inlet valve. L/τ ≈ 0.067.

If the outlet were a constant-speed pump you would have G(s) = K_i e^{-L s}/s. Averaging level on a surge tank is that problem: slow PI, small Kp. The PID Solver 360 tank is the other problem: tight level, gravity drain, operators who want 2.5 m and mean it. Gain also depends on the valve characteristic. An equal-percentage valve on a wide range means K at 20 percent travel is nothing like K at 80 percent, and a 0.5 m to 2.5 m step already leaves the linearisation.

Structure, limits, and what a good fill looks like

The actuator cannot suck liquid out: uMin = 0. Overfill protection is a separate interlock. PI is usually enough for tight level; PID is justified when the valve is slow or you care about the first overshoot on a large fill. The library uses Kp = 12, Ki = 0.2, Kd = 8. That Kp looks large until you remember K = 0.8: a 10 percent valve move is only 0.08 m in steady state. Keep derivative on measurement. A stilling well can stand a little Kd; a turbulent free surface cannot.

On a step from 0.5 m to 2.5 m the valve opens hard, perhaps to the stop, then modulates. Overshoot should stay around 5–10 percent of the step, with no hunting. Chatter means Kd is too high. If level creeps past setpoint with the valve already shut, Ki is oversized. If the loop never uses more than 30 percent valve on a 2 m step, Kp is too small. Field pitfalls: a sticky valve; a drifting level zero; a single loop fighting a poorly sized valve instead of a flow cascade.

Flow loops: fast, noisy, and allergic to derivative

Liquid flow through a control valve is a short pipe, a little capacitance, and a lot of turbulence. The FOPDT fit is typically τ of one to a few seconds and L of a fraction of a second from the positioner and the sample. PID Solver 360’s flow example is K = 1.4 L/min per %, τ = 2 s, L = 0.4 s, setpoint 45 L/min, Kd = 0. That last number is the story. The measurement is noisy. Differentiating it produces a valve that paints the stem. Set Kd = 0.

Recommended structure is PI. Kp around 0.8 and Ki around 0.9 on this plant is a fast industrial flow loop: flow is inside a few percent of 45 L/min in well under 15 s. Because L/τ = 0.2, pushing Kp further makes the 0.4 s delay look like a delay-line oscillator with a 1.5–2 s period.

Actuator limits are 0–100 percent. Installed gain changes with ΔP, so a loop that is stable at 45 L/min can hunt at 10 L/min. If the plant runs a wide range, retune at the low end.

A good flow step test is boring: 0.4 s hesitation, a clean rise, a few L/min of overshoot at most, and a noisy band around setpoint rather than a sine wave. If u is noisier than q, you left derivative on or Kp is too high. Do not add a 1 s filter on a 2 s plant and then invent Kd to cancel it.

Stiction is not a tuning problem. If u ramps while q is flat, then q jumps, repair the valve. Do not crank Ki.

DC motor speed: the fast first-order loop

An armature-controlled DC motor with a stiff current loop underneath reduces, for speed, to a first-order lag. Inertia J and viscous damping b set τ = J/b. Dead time is essentially the drive sample time. The DC motor example is first-order, K = 120 rpm/V, τ = 0.35 s, L = 0, 0–24 V armature, 1500 rpm from rest. In six seconds the story is over.

Because L ≈ 0 and τ is a fraction of a second, PI is the default and PID is a polish. Library gains Kp = 0.02, Ki = 0.06, Kd = 0.001 look tiny until you multiply by K = 120: 0.02 V per rpm is 3 V for a 150 rpm error, a large fraction of a 24 V budget. A Kp you would use on a temperature loop would slam the drive into the rail on a 50 rpm correction.

Saturation is real on the first start. From 0 to 1500 rpm the linear model wants a voltage the clamp will not give, so anti-windup is mandatory. Derivative on measurement avoids a kick; with Kd = 0.001 you barely notice. If the encoder is coarse, set Kd = 0.

A good speed step: voltage rises high (possibly 24 V briefly), speed follows an exponential toward 1500 rpm, overshoot a few percent or less, settled in under 2 s. A 10 Hz oscillation means you closed the loop around a current-loop or encoder delay the first-order model omitted. Speed that never quite reaches 1500 rpm is timid Ki or an unmodelled load torque.

Gas pressure in a receiver

A compressor (or a valve from a higher header) feeding a receiver with downstream demand is a mass-storage problem. For an ideal gas at roughly constant temperature,

V dp/dt = R T (w_in(u) − w_out)

so the open-loop plant is close to integrating if outflow is independent of pressure, and first-order if outflow through a restriction grows with p. PID Solver 360 models the latter: first-order, K = 0.09 bar/%, τ = 25 s, L = 0, 1 bar to a 6 bar setpoint, compressor speed 0–100 percent. The small K means you need a large Kp (library: 8). τ = 25 s is a modest vessel; a plant-scale receiver can be minutes.

Safety and saturation dominate. Vessels have PSVs; the PID is not the relief device. Prefer a slightly slow approach with little overshoot. Because L is small, PI already works; a modest Kd = 3 can cut the first peak if the transmitter is quiet. If the PV looks like a 0.05 bar random walk, drop derivative.

A good pressure step: speed rises, pressure climbs on a 25 s-ish exponential, overshoot stays well under 0.3 bar on a 5 bar step, and output settles at the speed that balances demand at 6 bar. A slow ramp that never quite gets there is tiny Ki against a persistent offtake. A limit cycle from noise plus high Kp looks like speed hunting. If the real process is closer to integrating, fit K_i from the slope — pressure keeps rising — and use smaller Kp, a definite Ki, never a large Kd.

HVAC zone temperature: long lag, bipolar actuator

A room served by an air-handling unit is an oven with worse numbers and a reversible actuator. The HVAC example is FOPDT with K = 0.45 °C/%, τ = 420 s, L = 60 s, cooling from 28 °C to 22 °C, damper from −100 to +100 percent. L/τ ≈ 0.14. The horizon is 3600 s because anything shorter is theatre.

K = 0.45 is a weak plant: 10 percent extra cooling is only 4.5 °C in steady state, so a 6 °C correction wants a large fraction of the actuator. That is why Kp = 12 is not a mistake. Integral is slow (Ki = 0.02) because you cannot integrate quickly through 60 s of delay. Derivative is large (Kd = 120) and must be filtered; you are restoring phase around a seven-minute lag, not chasing occupancy spikes.

Unlike the oven, you can cool, which tempts people to tune like a servo. Occupants feel 0.5 °C swings and draughts when the damper hunts. A good zone step from 28 °C to 22 °C should take 15–25 minutes to enter a ±0.3 °C band, with at most one overshoot of a few tenths of a degree. Pitfalls: a thermostat on an exterior wall; a zone loop that fights the AHU discharge-air cascade; copying oven gains onto a zone because both displays read °C.

Hydronic heating: boilers, radiators, and dead time you can walk through

A boiler feeding a radiator circuit is HVAC’s slower, one-sided cousin. Water volume, pipe length, and radiator metal set τ of several minutes; the delay from burner fire to the room sensor is often 30–90 s and more in a long underfloor loop. The hydronic example is FOPDT K = 1.1 °C/%, τ = 300 s, L = 45 s, 16 °C to 21 °C, burner 0–100 percent. L/τ = 0.15. The heater is one-sided, so the oven’s anti-windup remarks apply again.

K ≈ 1 means a 5 °C lift wants about 5 percent extra fire in the linear model. Library Kp = 5 is already firm; Ki = 0.012 is slow on purpose; Kd = 90 is a filtered thermal derivative. Minimum fire and anti-short-cycle logic will violate the linear model whenever load is small — put a dead band or minimum-on timer outside the PID.

A good room-heat step: burner comes up, nothing happens for most of a minute, temperature rises on a slow S-curve, overshoots by less than 0.5 °C, and holds. If the room never reaches 21 °C, a boiler limit is clipping u. If it cycles ±1 °C, look at the burner run signal before you blame the PID.

Robot joint: underdamped second order, derivative is the damping

A servo axis with inertia and light viscous friction is not FOPDT. It is

G(s) = K ωn² / (s² + 2 ζ ωn s + ωn²)

The robot-joint example uses K = 1, τ = 0.08 s as 1/ωn so ωn ≈ 12.5 rad/s, and ζ = 0.25. That plant rings on its own. Dead time is ~0. Setpoint 0.5 m, ±100 percent torque, 3 s horizon. PI cannot supply enough damping. You need Kd. Library gains Kp = 45, Ki = 30, Kd = 3: proportional for stiffness, derivative for damping, integral to kill gravity and friction bias.

Hitting the torque limit means you asked for a move the motor cannot make in that time. Soften the setpoint with a trapezoid rather than detuning the PID until a position step no longer saturates. A 0.5 m step on a lightly damped joint is useful in a solver, less useful as a commissioning procedure.

A good response: one overshoot, ζ-like decay, settled in well under a second. Buzz means Kd is feeding back quantisation. A constant sag is Ki too small for gravity. Torque saturated for most of the move then an overshoot means the step is too large for the budget — not a reason to remove D.

Vehicle cruise control: a medium lag with a driver in the loop

Longitudinal speed with drivetrain lag is FOPDT at the fidelity this article needs. The cruise example uses K = 0.6 per percent throttle, τ = 12 s, L = 0.6 s, a step from 20 to 27.8 (100 km/h if you read the step as m/s), throttle 0–100 percent. L/τ = 0.05. PI is the industry default; a little Kd = 1 helps the first peak if speed is already filtered by the ABS/ESC stack.

Disturbances dominate cruise more than the setpoint step. A hill is a load step. Integral must exist or the car holds a constant speed error on a grade; too much integral produces a throttle hang and a lunge. Anti-windup matters when you sit on 100 percent throttle on a steep hill; without it, the car overspeeds when the grade ends.

A good cruise step: throttle comes up, speed follows with a delay under a second, overshoot is a km/h or two, then a quiet hold. Pitch oscillation means Kp is high relative to the 0.6 s lag. Do not paste the oven’s Kd = 25 here; the time scales differ by two orders of magnitude.

Tuning habits that transfer — and ones that do not

A few rules survive contact with all of the plants above.

  • Identify K, τ, L at the operating point you care about, then pick structure from the table.
  • Use PI on noisy, fast loops (flow). Use PID on quiet loops with meaningful dead time (ovens, HVAC, hydronic) and on underdamped mechanics (joints).
  • Always bump with the real uMin/uMax. Cold starts and large fills exist to saturate you.
  • Put derivative on measurement, filter it, and set Kd = 0 without guilt when the PV is noisy.
  • Judge the step test on the plant’s own clock: 2 s for the motor, 20 s for flow, a few minutes for pressure and cruise, tens of minutes for thermal loops.
  • Do not transfer Kp across engineering units. Compare the dimensionless product Kp K.

Lambda (internal model control) tuning is a defensible default on FOPDT. Choose λ ≈ max(τ, 3L), then

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

and add Td ≈ L/2 only when the sensor can stand it. On the oven a λ = 120 s PI is slower than the library PID, which is the point: robustness first. On the flow loop Lambda PI lands near the library gains if λ is a couple of seconds. On the motor, L = 0 needs a small fictitious delay or you compute an infinite Kp. Ziegler–Nichols will suggest a derivative you must delete on flow, and it will be more aggressive than most product engineers accept on an oven.

Working the examples in PID Solver 360

Load each plant, make one change, and watch the metric that matters on that class of loop. Start with the DC motor to see a lag-dominated, high-K servo on a 6 s chart. Open the flow case and raise Kd from 0 until the valve trace is uglier than the PV. The tank level fill from 0.5 m to 2.5 m is where you prove anti-windup. The temperature example is the place to practise a long-horizon PID with L = 15 s and a heater that cannot cool. Pressure, HVAC, hydronic, robot, and cruise in the same library complete the set.

If you substitute your own plant, keep the units honest. K must be in PV units per OP unit, τ and L in seconds, and dt at least ten times faster than the closed-loop rise you hope to achieve.

PID remains a short equation. The engineering is matching it to an oven that only heats, a valve that sticks, a motor that hits 24 V, a room that takes ten minutes to tell you that you were wrong, and a joint that will ring if you withhold damping. Treat each application as its own plant class, tune on its own time scale, and the same three terms become a set of working loops.

Try it in the solver

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

Launch PID Solver 360