Ebook: Understanding the Shop Floor — now on Gumroad
Industrial technology, indexed.
Industrial automation · manufacturing · OT — updated 2026-09-25

Modbus RTU CRC & frame helper

Compute Modbus RTU CRC-16, append it to a frame, and convert between register numbers and protocol addresses.

Hex bytes may be separated by spaces, colons, or dashes. CRC is appended low byte first.

CRC-16 (Modbus)

CRC 0xCDC5

Frame01 03 00 00 00 0A
CRC on wire (low first)C5 CD
Full frame01 03 00 00 00 0A C5 CD

Address converter

Documentation40001 — Holding register
Protocol address0 (0x0000)
Function codes03 (read) · 06/16 (write)

Every Modbus RTU frame ends with a 16-bit CRC (polynomial 0xA001, init 0xFFFF), transmitted low byte first. If the CRC is wrong, the slave stays silent — there is no error reply, only a timeout. This tool computes the CRC for any frame you paste, so you can verify what your master sent or build test frames by hand.

The two classic mistakes

Byte order. The CRC goes on the wire low byte first. A frame ending … C5 CD carries CRC 0xCDC5. Swapping the bytes is the most common reason a hand-built frame gets no answer.

Off-by-one addressing. Documentation says "holding register 40001"; the protocol address in the frame is usually 0 (some vendors mean 1 — check the manual). The address converter below translates between documentation numbering (40001-style, 30001-style, 00001, 10001) and the protocol address with the matching function code.

Function code quick reference

See also

Cite this page: Modbus RTU CRC & frame helper, Shopfloor. https://shopfloor.space/tools/modbus-crc-frame/

Share: X · LinkedIn · Facebook · Hacker News · Email