DDC Workbench Air handler

A single-zone air handler as a live DDC graphic, driven by a function-block program.
The Unit tab is the supervisory screen a tech reads and adjusts — the parameter rail's setpoints commit to the running program; the Wiresheet tab is the control program running it. The workbench commands each output through a real BACnet priority array, on three levels: slot 8 (Manual Operator) for your hand, slot 16 for the sequence, and the Relinquish_Default fallback when both are NULL. The zone is a live thermal model, and the air path is solved psychrometrically station by station — mixing box, heating coil, cooling coil, fan — so the coil ΔT on the graphic is the one the airflow and the load actually produce.

Points not following the program:

    An air handler serving one zone, as a live DDC supervisory graphic A single-zone constant-volume air handler drawn as a DDC supervisory graphic, laid out left to right in air-path order. Outdoor air arrives at the far left, marked by a block arrow, and enters through a fixed louvered intake plate set into the outdoor face of the unit casing; the louver and its slats are drawn in neutral grey line-art. A shielded outdoor-air temperature sensor is bracketed to that same outdoor face at the top of the intake plate: a wide solid roof slab with a shallow gable, then three thick tapering shield plates stacked below it and separated by hairline seams, with the sensing element running down the axis through the stack and its tip protruding below the lowest plate as an open bulb. Just inside the casing an outside-air damper is drawn in amber in a tall narrow frame that spans the full height of the intake opening, top to bottom, with three blades whose angle tracks the commanded position. Return air arrives from the zone at the right, marked by a block arrow at the zone face, and runs leftward along a duct across the top of the drawing; a return-air insertion probe penetrates the top wall of that duct partway along its run, its head sitting above the duct and its stem reaching in toward the centerline. Further left a relief branch tees upward out of the top of the drawing through an amber relief damper, and above that damper a short dashed stem and a block arrow mark air leaving the building. Left of the tee the return duct continues and turns down in a short drop that lands on the top of the casing over the mixing box; an amber return-air damper sits in the throat of that drop in a short wide frame. All three dampers ride one commanded position on a common linkage, so the return blades close as the outside blades open. Inside the casing the stations run left to right, separated by thin section dividers: the mixing box, then a filter rack drawn in neutral grey with three media diagonals, then a hot-water heating coil whose serpentine tube is drawn in the warm heating colour, then a direct-expansion cooling coil whose serpentine is drawn in the cool blue, then the supply fan, whose five blades are filled green around a bright hub and turn while air is moving. The cooling coil carries its refrigerant connections on the entering-air face, drawn in that same blue: off the lower left corner of the coil a wedge-shaped distributor body sits clear of the section divider, outlined in blue and filled with the panel behind it, narrow at its outboard end and widening toward the coil, and four fine feeder tubes fan from its wide face into the coil, two leaving above the body's axis and two below it with none on the axis itself. Each tube curves as it goes, sweeping away from the axis and then flattening to run level where it meets the coil; they land one coil pitch apart. Above them a short horizontal suction stub leaves the top of the serpentine and ends in a short vertical header bar. The heating coil has neither, and no other station on the unit carries a distributor. In the narrow gap between the cooling coil and the next section divider, on the coil's leaving face, a small rectangular switch body sits on top of the casing roof with a round button drawn on its face; from the underside of that body a single fine line runs down into the plenum and folds back and forth in a narrow serpentine, ending short of the casing floor. It is drawn in the same neutral grey line-art as the filter rack and the intake louver. A two-way hot-water control valve with its actuator stem and bar sits on a pair of pipe stubs that pass down through the casing floor beneath the heating coil, drawn in the same warm colour as that coil; each stub ends in a short cross tick marking where the piping continues on to the plant. The mixed-air temperature sensor is drawn as an averaging element: its transmitter head sits on the casing top wall downstream of the mixing dampers and upstream of the filter, and one continuous capillary hangs below it in four full-depth vertical passes that span most of the plenum height, ending in a short clip at the far end. Downstream of the fan the supply duct leaves the casing on the right and runs to the zone, marked by a block arrow at the zone face, and a discharge-air insertion probe penetrates the top wall of that run just clear of the casing. Marching chevrons run along each duct and across the machine's interior to show the air moving, and their colour changes where a coil has conditioned the air. The heating coil, the cooling coil and the supply fan are each drawn as a link into a matching simulator. The casing is tagged AHU-1, and the mixing box and filter stations carry captions beneath them. Nine titled callout boxes stand in the open space around the unit, each tied to its device by a thin leader line that ends in a small dot on that device's outline. Relief damper, tied to the relief damper, reports its commanded position. Return damper, tied to the return-air damper in the drop, reports its commanded position. Return air, tied to the return-air probe head, reports the return-air temperature. Outside air, tied to the outside-air damper, reports the outdoor-air temperature and the damper command. Mixed air, tied to the averaging element head, reports the mixed-air temperature. Heating coil, tied to the hot-water valve body, reports the valve command. Cooling coil, tied to the cooling coil, reports each compressor stage with a state dot in its well. Supply fan, tied to the fan, reports commanded speed, running status and the airflow proof switch. Discharge air, tied to the discharge probe head, reports the discharge-air temperature and, in a blue-framed well, the calculated temperature difference between discharge and mixed air. At the right the zone is drawn as a box with a space-temperature wall plate mounted flush on its far interior wall; the zone box carries two wells of its own, the zone temperature and the cooling setpoint. Every live value in this drawing is repeated as real text in the live-points list below it. RETURN AIR RELIEF AIR SUPPLY ZONE ZONE TEMP 76.0 °F COOLING SP 72.0 °F AHU-1 MIXING BOX FILTER Open the hydronic loop builder Open the refrigerant-loop simulator Open the VFD simulator Outdoor-air temperature sensor — shielded head on the outside of the intake Return-air temperature sensor — insertion probe in the return duct Mixed-air temperature sensor — averaging element strung across the mixed-air plenum Discharge-air temperature sensor — insertion probe in the supply duct Space temperature sensor — wall plate in the zone RELIEF DAMPER CMD 20 % RETURN DAMPER CMD 80 % RETURN AIR RAT 76.0 °F OUTSIDE AIR OAT 80.0 °F DAMPER 20 % MIXED AIR MAT Mixing is fogging — the mixture has crossed saturation, so this is not the plain outdoor-air blend 76.8 °F DISCHARGE AIR DAT 67.0 °F ΔT -9.8 °F HEATING COIL VALVE 0 % COOLING COIL STAGE 1 ON STAGE 2 OFF SUPPLY FAN SPEED 100 % RUN ON PROOF NONE
    Damper Fan Cooling Heating No point
    62.0 °FMeasured 100 %Commanded -7.0 °FCalculated
    Mechanical cooling — clear ΔT across the machine

    Reading this screen

    Reading this graphic — the inks, the chevrons, and the linkage

    What this screen is. The supervisory graphic for a single-zone air handler — the screen a technician opens to see what the unit is doing right now. Air runs left to right: outdoor air at the intake, return air down from the zone, the two streams blending in the mixing box, then the filter, the heating coil, the cooling coil and the supply fan. The chevrons are the air itself, and they change colour where a coil has worked on it.

    How to read it. Every device the program can read or write carries its own colour — dampers amber, the fan green, the heating coil warm, the cooling coil blue — so you can find a device before you read a word. Colour is never the only channel, though: each device is also drawn as the thing it is, which is why the cooling coil carries the small wedge-shaped refrigerant distributor and feeder tubes that no hydronic coil has, and the heating coil carries a two-way valve on the pipes below it. A component drawn in plain grey has no point on it. Values sit in bordered wells tied to their device by a leader line: a green value is something the program is commanding, a plain value is something a sensor is measuring, and a blue value is calculated from the others.

    Three dampers, one command. The outside, return and relief blades all move together, because the point roster carries one damper output and the linkage does the rest — return closes as outside opens, and relief opens with it so the building does not pressurise. That is how a packaged economizer is actually built, and it is why all three commands are annotated rather than just the outside one: the drawn blade angles are what tell you the linkage is doing what the single command asked.

    Not everything on the machine is on the screen. Grey means no point, and there is a difference between the two kinds of grey here. The filter rack and the intake louver have no point because nothing would ever command them. The small device on the cooling coil’s leaving face — a switch body on the casing roof with a button on it, and one thin capillary hanging down across the coil — has no point because nobody landed one, and that is extremely common in the field. It is a hardwired low-limit stat: it opens the fan starter circuit directly, so it can stop this machine at any moment, and the controller will not know. When it does, the fan command on this screen keeps reading exactly what it read before, the verdict tells you a coil is loaded with the fan off, and no amount of staring at the front end gets you further. That is not a gap in the graphic. It is the reason the first thing an experienced tech does with a unit that stopped for no reason is walk out to it and look, and it is why the reset button for that device is on the device. The wire somebody eventually lays across that stat’s terminals so it will stop dropping the unit is a third thing you only ever learn about the same way.

    Drill-downs. The heating coil, the cooling coil and the fan are drawn as links into the simulator behind each device. The same three in text — the tap targets, for a screen where the glyphs render too small to hit: the Hydronic Loop Builder behind the heating coil, the Refrigerant Loop Simulator behind the DX coil, the Mock VFD Interface behind the fan.

    The one number to watch — the ΔT well

    The one number to watch. Read the ΔT well in the discharge callout: it is discharge minus mixed air — the fan sits downstream of both coils on a draw-through unit, so that span covers the fan as well — and it goes negative whenever the unit is removing heat and positive whenever it is adding heat. When a unit stops doing its job, that is the number that collapses toward zero. Everything else on the screen is there to tell you why it collapsed: whether the air is moving, whether a coil is loaded, and whether the number a sensor is reporting is the number the machine is actually seeing. The economizer sequence itself is worked through on the economizers lesson.

    Setpoints — the gap, the deadband, and the customer's hands

    Setpoints and the deadband. The separation between the two setpoints and the deadband are easy to read as one number, and they are not. The SP DIFF well in the rail is the separation — cooling setpoint minus heating setpoint. Nothing sets it: move either setpoint — the rail's fields are live, so try it — and it follows, which is why it is inked blue like the ΔT well rather than the green its two neighbours carry. The deadband is the smaller, separate thing, and it belongs to whichever setpoint is currently active rather than to the pair. On the cooling side it sits above the setpoint: as shipped, with a 72.0 °F cooling setpoint and a 2.0 °F deadband, the stage makes at 74.0 °F and breaks back at 72.0 °F. Here the setpoint is the cut-out, so the zone rides the band above the number on the screen and a degree of drift cannot short-cycle the compressor. That is also why a space of 73.0 °F can sit under a lit stage — between the two edges the call is held by a latch, not by a comparison against the setpoint.

    Two setpoints, and what happens when they overlap. This unit carries a heating setpoint and a cooling setpoint as separate program constants, not one setpoint with an offset — specifically so you can drag them into each other, from the rail or the wiresheet, and watch a unit fight itself. A hot-water valve open under a running compressor is a real field fault: the ΔT goes nowhere, the energy goes everywhere, and nothing on the machine is broken. The graphic calls it out, because reading it off two wells that each look reasonable on their own is exactly the skill worth having.

    Two setpoints in a customer's hands. Put both setpoints on a front end and sooner or later a customer may set the heating setpoint above the cooling setpoint — on purpose, reasoning that cooling means cold, so the cooling number belongs on the bottom. The model is backwards: a cooling setpoint is the temperature above which cooling starts, not a temperature the cooling makes. But allow everyone access to both numbers and you'd be surprised how often they get crossed. That is not an argument for hiding the second setpoint either, because the access that trapped this customer is exactly what the next one is paying for. There is no house answer here, only a design judgement with obligations attached. Get the cooling-versus-heating model right yourself, and then build the graphic toward where the user actually stands: consider who will use the system and what their skill level is. A rural school whose whole front end answers to one custodian is a different job from a large factory campus with a team behind the screen, and not just because the controls are different. And consider adding protections in your logic, or even in the point itself if you have the ability. The programs on this machine leave them out on purpose — to a practiced eye that absence can read as a mistake, but it is the point: the failure has to stay reachable to be worth experiencing. This simulator shows you both postures at once: the rail is the guarded front end, each field clamping to its own range and announcing the catch; the wiresheet is the unguarded side — the same constants with no rails at all, where you can set a deadband the rail would refuse and nothing says a word. Both setpoints stay one keystroke from the plant on either surface, because this is where a mistake is free and can even be fun to see.

    Live points

    The five points with a sensing device on the drawing are buttons — press one to flag its live-value chip in the statusbar and light the annotation it feeds. On a narrow window the list fills out with the rest of the drawing's values — the reading copy for where the drawing's own text runs too small.

    OA damper (commanded) 20 %
    RA damper (commanded) 80 %
    Relief damper (commanded) 20 %
    HW valve (commanded) 0 %
    DX stage 1 (commanded) On
    DX stage 2 (commanded) Off
    Fan speed (commanded) 100 %
    Fan run cmd (commanded) On
    Fan proof (measured) None
    ΔT · DAT − MAT (calculated) -9.8 °F
    Cooling SP (commanded) 72.0 °F

    Controls

    Low-limit stat AT THE UNIT
    NORMAL
    NO JUMPER

    The device the controller cannot see — the stat and the jumper

    That is a real device on the machine and not a point on the controller — which is how a great many of them are actually wired. It sits across the coil face and lands in the fan starter circuit, so when it opens the motor stops whether or not the program ever asked it to, on either sample sequence, and the fan command on the screen above goes on reading exactly what it read before. Nothing on that screen will tell you the stat tripped, because nothing on that screen can know. What you get is a dead machine and a verdict that describes the symptom. The device is drawn on the unit, unlabelled, where the real one lives; finding it is the job.

    The second row on that face is a jumper: a piece of wire laid across the stat’s two terminal screws, so the starter circuit stops passing through the contacts at all. Anybody who has worked on equipment for a while has found one. Nothing about the device changes when the wire goes on — the element still trips on cold air and the row above still reads TRIPPED — the fan simply never hears about it, and the machine runs on through the freeze the stat was there to catch. Take the wire off and the fan drops that instant, on a trip that had been sitting there the whole time. That is the tell worth carrying out of here: a unit that dies the second a jumper comes out was never fixed. It was silenced.

    Scenarios (write slot 8):
    Compressor stage — Y1 / Y2 (slot 8 — Manual Operator)
    20%
    0%
    100%
    20×
    80 °F
    8000 Btu/h
    zone 76.0 °F

    Overrides — forcing inputs vs commanding outputs

    Forcing a sensor is what a stuck or mis-scaled input does in the field: the program keeps sequencing on the number it is handed while the machine does something else entirely. The forced device gets a dashed ring on the drawing, because a forced input that leaves no mark is how a wrong number survives a shift change. Release it and the program sees the machine again.

    The NULL boxes above are the other half of that lesson. Un-check one and your hand lands in slot 8 (Manual Operator), which outranks the sequence writing at slot 16 — the point stops following the program until you write NULL back. Walking away without releasing that slot is how most priority-array trouble starts in the field: months later the point reads "broken" while the sequence writes correctly underneath the stale hand value. And note the two mechanisms are different things — the sensor override forces an input, so the program sequences on a wrong number; a slot-8 write commands an output, so the program keeps computing and simply loses the arbitration. Work the full sixteen slots in the BACnet Priority Array tool, or start from the priority array in BACnet Basics.

    On this screen the wiresheet is a read-through — the live sheet wires with a pointer at desktop width, and the Unit tab stays fully interactive.

    The program driving the unit. The sensed points and the setpoints they run against are on the left, the logic is in the middle, and the outputs are on the right: the damper, the hot-water valve, the two compressor stages and the fan. A few constants and the airflow proof switch sit further in, beside the blocks that read them, because a wire that runs the width of a sheet is a wire nobody can follow. It runs on the unit every tick, and the sequence's setpoints and limits are wells in the parameter rail beside the drawing.

    The two economizer permit conditions, and the minimum position

    Read the economizer permit first, because it is two conditions and not one. A fixed high limit asks whether the outdoor air is cool enough to be worth using at all; a differential comparison asks whether it is cooler than the air already coming back from the building. Either one alone gets a unit into trouble — a fixed limit on its own will open the dampers on a mild humid morning when the return is cooler still, and a differential on its own will open them at ninety degrees just because the building is hotter. Both have to agree before the damper leaves its minimum position.

    The minimum position is the other half of that block. When the economizer is not permitted the damper does not go shut — it goes to the ventilation minimum, because the building still needs outdoor air. That is what the select block below the permit is doing, and deleting it is a fault worth trying: the damper drops to zero, the unit stops ventilating, and absolutely nothing on the graphic goes red.

    Airflow proof — why it gates the coils

    Airflow proof gates both coils, and the ordering is the field's. A discharge sensor sitting in still air reads the room, not the coil — so a low limit behind no proof does not merely fail to trip, it goes blind, reporting a comfortable number while the coil behind it could be anything at all. Break the belt from the scenario row and watch it: the fan command stays on, the blades stop, the chevrons freeze, and the DAT chip climbs to the zone temperature. What is deliberately NOT gated is the fan itself — gate a fan on the proof its own airflow produces and nothing could ever start. Command, status and proof are three different claims, and Status & Proof works through the difference. On a real job you rarely get all three — status is usually the only claim on the screen, so the work becomes deciding whether to believe it. That is what the ΔT well beside the discharge reading is for: a fan reporting ON with no split across a loaded coil is a status that is lying, and the temperatures are what catch it.

    The heating valve — a proportional loop, not a stage

    The heating valve is a proportional loop, not a stage: the error between the heating setpoint and the space runs through a gain and a limit block, so the valve sits wherever it has to sit to hold the space rather than banging open and shut. Watch the authority, with every NULL box checked so the program is in control: driving the outdoor-air slider down opens the valve further to hold the space, and far enough down is where it reaches a hundred percent and the room starts falling anyway. The scenario buttons will not show you this — each one puts its hand on all six outputs, so the valve holds wherever the scenario put it until you write NULL back.

    The low-limits sample — driving two protections

    The low-limits sample splices two winter protections into the same sequence, in series and in different styles: a mixed-air low limit that modulates, and a discharge low-limit stat that trips. The PID watches the mixed-air well against the Min MAT constant — warm mixed air parks its output high, and as the mixing box drags down toward the constant the output winds down with it. The MIN block after the economizer select then takes whichever is less: the position the economizer wants, or the most the low limit will allow. Drive it: outdoor air cold, cooling setpoint pulled below the space — drag it down in the rail — so the economizer opens hard, and the damper command settles well short of open while the MAT chip rides the constant. Colder still and the clamp passes below the ventilation minimum, because the MIN sits downstream of the minimum-position select on purpose. When freeze protection and ventilation argue, this sequence has already picked freeze protection — a real sequence writes that trade down, because someone will eventually ask where the minimum went.

    Where the 38 / 41 pair comes from, and why the spread

    There are two low-limit stats on this machine, and only one of them is on the sheet. The hardwired one is a manual-reset element strapped across the coil face and landed in the fan starter circuit; this unit carries one, set at thirty-eight. The comparator here is the software limit, and it sits three degrees above that, at forty-one — so the program is what acts first, in a way you can watch on the sheet and clear from it, and the hardware element stays the backstop it is meant to be. That pair comes from one engineer’s commissioning practice in the Northeast: the physical stat around thirty-eight, the limit in the program somewhere between forty and forty-two. Treat it as a worked example and not as a rule, because freeze protection is a climate question before it is a setpoint — what drives the number is the design outdoor-air temperature, how much outdoor air the unit takes, and whether there is a wet coil sitting in it. Somewhere warm enough, the argument is whether the stat goes on at all. What travels is the shape: know what your machine can legitimately produce, put the program’s limit above the hardware’s, and set neither by habit. Set this one too low and it becomes decoration — this unit’s two compressor stages bottom the discharge at thirty-five, and nothing in the program would ever see a colder number than that.

    The reason a number down there matters at all is what it says about the rest of the machine, and that part is not regional. If the discharge really is riding the stat, the ductwork is sweating badly and the pressures on that circuit are not pretty — the stat is not trimming a setpoint, it is catching a unit that is already in trouble. Which is the argument for the spread: you would rather the program stopped the machine on a sheet you can read than have somebody find a popped button on a wet air handler.

    A trip, and what holds it

    A trip is the classic freezestat response, all at once: damper driven shut, hot-water valve driven open — water moving through the coil is the protection when nothing else is — and the fan stopped, with the compressor stages falling out on the airflow-proof interlock they already answer to. Then the trap this page keeps circling: the moment the fan stops, the discharge probe reads the room. Watch the DAT chip after a trip — it climbs to a perfectly comfortable number while the machine sits dead, which is exactly why the trip is held by a latch and not by the comparison alone. An unlatched stat would clear itself on its own blindness and bang the fan straight back on. The LLS Reset source is the reset button on the device: click it true and back once the cause is fixed and the machine restarts in order — fan first, proof made, then the loads. Hold it true instead and you have wired the button down: the latch is defeated, and the unit short-cycles on and off exactly as fast as each trip can clear itself.

    The two defeats, told apart

    There are two ways to defeat a low limit on this machine and they are not the same defeat, which is worth being exact about, because they read alike on a work order and look nothing alike on the roof. Wiring that reset input down defeats the latch: the trip still happens, it just cannot hold, so the unit short-cycles — down, clear, back on, down again, all morning. The jumper on the device face defeats the contacts: the trip still happens and still holds, and the fan never drops at all. One machine bangs on and off where anyone can hear it. The other runs straight through a freeze point looking perfectly normal from the front end, which is the more expensive of the two.

    The one-lie walkthrough

    The cleanest way to see all of it is one lie. Open the wiresheet before you start — its first open loads the sheet into the editor the way a download loads a controller, and a download hands a software latch back cleared. Then, on the Unit tab, force the DAT sensor low — the picker option already names what watches it — and the stat takes the machine down the same tick. Now release the force, and nothing restarts: the discharge reads the still-air room number, the set side of the latch is long clear, and the machine stays down waiting for the button. A software stat trusts its sensor with no questions asked, and that cuts both ways. Watch what the hardwired element does during that same experiment: nothing. It is a capillary in the airstream, not a transmitter, so a lie told to the controller never reaches it — and by the same token it would never miss a freeze the transmitter failed to report. Running both is not redundancy for show; it is two different failure stories covering each other.

    Desktop tool

    Wiring blocks on a wiresheet is drag work that wants a pointer and a wide canvas — open this page on a laptop or desktop to edit the control program. The Unit tab reads fine on a phone, and the program keeps running the unit whether or not this sheet is on screen.

    Running
    analog (number) digital TRUE digital FALSE

    Directional only. The coil effects are rough sensible and latent splits for a nominal five-ton, two-thousand-CFM air handler, the damper is linear in its commanded position (real damper flow is not), and the fault presets zero a coil’s work outright to make the tell obvious. A real no-cooling call has more than one cause; the graphic shows you where to look, not what to fix. And take the two defeats here as a demonstration, never as a method: on a real machine that stat is the last thing standing between a wet coil and a cold night, the wire across it is somebody else’s shortcut you have inherited, and a coil that freezes and splits takes the building down with it. This page exists so you have already seen what happens when one comes out. Nothing here replaces the manufacturer’s data or the unit’s own safeties.

    ← All simulators