Exception Code 01 means your slave device received your request, understood the addressing, but does not support the function code you sent. The good news: communication is working. The bad news: you're speaking the wrong dialect.
Getting an exception response actually means your physical layer, slave address, and communication parameters are all correct. You're 90% of the way there.
What Exception Code 01 Means
When a Modbus slave receives a request with a function code it doesn't recognise or doesn't implement, it responds with the original function code OR'd with 0x80 (setting the high bit), followed by exception code 0x01. For example, if you sent FC06 (Write Single Register) and the device only supports FC03/FC04 for reading, you'll get back function code 0x86 with exception 0x01.
Common Causes
1. Using FC03 when the device expects FC04 (or vice versa)
This is the most common cause. FC03 reads Holding Registers, FC04 reads Input Registers. Some devices implement their measurement data on FC04 only, while others use FC03. The register map document will specify which function code to use — but engineers often assume FC03 without checking.
2. Trying to write to a read-only device
Many Modbus slaves (especially sensors and meters) only implement read function codes. Sending FC06 (Write Single Register) or FC16 (Write Multiple Registers) will trigger exception 01.
3. Device has limited Modbus implementation
Some cheap or older devices only implement a subset of Modbus function codes. They may only respond to FC03 with specific register ranges and reject everything else.
4. Modbus ASCII vs RTU mismatch
If your master sends Modbus ASCII frames to an RTU-only device, the device may partially decode the frame and reject the "function code" it finds (which is actually part of the ASCII encoding, not a real function code).
How to Fix It
Check the device's Modbus documentation for which function codes are supported. If you were using FC03, try FC04. If you were trying to write, confirm the device supports write operations. If the documentation isn't clear, try each common function code (01, 02, 03, 04) with a simple read of register 0 and see which ones respond without exceptions.
Correct function codes, every time
ModBus Pro includes 80+ built-in device register maps with the correct function codes already configured. No guessing which function code to use for each register.
Download FreeQuick Function Code Reference
The most commonly used Modbus function codes in industrial applications:
FC01— Read Coils (digital outputs)FC02— Read Discrete Inputs (digital inputs)FC03— Read Holding Registers (the most common for analog data)FC04— Read Input Registers (read-only analog data)FC05— Write Single CoilFC06— Write Single RegisterFC15— Write Multiple CoilsFC16— Write Multiple Registers