What is a Modbus register map?
A Modbus register map — also called a register list, address list, point list, or Modbus table — is the document that says what each numbered slot inside a piece of equipment actually means. A row of it says something like “holding register 40007, 16-bit signed, multiply by 0.1, degrees Fahrenheit, leaving water temperature”. Without it, a Modbus device is a list of meaningless numbers; the protocol itself carries no names, no units and no data types. It is the single most important document in any Modbus integration, and it comes from the equipment manufacturer.
What a usable register map contains
A map that someone can actually work from has at least these columns. If a vendor sends you one missing the middle three, send it back.
| Column | Why it matters |
|---|---|
| Description / name | What the value is. “Supply air temperature”, not “AI_07”. |
| Register type | Holding register, input register, coil, or discrete input. Decides which request is used and whether it can be written. |
| Address | The slot number — and ideally a note about which numbering convention is being used, because there are three. See the addressing guide. |
| Data type | 16-bit signed, 16-bit unsigned, 32-bit float, 32-bit integer, ASCII text, one bit of a word. Guessing wrong produces a wrong number, not an error. |
| Word order | Only for values spanning two or more registers. Usually written as ABCD or CDAB. Getting it wrong produces wild nonsense. |
| Multiplier / scaling | Many devices report tenths or hundredths. A raw 725 with a multiplier of 0.1 is 72.5. |
| Units | Degrees F, degrees C, percent, kW, kWh, ppm, PSI. A number without units is not information. |
| Read / write | Whether you are allowed to change it, and what range is acceptable. |
| Enumerations | For mode registers: 0 = Off, 1 = Heat, 2 = Cool. Otherwise “2” tells you nothing. |
A worked example
Three rows from a realistic map, and what each one is telling you:
| Description | Type | Address | Data type | Scale | Units |
|---|---|---|---|---|---|
| Supply air temperature | Holding | 40001 | INT16 | 0.1 | °F |
| Fan power | Holding | 40007 | FLOAT32 CDAB | 1 | kW |
| Filter alarm | Holding | 40006 bit 2 | Bit | — | 0 = clear, 1 = dirty |
- Row one. Read holding register address 0 (40001 means the first holding register, counting from one). You get back a whole number like 552. Multiply by 0.1 and you have 55.2°F. INT16 means it is signed, so the value can go below zero — which matters for an outside air sensor in January.
- Row two. Read two registers starting at 40007, because a 32-bit float does not fit in one. CDAB means the two halves arrive in the opposite order to the obvious one; read it the other way and you get something like 3.6×10-41 instead of 12.75.
- Row three. Read one register and look at a single bit of it. Devices routinely pack a dozen unrelated alarms into the sixteen bits of one register.
Why everybody keeps asking you for one
Because nothing can be done without it. An analytics platform, a new building management system, a tenant billing system, a monitoring service, or a contractor replacing a controller all need to know what exists before they can read anything. And unlike a BACnet system, nobody can simply ask the equipment. See a vendor asked for my Modbus information — what do I send?
If you do not have one
How do I find my Modbus register map? covers the four places to look, in order of how likely they are to work, and what to do when all four fail.