RS-485 and BACnet MS/TP wiring: getting a trunk to behave
Daisy-chain topology, termination, biasing, unit loads, cable length, baud rates and MAC addressing: everything that makes or breaks an RS-485 trunk.
RS-485 trunks run BACnet MS/TP and Modbus RTU on thousands of UK sites, and when they’re wired properly they’re reliable for decades. When they’re not, you get devices dropping off at random, comms that fall over when it rains, and an engineer swapping controllers that were never faulty.
Almost every RS-485 problem comes back to a handful of rules.
Daisy chain, not star
RS-485 is designed as a single line. The cable goes from the first device to the second, the second to the third, and so on to the end. No spurs, no stars, no branches.
Short drops are sometimes tolerated, but the further you stray from a true daisy chain, the more reflections and odd behaviour you’ll get. If a site has a “star” coming out of a panel, that’s very likely why it’s unreliable.
Termination at both ends
At each physical end of the trunk, a termination resistor (typically 120 Ω, matching the cable) goes across the data pair. It stops signals reflecting back down the cable.
- Terminate at both ends, and only at the ends.
- Many controllers have a built-in terminator, set by DIP switch or jumper. Check it’s only switched on in the end devices.
- Too many terminators load the line down; none at all causes reflections. Either can work fine on a short, slow trunk and fall over on a long, fast one.
Biasing
When nobody’s talking on the line, RS-485 needs to sit in a known idle state. Biasing resistors pull the lines to that state, and they should be provided once per trunk, usually by the router or master device, or by a dedicated bias module. Some devices bias by default, so too much biasing can also cause trouble. Check what each device on the trunk is doing.
Cable
Use a screened twisted pair designed for RS-485, with the impedance the standard expects. A common setup is a pair for data plus a reference (common) conductor, with the screen earthed at one point only.
Keep the trunk away from power cables and VSD outputs. Running comms alongside a drive’s motor cable is a classic cause of errors that come and go with the load. There’s more on this in BMS cabling.
Length, speed and number of devices
The figures usually quoted for a standard RS-485 segment are:
- up to about 1,200 m of cable at lower baud rates (the faster you go, the shorter it can be)
- 32 unit loads per segment, although many modern devices are fractional loads (½, ¼ or ⅛ of a unit load), which allows more devices
- repeaters where you need more length or more devices
For MS/TP, common baud rates are 9600, 19200, 38400, 76800 and 115200. Every device on the trunk must use the same baud rate. One device on the wrong rate can upset the whole trunk.
MS/TP addressing
MS/TP devices have a MAC address on the trunk:
- Masters use 0 to 127 and take part in token passing.
- Slaves use 128 to 254 and can only reply when asked.
- Every MAC on the trunk must be unique.
The Max Master setting tells each master the highest master address it needs to look for when passing the token. Set it too low and devices above that number never get the token, so they “disappear”. Set it unnecessarily high and the trunk wastes time polling addresses that don’t exist, which slows everything down. Set it to the highest master address actually in use, consistently on every device.
Remember the MAC is only the trunk address. Each device also needs a unique BACnet device instance across the whole site; see duplicate device instances.
Modbus RTU on RS-485
Modbus RTU uses the same physical layer, with its own rules: one master polling slaves addressed 1 to 247, and every device set to the same baud rate, parity and stop bits. All the wiring rules above apply. For register-level problems, see Modbus register offsets and word order.
A to B, or B to A?
Manufacturers don’t agree on what “A” and “B” (or “+” and “−”) mean. One manufacturer’s A is another’s B. If a device won’t talk and everything else checks out, swapping the pair at that device is a perfectly legitimate test.
Troubleshooting a misbehaving trunk
When devices drop off, work through it in this order:
- Draw the trunk as it really is, not as the drawing says. Are there any spurs or stars?
- Check termination: on at the two ends, off everywhere else.
- Check biasing: present once, not missing or doubled up.
- Check every device’s baud rate, MAC and Max Master.
- Look for duplicate MAC addresses, often after a controller swap.
- Measure the line with the trunk idle. A multimeter can confirm bias voltages and termination resistance, and an oscilloscope will show reflections and noise if you have one.
- Split the trunk. Disconnect half and see whether the problem stays with one half, then keep halving.
Most trunks come good after the first four steps. The rest is for the stubborn ones, and there are always a few.