How to simulate instrumentation: transmitters and controllers on the canvas
Field instruments are first-class wireable nodes here, not annotations. A **flow transmitter** and a **pressure transmitter** sit in the line, pass their stream through completely unchanged, and report their reading on a **signal wire** — a distinct edge kind that carries information rather than material — to a controller. In this let-down station the FT reads the **200 mol/s** flowing through it and the PT reads the **20 bar** downstream of the control valve. Each controller compares its reading against a setpoint and reports the measurement, the setpoint and its output. **These two controllers are report-only, deliberately.** Neither has an OUTPUT wire, so nothing is written back and the flowsheet solves once — this is the instrumentation and measurement layer on its own. Give a controller an output wire plus an `output_param` and the same machinery becomes a genuine closed loop: the output is written into the manipulated variable and the flowsheet re-converged through a Wegstein outer loop. **Bounded:** a signal edge never carries material, so it can never affect a mass or energy balance — which is exactly why a transmitter is safe to insert anywhere in a working flowsheet. The steady-state controller is proportional by default and therefore keeps a genuine offset (it converges the self-consistent operating point, not the setpoint); `integral` removes that offset. Derivative action needs a time history a single steady-state solve does not have.
- 1Open the ready-made model
Open the "Instrumentation: transmitters and controllers on the canvas" model in the MaximaLabs workspace — no install, no license. It loads live on the canvas, ready to edit and run.
- 2Confirm the thermodynamics
This process is modeled with the PENG-ROBINSON property package over methane, ethane — already selected, so the phase equilibrium and enthalpy are physically consistent from the first run.
- 3Review the flowsheet
The flowsheet chains FT, CV, PT, 2× PIC. Every block is a real, solvable unit op you can reconfigure on the canvas.
- 4Run the simulation
Click Run. The deterministic solver converges the material and energy balances (recycles included) and fills the live stream table — the AI never invents a number.
- 5Read the results and iterate
Inspect the converged streams, tweak a spec, and re-run — or ask the AI copilot to explain a result or diagnose a failed solve in plain English.
- Thermodynamics
- PENG-ROBINSON
- Components
- methane, ethane
- Unit operations
- FTCVPT2× PIC
Opens live on the canvas — free, no install.
Explore the model & flowsheetFrequently asked questions
- What does the Instrumentation: transmitters and controllers on the canvas model simulate?
- Field instruments are first-class wireable nodes here, not annotations. A **flow transmitter** and a **pressure transmitter** sit in the line, pass their stream through completely unchanged, and report their reading on a **signal wire** — a distinct edge kind that carries information rather than material — to a controller. In this let-down station the FT reads the **200 mol/s** flowing through it and the PT reads the **20 bar** downstream of the control valve. Each controller compares its reading against a setpoint and reports the measurement, the setpoint and its output. **These two controllers are report-only, deliberately.** Neither has an OUTPUT wire, so nothing is written back and the flowsheet solves once — this is the instrumentation and measurement layer on its own. Give a controller an output wire plus an `output_param` and the same machinery becomes a genuine closed loop: the output is written into the manipulated variable and the flowsheet re-converged through a Wegstein outer loop. **Bounded:** a signal edge never carries material, so it can never affect a mass or energy balance — which is exactly why a transmitter is safe to insert anywhere in a working flowsheet. The steady-state controller is proportional by default and therefore keeps a genuine offset (it converges the self-consistent operating point, not the setpoint); `integral` removes that offset. Derivative action needs a time history a single steady-state solve does not have.
- Which thermodynamic method does it use?
- The PENG-ROBINSON property package, over methane, ethane — already selected. You can switch the method on the canvas before running.
- Which unit operations are in the flowsheet?
- It chains FT, CV, PT, 2× PIC. Every block is a real, solvable unit operation you can reconfigure, add to, or remove.
- Do I need to install software or buy a license?
- No. Instrumentation: transmitters and controllers on the canvas runs entirely in your browser on MaximaLabs — free, no install, no license. Open the model to load it live and run the deterministic solver.
More guides like this
Pressure-controlled cooling-water header
A distribution header held at pressure by a control valve, rather than a valve with a pressure typed into it. A pressure transmitter reads the header downstream of the distribution line, a controller compares it with the 4.5 bar setpoint, and its output is written back into the valve — the flowsheet is re-converged until the manipulated variable and the measurement agree. What makes it a real loop rather than a tautology is the line between them. The transmitter sits 180 m downstream, so the valve cannot simply be set to the setpoint: it has to sit above it by exactly whatever the line is losing, and the controller has to find that. Solved here, it lands at 462.1 kPa at the valve for 450.0 kPa at the header — a 12.1 kPa line loss it was never told about — in 5 control passes. The controller runs in integral mode, so the steady-state offset a proportional-only controller would leave is driven to zero: the header sits at the setpoint to the last significant figure, not near it. One detail worth copying if you build your own: the pipeline carries an explicit molar_mass. Darcy-Weisbach needs mass density and ThermoPkg.density returns mol/m³, so a line without it inflates its pressure drop by roughly 1/M — about 55x for water. It warns, but the warning is easy to miss, and 12 kPa became 587 kPa while this example was being built. Bounded: steady state, so this finds the operating point a controller settles at, not the transient getting there — no overshoot, no settling time, no derivative action. Those live in the dynamic engine. The consumer splits are fixed fractions, so this demonstrates pressure control, not flow redistribution when a user throttles.
Organic Rankine Cycle — marine diesel exhaust waste-heat recovery
A closed R245fa Rankine loop recovers waste heat from a heavy marine diesel engine's exhaust: a two-stream boiler vaporizes the working fluid against the hot exhaust gas, a real isentropic-efficiency turbine expands it to shaft power, an ambient-cooled condenser returns it to saturated liquid, and a pump restores boiler pressure. The exhaust-gas composition is a representative combustion-product mix (N₂/CO₂/O₂/H₂O), not a specific engine's measured flue analysis.
Flue-gas desulfurization: venturi wet scrubber
A coal/oil-fired power-plant stack gas (SO₂ in a hot N₂/CO₂/O₂/water flue) is cleaned in a high-energy venturi wet scrubber before the stack — the classic flue-gas-desulfurization (FGD) front end. The new venturi_scrubber unit op accelerates the gas through a throat where injected scrubbing water is atomized, and a stated fraction of the soluble SO₂ is absorbed into the drops and carried out as a slurry while the cleaned gas goes up the stack. Two cited pieces are computed: the momentum-exchange pressure drop ΔP = ρ_L·(Q_L/Q_G)·v_gt² (Calvert 1968; de Nevers — the L/G here is ~1.4 L/m³ and the throat runs 90 m/s, giving ~11 kPa, a real high-energy venturi), and the SO₂ removal (92% at this water rate) that drops the stack SO₂ to a fraction of the inlet.
Rankine steam power cycle (pump -> boiler -> turbine -> condenser)
The classic steam power cycle behind most of the world's electricity, on the rigorous IAPWS-97 steam properties. Feedwater is pressurized by a boiler-feed pump, fired to superheated steam in the boiler, expanded through a steam turbine to make shaft power, then condensed back to water in the surface condenser. The four Rankine components appear in order, and the numbers are the real thermodynamic ones: at 60 bar / 500 degC steam expanding to a 0.1-bar condenser vacuum the turbine makes ~18 MW of shaft work at 85% isentropic efficiency, the exhaust leaves the turbine as wet steam (~92% quality, the classic low-pressure blade-erosion concern), the condenser rejects ~40 MW to cooling water, and the feed pump costs only ~0.15 MW (the small back-work ratio that makes the Rankine cycle practical, since pressurizing a liquid is nearly free next to expanding a gas). Cycle thermal efficiency comes out ~28%. Every property (the superheat enthalpy, the isentropic expansion endpoint, the exhaust steam quality) is the real IAPWS steam-table value, not a correlation.
Desiccant rotor HVAC — three-stage low-grade heat recovery
A desiccant dehumidification rotor whose regeneration air is preheated by three low-grade heat sources in ascending temperature order: a PVT (photovoltaic-thermal) collector loop at 40 °C, condenser heat rejected by the chiller at 50 °C, and a district-heating return at 55 °C. Cascading them warmest-last is the whole point — each coil lifts the air as far as its own source can reach, so the 55 °C district return is spent only on the final lift instead of being wasted on air that is still at ambient. Every coil leaves a 5 K approach at its hot end, which is what makes this solvable: a cold stream can never leave an exchanger hotter than the hot stream entering it, and in a series train each coil's outlet is the next one's inlet, so a target that looks reasonable in isolation becomes impossible two units downstream. The hot-side flows are sized so the water gives up its duty over a modest ΔT and stays above the air at the cold end as well — specifying the approach alone is not enough if the heat-capacity flow rates don't support it. The rotor's two halves are custom_block equation blocks (the regen side and the process side), and the process air is finished to a 16 °C supply condition by the evaporator coil.
Steam utility island: deaerator, boiler, desuperheater
The three units that stand between raw makeup water and steam a turbine can accept, on the IAPWS steam tables. The deaerator takes 500 mol/s of 300 K makeup and 40 mol/s of LP steam and returns 540 mol/s of saturated liquid at 5 bar (425 K) for 3.23 MW. It is a direct-contact heater, so the heating steam does not leave — it condenses into the feedwater and shows up in the outlet flow. That is the point of the unit: the reason a plant heats feedwater by injecting steam into it rather than through a tube bundle is that boiling the water is what strips the dissolved oxygen out of it. The boiler then absorbs 26.6 MW into the water and fires 31.3 MW to do it — the gap is the stack loss, and it is the number a fuel bill is written against, not the absorbed duty. The desuperheater takes that 720 K steam down to a 660 K target by spraying 25.96 mol/s of water into it. The spray rate is SOLVED, not specified: you state the temperature you want and the unit finds the water that achieves it, which is how an attemperator is actually specified. Note the outlet is 566 mol/s, more than entered it, the spray water becomes steam. Bounded: the deaerator is an equilibrium model, so it reports no rate-based O₂/CO₂ stripping (there is no residual-oxygen ppb number here, which is what a real deaerator is guaranteed on), and the desuperheater assumes the spray fully evaporates.