✅ Register Map Basics · No Hardware Needed

Modbus Register Map Guide: How to Read, Write, and Verify Registers

When a PLC manual says 40001, your master tool says address 0, and the HMI shows garbage on a 32-bit float, the problem is usually the register map. This guide shows you how to read the map correctly and test it before the real device arrives.

⬇ Download Free Trial Read FAQ ↓

Quick answer: A Modbus register map tells you which addresses exist, which function code to use, whether the value is read-only or writable, and how to scale the raw number into engineering units. If the map is wrong, everything built on top of it is wrong.

What a register map actually contains

A proper register map is more than a list of numbers. It should tell you:

When those fields are missing, engineers start guessing. Guessing leads to mismatched addresses, exception responses, and dashboards that look fine but show the wrong values.

Register types and the notation problem

Modbus uses four logical data areas. The prefix in the human-readable notation tells you the category, not the raw address on the wire.

TypeCommon labelTypical function codeWritable?
Coil0xxxxFC01 / FC05 / FC15Usually yes
Discrete input1xxxxFC02No
Input register3xxxxFC04No
Holding register4xxxxFC03 / FC06 / FC16Usually yes

The common trap is to assume that 40001 means the number you send to the device. It does not. It usually means the first holding register in the vendor's display notation. Many tools convert this to PDU address 0 before sending the request.

Example: how to read a simple map

Suppose a meter manual lists these items:

PointRegisterTypeScaleMeaning
Voltage L140001UINT160.1230.5 V
Current L140002UINT160.0112.34 A
Total kWh40010-40011FLOAT3211,248.6 kWh

On the wire, your master may send address 0 for 40001, address 1 for 40002, and address 9 for the first register of the 32-bit float pair. If your software asks for 40010 literally, but the library expects zero-based offsets, the request will point at the wrong place.

How to avoid the off-by-one problem

The safest habit is to ask one question for every register map: does this tool want display notation or PDU notation?

If the tool says “Holding Register 40001” and you enter 40001, you may already be wrong. If it says “Address” and the examples start at 0, it likely wants the PDU offset. If the tool asks for “Register number” and starts with 1, it may want the human-facing label. Always test a known value first.

Practical test: Put a known value in the simulator at one address, read it with your master, and confirm the exact wire address in the log. If you get the right number at the wrong displayed register, the map translation is wrong.

32-bit values, word order, and byte order

Many register maps use two 16-bit registers for one 32-bit value. That creates two separate sources of confusion:

Four common layouts appear in the field: ABCD, BADC, CDAB, and DCBA. If your float looks absurd, the register number may be correct and the word order may be wrong.

Example workflow for a float

  1. Read the raw two-register pair.
  2. Check the manual for word order notes.
  3. Try the vendor's recommended order first.
  4. If the result is nonsense, swap the words before changing the address.

Common register map mistakes

These mistakes are common because the map is often the only source of truth. If the map is ambiguous, the HMI or PLC code inherits that ambiguity.

How to test a register map before installation

Before the real PLC, meter, or drive shows up, load the map into ModbusSimulator and test the master software against it. That lets you verify:

If the master works perfectly against the simulator but not the field device, the problem is in the real device, wiring, or vendor-specific map notes. If it fails in the simulator too, the problem is in your interpretation of the map.

Mini checklist for reading any Modbus register map

  1. Confirm the register type first.
  2. Confirm whether the address is zero-based or display-based.
  3. Check the required function code.
  4. Check whether the point is read-only or writable.
  5. Check the scale factor and units.
  6. Check the word order for multi-register values.
  7. Test a known value in software before using real hardware.

Test the map before the PLC arrives

Load your register table into ModbusSimulator, bind the tags, and verify every address, type, and scale value before the real device is installed.

Download ModbusSimulator

Frequently Asked Questions

Do all Modbus devices use 40001-style register numbers?

No. Many manuals use 40001 notation because it is familiar to engineers, but some tools and APIs use zero-based offsets only. Always check the vendor's documentation and the software's input format before entering the address.

Can I write to input registers?

No. Input registers are read-only by definition. If you try to write to them, the device usually rejects the request with an exception code or silently ignores it.

Why do some manuals say register 1 and others say register 0?

That difference comes from notation style. Some vendors number the first visible register as 1 for humans, while the protocol payload uses 0. The key is consistency within the same toolchain.

How do I find the correct address for a float?

Look for the starting register and the data type. A float usually spans two registers, so the starting address is the first of the pair. Then confirm the word order and byte order before reading the value.

What if the value is correct but the units are wrong?

That usually means the scale factor is being ignored. A raw value of 2305 may actually mean 230.5 V if the map says multiply by 0.1.

Can ModbusSimulator help me with register map debugging?

Yes. It lets you place known values at specific addresses, mirror the vendor's map, and validate the master side before any hardware is connected. That is the fastest way to isolate whether the mapping or the device is at fault.