Loading header...

BACnet/IP - Building Automation over Ethernet

BACnet/IP is the IP-network version of BACnet, the protocol used in building automation systems. If Modbus is common around meters, drives, and factory devices, BACnet is common around HVAC, chillers, air handling units, variable air volume boxes, lighting panels, access systems, and building management systems.

BACnet does not start with registers. It starts with objects: analog inputs, binary outputs, schedules, calendars, trend logs, device objects, alarms, and loops. That makes it more descriptive than Modbus for building systems.


Learning Objectives

By the end of this lesson, you should be able to:

  • Explain why BACnet is object-oriented rather than register-oriented.
  • Identify where BACnet/IP sits in the communication stack.
  • Recognize common BACnet object types and services.
  • Understand device discovery with Who-Is and I-Am.
  • Compare BACnet/IP with Modbus TCP and BACnet MS/TP.
  • Troubleshoot common BACnet/IP addressing and integration problems.

Where BACnet/IP Fits

BACnet was created for interoperable building automation. BACnet/IP carries BACnet messages over UDP/IP, normally on UDP port 47808 (0xBAC0).

flowchart TD classDef app fill:#dbeafe,stroke:#2563eb,color:#1e3a5f classDef udp fill:#dcfce7,stroke:#16a34a,color:#14532d classDef net fill:#fef9c3,stroke:#ca8a04,color:#713f12 classDef link fill:#fee2e2,stroke:#dc2626,color:#7f1d1d B["BACnet Application\nObjects, services, alarms, schedules"]:::app U["UDP\nUsually port 47808"]:::udp I["IP\nSubnet addressing and routing"]:::net E["Ethernet or WiFi\nBuilding network"]:::link B --> U --> I --> E

BACnet/IP is not just "Modbus with different register numbers." It has a richer application model and standardized object types.


BACnet Objects

Each BACnet device exposes objects. An object has a type, an instance number, and properties.

Object type Example Important properties
Analog Input Supply air temperature presentValue, units, statusFlags
Analog Output Cooling valve command presentValue, priorityArray, relinquishDefault
Binary Input Filter differential pressure switch presentValue, activeText, inactiveText
Binary Output Exhaust fan command presentValue, priorityArray
Multi-state Value Occupancy mode stateText, presentValue
Schedule Office hours weekly schedule, exception schedule
Trend Log Temperature history log buffer, interval, record count
Device Controller identity object name, vendor, protocol revision

Object addressing is commonly written like this:

Device 1201
  analogInput:3      Supply air temperature
  analogOutput:7     Cooling valve command
  binaryOutput:2     Fan enable

Services - What BACnet Devices Do

BACnet services are operations performed on objects.

Service Purpose
Who-Is Ask "which BACnet devices are on this network?"
I-Am Device replies with its device instance and address
ReadProperty Read one property from one object
ReadPropertyMultiple Efficiently read many properties
WriteProperty Write a command or configuration property
SubscribeCOV Subscribe to change-of-value updates
ConfirmedEventNotification Send alarms and events
TimeSynchronization Synchronize controller clocks

Discovery Example

sequenceDiagram participant BMS as BMS Workstation participant AHU as AHU Controller participant VAV as VAV Controller BMS->>AHU: Who-Is BMS->>VAV: Who-Is AHU-->>BMS: I-Am device 1201 VAV-->>BMS: I-Am device 2304 BMS->>AHU: ReadProperty analogInput:3 presentValue AHU-->>BMS: 18.6 degC

Command Priority

BACnet outputs use a 16-level priority array. A lower priority number is stronger. This prevents a schedule, operator command, smoke-control sequence, and normal control loop from fighting invisibly.

Priority Typical use
1 Manual life safety
2 Automatic life safety
5 Critical equipment control
8 Manual operator command
10 Normal automatic control
15 Scheduling
16 Default command

If a value is written at priority 8, a weaker priority 15 schedule cannot override it. To release the operator command, the system writes NULL at priority 8.


BACnet/IP Networks and BBMDs

BACnet discovery often uses broadcast messages. Routers normally do not forward broadcasts between IP subnets. A BBMD (BACnet Broadcast Management Device) forwards BACnet broadcasts in a controlled way so discovery can work across subnets.

flowchart LR classDef net fill:#fef9c3,stroke:#ca8a04,color:#713f12 classDef dev fill:#dbeafe,stroke:#2563eb,color:#1e3a5f classDef b fill:#dcfce7,stroke:#16a34a,color:#14532d subgraph A["Subnet A"] BMS["BMS workstation"]:::dev BB1["BBMD A"]:::b end subgraph C["Subnet B"] BB2["BBMD B"]:::b AHU["AHU controller"]:::dev end BMS -->|"Who-Is broadcast"| BB1 BB1 -->|"forwarded BACnet broadcast"| BB2 BB2 --> AHU

Without correct BBMD configuration, devices may work by direct IP address but fail to appear during discovery.


Worked Example - Reading a Temperature

Suppose a BMS must read the supply air temperature from AHU controller device 1201.

  1. Discover the device using Who-Is or configure its IP address directly.
  2. Read the device object name to confirm identity.
  3. Read analogInput:3 presentValue.
  4. Read analogInput:3 units and statusFlags.

Example result:

Property Value Meaning
presentValue 18.6 Current measured value
units degreesCelsius Engineering unit
statusFlags inAlarm=false, fault=false Value is usable

Do not assume the numeric value is Celsius unless the units property confirms it.


BACnet/IP vs Modbus TCP

Feature BACnet/IP Modbus TCP
Data model Objects and properties Coils and registers
Discovery Native Who-Is / I-Am Usually manual
Typical domain Building automation Industrial devices, meters, drives
Transport UDP/IP TCP/IP
Events and alarms Native Vendor-specific or polled
Scheduling Native object model Usually application-specific
Security BACnet/SC for secure deployments Modbus Security or external VPN/TLS

Practical Checks

  • Confirm every BACnet device has a unique device instance number.
  • Check UDP port 47808 unless the site intentionally uses another port.
  • Verify BBMD settings when devices are on different IP subnets.
  • Read object units and statusFlags; do not trust presentValue alone.
  • Check priority arrays when an output refuses to change.
  • Keep BACnet/IP on a controlled building network segment, not an open office LAN.

Common Mistakes

  • Treating BACnet objects like fixed Modbus registers.
  • Reusing the same BACnet device instance in two controllers.
  • Forgetting that broadcasts do not cross routers without BBMD support.
  • Writing to an output at high priority and never releasing it.
  • Ignoring units, reliability, and status flags.
  • Assuming BACnet/IP is secure just because it uses Ethernet.

Summary

BACnet/IP is the dominant open protocol for building automation over IP networks. Its strength is the object model: devices describe temperatures, commands, alarms, schedules, and trends using standardized object types and services. Good BACnet integration depends on unique device IDs, correct discovery, careful priority handling, and attention to units and status flags.


Further Reading

  • ASHRAE Standard 135 - BACnet.
  • BACnet International - BACnet basics and interoperability resources.
  • ASHRAE guidance on BACnet Secure Connect (BACnet/SC).
  • Vendor integration manuals for BACnet object lists and point maps.

Mind Map

mindmap root((BACnet/IP)) Core concept Building automation protocol Objects and properties UDP port 47808 Applications HVAC Chillers Lighting BMS and alarms Calculations Device instance unique Priority 1 strongest Priority 16 weakest Design rules Use BBMD across subnets Read units and status Release priority writes Practical checks Who-Is and I-Am ReadPropertyMultiple Check statusFlags Common mistakes Duplicate device IDs Missing BBMD Stuck priority command