BACnet discovery
How to diagnose a BACnet segmentation reject
A segmentation-not-supported abort means the BACnet exchange produced or required a message that one side could not handle as segments. It is different from a timeout. Reduce the requested response size, read large arrays by index, split ReadPropertyMultiple batches, and retry a single property before blaming the network path.
Diagnostic sequence
- Capture the exact PDU outcome. Keep segmentation-not-supported, buffer-overflow, APDU-too-long, reject-unrecognized-service, and no-response separate.
- Record the device I-Am maximum APDU and segmentation-supported values. Treat them as device claims, not proof that every exchange will work.
- Identify the request that failed: an entire array, one large property, or an RPM batch containing several objects and properties.
- For Object_List, read index 0 for the length and then read entries by index instead of asking for the full array.
- For RPM, halve the batch and retry. Continue until the device accepts the batch or one object remains.
- At one object, try plain ReadProperty. If that also aborts, preserve the point fault and the device error instead of reporting a timeout.
Do not merge different failures
| Wire result | What it proves | Useful response |
|---|---|---|
| Abort: segmentation not supported | A BACnet peer explicitly ended the confirmed exchange over segmentation capability | Reduce request or response size; split the work |
| Abort: buffer overflow | The peer could not hold or return the requested exchange | Reduce the batch and inspect APDU sizing |
| Abort: APDU too long | The encoded request or response cannot fit the supported exchange | Use smaller requests or indexed array access |
| Reject: unrecognized service | The device does not implement the requested service | Fall back from RPM to ReadProperty |
| No response | No matching reply arrived before the local deadline | Diagnose path, load, bind state, and device silence |
Sondwave recovery behavior
For data-plane reads, Sondwave sizes RPM batches from the device maximum APDU. A segmentation, buffer, or APDU-size abort halves the chunk and retries. At batch size one, it falls back to plain ReadProperty. A reject-unrecognized-service switches that device to ReadProperty for the remainder of the request.
During discovery, Sondwave reads Object_List length first and walks entries by index. It does not assume a large controller can return the whole array in one response. Device inventories publish only after clean enumeration, so a failed walk cannot replace a prior complete inventory.
The scan record keeps terminal status, counts, and an error. System logs retain lower-level protocol detail. Use a packet capture when the abort must be confirmed on the wire.
Small recovery test
1. Read 16 objects with ReadPropertyMultiple.
2. If segmentation-not-supported returns, retry 8.
3. If it returns again, retry 4.
4. Continue halving until the request succeeds.
5. For a one-object failure, use ReadProperty.
6. Record the accepted batch size and the original abort reason.