Response FC = request FC + 0x80, one data byte carries the code. Definitions are everywhere; the third column is what matters.
| Code | Name | Most likely cause · check first |
| 01 | Illegal Function | Device doesn't implement that FC. Check the manual's supported-FC list; try 03 instead of 04 (or vice versa). |
| 02 | Illegal Data Address | Start address or quantity runs past the map. Nine times out of ten it's the 40001-vs-0-based offset — subtract 1 and retry. |
| 03 | Illegal Data Value | Quantity of 0, >125 registers, or a write value outside limits. Check the count field before the payload. |
| 04 | Slave Device Failure | Device-internal fault while answering. Power-cycle the slave; check its own error indicators. |
| 05 | Acknowledge | Long-running command accepted, not finished. Poll again later — not an error. |
| 06 | Slave Device Busy | Retry with backoff. If constant, another master or a firmware task is hogging it. |
| 08 | Memory Parity Error | Device memory fault on file-record access. Usually a dying device. |
| 0A | Gateway Path Unavailable | The TCP→RTU gateway can't route. Check gateway config and the serial side's wiring. |
| 0B | Gateway Target Failed | Gateway is fine, the serial slave behind it didn't answer. Debug the RTU segment: address, baud, A/B lines. |