What BACnet is, and why buildings use it
BACnet stands for Building Automation and Control Networks. It is a data communication protocol standardised as ASHRAE 135 and ISO 16484-5, designed so that devices from different manufacturers, such as controllers, sensors, drives and the building front end, can exchange information in a common way. Before open protocols, a building tended to be locked to one vendor for life. BACnet is the main reason that is no longer true.
It is worth being clear about what BACnet is not. It does not control anything by itself. The control logic lives in the controllers. BACnet is the language the controllers and the front end use to publish readings, accept commands and report alarms.
The object model: devices, objects and properties
BACnet describes everything as objects. A device, such as a VAV controller, contains a number of objects, and each object represents one thing: a temperature, a damper command, a schedule. Each object has properties, which are the pieces of information about it.
The object types you meet first are analog input, analog output and analog value, and binary input, binary output and binary value. Beyond those are multi-state objects, schedules, calendars, trend logs and notification classes for alarms. Every object has an identifier made of its type and an instance number, such as analog input 3, and a name that is meant to be readable.
The property you read most is Present_Value, the current value. Others you will use constantly are the object name, the units, the status flags that report alarm, fault, overridden and out-of-service conditions, and Out_Of_Service, which when true means the value is being supplied by hand and not by the real input. Commandable objects, such as analog outputs, also have a priority array, which we come back to under troubleshooting.
| Object | Name | Units | Commandable |
|---|---|---|---|
| Analog input 1 | ZN-T (zone temperature) | degrees C | No |
| Analog input 2 | ZN-FLOW (box airflow) | cfm | No |
| Analog output 1 | DMPR-POS (damper position) | percent | Yes |
| Analog value 1 | CLG-SP (cooling setpoint) | degrees C | Yes |
| Binary input 1 | OCC-STATUS (occupancy sensor) | active or inactive | No |
The services: how devices find and read each other
Objects and properties describe the data. Services are the requests you make about it. A few do most of the work.
- Who-Is and I-Am: a device or tool broadcasts Who-Is to ask which devices exist, and each device answers with I-Am, giving its device identifier. This is how a front end or a commissioning tool discovers a network.
- ReadProperty: ask one device for one property of one object, for example the Present_Value of analog input 1.
- ReadPropertyMultiple: ask for several properties in one request, which is far more efficient for a front end polling many points.
- WriteProperty: set a property, for example command an analog output.
- Change of value subscription: ask a device to send an update only when a value changes by a set amount, instead of being polled all the time.
Worked example: finding a zone temperature on a new network
Suppose you have connected a laptop tool to a BACnet network and need the zone temperature from a VAV controller you have never seen.
Reading one value in four steps
- Send Who-Is. The controllers answer with I-Am. One of them reports device identifier 1201, so you have found a device and learned its instance number.
- Ask device 1201 for its object list, which is a property of the Device object. The list contains analog input 1, analog input 2, analog output 1 and so on.
- ReadProperty on analog input 1, property Present_Value. The device replies 23.4. The object name says ZN-T and the units property says degrees Celsius, so the zone is at 23.4 C.
- Check Status_Flags and Out_Of_Service on the same object before you trust the number. If Out_Of_Service is true the 23.4 is a manually written value and not the real sensor.
The steps, discover, list, read, then check the flags, are the same on any BACnet device from any maker. That repeatability is the point of the standard.
Network types: BACnet/IP, MS/TP and BACnet/SC
BACnet can run over several kinds of network, and a building often uses more than one. BACnet/IP carries messages over ordinary Ethernet and IP networks, typically using UDP port 47808. It is the usual choice between supervisory controllers and the front end. BACnet MS/TP runs over RS-485 twisted pair using a token-passing scheme, and is common for the lower-cost field controllers on a floor, because the wiring is cheap and simple. A newer variant, BACnet/SC, adds secure connections for networks that need them.
Routers join different BACnet networks. Because discovery uses broadcast messages and IP routers do not forward broadcasts, a BACnet/IP system that spans more than one subnet needs a device called a BBMD, a BACnet Broadcast Management Device, to carry the broadcasts across. A missing or misconfigured BBMD is one of the classic reasons that devices on another subnet cannot be seen.
Addressing needs care. Each device on the whole internetwork needs a unique device instance number. On MS/TP each device also needs a unique MAC address on its own segment. Duplicate numbers cause intermittent and baffling behaviour.
BACnet compared with Modbus
Both are common in buildings and plant, and they are often connected through a gateway. They are built on different ideas.
| Topic | BACnet | Modbus |
|---|---|---|
| Data model | Named objects with properties, units and types | Numbered registers and coils with no built-in meaning |
| Discovery | Built in (Who-Is and I-Am) | None: you need the register map from the manual |
| Typical home | Building automation and HVAC controllers | Plant equipment, meters, drives and PLCs |
| Alarms and schedules | Defined as part of the standard | Not defined by the protocol |
| Effort to read a point | Look it up by name and instance | Know the address, the data type and the byte order |
The Modbus simulator on this site lets you practise register addressing and exception codes. If you can read a Modbus register map, you will find BACnet friendlier, because the points carry their own names and units.
Troubleshooting: the device you cannot see, and the command that does not stick
If a device does not appear after a Who-Is, work from the bottom up. For MS/TP, check wiring polarity, termination, the baud rate and that no two devices share a MAC address. For BACnet/IP, check that the device and the tool are on a reachable network, that UDP port 47808 is not blocked by a firewall, and whether a BBMD is needed between subnets. Check for a duplicate device instance, which can make one device appear to vanish.
If you can see the device but a command does not take effect, think about the priority array. Commandable objects accept writes at a priority level from 1 to 16, and the value in force is the one at the highest priority that is not empty. If another system or an operator has written a value at a higher priority, your write at a lower priority is accepted and stored but is not the value the object uses. Releasing the override at the right level, not forcing a higher one, is usually the fix.
Security deserves a sentence. Classic BACnet/IP has no strong authentication, so it should live on a segmented building network and should not be exposed to the internet. Treat any change to a live building system as work for an authorised person following the owner's procedures.
Self-check: BACnet ideas
1. Which pair of services is used to discover the devices on a BACnet network?
2. You read a temperature object and Out_Of_Service is true. What does that tell you?
3. Devices on a second IP subnet never answer your Who-Is. What is a common cause?
0 of 3 answered.
Where this fits in your learning
This page is an explainer. The simulator on this site runs PLC logic, HMI, Modbus and other labs, and does not implement a BACnet stack, so there is no BACnet lab to run. What transfers is the surrounding skill: reading a point list, scaling analog values, understanding networks, and tracing a fault from the symptom to the device.
The Industrial Networks and SCADA track covers the plant-floor network stack, RS-485 versus Ethernet, Modbus, EtherNet/IP, PROFINET, OPC UA and more, and its first units are free with a free account. The building automation training page covers the control-sequence side.
BACnet questions answered
What is BACnet?
BACnet, short for Building Automation and Control Networks, is an open communication protocol standardised as ASHRAE 135 and ISO 16484-5. It lets controllers, sensors, drives and front ends from different manufacturers exchange data in a common way. It carries data and does not run the control logic itself.
What is a BACnet object?
An object represents one thing inside a device, such as a temperature input, a damper output or a schedule. Each has a type, an instance number, a name and properties such as Present_Value, units and status flags. Analog and binary inputs, outputs and values are the types you meet first.
What do Who-Is and I-Am do?
They are the discovery services. A tool broadcasts Who-Is to ask which devices are on the network, and each device answers with I-Am, giving its device identifier. After that you can read the device object list and individual properties.
What is the difference between BACnet/IP and BACnet MS/TP?
BACnet/IP carries messages over Ethernet and IP networks, typically on UDP port 47808, and is common between supervisory controllers and the front end. BACnet MS/TP runs over RS-485 twisted pair using token passing and is common for lower-cost field controllers. Routers join the networks.
What is a BBMD?
A BBMD is a BACnet Broadcast Management Device. BACnet discovery uses broadcasts, and IP routers do not forward broadcasts, so a BACnet/IP system spread over several subnets needs a BBMD to carry them across. A missing or misconfigured BBMD is a classic reason devices on another subnet cannot be seen.
What is the difference between BACnet and Modbus?
BACnet describes data as named objects with properties, units and built-in discovery, and defines alarms and schedules. Modbus exposes numbered registers and coils with no built-in meaning, so you need the manufacturer's register map. Gateways often connect the two.
Is BACnet the same as Ethernet?
No. Ethernet is a physical and link layer used by many protocols. BACnet is an application protocol that describes objects, properties and services. BACnet/IP carries BACnet messages over Ethernet and IP, but BACnet MS/TP carries them over RS-485, which is not Ethernet at all.
What are the downsides of using BACnet?
Configuration can be fiddly: device instance numbers must be unique, broadcasts need a BBMD across subnets, and MS/TP wiring and addressing need care. Vendors implement different subsets, so conformance statements matter. Naming conventions are inconsistent between projects, and classic BACnet/IP has little built-in security, so it belongs on a segmented network.
Why does my BACnet write not take effect?
Commandable objects have a priority array of 16 levels, and the value in force is the one at the highest priority that is not empty. A write at a lower priority is stored but not used while a higher-priority value is present. Release the override at the level where it was written.
Can I practise BACnet in the simulator on this site?
No. The simulator does not run a BACnet stack, so there is no BACnet lab. It teaches the surrounding skills: PLC logic, analog scaling, Modbus and other networks, and sequences such as VAV modulation. This page is an explainer.
Keep going
- Industrial Networks and SCADA trackThe plant-floor network stack, Modbus, EtherNet/IP, PROFINET, OPC UA and security.
- Building automation trainingPLC exercises for VAV zones, boilers, chillers and a full building plant.
- HVAC controls explainedSensors, controllers, sequences and a worked VAV example.
- Modbus simulatorPractise register addressing and exception codes.
- Industrial communication protocolsA comparison of the common industrial protocols.
- SCADA vs BMSHow industrial supervisory systems and building management systems differ.