DDC Workbench Air-side

A DX fan coil 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 setpoint and deadband 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: the coil pulls it down while envelope and internal gains push it up, so the program closes the loop on its own.

Points not following the program:

    A DX fan coil serving one zone, as a DDC supervisory graphic A recirculating direct-expansion fan coil serving one zone, drawn as a DDC supervisory graphic. Return air leaves the zone on the right, travels leftward along the top return duct, and turns down in a short drop that lands on the top of the fan coil cabinet near its left shoulder. The cabinet is drawn with its top wall open where each duct meets it, so the drop's mouth and the supply riser's mouth are both clear openings. Inside the cabinet the air crosses a DX cooling coil and then a supply fan, which pushes it up through the second opening and along the supply duct back into the zone. Directional chevrons march along the ducts, down the drop, and across the coil and fan to show the airflow. Three floating point badges read left to right in airflow order: the return-air temperature beside the drop, then — past the coil — the signed temperature difference across the coil, leaving minus entering, which reads negative while the coil cools the air, then the discharge-air temperature over the fan. The zone box shows the zone temperature and the cooling setpoint; separate labels show the supply-fan status and speed and the compressor stage. The DX coil and the supply fan are drawn as the two sub-devices the graphic can drill into. The cabinet is tagged FCU-1. The sensing devices are drawn where they physically live: a space-temperature wall plate mounted inside the zone on its far wall, a return-air insertion probe penetrating the outer wall of the return drop just below its elbow with its head hanging in the open space to the left, and a discharge-air insertion probe penetrating the top wall of the supply duct downstream of the fan — each activatable to flag its matching live-value chip in the statusbar. RETURN AIR SUPPLY ZONE ZONE TEMP 76.0 °F COOLING SP 72.0 °F FCU-1 Open the heat-pump simulator DX COIL Open the VFD simulator SUPPLY FAN 100% · ON RAT · RETURN 76.0 °F ΔT ACROSS COIL -19.4 °F DAT · DISCHARGE 56.6 °F COMPRESSOR STG 2 · ON Return-air temperature sensor — insertion probe in the return duct Discharge-air temperature sensor — insertion probe in the supply duct Space temperature sensor — wall plate in the zone

    The three points with a sensing device on the drawing are buttons — press one to flag its live-value chip in the statusbar. 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.

    ΔT across coil -19.4 °F
    Supply fan 100% · ON
    Compressor Stage 2 · ON
    Cooling — clear ΔT across the coil

    Program parameters

    Both fields clamp to a per-parameter range and say so — a real front end usually keeps its rails silent, but this is a classroom, so this graphic announces them. Front ends differ on when a typed setpoint takes; this one commits on Enter or on leaving the field.

    Controls

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

    Forcing the sensor is what a stuck or mis-scaled input does in the field: the program keeps staging on the number it is handed while the real space drifts the other way. Trust the graphic reading over a thermometer on the wall and you chase a fault that was never in the equipment. Release the override and the program sees the room 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 stages 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.

    Read the setpoint label knowing which convention the program uses. Here the label is the cut-out: stage 1 makes at setpoint plus deadband and breaks at setpoint — on the wiresheet, y1on into gt1 makes the stage, and the setpoint itself into lt1 breaks it — so the zone rides the deadband above the number on the graphic. Other sequences center the band on the setpoint instead, and neither is wrong: the commissioning question is which side of the deadband you want for this application. One field wrinkle worth knowing — some block libraries fix which side of the comparator the deadband lives on, and you end up expressing a greater-than as a NOT wrapped around a less-than to put the band where the sequence needs it.

    Directional only — the coil effect is a rough sensible split (a ~1.5-ton DX fan coil, nominal 600 CFM), and the fault presets zero the 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.

    The blocked-condenser scenario is the one worth sitting with, because the whole air side keeps reading right: the fan is commanded, the proof switch is made, the chevrons keep marching — only their supply-side tint drops from cooled blue to plain grey — and the ΔT badge settles on the small fan-heat offset and nothing more. What the drawing does tell you is the compressor LED, which goes red: energized, and producing nothing. That pairing is the tell. A clean air side under a red compressor puts the failure on the refrigeration circuit, and this cabinet's graphic stops at the DX coil — heat rejection happens past the edge of it, so nothing else on the screen narrows it any further. That is a real habit to build: when the air side reads clean and the coil is doing nothing, stop interrogating the screen and go look at the refrigeration circuit. These readings cannot separate a plugged condenser from a dead compressor, or from the low-charge fault this panel also carries — they only tell you which side to walk to. That is why the low-charge verdict offers charge as a candidate rather than calling it: the scenario button knows which fault was set, the graphic does not, and a front end that annunciated low charge off these points would be guessing in your name. Open the coil glyph on the graphic and the refrigerant-loop simulator is where head pressure, subcooling and superheat sort those apart.

    One honest wrinkle: the discharge sensor sits after the fan (draw-through), so DAT reads the coil-leaving temp plus about 0.6 °F of fan heat — real motor work the air picks up. It is exactly where a field tech would trim a small calibration offset so the point reports leaving-coil temperature. The fan glyph on the drawing is a link into the Mock VFD Interface — the same drill-down in text, for a screen where the glyph renders too small to hit.

    The ΔT badge is signed: leaving minus entering, so a coil that cools the air reads negative, and a coil that heats it reads positive under the same convention. This cabinet recirculates, so the return air is the entering air — the drawing labels that measurement RAT and the badge is DAT − RAT; where a coil takes in mixed air, entering is the mixed-air temperature and the rule is unchanged. The sign is information, not clutter — it tells you which way the coil is driving the air, before you ask how hard.

    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. Sources (zone temp, setpoint) on the left, logic in the middle, outputs (both cooling stages and the fan) on the right. Pick a sample above, or wire your own — it runs on the unit every tick.

    Worth a look on the single-stage sample: its speed reference stays parked at full speed even while the unit is off — the classic graphic-reading nitpick. Nothing is broken: an AO shows the command, not the state, and the fan-enable BO is what actually stops the motor. The staged samples move the reference with the staging call; this one deliberately leaves it standing.

    On the 2-stage + safeties sample the stages answer to more than the thermostat. Airflow proof comes first: a fan-status BI feeds an AND ahead of the permit, so no compressor may start — and a running one is dropped — the moment the proof switch reports no air moving. Behind that sits a latched DAT low-limit that cuts both stages when discharge air falls below the trip constant, and a minimum off-time that keeps a stopped unit from restaging straight back in. One AND merges those permits into the stage commands.

    Why proof has to come first: a discharge sensor sitting in still air reads the room, not the coil. Stop the air and the low limit 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, and the DAT chip climbs to the zone temperature. The stages hold, though — a scenario is an operator write, and this one left both stages at slot 8, where your hand outranks the sequence. Hand them back with the NULL — released box under Compressor stage and they drop on the next tick: on the proof interlock, not on a discharge reading nobody should trust. Command, status and proof are three different claims — Status & Proof works through the difference.

    Watch the recovery order, because two protections are stacked and they clear in series. A low-limit trip is itself a full stop of the stage command, so it arms the minimum off-timer at the same instant it cuts the stages. The discharge has to climb past the clear constant and the off-timer has to expire before anything restages — so the stages return well after the clear point, not at it. That timer also starts from zero on a program download, which is why selecting this sample stops a running unit and holds it stopped for a spell: a real board serves a minimum off on power-up too.

    Note what that off-timer watches: the sequence's own stop, nothing else. Force the stages off at slot 8 and the compressor stops while the program carries on asking for cooling — the permit chain never sees a stop, so the timer sits at zero and the unit restarts the moment you release. Nothing is broken; the sequence is guarding the stop it knows about. That is the habit worth taking off this page: when you force a point, know what your override is doing to the logic underneath it. The program is still running on its own view of the machine, and you have just changed the machine without telling it. The fan is deliberately outside the permit path — it keeps following the cooling call, so air keeps moving across the coil while the lockout recovers. It has to be: gate the fan on the proof its own airflow produces and nothing could ever start. Force the fan slow under a heavy call and watch the safety act; the same move on the default sample is the freeze dive it exists to answer.

    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
    ← All simulators