BACnet ReadPropertyMultiple Service

ReadPropertyMultiple reads many BACnet properties in one request (Clause 15.7): how it works, the per-property errors it returns

What ReadPropertyMultiple Is

ReadPropertyMultiple (RPM) is the batched read service in BACnet, defined in Clause 15.7 of ANSI/ASHRAE 135-2024. Where ReadProperty fetches one property of one object, RPM fetches many properties, across many objects, in a single request and a single response. It is a confirmed service.

The value of RPM is efficiency. Polling a controller for 40 points with ReadProperty is 40 request-and-response round trips; RPM can gather them in one, which matters on slow or congested transports.

How It Works

The client sends a list of read specifications, each naming an object and the properties to read from it. A specification can use the special property identifier ALL to ask for every property of an object at once. The device answers with a list of results in the same order, each result carrying either the value or an error for that one property. A property that fails does not sink the whole request: the failed entry carries its own error and the rest still return their values. This per-property error handling is the main behavioral difference from ReadProperty.

Where You’ll See It

  • BMS polling. A head end (the central BMS server) refreshing a page of points uses RPM to pull them in one exchange rather than many.
  • Discovery. Reading a device’s whole object with ALL, or sweeping a property across many objects, is far cheaper as RPM than as a stream of single reads.
  • The segmentation edge. A large RPM response can exceed one message and requires segmentation support on both ends; a device without it may abort the response, in which case the client falls back to smaller reads.

ReadPropertyMultiple Error Codes

RPM returns the same per-property failures that ReadProperty does, but embedded in the result list rather than failing the request as a whole.

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
Property is not accessible using this servicePROPERTYREAD_ACCESS_DENIED

Reading these in the field:

  • Each error is scoped to one property in the result list; seeing UNKNOWN_PROPERTY for one point does not mean the other points in the same RPM failed.
  • A whole-request failure (not one of the above per-property codes) usually means the device does not support RPM at all, or the response needed segmentation the device could not provide. Fall back to ReadProperty to confirm.

Profiles That Require It

ReadPropertyMultiple is selective, not universal: it is required by the advanced controller and operator profiles, not the minimal ones. B-BC, B-AAC, and the workstation, life-safety, access-control, and elevator advanced profiles require it. The minimal profiles, B-SS (Smart Sensor), B-SA (Smart Actuator), and B-ASC (Application Specific Controller), require only single-property ReadProperty.

What Chipkin Provides

The CAS BACnet Stack supports ReadPropertyMultiple in both directions, including ALL-property reads and segmented responses. Talk to us about adding BACnet client or server support to your device.