Page review information
Edition covered
ASHRAE 135 — BACnet — exact governing revision not yet recorded
Content status
Reviewed
Coverage
BACnet/IP device integration, discovery, BBMD, and commissioning from a controls-engineering viewpoint; MS/TP wiring, BACnet/SC, and life-safety objects are noted but not covered.
Last reviewed
August 2026
Primary reference
The official published standard — required for final decisions

Confirm the applicable specification revision, device firmware, vendor implementation, network architecture, cybersecurity requirements, and project-specific constraints before applying anything on this page.

Overview

BACnet (ASHRAE 135) is the dominant open protocol in building automation — HVAC controllers, air handlers, chillers, VAV boxes, meters, and building management systems (BMS). BACnet/IP is its Ethernet/UDP transport, using the well-known port UDP 47808 (0xBAC0). A controls engineer from the industrial side typically meets it when a process system must exchange data with facility systems: cleanroom pressure and AHU status into the SCADA, production heat-rejection demands to the chiller plant, or a plant-wide energy dashboard.

The data model is object-oriented: every device exposes a set of objects, each with typed properties. The workhorse objects map naturally to I/O thinking — Analog Input (AI), Analog Output (AO), Binary Input (BI), Binary Output (BO), plus Analog Value (AV) and Binary Value (BV) for internal/software points. Each object is addressed by type and instance number within its device, and the property you almost always want is Present_Value. Reading “AI-3 Present_Value from device 210045” is the BACnet equivalent of reading a register — but discovery, not configuration, is how you normally find it.

Richer object types exist beyond the I/O set — Schedule, Calendar, Trend Log, Notification Class, Loop — which is where BACnet stops looking like a register map and starts looking like a distributed BMS. For point integration you rarely touch these, but knowing they exist explains behavior: a setpoint that changes “by itself” is usually a Schedule object doing its job.

flowchart TD
    BMS[BMS Head-End / Supervisor] --> SW[Building IP Network]
    SCADA[Industrial SCADA or Gateway] --> SW
    SW --> AHU[AHU Controller — BACnet/IP]
    SW --> CH[Chiller Controller — BACnet/IP]
    SW --> RTR[BACnet Router]
    RTR --> MSTP[VAV / Terminal Units — BACnet MS/TP trunk]

Where It Is Used

Network Design

Integration information worth recording before commissioning:

Configuration

  1. Assign IP settings per the building network plan (these are ordinary IP devices; RFC1918 addressing such as 192.168.x.x / 10.x.x.x is typical).
  2. Assign the device instance number from the site plan and set it in the device; confirm it is not the vendor default (many devices ship with a default instance, and two unconfigured devices of the same brand collide).
  3. Set the BACnet network number for each port/link on routers and multi-network devices, per the site network-number plan.
  4. Configure BBMD/FDR where subnets are crossed: enable the BBMD function on one device per subnet, populate matching BDTs on all peer BBMDs, or register isolated devices as foreign devices with an existing BBMD. Verify with the facility integrator — sites often already have BBMDs, and adding an uncoordinated one causes duplicate broadcast forwarding.
  5. Map the points. Discover the device, browse its object list, and record object type + instance + property for every point consumed (e.g., Device 210045 / AI-3 / Present_Value = supply air temp). Point lists from the mechanical contractor are frequently stale — trust the live object list.
  6. Choose COV vs polling. BACnet supports Change-of-Value (COV) subscriptions: the client subscribes to an object and the device notifies on change, which scales far better than polling many points. Support varies by device and by property; where COV is unsupported or subscription counts are limited, fall back to polling at a deliberate rate rather than the driver default.
  7. Mind writable points and priority arrays. Commandable objects (notably AO/BO/AV/BV) use a 16-level priority array; writing Present_Value at a given priority interacts with the BMS’s own commands. Agree priorities with the BMS integrator before writing anything — releasing a command (writing NULL) matters as much as writing it.
  8. Check units and reliability properties. Analog objects carry an engineering-units property and typically a Reliability/Status_Flags indication. Map the units explicitly rather than assuming (metric vs imperial mismatches between facility and process systems are routine), and bring the status flags into the consuming system so a failed sensor reads as failed, not as a plausible frozen value.

Commissioning Checks

Diagnostics

Layer the approach: IP reachability first (ping the device), then BACnet discovery (Who-Is from the same subnet, then across routers), then object/property reads, then subscription behavior. A free BACnet discovery/browse tool (e.g., YABE-class utilities) on a laptop is the standard first instrument — it separates “device unreachable” from “device reachable but head-end misconfigured”.

Wireshark dissects BACnet/IP well, and because the protocol is normally unencrypted UDP, captures are genuinely informative: you can watch Who-Is broadcasts go out and see whether any I-Am returns, watch BBMD-forwarded broadcasts arrive (or not), and read property values in the decode.

bacnet
udp.port == 47808
bvlc

The bvlc filter isolates the BACnet Virtual Link Control layer — where BBMD forwarding, BDT reads, and foreign-device registration are visible, which is exactly the layer that fails on multi-subnet sites. Verify filter names against the Wireshark version in use.

Capture placement matters for broadcast problems: capture on the subnet where the device lives and on the subnet where the client lives — a Who-Is visible on one side and absent on the other localizes the fault to the BBMD path between them.

A workable diagnostic sequence for a missing device:

  1. Ping the device IP; if unreachable, it is an IP/network problem, not BACnet.
  2. Ranged Who-Is from a laptop on the same subnet as the device; if no I-Am, the device’s BACnet configuration (port, enable, instance) is the problem.
  3. Same Who-Is from the client’s subnet; if it now fails, the fault is the BBMD path — capture bvlc on both sides.
  4. Read a known object (Device object properties) directly by address, bypassing discovery; a device that answers directed reads but not discovery confirms a broadcast-handling fault.
  5. Only then debug the head-end/gateway driver configuration.

One political note that saves time: on most sites the building network and its BBMDs belong to the facility or BMS contractor, not the process-controls team. Uncoordinated changes to BDTs or an extra BBMD added “to make discovery work” can break the BMS side. Diagnose with captures and read-only tools freely; change broadcast infrastructure only with the owner in the loop.

Common Faults

Symptom Likely causes First checks
Device discovered locally but not from across a router Missing/misconfigured BBMD, BDT entries not matching between peers, foreign-device registration expired Capture bvlc traffic on both subnets; verify one BBMD per subnet and consistent BDTs; check FDR time-to-live
Two devices intermittently swap identities / values flip between two sources Duplicate device instance numbers (often vendor defaults on new devices) Run discovery and compare I-Am responses per instance; sweep recently added devices for default instances
Device pings but no BACnet response Wrong UDP port (47809+ variants), firewall dropping UDP 47808, BACnet disabled/misconfigured in the device Confirm the device’s configured UDP port; test with a browse tool from the same subnet; check firewall rules
Points read but values frozen COV subscription lapsed after device restart, polling disabled, or stale gateway cache Re-subscribe and watch for notifications in a capture; verify the client re-subscribes automatically
Setpoint writes appear to work then revert BMS writing at higher priority, or command never released at the old priority Read the full priority array of the object; agree priority levels with the BMS integrator
Whole MS/TP trunk of devices missing from the IP side BACnet router down, wrong network number on the router port, MS/TP trunk fault Check router status and network-number config; treat the MS/TP side as a serial bus with its own rules
Broadcast storms / duplicate replies after adding a device Two BBMDs on one subnet, or a device registered as foreign while its subnet already has a BBMD Inventory BBMDs per subnet with the facility integrator; remove the duplicate function
Discovery floods slow the network at scale Unbounded Who-Is (no instance range) across a large site Use ranged Who-Is in tools and head-end drivers; schedule full sweeps outside busy periods
Trust Boundary — Engineering Judgment Required

This site is an independent educational reference for industrial automation standards. It paraphrases and organizes guidance in original language; it is not a substitute for the official published standards, professional engineering judgment, or legal review, and content has not been independently verified against current published editions.

Items marked Review pending await technical review against the identified edition. Items marked Planned have no reviewed source material behind them. Do not rely on this site for compliance determinations, safety-critical design decisions, or legal interpretation.