How do I troubleshoot a BACnet MS/TP trunk?
Updated 4 November 2026
Work from the wire up. Check polarity and the signal common, then
termination (120 Ω at the two ends of the trunk and nowhere else) and bias
(one set, at most two). Then make sure every device runs the same baud rate, no two
devices share a MAC address, and Max_Master is at least the highest master
MAC on the trunk. Most dead or flaky trunks are one of those. The pattern of which devices
are missing usually tells you which.
Read the symptom first
Before you open a panel, look at which devices are missing and when. A scan from the IP side through the trunk's BACnet router gives you the list: every MS/TP device that answers shows up at the router's IP address with a network number and MAC.
| What you see | Look at first |
|---|---|
| Whole trunk gone | The router's MS/TP port, a short or open at the start of the run, a device holding the bus |
| Every device past one point is missing | A break or bad splice at that point; termination in the wrong place |
| Devices with high MACs never appear, low ones are fine | Max_Master set too low on one or more devices |
| Two devices trade places, or one appears and vanishes | Duplicate MAC address |
| Everything is there but slow, and drops out now and then | Baud mismatch on one device, reversed polarity, noise, or a trunk that is simply too long or too full |
| One device missing, the rest fine | That device: power, its MAC, its baud rate, its wiring at the terminal |
1. Wiring
- Daisy chain, no stars. MS/TP is RS-485: one cable in, one cable out at each controller. A tee or a star off a terminal block causes reflections that show up as random errors.
- Polarity. One device with + and − swapped won't just drop off; it can disturb the whole trunk every time it tries to talk. Vendors label the terminals differently (+/−, A/B, Net+/Net−), and A/B is not consistent between brands, so go by the manual, not the letter.
- Signal common and shield. Run the reference conductor to every device that has a terminal for it. Ground the shield at one point only, usually at the router end, and keep it continuous through each device.
- Cable. Use the low-capacitance shielded twisted pair the vendor specifies. Leftover thermostat cable or Cat5 pulled in a hurry is a common source of trouble on longer runs.
2. Termination and bias
Termination is a 120 Ω resistor (or a jumper or switch on the controller) at the two physical ends of the trunk. Not on every device, and not on stubs. Bias holds the idle line in a known state; the trunk needs one set, often provided by the router, and no more than two. Too many terminators or bias sets load the line down; none at all lets it float. If two short segments each work alone but fail when joined, count the terminators and bias jumpers first.
3. Baud rate
Every device on a trunk must run the same rate: usually 38,400 or 76,800 on newer jobs, 9,600 or 19,200 on older ones, and some newer devices offer 115,200. A device on the wrong rate doesn't just go missing; it sees garbage, may answer with garbage, and causes errors for everyone. Some controllers auto-detect the baud rate at power-up and lock onto whatever they hear first, so a trunk that was briefly wrong can stay wrong until those devices are power-cycled.
4. MAC addresses
Masters use MAC 0–127; slaves, which never get the token, use 128–254. Every MAC on one trunk must be unique. Two controllers on the same MAC answer for each other, corrupt each other's replies and slow the trunk; the symptom is a device whose name or Device ID changes between scans. MACs are usually set on DIP switches or rotary switches, and a replaced controller is the usual culprit. Easy BACnet warns after a scan when it sees two devices at the same network number and MAC.
The MAC is only local to the trunk. The Device ID is separate and has to be unique across the whole site; many integrators build it from the network number and MAC so the two stay in step.
5. Max_Master and Max_Info_Frames
Each master passes the token to the next MAC it knows about, and now and then polls the
addresses above its own to see if anyone new has joined, but only up to its
Max_Master setting. If a device's Max_Master is 31 and there is a controller
at MAC 40, that controller may never be offered the token and never talks. Set Max_Master
at or above the highest master MAC on the trunk, on every device. The default of 127 always
works but wastes time polling empty addresses, so a tuned value speeds a small trunk
up.
Max_Info_Frames is how many messages a device may send each time it holds
the token. Field controllers are fine at 1; the router or supervisory controller handles
traffic for the whole trunk and usually needs a higher value, or reads from the IP side
queue up behind it.
6. Size and load
RS-485 is good for about 4,000 ft (1,200 m) per segment and a limited number of unit loads before you need a repeater. In practice, vendors recommend somewhere around 30 to 60 controllers per trunk depending on baud rate and how much each one is polled. A trunk that has grown past that works, slowly, and falls over when something else goes wrong. Splitting it onto a second router port is often the real fix.
Tools that help
- A scan from the IP side through the router shows which MACs are answering. Easy BACnet's Browser Mode lists each routed device with its network number and MAC, which makes the missing-above-MAC-40 pattern easy to spot. It can't connect to the trunk directly; see does Easy BACnet support MS/TP?
- The router's diagnostics. Most routers and supervisory controllers keep per-port counters: token losses, CRC and framing errors. Climbing CRC errors point to wiring, noise or a baud mismatch.
- A USB-to-RS-485 adapter and an MS/TP capture tool on a laptop, to watch the token go round and see which MAC is causing errors. Wireshark can decode MS/TP captures.
- A meter. With power off, resistance between + and − at the end of a correctly terminated trunk reads around 60 Ω (two 120s in parallel); 120 means one terminator is missing, 40 means there's a third.
Check it on your own network. Easy BACnet is a free Android app that finds BACnet IP devices and reads their points in a couple of taps.
Get it on Google Play