Common Modbus problems and how to find them
No response, CRC errors, exception 02, meaningless values, off-by-one registers — step-by-step diagnostics for Modbus RTU and TCP.
Work bottom-up: physical line → communication settings → addressing → data interpretation.
1. No response (timeout)
| Cause | How to check |
|---|---|
| Baud rate, parity or stop bits differ | compare client and device settings; the specification default is 19200, 8E1 |
| Wrong device address | addresses 1…247; address 0 is broadcast and never answered |
| A/B (D0/D1) lines swapped | vendor labelling differs; try swapping |
| No termination or polarization | long lines without terminations produce errors; polarization at one point |
| CRC or parity error in the request | per the specification a server that detects a communication error does not respond |
| Modbus TCP: wrong Unit ID | some devices expect a specific value (1, 0, 255) |
| Timeout too short | allow for device processing time and gateway delay |
2. Response with a CRC error
- Noise: shield, single-point grounding, separation from power cables.
- Several devices with the same address answer at once.
- Two clients on one RS-485 line — the protocol does not allow it.
- Gaps inside a frame longer than 1.5 characters (slow USB converters, byte-by-byte software transmission).
Paste the received frame into the Modbus RTU Frame Parser: if the CRC is invalid, compare "CRC bytes in frame" with "Expected CRC bytes". If they match but are swapped, the sender uses the wrong CRC byte order.
3. Exception 02 (ILLEGAL DATA ADDRESS)
Communication works, but the address does not exist:
- off-by-one (40001 ↔ address 0, see addressing);
- wrong table (function 03 instead of 04 or vice versa);
- the request block covers non-existent addresses — reduce the quantity;
- the address is hex but was entered as decimal.
4. The value is meaningless
Check the data type and word order first:
- a huge or tiny number instead of the expected one (e.g. 5.45e+23 instead of 123.45) — wrong FLOAT32 word order;
- a value near 65535 or negative where a small positive value is expected — wrong signedness;
- a value 10/100 times too large — scaling from the register map not applied;
- the value of a neighbouring parameter — off by one register.
Enter the raw registers into the Modbus Data Converter: it shows all interpretations and byte orders at once. See also Byte and word order.
5. Intermittent communication
- Polling period shorter than the device response time — requests overlap.
- Bus load: at 9600 bit/s reading 10 registers (8-byte request + 25-byte response) takes about 40 ms of transmission alone, plus gaps and device processing time, and a bus may carry dozens of such requests.
- Several clients behind one Modbus TCP → RTU gateway create a queue.
- Reused TCP connections are closed by the device after an inactivity timeout.
Minimum diagnostic kit
A passive line monitor (RS-485 sniffer, or Wireshark for Modbus TCP), the register map and a proven client tool. Record raw frames — they show unambiguously which side is at fault.
Connections
Open in Knowledge Graph →Loading the map…
Sources
- MODBUS over Serial Line Specification and Implementation Guide V1.02 — Modbus Organization
- MODBUS Application Protocol Specification V1.1b3 — Modbus Organization
Updated 2026-10-01