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.
| Situation | Error class | Error code |
|---|---|---|
| The device cannot allocate the space needed for the new object | RESOURCES | NO_SPACE_FOR_OBJECT |
| The device supports the object type but does not support creating the object for some other reason | OBJECT | DYNAMIC_CREATION_NOT_SUPPORTED |
| The device does not support the specified object type | OBJECT | UNSUPPORTED_OBJECT_TYPE |
| The object being created already exists | OBJECT | OBJECT_IDENTIFIER_ALREADY_EXISTS |
| An initial value’s datatype does not match the property | PROPERTY | INVALID_DATATYPE |
| An initial value is outside the range defined for the property | PROPERTY | VALUE_OUT_OF_RANGE |
| An initial value names a property unknown for the object type being created | PROPERTY | UNKNOWN_PROPERTY |
| An initial character-string value uses an unsupported character set | PROPERTY | CHARACTER_SET_NOT_SUPPORTED |
| A property does not support initialization during CreateObject | PROPERTY | WRITE_ACCESS_DENIED |
| The data being written has a datatype not supported by the property | PROPERTY | DATATYPE_NOT_SUPPORTED |
| The encoding is not valid for the datatype of the property | PROPERTY | INVALID_DATA_ENCODING |
Reading these in the field:
DYNAMIC_CREATION_NOT_SUPPORTEDandUNSUPPORTED_OBJECT_TYPEboth 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_OBJECTmeans the device is out of room for new objects, a fixed-capacity limit.- A
WRITE_ACCESS_DENIEDhere 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.