BACnet CreateObject Service

CreateObject makes a new object instance in a BACnet device (Clause 15.3): how it works, the error codes it returns, and which profiles require it.

What CreateObject Is

CreateObject is an object-access service in BACnet, defined in Clause 15.3 of ANSI/ASHRAE 135-2024. A client uses it to create a new instance of an object in a device at runtime, standard or vendor-specific. It is a confirmed service: on success the device returns the object identifier of the object it created, or an error naming why it could not.

Most objects in a control system are fixed and cannot be created this way; they are the device’s built-in points. CreateObject applies to the object types a device chooses to allow dynamic creation of, which it declares in its PICS (Protocol Implementation Conformance Statement).

How It Works

The client sends an object specifier and an optional list of initial property values. The specifier is either an object type, in which case the device picks the new object’s identifier, or a specific object identifier, in which case the device creates that exact one. Any initial values in the request are written as part of creation; properties left unspecified take device-dependent defaults, or can be set afterward with WriteProperty. The object identifier returned in the acknowledgment is unique within the device and is how the client refers to the new object from then on.

Where You’ll See It

  • Dynamic configuration. A tool that lets an integrator add a Group, Event Enrollment, or other creatable object to a device without a firmware change.
  • Provisioning from a template. Building up a device’s object model at commissioning by creating objects and seeding their initial values in one request each.
  • Vendor object management. Creating vendor-specific deletable objects a device exposes for runtime configuration.

CreateObject Error Codes

Clause 15.3 defines the error class and code a device returns for each failure, alongside a First Failed Element Number that identifies which initial value was rejected. The general error model lives in Clause 18 of the standard.

SituationError classError code
The device cannot allocate the space needed for the new objectRESOURCESNO_SPACE_FOR_OBJECT
The device supports the object type but does not support creating the object for some other reasonOBJECTDYNAMIC_CREATION_NOT_SUPPORTED
The device does not support the specified object typeOBJECTUNSUPPORTED_OBJECT_TYPE
The object being created already existsOBJECTOBJECT_IDENTIFIER_ALREADY_EXISTS
An initial value’s datatype does not match the propertyPROPERTYINVALID_DATATYPE
An initial value is outside the range defined for the propertyPROPERTYVALUE_OUT_OF_RANGE
An initial value names a property unknown for the object type being createdPROPERTYUNKNOWN_PROPERTY
An initial character-string value uses an unsupported character setPROPERTYCHARACTER_SET_NOT_SUPPORTED
A property does not support initialization during CreateObjectPROPERTYWRITE_ACCESS_DENIED
The data being written has a datatype not supported by the propertyPROPERTYDATATYPE_NOT_SUPPORTED
The encoding is not valid for the datatype of the propertyPROPERTYINVALID_DATA_ENCODING

Reading these in the field:

  • DYNAMIC_CREATION_NOT_SUPPORTED and UNSUPPORTED_OBJECT_TYPE both mean the device will not create the object; the first is a policy limit on an otherwise supported type, the second is that the type is not supported at all.
  • NO_SPACE_FOR_OBJECT means the device is out of room for new objects, a fixed-capacity limit.
  • A WRITE_ACCESS_DENIED here is about initialization: the property exists but cannot be set during creation. Set it afterward with WriteProperty if the property allows it.
  • The First Failed Element Number identifies which initial value the device rejected; zero means the request failed for a reason other than the initial values.
  • No response at all is not a CreateObject error. A timeout is a transport or addressing problem.

Profiles That Require It

CreateObject is an object-management service, not a baseline capability. No standard device profile in Annex L requires it; a device supports it only when it is built to allow runtime object creation, and it declares that support in its PICS. Treat it as an optional feature to look for, not one to assume.

What Chipkin Provides

The CAS BACnet Stack supports CreateObject in both directions, as a client initiating requests and as a server executing them. Talk to us about adding BACnet client or server support to your device.