What WritePropertyMultiple Is
WritePropertyMultiple (WPM) is the batched write service in BACnet, defined in Clause 15.10 of ANSI/ASHRAE 135-2024. Where WriteProperty changes one property of one object, WPM carries a list of writes across one or more objects in a single request. It is a confirmed service.
Like ReadPropertyMultiple, the point is efficiency: pushing a batch of setpoints or parameters in one exchange instead of many round trips.
How It Works
The client sends a list of write specifications, each naming an object, a property, the new value, and optionally an array index and a priority. The device applies them in order. The important detail is that WPM is not atomic: the device performs each write as it goes, so if one fails, the writes before it have already taken effect. The response does not confirm every write individually. On success it returns a simple acknowledgment; on failure it returns a single error identifying the first write that failed, and stops there.
Where You’ll See It
- Batch setpoint downloads. A supervisory strategy pushing a set of related setpoints to a controller in one message.
- Commissioning. Writing several configuration properties to an object at once during setup.
- The atomicity trap. Because a partial WPM leaves earlier writes applied, a strategy that assumes all-or-nothing can leave a device in a half-updated state after one bad value. Treat a WPM failure as “some writes may have landed” and re-read to confirm.
WritePropertyMultiple Error Codes
WPM can return the same failures as WriteProperty, reported for the first write that fails (along with the object, property, and array index that failed).
| Situation | Error class | Error code |
|---|---|---|
| Specified object does not exist | OBJECT | UNKNOWN_OBJECT |
| Specified property does not exist | PROPERTY | UNKNOWN_PROPERTY |
| Array index provided but the property is not an array | PROPERTY | PROPERTY_IS_NOT_AN_ARRAY |
| Array index greater than the current array length | PROPERTY | INVALID_ARRAY_INDEX |
| The property is currently read-only | PROPERTY | WRITE_ACCESS_DENIED |
| The value is outside the range the property allows | PROPERTY | VALUE_OUT_OF_RANGE |
| The value’s datatype is wrong for the property | PROPERTY | INVALID_DATATYPE |
Reading these in the field:
- The error names the first failed write, so writes listed before it in the request have already been applied. Re-read the target properties after any WPM failure rather than assuming nothing changed.
WRITE_ACCESS_DENIEDhere means the same thing it does for WriteProperty: that property is read-only on the device.
Profiles That Require It
WritePropertyMultiple is selective. Executing WPM (DS-WPM-B) is required by the advanced controller and workstation profiles: B-BC, B-AAC, and the life-safety, access-control, and elevator advanced controllers. The minimal profiles (B-SS, B-SA, B-ASC) do not require it; a client can always fall back to repeated single WriteProperty requests.
What Chipkin Provides
The CAS BACnet Stack supports WritePropertyMultiple in both directions. Talk to us about adding BACnet client or server support to your device.