The data structure of information inside a BACnet device isn’t important to the outside world and can be structured by the manufacturer in a way that seams fit. What is important is a definition of a standard representation of this data to the outside world. BACnet has taken the object orientated approach in solving this problem. A set of 18 standard objects have been defined in Clause 12 of the BACnet specification. Each of these objects in turn consisting of a standard set of “properties”. These “properties” describes the object and its current state to other BACnet devices on the internetwork. These objects do not only provide a standardized way of representing the information to the rest of the internetwork but also provides a framework for building the application layer services. These services are then used to access and manipulate the properties of these standard objects. Mapping these changes to the real data structures inside a BACnet device is again up to the manufacturer. Each BACnet device can thus be modeled as a combination of these standard objects. The table below lists all the objects that get specified in the BACnet specification.
Setpoint or other analog control system parameter
Binary (digital) control system parameter
Defines a list of dates, such as holidays or special events, for scheduling.
Writes multiple values to multiple objects in multiple devices to accomplish a specific purpose, such as day-mode to night-mode, or emergency mode.
Properties tell what objects and services the device supports, and other device-specific information such as vendor, firmware revision, etc.
Describes an event that might be an error condition (e.g., “Input out of range”) or an alarm that other devices to know about. It can directly tell one device or use a Notification Class object to tell multiple devices.
Allows read and write access to data files supported by the device.
Provides access to multiple properties of multiple objects in a read single operation.
Provides standardized access to a “control loop.”
Represents the status of a multiple-state process, such as a refrigerator’s On, Off, and Defrost cycles.
Represents the desired state of a multiple-state process (such as It’s Time to Cool, It’s Cold Enough and it’s Time to Defrost).
Contains a list of devices to be informed if an Event Enrollment object determines that a warning or alarm message needs to be sent.
Allows a program running in the device to be started, stopped, loaded and unloaded, and reports the present status of the program.
Defines a weekly schedule of operations (performed by writing to specified list of objects with exceptions such as holidays. Can use a Calendar object for the exceptions.
A BACnet device does not need to consist of all the objects types in the BACnet standard to conform to the standard. In addition to this some of the properties of these standard objects are also optional. In Clause 12 each object is summarized by a property list. This summary includes the property identifier, the data type of the property and one of the following specifiers:
O – Optional
R – Required and readable
W – Required, readable and writable.
As indicated the object properties specified by O is optional and does not need to be part of the BACnet standard object of that type. But the properties specified by R and W are required and need to be present in the BACnet standard object of that type. Supported properties, if they are required or not, need to always return the data type specified in the BACnet standard. An object property on the other hand does not always need to return the entire range of values for a specific data type, unless specified otherwise by the BACnet specification. The restrictions just need to be specified in the protocol implementation conformance statement (PICS) of that specific devise.
Although the BACnet standard tries to be comprehensive as possible with their collection of object types, they still leave implementers the freedom to define additional nonstandard object types or additional nonstandard properties for standard object types. This leaves the room for innovative changes to be accommodated without having to wait for changes in the BACnet standard. Nonstandard object types are still required to have the following properties:
- Object_Identifier BACnetObjectIdentifier
- Object_Name CharecterString
- Object_type BACnetObjectType
These properties also need to behave the same way as in a standard BACnet objects. This means that the Object_Name and Object_Identifier properties still need to be unique within the BACnet device that maintains them. The Object_Name also needs to be at least one character in length and can only consist of printable characters.
Frequently properties of certain BACnet objects need to be represented as a collection of data elements of the same datatype. These datatypes in some cases have a fixed number of elements and in other cases a variable number of elements. The BACnet standard introduces two forms of data types to solve this problem namely the “BACnetARRAY” and “List of” data types.
A “BACnetARRAY” is defined as a structured datatype consisting of an ordered form of data elements of the same datatype. The notation “BACnetARRAY[N] of datatypeX” can be used to instantiate an object property with a ordered sequence of N data elements consisting of datatypeX. The array index N can then be used to individually access an element in position N of the array. By using the array without an index on the other hand will return all the elements in that array. The index N = 0 will returns the number of data elements in the array.
A ”List of” datatype is defined as a structured datatype consisting of a sequence of zero or more data elements of the same datatype. The notation “List of datatypeX” can be used to instantiate an object property with a sequence of zero or more data elements of daratypeX. The length of each “List of” can be variable. Unless otherwise specified no maximum size should be assumed for any “List of” implementation.
There are only two fundamental differences between the “BACnetARRAY” and “List of” datatypes. The first difference is that the elements of an array can be accessed by an array index while the elements of the “List of” property cannot. The second difference is that the size of the array can be accessed by reading the array index 0, while the size of the “List of” can only be determined by reading the entire property value and performing a count.
Several objects in Clause 12 of the BACnet specification have a property called “Reliability”. This property is an enumerator datatype that can consist of different enumerations for different object types. The table below lists a superset of all possible values for this property for all object types. The range of values that can be returned for this property for each specific object gets defined in the object type definition.
Preset value is reliable
No sensor is connected
Sensor reading higher than normal
Sensor reading lower than normal
Connection indicating a open circuit
Connection indicating a short circuit
No physical device is connected to the output object
A process error was encountered
The Present_Value of the Multi-state object is equal to one of the states in the Fault_Value property and no other fault has been detected.