General BACnet Background

BACnet devices are defined on the network as a collection of “objects”. Typical objects include Analog Inputs, Analog Outputs, Binary Inputs, Binary Outputs, and more complex objects such as Scheduler. Messages on the network deal with reading and writing Object Properties. The most frequently referenced property for an analog input is “present value”, which typically means data derived from a sensor or physical device. Other properties associated with an analog input object, for example, include fault status, reliability, object name, minimum and maximum limits, etc. BACnet protocol standards define required and optional properties for each object type. The manufacturer’s documentation for the BACnet device will list which object types are included in the device, along with which optional properties are included in each object.

Along with the definition of objects, BACnet protocol defines “services”. These include object access services, alarm and event services, file access services, and a few more. Object access services are the most commonly used since these provide the fundamental “read/write” access to object properties.

Accessing object properties requires specifying these parameters:
                - device instance (i.e., which device on the network)
                - object type (analog input, binary intput, etc.)
                - object instance (i.e., which analog input)
                - property (present value, object name, status flags, etc.)

Input objects are simple, they just have a “present value” associated with them. Output objects are known as “commandable” and these get a bit more interesting. Because there is the possibility that more than one control algorithm might want control over an object, the command requests are prioritized and only the highest priority command will take effect. When the higher priority command is relinquished, the next lower command will take effect. All of the commands are maintained by the object in its command priority array (containing 16 priority levels).

Writing to an output object requires specifying all of the parameters shown above for accessing object properties, plus two additional parameters:
                - command priority
                - command level for given priority

The present value obtained when a commandable object is read will be the command level having the highest level that has not been relinquished. To pass command to some other process, you simply write a “relinquish” to the commandable object.

BACnet Physical Layer

The protocol defines rules for electrical signaling, addressing, network access, error checking, flow control, presentation, and message format. The protocol focuses on building automation applications.


BACnet IP uses a standard UDP/IP stack to send and receive messages (see definition of UDP/IP below). For the most part, the same packet that would be found on an MS/TP link is encapsulated in a UDP/IP packet and called BACnet IP. Devices use IP addresses and Ethernet MAC addresses just like other UDP/IP network devices. There is no concept of master/slave token passing since Ethernet is automatically peer to peer in nature. Devices simply transmit to their intended recipient at will, and let Ethernet deal with packet collisions and retries as needed.


MS/TP stands for Master Slave  Token Passing. Each device on the link is considered the “master” when it has the token. If it does not have immediate need to use the token, it is required to pass the token along to the next device. This is the “token passing” part. All devices on the link which do not currently have the token are regarded as slaves,  and are expected to listen to any messages the current master may have for it. Because all devices take turns being master, the link is effectively peer to peer.

BACnet Application Layer

This is where the real fun takes place. All message processing is handled at the application layer, including device addressing. The IP address will get a BACnet packet through all layers of the UDP/IP stack. Then the application layer decides what to do with the BACnet message. There is an entire list of possible message types, but the most frequently used is simply "read present value property". Another strong contender for "most used" would be the COV notification (Change of Value).

Glossary of BACnet terms

UDP/IP - Virtually everyone has heard the term TCP/IP. This is the term often generically applied to anything Internet or anything using "standard" networking. The UDP side of the stack operates in parallel to TCP, and is automatically included in most implementations of an Ethernet based protocol stack. The difference is that TCP is considered a "connection" protocol and all communication takes place in a session that has overhead to ensure delivery of all packets. UDP is considered "connectionless", has minimal overhead, and allows the application to deal with whether the packets were delivered or not. UDP is used where network speed and efficiency is important, and BACnet IP uses the UDP side of the IP stack. It is appropriate to use UDP for BACnet since messages are typically short and independent of each other. TCP is used for FTP file transfer, for example, where communication involves a lengthy series of long messages.

Object - The general reference to sensors, actuators, and other functional elements that make up a BACnet device. The objects fall into categories specified by BACnet protocol. Analog Input object and Analog Output object are a couple of the most commonly used objects.

Object Property - Each object has several properties required by BACnet protocol. The most commonly used property is Present Value. Other common properties include reliability and status flags. Optional properties for objects such as analog input include minimum and maximum range, high and low limits, etc.

COV - Change Of Value - A COV notification is sent any time the object's value changes by an amount specified as a default parameter, or in the subscription request. Devices wishing to receive the notice of change need to "subscribe" to the COV by sending a subscription request to the device from which a COV notification is desired.

BBMD - Stands for BACnet/IP Broadcast Management Device. The BBMD is used to implement BACnet IP across a large network. Intended typically for campus wide management, it is technically just as possible to implement a single BACnet IP network that spans the country. In order for BACnet devices to operate as a system, they must be able to broadcast messages. However, standard IP technology dictates that routers do not forward broadcast messages. The BBMD resolves this problem by providing a re-broadcast on the local domain for any message originally broadcast on another domain. It is not necessary for all BACnet IP devices to support BBMD. Only one device on an IP domain needs to function as the BBMD. It will be configured to interact with BBMD's on other domains to provide the broadcast support.

MS/TP Mac Address  or Station ID - This is an 8-bit number, which for master/slave devices is 0-127. This Mac address is used locally on the RS-485 link to physically address devices on the link, and is not passed through routers. It is comparable to the Modbus RTU slave address.

MS/TP Max Masters - Determines how many possible masters the various devices on an MS/TP link will search for in the "poll for master" sequence. If this setting does not match in all devices on the link, erratic behavior can occur.

BACnet IP Addressing - The standard Ethernet IP address is used to identify devices on the IP network. The IP address is used to physically route messages on the network, while BACnet device instance still identifies a device in the BACnet system.

Device Instance - This is the logical address that matters to BACnet. Whether on an MS/TP link or IP network, the device instance is unique across all subnets and routed links.

Client/Server versus Master/Slave - We tend to think of master and slave at the MS/TP level, and start thinking in terms of client/server when we talk about IP networks. Functionally, the client and master are synonomous while the server and slave are synonomous.