BACnet discovery
How to diagnose a BACnet scan timeout
First identify where the scan stopped: before any I-Am, while enumerating one device, or during property reads. Then test the network path with the same interface and target, compare broadcast with a directed request, and inspect the exact BACnet error. Increasing the timeout first can hide the real fault.
Run these checks in order
- Confirm the selected local interface and BACnet/IP UDP port. A valid IP route on the wrong interface is still the wrong test.
- Decide whether the scan used local broadcast or a known unicast target. Record the device-instance range and any object cap.
- If broadcast found nothing, try a known device IP with directed Who-Is and a directed ReadProperty of the Device object.
- If I-Am arrived, stop treating the problem as device discovery. Check Object_List length, the last index read, maximum APDU, and the first abort, reject, or silence.
- If several devices work and one stalls, isolate that device. Do not increase the timeout for the entire network.
- If a scan fails only while polling or COV is active, check local driver contention and notification volume, then repeat with the competing work stopped.
What the symptom usually narrows
| Observed result | Likely boundary | Next check |
|---|---|---|
| No I-Am from any device | Interface, bind port, broadcast domain, firewall, or driver startup | Verify interface and capture the outbound Who-Is |
| Broadcast empty, directed read works | Broadcast or routed-discovery behavior | Check BBMD or foreign-device needs; keep the known target |
| I-Am arrives, then scan stalls | Object enumeration or metadata reads | Inspect Object_List index progress and APDU errors |
| One device is slow | Device-specific load, firmware, routing, or object inventory | Run a device-only target and record the last successful operation |
| Scan fails only with active COV | Shared datalink contention or notification pressure | Pause COV for comparison and inspect driver logs |
| Scan ends at the same wall time | Client or server deadline | Read the terminal scan error and confirm the configured deadline |
Sondwave timeout behavior
A Sondwave BACnet Who-Is probe waits two seconds for I-Am responses. A complete API discovery sweep has a 15-minute end-to-end deadline. Recent scan records show running, completed, failed, or cancelled status with counts and an error. The activity console and system-log view expose scan events and daemon logs.
For a known target, a silent directed Who-Is can fall back to directed ReadProperty discovery. A broadcast-only sweep does not use that fallback.
Discovery, reads, and COV traffic share serialized access to the BACnet datalink. The driver yields between COV pump windows to reduce contention. If a scan slows under heavy notification traffic, compare it with COV stopped and inspect the driver logs.
Record enough evidence to reproduce the timeout
scan mode: broadcast | targeted
local interface: <name>
target or subnet: <redacted>
Who-Is response count: <n>
last device and operation: <device instance, Object_List index, property>
first protocol error: <timeout, reject, abort, bind failure>
scan deadline and elapsed time: <duration>
COV or polling active: yes | no
packet capture available: yes | no