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.

Reviewed 2026-07-15

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 resultWhat it provesUseful response
Abort: segmentation not supportedA BACnet peer explicitly ended the confirmed exchange over segmentation capabilityReduce request or response size; split the work
Abort: buffer overflowThe peer could not hold or return the requested exchangeReduce the batch and inspect APDU sizing
Abort: APDU too longThe encoded request or response cannot fit the supported exchangeUse smaller requests or indexed array access
Reject: unrecognized serviceThe device does not implement the requested serviceFall back from RPM to ReadProperty
No responseNo matching reply arrived before the local deadlineDiagnose 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.

References