Most intermittent RS-485 faults (timeouts, CRC errors, garbage bytes) come from the physical layer, not from the code. Check the bus in this order: the real topology, the termination (about 60 Ω between A and B with the power off), the bias (at least 200 mV between the lines on an idle bus), the common reference, and the cable and shield. Look at the Modbus RTU settings only after these five checks pass.
This guide is for a bus that works, but not always: Modbus RTU slaves that drop out every few hours, frames with a bad CRC, a bus that is stable on the bench and unstable in the plant. Five of the six checks need only a multimeter. The checks are the same for any PLC, drive, meter or gateway with an RS-485 port.
If the bus never worked, start with the port itself: RS485 port setup on Industrial Shields PLCs (switches, jumpers and a test sketch) and Basics about RS-485 of an industrial PLC.
- Step 1TopologyA line from node to node, short stubs, no star
- Step 2TerminationAbout 60 Ω between A and B, power off
- Step 3BiasAt least 200 mV on the idle bus, one point only
- Step 4Common referenceThird wire or isolation between distant nodes
- Step 5Cable and shield120 Ω twisted pair, away from VFD outputs
- Step 6Modbus settingsSerial settings, addresses, timing, timeouts
RS-485 fault symptoms, likely causes and the first test
Write down the symptoms before you change anything. The pattern points to the first check.
| Symptom | Likely cause | First test |
|---|---|---|
| No slave answers, from the first day | A and B swapped, different serial settings, wrong address | Swap A and B at one device, compare baud rate and parity (step 6) |
| Stable on the bench, errors in the plant every few hours | Reflections, ground differences, noise | Draw the real topology, then steps 2, 4 and 5 |
| CRC errors grow with distance, the farthest node fails most | Wrong or missing termination, long stubs | 60 Ω test (step 2) |
| Garbage bytes or framing errors between frames | No bias: the idle bus floats | Idle voltage between A and B (step 3) |
| Errors when motors or VFDs start | Common-mode voltage out of range, cable next to power cables | Voltage between the grounds of two nodes (step 4), routing (step 5) |
| Errors start after a device is replaced | The new device has its termination or bias enabled | 60 Ω test, check its DIP switches |
| Only one slave fails | That device: address, settings, its stub or its connector | Error counter per slave (step 6) |
| The slave answers with an exception code | The bus works: wrong register or function code | Check the register map of the slave (step 6) |
Why does an RS-485 bus fail only sometimes?
RS-485 (TIA/EIA-485) is a differential physical layer. The data is the voltage difference between two wires, A and B (also called D+ and D-), not the voltage between one wire and ground. Noise that reaches both wires in the same way cancels out. Four facts explain most intermittent faults:
- It is a transmission line. On a plant-length cable, typical twisted pair has a characteristic impedance of about 120 Ω. A star point, a long stub, or a missing or extra termination changes the impedance and causes reflections. Reflections add to the signal and corrupt bits.
- Differential does not mean isolated. A standard RS-485 receiver works with a common-mode voltage from -7 V to +12 V relative to its own ground. If two nodes have different ground potentials, this margin runs out and the receiver reads wrong data, even when the signal between A and B is perfect.
- The plant is not the bench. A bench bus has 3 m of cable, one power supply and no drives. The plant adds length, noise from VFDs and ground differences. The fault appears when these add up, so it looks random.
- RS-485 is not Modbus RTU. RS-485 defines the electrical signal. Modbus RTU is the protocol that travels on it. A CRC error is a Modbus symptom, but its cause is usually electrical.
So the checks below follow the five physical causes first (topology, termination, bias, common reference, cable), in order of likelihood and ease of test. The protocol comes last.
Six RS-485 checks, in order
Do the checks in this order. Each one removes a cause, and the first five need only a multimeter and the cable drawing.
Step 1: draw the real topology
Follow the cable and draw how it is really installed, not how the drawing shows it.
- RS-485 is a line (daisy chain): master to slave 1, slave 1 to slave 2, and so on to the last node. No branches.
- Every stub reflects part of the signal. Keep stubs as short as possible. A common rule of thumb is under 30 cm. Low baud rates (9600 to 19200) tolerate more, but a star with branches of tens of meters can fail at any speed.
- If the site needs several long branches, use one RS-485 repeater per branch, and terminate each branch as its own bus.
A star topology is suspect number one. Continue with the other checks anyway: a bus often has more than one fault.
Step 2: measure the termination (the 60 Ω test)
The bus needs two 120 Ω termination resistors, one at each physical end of the line. Not one, not three, and not in the middle of the bus.
With all devices powered off, measure the resistance between A and B at any point of the bus with a multimeter:
| Reading between A and B (power off) | Diagnosis |
|---|---|
| About 60 Ω | Correct: two 120 Ω terminations in parallel |
| About 120 Ω | One termination is missing, or you measure only part of the bus |
| About 40 Ω or less | Extra terminations: three or more resistors are enabled |
| Very high or open circuit | No termination, or the cable is broken |
Look for hidden terminations. Many PLCs, drives and gateways have a built-in resistor, enabled with a DIP switch or a jumper. Write down which devices have it on. A typical case: a drive in the middle of the bus is replaced, and the new one ships with its termination enabled. Many low-cost MAX485 boards also have a 120 Ω resistor on the board (see MAX485 module with an Arduino PLC).
You can skip termination only on very short buses (a few meters) at low baud rates. In a plant, always terminate: it costs nothing and removes a whole family of faults.
Step 3: check the bias on the idle bus
When no node transmits, all drivers are off. On a terminated bus, the voltage between A and B then falls close to 0 V. The RS-485 receiver threshold is ±200 mV, so between -200 mV and +200 mV the receiver output is undefined and noise is read as start bits. Typical result: garbage bytes between frames and framing errors.
The fix is bias (fail-safe biasing): a pull-up resistor on the + line and a pull-down resistor on the - line, at one point of the bus, usually at the master. The two bias resistors and the two 120 Ω terminations form a voltage divider:
Idle voltage = Vcc × 60 Ω / (2 × Rbias + 60 Ω)
| Each bias resistor | Idle voltage at 5 V | Idle voltage at 3.3 V |
|---|---|---|
| 390 Ω | 357 mV | 236 mV |
| 560 Ω | 254 mV | 168 mV |
| 680 Ω | 211 mV | 139 mV |
| 1 kΩ | 146 mV | 96 mV |
These values do not include the load of the receivers, and every node lowers the voltage a little, so keep a margin above 200 mV. With two 120 Ω terminations, a 1 kΩ pair is not enough, even at 5 V. At 5 V, 390 Ω to 560 Ω per resistor gives a good margin. At 3.3 V you need 390 Ω or less.
Test: power on the system, stop all traffic, and measure the DC voltage from the + line to the - line. You need at least 200 mV, stable. Near 0 V means there is no bias. Enable bias at one point only: bias at many nodes loads the drivers and distorts the levels.
A, B, + and -. Manufacturers do not use the letters A and B in the same way. Most mark the non-inverting line as A, A+ or D+, but the TIA/EIA-485 standard uses the opposite letters. Follow the + and - marks. If the bus stays silent, swap A and B at one device first.
Some newer transceivers have receivers that read 0 V as idle (true fail-safe receivers). If every receiver on the bus has this feature, external bias is not needed. The MAX485 is not one of them: its fail-safe works only when the inputs are open.
Step 4: check the common reference and isolation
This is the least-known cause, and it gives the faults with no pattern: the errors depend on which motors start in another part of the plant.
- The common-mode range of the receiver is limited (-7 V to +12 V). Between two buildings, two cabinets with different supplies or two distant earth points, the difference can be larger, and it changes with the load.
- Design fix: a third wire for the common reference, connected to the signal common of each transceiver (the third core of the cable). On long buses, connect it through a resistor of about 100 Ω at each node to limit loop currents.
- Robust fix: galvanically isolated RS-485 transceivers or isolated repeaters, for large plants, buses between buildings and areas with many VFDs. Isolation breaks the ground loop: each node sees the bus, not the ground of its neighbor. If the bus joins areas with separate power supplies, use isolation.
Rough test: disconnect the bus at one node, then measure AC and DC voltage between the signal ground of two distant nodes. Several volts, or a reading that jumps when machines start, means a common-mode problem.
Step 5: check the cable, the shield and the routing
- Twisted pair, always. Twisting makes the noise reach both wires in the same way, so it cancels out. A parallel power cable used as a bus acts as an antenna.
- Characteristic impedance of about 120 Ω. Use cable made for RS-485 or Modbus, or an equivalent shielded twisted pair. The termination must match the cable: a 100 Ω cable with 120 Ω terminations already gives a small reflection.
- Shield to earth at one end (the main cabinet), to avoid loops through the shield. Connect it at both ends only where the site has good equipotential bonding. A shield that is not connected does not shield.
- Routing: use a separate tray from the power cables. If you must cross motor cables, cross at 90°. The output of a VFD is the strongest noise source in most cabinets: keep distance, and use a shielded motor cable as the VFD manual specifies.
- Length and speed: the usual guide value is 1200 m at up to 100 kbps. At 9600 baud the margin is large: total length is rarely the cause.
Step 6: only now, check the Modbus RTU settings
If the physical layer passes the five checks and errors continue, check the protocol layer:
- Same serial settings on every node: baud rate, data bits, parity and stop bits. The Modbus serial line default is 8 data bits with even parity. Without parity, the standard asks for 2 stop bits, but many devices use 8N1. One node with different settings gives framing and CRC errors.
- No duplicate addresses. Two slaves with the same address answer at the same time and corrupt each other.
- Silence between frames: Modbus RTU ends a frame after 3.5 character times of silence. A master that sends the next request too early, or a USB to RS-485 converter that adds gaps inside a frame, breaks this rule.
- Timeouts and counters: set the timeout for the slowest slave, limit the retries, and keep an error counter per slave in your diagnostics. A counter per slave shows in one afternoon if the fault is in one section of the bus or in one device.
- Exception responses: an answer with the function code plus 0x80 (for example 0x83 for function 03) means the bus works. The slave received the request and refused it. Check the register address and the function code, not the cable.
- Direction control: with a transceiver module driven by your own code (DE and RE pins), release the bus only after the last byte has left the UART, or the CRC is cut. See direction control with a MAX485 module.
| Baud rate | One character (11 bits) | 3.5 characters of silence |
|---|---|---|
| 9600 | 1.15 ms | 4.0 ms |
| 19200 | 0.57 ms | 2.0 ms |
| Above 19200 | Less than 0.57 ms | Fixed value of 1.75 ms recommended by the Modbus serial line guide |
If you have an oscilloscope, use it before any software tool. Measure the differential signal at the farthest node: reflections, weak levels and coupled noise are visible at once. Clean edges and stable levels mean a healthy physical layer.
A real case: twelve Modbus RTU slaves on a star topology
This checklist comes from a support case that we described in our newsletter, with the permission of the integrator. A PLC polled twelve Modbus RTU slaves over RS-485: drives, an energy meter and temperature sensors. On the bench, weeks without one error. In the plant, timeouts and CRC errors every few hours, with no pattern. Three weeks of code changes reduced the symptoms but fixed nothing.
Photos of the cabinet and the cable run showed the cause: a star topology with three branches, terminations in the wrong places, one branch with untwisted, unshielded cable in the same tray as a VFD output, and slaves on different power supplies with no common reference. The integrator rebuilt the bus as a line, with shielded twisted pair, two 120 Ω terminations at the real ends and a third wire as common reference. There have been no errors since, and the code went back to its first version.
Design rules for a stable RS-485 bus
- Design the bus on paper before you cut cable: line topology, position of the two terminations, one bias point, common reference and routing.
- Use shielded twisted pair of the right impedance, and connect the shield to earth on purpose, not by chance.
- Use short stubs or repeaters. Never a star topology.
- Always run a common reference between nodes. Use galvanic isolation if the bus crosses areas with separate power supplies.
- Document which devices have termination and bias enabled. The technician who replaces a drive in five years will need it.
- In the program: timeouts, limited retries and error counters that operators can read. The bus will fail one day; the counters tell you where.
Intermittent communication faults are almost never a software problem. If you cannot reproduce the error on demand, start with the cable.
RS-485 and Modbus RTU on Industrial Shields PLCs
The checks above apply to any brand. If the master or the gateway on your bus is an Industrial Shields PLC, these pages cover the port side and the code:
- RS-485 with Arduino and ESP32 based PLCs: half and full duplex, switches and code.
- How to work with RS485 with a Raspberry PLC
- Modbus RTU with Arduino and ESP32 based PLCs and the Modbus RTU master library
- Modbus RTU vs Modbus TCP vs OPC UA: when a serial bus is still the right choice.
Working examples in the PLC Solution Library: Modbus RTU master on an ESP32 PLC with timeouts (from a textile machine monitoring project), VFD speed control over Modbus RTU with an M-Duino PLC and a Modbus TCP to RTU gateway on an M-Duino PLC. The conveyor belt speed control case study uses an M-Duino 42+ with a frequency inverter, with RS-485 and Modbus RTU as the fieldbus option.
For the electrical details of termination, bias, bus load and grounding, see The RS-485 Design Guide (Texas Instruments, SLLA272).
Take the checklist to the cabinet. Our 15-point checklist for power, wiring, protection, communications and mounting, in a free printable PDF: From Arduino prototype to industrial installation.
The M-Duino family (Arduino PLC) has Ethernet and RS-485 on every model, so one PLC can be the Modbus RTU master of the field bus and talk to the SCADA over Ethernet. See the M-Duino 21+ product page for the technical documentation.
Get the free checklistSee the Arduino PLC familyAsk an engineer about your bus
Take it further
Once the bus works, see the same RS-485 and Modbus RTU ideas in a real network, in a simulator where you can break it and in code.
Case study
Many thermometers. One Modbus network.
Local M-Duino PLCs read Modbus RTU thermometers on RS-485, and a main PLC collects the readings over Modbus TCP.
Read the case study
Simulator
Run a Modbus RTU and TCP network and find the fault
An M-Duino 21 polls four Modbus RTU slaves on RS-485 and serves the data on Modbus TCP. Switch a slave off or change the baud rate and find the fault in the frames.
Open the simulator
PLC Solution Library
Polling Modbus RTU slaves with timeouts and 32-bit values
A generic Modbus RTU master function for an ESP32 PLC that returns the registers, or an empty answer on failure, with helpers for 32-bit values.
See the example
FAQ about RS-485 troubleshooting
What resistance should I measure between A and B on an RS-485 bus?
About 60 Ω, with all devices powered off. That is two 120 Ω terminations in parallel. About 120 Ω means one termination is missing. About 40 Ω or less means there are too many.
What voltage should an idle RS-485 bus have?
At least 200 mV between the + line and the - line, with no traffic. Near 0 V means the bus has no bias, and the receivers can read noise as data.
Do I need termination resistors at 9600 baud?
A bench cable of a few meters often works without them. In a plant, always use one 120 Ω resistor at each end of the line. The bias calculation also counts on them.
Why do I get CRC errors only when motors start?
Usually a ground potential difference between nodes that pushes the receivers out of their common-mode range (-7 V to +12 V), or bus cable that runs next to VFD outputs. Add a common reference wire or isolation, and separate the cable from power cables.
Should the RS-485 shield be connected to earth at both ends?
Connect it at one end, usually the main cabinet. Connect both ends only if the site has good equipotential bonding. Without it, a shield connected at both ends carries ground loop currents.
How many devices can one RS-485 segment have?
32 unit loads without a repeater. Transceivers with 1/4 or 1/8 unit load allow up to 128 or 256 devices. Modbus RTU slave addresses go from 1 to 247.
Is RS-485 the same as Modbus RTU?
No. RS-485 is the physical layer: the voltages, the cable and the termination. Modbus RTU is a protocol that often runs on RS-485. Most intermittent Modbus RTU errors have an RS-485 cause.