Modbus RTU CRC-16 calculator
Enter the frame bytes before the CRC. Example: 01 03 00 00 00 0A.
Modbus RTU transmits the CRC low byte first, then the high byte.
Calculate a Modbus RTU CRC, convert 4xxxx register references and decode 32-bit Float values without installing anything. All calculations run locally in your browser.
Quick answer: Modbus RTU uses CRC-16/MODBUS: initial value 0xFFFF and reflected polynomial 0xA001, calculated over every byte from the slave ID to the last data byte. The 16-bit result is appended low byte first, so for 01 03 00 00 00 0A the CRC is 0xCDC5 and the frame ends C5 CD.
Enter the frame bytes before the CRC. Example: 01 03 00 00 00 0A.
Modbus RTU transmits the CRC low byte first, then the high byte.
Convert classic documentation references such as 40001 into a zero-based protocol offset.
Manufacturer conventions vary. Confirm whether the device manual uses 0-based offsets, 1-based offsets or 3xxxx/4xxxx references.
Enter four bytes exactly as they appear across two consecutive 16-bit registers. Select how the device stores the IEEE-754 Float32 value.
If the result is unrealistic, try the other three byte orders. See the Float32 & byte-order guide for the underlying concept.
A correct CRC proves the frame bytes were calculated consistently; it does not prove the serial wiring or slave configuration is correct. Likewise, a plausible Float32 result confirms only one possible interpretation of two registers. Use the tools together with the device manual and a live communication log.
To see the frames that actually went over the wire, including the CRC, ModbusBB 2.0 has a Traffic Monitor with the raw TX/RX hex of every request and response. The CLI can also build a frame without sending it: ModbusBB.CLI raw --rtu COM3 --unit 1 --fc 3 --data "00 00 00 0A" --dry-run prints 01 03 00 00 00 0A C5 CD. See the CLI reference.
For field faults, continue with the timeout checklist, RS-485 wiring guide and exception-code reference.
Low byte first. Modbus RTU appends the low-order CRC byte and then the high-order byte, the opposite of the big-endian order used for register values. For the request 01 03 00 00 00 0A the CRC is 0xCDC5, transmitted as C5 CD.
Subtract 40001 for holding registers (or 30001 for input registers): 40001 becomes address 0 and 40100 becomes 99. Confirm that the device manual uses this convention, because some vendors already list zero-based offsets.
No. All calculations run locally in your browser with JavaScript, and nothing you type is uploaded.
Poll several devices at once over TCP, UDP, RTU, ASCII or RTU-over-TCP. Read and write registers, decode Float32/64 and strings, inspect raw TX/RX frames, trend values and simulate devices from Windows or the command line.