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.
| 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 |
| Property is not accessible using this service | PROPERTY | READ_ACCESS_DENIED |
Reading these in the field:
- Each error is scoped to one property in the result list; seeing
UNKNOWN_PROPERTYfor 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.