Drum level swinging on a live OPC UA boiler: a feedwater problem, or control doing its job?

Found on live data · Boiler house (public OPC UA server) · 2026-10-27

Insulated pipework and green feedwater pumps in an industrial boiler room
A boiler room with feedwater pumps (not the simulated boiler in this case). Photo: Press service of the Governor of Tula Oblast, CC BY 4.0.
The question

The drum level keeps swinging and early live checks flagged a possible feedwater supply problem. Is the supply failing, or is the level and feedwater control doing its job?

The answer

No feedwater supply problem. The level controller answers every change in drum level at once, the feedwater flow follows its setpoint to within 0.002, and every time the level dipped below its limit the feedwater was at its highest. Steam flow is close to zero: the boiler is idling. The swings are the disturbance the loop is correcting.

An alarm on one signal is a question, not an answer. InduQT read the whole control loop and found the supply healthy: when the level dipped, the feedwater was already at full stretch.

Replay the data

Every reading below came in live through InduQT’s OPC UA connector from the public OPC UA sample server at opcua.demo-this.com (Sample boiler #1), and this is InduQT’s own replay of it: press Play, or click a numbered marker to jump to that moment. Times are UTC.

Replay of the real readings. Press Play, drag the slider, or click a numbered marker. Zoom into the close-up to see 5-second readings. Times are UTC.

27 Oct 18:37StepZoomShowing all 5½ hours
Key momentsClose-up

Each strip is one signal (click its name to show its trend):stronger = more (level further from setpoint, controller working harder, feedwater off its setpoint, steam load)drum level beyond its ±1.5 limitthe 5-second close-up

At 18:37:55 UTC
Drum level (LIX001)
-1.70
Level controller output (LCX001): 1.69 · Feedwater off its setpoint: 0.001 · Steam flow (FTX002): 0.006
2. Level below −1.5, feedwater at its highest

A single 5-second reading of −1.70 crosses the drum-level limit. In the same reading the feedwater flow is 0.72, its highest: the loop is already pushing water in.

Static charts of the same readings
5-second close-up16:3017:0017:3018:0018:3019:0019:3020:0020:3021:0021:3022:001-1Drum level (LIX001)1-1Level controller output (LCX001)10Feedwater flow (FTX001)00Steam flow (FTX002)
Sample boiler #1, 16:30–22:01 UTC, 40-second averages
5-second close-up18:3018:3518:4018:4518:5018:5519:0019:0519:102-2Drum level (LIX001)2-2Level controller output (LCX001)10Feedwater flow (FTX001)
Close-up of the stop, 5-second averages

What happened, minute by minute

  1. 16:30 Five tags mapped from the OPC UA server: drum level, feedwater flow, flow setpoint, level controller output, steam flow.
  2. 18:37 Drum level reads −1.70, past its −1.5 limit. In the same 5-second reading, feedwater is at 0.72, its highest.
  3. 18:47 An early live check sees the level fall and flags a possible feedwater supply problem.
  4. 19:40 With more data, live checks call it a process upset to watch, with no alarm.
  5. 20:08 Highest 40-second average of the evening: drum level +0.73.
  6. 22:00 InduQT’s diagnosis on the full 5½ hours: supply problem unlikely, decision normal.

What the data shows

The control chain is tight

The level controller output moves with the drum level at once (correlation −0.93, no lag), the flow setpoint follows the controller (0.995), and the feedwater flow stays within 0.002 of its setpoint for the whole 5½ hours.

When the level dipped, feedwater was already pushing

Every time the drum level went below −1.5 in the 5-second readings, the feedwater flow was at or near its highest (around 0.7). A supply problem looks the other way round: level and feedwater falling together.

The boiler is idling

Steam flow stays between 0.001 and 0.01 (scaled) all evening. There is no load swing for the loop to chase.

Fast swings, small averages

Reading by reading the drum level jumps between −1.8 and +1.9, but 40-second averages stay within ±0.8. Real drum water cannot move that fast while feedwater holds steady; this is transmitter noise in the simulation, and the reason single readings tripped the early checks.

Likely causes and the check for each

Most likely

Level disturbance corrected by a working control loop

Controller, setpoint and feedwater all respond correctly and at once; the level returns to its average every minute or so.

Check: On a real boiler: compare the drum level transmitter with the gauge glass, and confirm the swings are visible on both.

Possible

Loop tuning

The level still swings around its setpoint. On a real boiler this would be worth a look once the load is known.

Check: A small step test on the feedwater valve, comparing the response with the controller’s tuning.

Unlikely

Feedwater supply problem

Feedwater never fell below its setpoint and was at its highest whenever the level was lowest.

Check: If alarms repeat: feed pump discharge pressure and current, and the deaerator level.

Data, decision, judgement

Three different jobs, and InduQT does each one deliberately.

1. Data

Browse the OPC UA server, map five tags, done

InduQT connected to a public OPC UA server, browsed its address space and mapped drum level, feedwater, setpoint, controller output and steam flow: the whole control chain, not just the alarm point. Every reading is kept, down to 5-second detail.

2. Decision

Early checks asked; the full picture answered

When a single reading crossed the drum-level limit, early live checks flagged a possible feedwater supply problem. As the data built up they eased to “process upset, watch” with no alarm. InduQT’s diagnosis on the full evening rated a supply problem unlikely and the decision engine classed the period normal: no call-out for a pump that was working.

3. Judgement

The engineer sees the loop working in seconds

In the replay, controller output, setpoint and feedwater move together with the drum level. One look at the close-up shows feedwater rising whenever the level dips, which is the loop doing its job. The diagnosis’s next check, look at the steam demand, settles the rest: the boiler is idling.

InduQT’s answer, in its own words: “The control system is actively responding; a direct feedwater supply problem is unlikely (low likelihood) and the decision engine classed the period as normal. Next check: the steam demand profile and the gauge glass against the measured drum level.”

What this case made better

  • Live checks now only call something a fault when they can show the cause behind it; otherwise they report “insufficient data” and the check to run.

The moral of the story

  • An alarm on one signal is a question. Read the whole loop: level, controller, setpoint, flow and load.
  • Supply problems and control swings look different: in a supply problem level and feedwater fall together; here feedwater rose every time the level fell.
  • Ask whether a change is physically possible. Water in a drum cannot jump from −1.8 to +1.9 in five seconds while feedwater holds steady.
  • Data, decision and judgement: early checks can ask, the full analysis answers, and the engineer confirms it in the replay.

Watch this feed liveTroubleshoot your own feeds with Claude

Data: the public OPC UA sample server at opcua.demo-this.com (Sample boiler #1), public test server, OPC Labs. The readings shown are a saved copy taken when this case was written, so the page stays complete after live data is purged. The boiler is a simulation on a public OPC UA test server, so its values are scaled and its noise is the simulator’s. The method is the one InduQT uses on real boilers.