BACnet WritePropertyMultiple Service

WritePropertyMultiple writes many BACnet properties in one request (Clause 15.10): how it works, why it is not atomic, its error codes

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).

SituationError classError code
Specified object does not existOBJECTUNKNOWN_OBJECT
Specified property does not existPROPERTYUNKNOWN_PROPERTY
Array index provided but the property is not an arrayPROPERTYPROPERTY_IS_NOT_AN_ARRAY
Array index greater than the current array lengthPROPERTYINVALID_ARRAY_INDEX
The property is currently read-onlyPROPERTYWRITE_ACCESS_DENIED
The value is outside the range the property allowsPROPERTYVALUE_OUT_OF_RANGE
The value’s datatype is wrong for the propertyPROPERTYINVALID_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_DENIED here 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.