BACnet is a communications protocol for building automation and control. It is now a ASHRAE, ANSI, and ISO standard protocol. BACnet is now maintained by an ASHRAE committee. Compared to the simplicity of the Modbus protocol, BACnet is much more complex and attempts to provide high-level functionality like auto-discovery of devices.
In practice, BACnet can be quite unwieldy. Its age and overreaching goals have left it as a complex mess. Many manufacturers simply use it as a method for simple communication between different manufacturer's products. It's auto-discovery tool can also significantly speed up the time needed to configure and set up large systems.
BACnet can run on several different physical layers, including MS/TP over RS-485, P2P over RS-232, and BACnet/IP. MS/TP and BACnet/IP have traditionally been the most popular, with BACnet/IP slowly gaining share as LAN infrastructure becomes more commonplace.
A practical guide to setup
Because BACnet provides auto-discovery, software configuration of a system is usually not difficult. The primary headache caused by BACnet systems is typically ensuring compatibility between devices. Beyond ensuring the same physical layer is being used (eg. RS-485, RS-232, BACnet/IP), the user must also confirm compatibility of the BACnet object types. Some of the most common object types are described below.
Sensor values can be read using the analog input object. BACnet analog input objects also contain the engineering unit used, as well as allowing floating point values, so there us usually no configuration needed. Analog input objects are very widely supported, and can typically be used even if no other higher level objects are supported by a device.
The trend log object was added to the BACnet standard later on, so it is not as widely supported. It provides a mechanism to retrieve "logged" data from a sensor, instead of only being able to read the most recent sample using the analog input object.
Control values can be set using the analog output object. Similar to the analog input object, it provides a lower level interface to directly control device outputs.