DALI · API access
Modbus slave register map
The exact registers a SCADA system or PLC reads from a station's Modbus slave, with data types, byte order, parameter order and error responses.
A station can act as a Modbus slave, so a SCADA system, PLC or other Modbus master can poll it for the latest values. The same register map is served on all three slave ports: TCP, RS-485 and RS-232. You turn each one on and set it up on the Modbus page; each slave tab also shows this map for the station's current parameters, under Slave Information.
The rules in short
- Function code 4 only (Read Input Registers). Any other function code gets exception 01.
- Read-only. Nothing a master sends can change the station.
- Addresses are zero-based protocol addresses. If your SCADA package numbers input registers from 30001, register 0 here is 30001 there.
- Floating-point values are 32-bit, in two registers, byte order CDAB: the low 16-bit word first, each word most significant byte first. Some tools call this "Float, little-endian, byte swap" or "word swapped".
- At most 125 registers per read.
- Values refresh once per second.
Register map
| Registers | Content | Data type |
|---|---|---|
| 0 | Year | Unsigned 16-bit |
| 1 | Month | Unsigned 16-bit |
| 2 | Day | Unsigned 16-bit |
| 3 | Hour | Unsigned 16-bit |
| 4 | Minute | Unsigned 16-bit |
| 5 | Second | Unsigned 16-bit |
| 6 to 7 | Network status: the cellular signal strength value reported by the station's modem | Float, CDAB |
| 8 to 9 | Latitude, in degrees | Float, CDAB |
| 10 to 11 | Longitude, in degrees | Float, CDAB |
| 12 to 13 | Altitude, from GPS | Float, CDAB |
| 14 to 25 | Reserved. Reads return 0. Do not rely on them. | |
| 26 onwards | Parameter values, two registers each, in parameter order | Float, CDAB |
| 3000 onwards | Parameter quality, one register each, in parameter order (firmware 4.1 and later) | Unsigned 16-bit |
The time in registers 0 to 5 is the station's local date and time when the values were published.
Latitude and longitude are the station's location as set on the Device page (entered by hand, or taken from GPS). Altitude always comes from the GPS.
Parameter registers
Parameter number n (its position on the Parameters page, starting at 1) is at:
| Register | |
|---|---|
| Value, first register | 26 + 2 × (n − 1) |
| Value, second register | 27 + 2 × (n − 1) |
| Quality (4.1 and later) | 3000 + (n − 1) |
So parameter 1 is at 26 and 27, parameter 2 at 28 and 29, parameter 10 at 44 and 45. The slave serves up to 255 parameters, which ends at registers 534 and 535.
Each value is rounded to the number of decimals set for that parameter, the same as in a downloaded file.
Worked example
A value of 812.5 is the 32-bit float 0x444B2000. The station sends it as:
| Register | Hex | Bytes |
|---|---|---|
| 26 | 0x2000 | C D |
| 27 | 0x444B | A B |
A master set to "ABCD" (big-endian) byte order would read the two words the wrong way round and show a meaningless number. Set it to CDAB.
Quality registers and stale values
On firmware 4.1 and later, each parameter also has a quality register:
| Quality | Meaning |
|---|---|
| 1 | Fresh: read from the sensor in this cycle |
| 0 | Held: the last good value, between reads |
| 2 | Stale: the sensor has stopped answering |
When a value is stale, or its sensor has not answered at all since the station started, the value registers hold NaN (not a number) rather than the last reading, so a real zero is never confused with missing data. If your master cannot handle NaN, switch Device, Storage, Stale Value Representation off to send 0 instead. That setting also changes downloads and cloud uploads.
Registers from 4000 are reserved for sensor calibration status in a later release. Do not build on them yet.
Setting the parameter order
The register a parameter lives at is set by its position on the Parameters page:
- 1
Open Parameters. The # column is each parameter's position and the Addr column is its first register on the Modbus slave.
- 2
Drag a row by its grip, or double-click its number to type a new position. Clear any Type filter first; reordering is only possible with the full list showing.
- 3
Click Save Order. The new order applies to the Modbus slave, to the column order of downloaded files, and to Live3.
Reordering moves registers
Adding, deleting or reordering parameters changes the registers of every parameter after the change. Update the mapping in your SCADA system whenever you change the list, and check the Addr column afterwards.
How reads are checked
| You send | The station answers |
|---|---|
| A function code other than 4 | Exception 01, illegal function |
| A read of 0 registers, or more than 125 | Exception 03, illegal data value |
| An odd number of registers anywhere in registers 0 onwards up to the last parameter | Exception 03. Read the header and values in whole pairs. |
| A read that runs past the last configured parameter, or past the last quality register | Exception 02, illegal data address |
| A read in the unused ranges between blocks | Exception 02 |
| Any read beyond register 25 before the station has published its first values after starting | Exception 02, until the station publishes its first values |
Reads of the quality block may be any length within the configured parameters.
Connection settings
| Setting | TCP slave | RS-485 and RS-232 slaves |
|---|---|---|
| Protocol | Modbus TCP | Modbus RTU |
| Slave ID | 1 to 255 | 1 to 255 |
| Port | Default 502, 1 to 65535 | |
| Slave ID Match | Ignored by default: any unit ID is accepted. Can be set to Enforced. | |
| Baud rate | 9600, 19200, 38400, 57600 or 115200 | |
| Parity | None, Even or Odd | |
| Stop bits | 1 or 2 | |
| Data bits | 8 | |
| Simultaneous connections | Up to 5 |
Modbus has no sign-in or encryption of its own. Allow port 502 only from your SCADA network, and turn off any slave you do not use. See Security.