The evaporator that cooks for days and cleans itself in hours.
A five-effect dairy evaporator concentrates product around the clock: under vacuum, against steam, through a hundred automated valves and two dozen pumps. And when the run ends, it washes itself in place: caustic, acid, sanitizer, rinses, sprayballs, all sequenced automatically. We've engineered these systems down to the word level, including migrating this one from a legacy PLC-5 to ControlLogix and PlantPAx, where the entire sequence lives as data you can read: one table, one row per step.
One machine, two jobs: make product, then prove it's clean.
CIP (clean-in-place) means the plant is washed without taking a single pipe apart. A four-tank CIP skid supplies the evaporator: rinse water, recovered rinse, caustic, and acid, dosed to strength, heated to temperature, pushed through every product path, and verified by conductivity before a drop goes to drain.
The whole sequence is data. The ladder just plays it.
Every step of every mode owns a 64-word block of DINTs: a chunk. One pointer move copies the active step's chunk into evaluation, and from there the decode is mechanical: bits become valve and pump commands, whole words become PID setpoints and VFD velocity references. To change the process, you change the table; the ladder never moves.
A chunk per step
Each step is 64 DINTs: six bit-packed "peg words," a step-time preset, and fifty-plus engineering values. The sequencer computes a pointer (step number times block length, clamped to the array) and copies that block into SeqData_Active. The active chunk is the state of the plant.
COP(Mode[ptr], Active[0], 64)Bits become valves
Peg words 0–5 carry 192 pins, each hard-mapped to one output: CIP skid valves, tank feeds, divert valves, dosing pumps, vacuum and discharge pumps, even PID-enable and peer-PLC handshake bits. The decode is a rack of one-bit rungs: examine the pin, command the device. Nothing else touches an output.
XIC(Active[0].21) → FV121.PCmd_OpenWords become setpoints
Whole DINTs in the same chunk are engineering values: supply temperature for the steam heat exchanger, tank fill levels with deadbands, pressure and flow setpoints for a dozen PIDE loops, and velocity setpoints written straight to the VFDs, like word 58 driving the CIP supply pump's speed reference every step.
MOV(Active[58], PP210.PSet_SpeedRef)The chart is the program
The chunks are authored in the pinning chart: a workbook with one sheet per mode, one row per step, one column per pin and setpoint. A macro downloads the arrays to the ControlLogix over RSLinx. Process engineers tune the sequence; nobody edits ladder to do it.
Excel → download → ControlLogixNine modes take it from cold steel to clean steel.
The operator picks a product and presses start. Everything after that (pulling vacuum, establishing water recirculation, bringing on steam, production, and the wash that follows) is the same engine walking different tables.
Fifty-plus steps of chemistry, verified as it runs.
The skim CIP recipe, straight from the running system. Timed steps run their clock; quality-gated steps also wait for proof (a conductivity target hit, a tank level made, a flow confirmed) before the engine pins the next chunk.
Steps advance on proof
Every step carries its own advance criteria in the chunk: a timer preset in word 6, plus thresholds like "return conductivity at or below the reclaim target" in words 43–44. Debounce timers keep a splash of rinse water from faking a clean signal. Steps that can't prove themselves don't pass.
Sub-sequences overlay the main one
Sprayball forward/reverse and chemical dosing run as their own little step engines with their own chunk arrays. Their active chunks are OR-ed bitwise with the main chunk before the device rungs, so a dosing overlay can hold a feed valve open while the main sequence keeps walking, and the HMI shows both banners at once.
Pause without losing your place
A paused system freezes step timers and advancement while every device holds its pinned state. Because the state is the chunk, pausing is trivial and resuming is exact. Branch steps jump the step number directly, so recovery paths and re-washes reuse the same table rows.
A complex sequence you can put your finger on.
One workbook, one sheet per mode, one row per step, one column per pin. Reading across a row tells you exactly what the plant is doing in that step; reading down a column tells you the life story of one valve through the whole wash. That's the entire engineering interface to a 50-plus-step sequence.
| Step | Description | Peg W0 | Peg W1 | Peg W2 | Time s | Supply °F | Lvl SP % | VFD Hz |
|---|---|---|---|---|---|---|---|---|
| 05 | Pre-Rinse Started · Reclaimed Water | 90 | 160 | 50 | 45.0 | |||
| 09 | Caustic Load Step · Pre-Wash | 3 | 160 | – | 30.0 | |||
| 12 | Recirculating Caustic (Pre-Wash) | 720 | – | – | 52.5 | |||
| 15 | Rinse to Drain Reclaim Water | 480 | 160 | 50 | 45.0 | |||
| 26 | Caustic Wash | 360 | – | – | 52.5 | |||
| 30 | Spray Subsequence on Caustic | 0 | – | – | 48.0 | |||
| 46 | Recirculate Sanitizer with Spray | … | … | … | 600 | – | – | 42.0 |
Three details make this chart more than documentation. It downloads itself: a macro writes the arrays straight into the ControlLogix, so the sheet and the PLC can never quietly disagree. It carries its own history: every row keeps the reference pin from the original PLC-5 program, so the migration could be verified bit-for-bit against two decades of proven sequence behavior. And it's the single source of truth: commissioning tweaks, new products, changed chemistry: each one is a revision-numbered row edit in the chart, with the ladder untouched.
Under the sequence: four racks, two networks, and a faceplate for everything.
The engine is only as good as the iron underneath it, and the picture the operator gets of it. Both were rebuilt on standards: distributed I/O over EtherNet/IP and the full PlantPAx object library from device to screen.
Distributed I/O
A local ControlLogix chassis plus three remote racks (1756 I/O at the evaporator and CIP skid, FLEX I/O at the far end), all over EtherNet/IP, with per-module comms watchdogs feeding the diagnostics program. Roughly two dozen I/O modules serve ~200 field devices: dozens of analog channels and hundreds of discrete points.
1756 · 1794 FLEX · EtherNet/IPDrives & peer PLCs
VFDs take their velocity setpoints from the chunk; an SMC soft starter sits on the same network as a generic Ethernet module. Peg word 5 even carries handshake pins to neighboring controllers: the plant's receiving and utility PLCs get production/acknowledge signals as part of the same step data as everything else.
VFD · SMC · 3 peer PLCs · MSGA PlantPAx object per device
Every valve, motor, drive, and loop is a PlantPAx Add-On Instruction (sixty-odd solenoid valve objects, a bank of four-state divert clusters, a mix-proof valve, two dozen motors, a dozen PIDE loops), each with its standard faceplate, simulation mode, and alarm shelf. Operators learn one device once and know them all.
P_ValveSO · P_VSD · P_PIDE · P_D4SDHave a complex sequence that's ready for a modern platform?
Evaporators, batching, CIP, legacy PLC migrations: tell us what's running your process today, and we'll show you how we'd make it readable, provable, and changeable again.
Start a conversation