WB-MAI6 Modbus register map
Modes
WB-MAI6 allows these operating modes to be configured for each input:
- Voltage measurement — differential or single-ended.
- Resistance measurement — differential or single-ended.
- Current measurement — single-ended only.
Table 3 fully describes the basic operating modes used for standard sensor measurements.
The Sensor type registers (0xX400, 0xX401) Table 5 for each input accept codes from Table 3 or Table 4. For nonstandard measurements, select the input mode and measurement range manually from Table 3.
| Measured signal type | Input mode | HEX code | DEC code | Description | Gain | Measurement range | Accuracy | Output data format | Note |
|---|---|---|---|---|---|---|---|---|---|
| Input disabled | - | 0x0000 | 0 | - | - | - | - | - | |
| Measurement of
voltage |
Single-ended | 0x0001 | 1 | Single-ended voltage measurement, figure 1 | 1...4 | 2–10 V | ±0.5 % | µV | |
| 10–30 V | ±1 % | ||||||||
| 0–2000 mV | ±(0.2% + 50 µV) | ||||||||
| Differential | 0x0101 | 257 | Differential voltage measurement from −2 to +2 V relative to iGND, figure 6
Thermocouple voltage measurement, Fig. 7 |
1...128 | ±2048 mV | ±(0.2% + 30 µV) | |||
| Measurement of
resistance |
Single-ended | 0x0002 | 2 | Two-wire resistance measurement, Fig. 3
Connecting dry-contact sensors, Fig. 4 |
1 | 0–1 kΩ | (±0.1% + 0.3 Ω) | Ω × 100 | |
| 1–100 kΩ | ±0.2 % | ||||||||
| 100–500 kΩ | ±1.5 % | ||||||||
| Differential
(three-wire circuit) |
0x0102 | 258 | Three-wire resistance measurement, figure 8 | 0–5000 Ω | ±(0.1% + 0.15 Ω) | ||||
| Measurement of
current |
Single-ended | 0x0003 | 3 | Current measurement from 0 to 20 mA, Fig. 2 | 1...4 | 0–20.48 mA | ±(0.2% + 1 µA) | nA | |
| Voltage measurement with an external divider WB-VDIV | Single-ended | 0x0005 | 5 | Voltage measurement from 0 to 60 V | 1...4 | 0–60 V | ±(0.2% + 20 mV) | mV | Since firmware 2.1.0 |
| Differential | 0x0105 | 261 | Voltage measurement from −30 to +30 V | 1...128 | ±32 V | ±(0.2% + 30 µV) | Since firmware 2.4.0 | ||
| Voltage measurement with a custom external divider | Single-ended | 0x0006 | 6 | Measurement range depends on the external divider.
Divider output must be within 0–2 V for maximum WB-MAI6 accuracy, or 0–4.5 V for near-maximum accuracy. |
1...4 | ±(0.2% + 50 µV) + external divider error | mV | Since firmware 2.1.0 |
Supported standard sensor types
Table 4 lists supported standard sensor codes to enter in the Sensor type registers Table 5.
With standard sensors, register values 0xX40A and 0xX40B (gain) are ignored. Standard sensors have code 0x1XXX.
| Sensor code HEX | Sensor code DEC | Description | Raw data format | Converted data format | Accuracy | ||
|---|---|---|---|---|---|---|---|
| Thermocouples
Operating mode — thermocouple voltage measurement, Fig. 7 | |||||||
| 0x1000 | 4096 | Type K (chromel–alumel) | µV | °C · 10, °C · 100 | ±(0.8 °C + 0.2 % · Δt) | ||
| Note: Δt is the difference between the thermocouple temperature and the WB-MAI temperature when the thermocouple connects directly to WB-MAI6 without extension wires. | |||||||
| Two-wire resistance temperature detectors
Operating mode — two-wire resistance measurement, Fig. 3 | |||||||
| 0x1100 | 4352 | Pt 50 (α = 0.00385 °C -1) | Ω × 100 | °C · 10, °C · 100 | ±1.5 °C | ||
| 0x1101 | 4353 | Pt 100 (α = 0.00385 °C -1) | ±0.8 °C | ||||
| 0x1102 | 4354 | Pt 500 (α = 0.00385 °C -1) | ±0.2 °C | ||||
| 0x1103 | 4355 | Pt 1000 (α = 0.00385 °C -1) | ±0.15 °C | ||||
| 0x1110 | 4368 | 50P (Russian platinum designation; α = 0.00391 °C -1) | ±1.5 °C | ||||
| 0x1111 | 4369 | 100P (Russian platinum designation; α = 0.00391 °C -1) | ±0.8 °C | ||||
| 0x1112 | 4370 | 500P (Russian platinum designation; α = 0.00391 °C -1) | ±0.2 °C | ||||
| 0x1113 | 4371 | 1000P (Russian platinum designation; α = 0.00391 °C -1) | ±0.15 °C | ||||
| 0x1120 | 4384 | 50M (Russian copper designation; α = 0.00428 °C -1) | ±1.4 °C | ||||
| 0x1121 | 4385 | 100M (Russian copper designation; α = 0.00428 °C -1) | ±0.7 °C | ||||
| 0x1122 | 4386 | 500M (Russian copper designation; α = 0.00428 °C -1) | ±0.2 °C | ||||
| 0x1123 | 4387 | 1000M (Russian copper designation; α = 0.00428 °C -1) | ±0.14 °C | ||||
| 0x1130 | 4400 | Ni 100 (α = 0.00617 °C -1) | ±0.5 °C | ||||
| 0x1131 | 4401 | Ni 500 (α = 0.00617 °C -1) | ±0.13 °C | ||||
| 0x1132 | 4402 | Ni 1000 (α = 0.00617 °C -1) | ±0.1 °C | ||||
| 0x1701 | 5889 | NTC 10k (B = 3988 K) | Ω × 100 | °C · 10, °C · 100 | ±0.2 °C | ||
| 0x1702 | 5890 | NTC 10k (B = 3950 K) | |||||
| 0x1703 | 5891 | NTC 100k (B = 3950 K) | |||||
| 0x1704 | 5892 | NTC 10k (B = 3435 K) | |||||
| 0x1705 | 5893 | NTC 10k (B = 3470 K) | |||||
| 0x1706 | 5894 | NTC 5k (B = 3470 K) | |||||
| 0x1707 | 5895 | NTC 1.8k (B = 3380 K) | |||||
| Note: excludes wire and contact resistance | |||||||
| Three-wire resistance temperature detectors
Operating mode — three-wire resistance measurement, figure 8 | |||||||
| 0x1200 | 4608 | Pt 50 (α = 0.00385 °C -1) | Ω × 100 | °C · 10, °C · 100 | ±0.6 °C | ||
| 0x1201 | 4609 | Pt 100 (α = 0.00385 °C -1) | ±0.33 °C | ||||
| 0x1202 | 4610 | Pt 500 (α = 0.00385 °C -1) | ±0.14 °C | ||||
| 0x1203 | 4611 | Pt 1000 (α = 0.00385 °C -1) | ±0.13 °C | ||||
| 0x1210 | 4624 | 50P (Russian platinum designation; α = 0.00391 °C -1) | ±0.6 °C | ||||
| 0x1211 | 4625 | 100P (Russian platinum designation; α = 0.00391 °C -1) | ±0.33 °C | ||||
| 0x1212 | 4626 | 500P (Russian platinum designation; α = 0.00391 °C -1) | ±0.14 °C | ||||
| 0x1213 | 4627 | 1000P (Russian platinum designation; α = 0.00391 °C -1) | ±0.13 °C | ||||
| 0x1220 | 4640 | 50M (Russian copper designation; α = 0.00428 °C -1) | ±0.6 °C | ||||
| 0x1221 | 4641 | 100M (Russian copper designation; α = 0.00428 °C -1) | ±0.31 °C | ||||
| 0x1222 | 4642 | 500M (Russian copper designation; α = 0.00428 °C -1) | ±0.13 °C | ||||
| 0x1223 | 4643 | 1000M (Russian copper designation; α = 0.00428 °C -1) | ±0.12 °C | ||||
| 0x1230 | 4656 | Ni 100 (α = 0.00617 °C -1) | ±0.23 °C | ||||
| 0x1231 | 4657 | Ni 500 (α = 0.00617 °C -1) | ±0.09 °C | ||||
| 0x1232 | 4658 | Ni 1000 (α = 0.00617 °C -1) | ±0.08 °C | ||||
| Note: Rw is the resistance of each wire. Use identical wires of equal length for terminals P and N. | |||||||
| Current-output sensors
Operating mode — current measurement from 0 to 20 mA, Fig. 2 | |||||||
| 0x1300 | 4864 | 0–5 mA | nA | 0 mA = lower limit (registers 0xX408 / 0xX409)
5 mA = upper limit (registers 0xX40A / 0xX40B) |
±(0.2% + 1 µA) | ||
| 0x1301 | 4865 | 0–20 mA | nA | 0 mA = lower limit (registers 0xX408 / 0xX409)
20 mA = upper limit (registers 0xX40A / 0xX40B) |
±(0.2% + 1 µA) | ||
| 0x1302 | 4866 | 4–20 mA | nA | 4 mA = lower limit (registers 0xX408 / 0xX409)
20 mA = upper limit (registers 0xX40A / 0xX40B) |
±(0.2% + 1 µA) | ||
| Voltage-output sensors in single-ended mode
Operating mode — single-ended voltage measurement, figure 1 | |||||||
| 0x1400 | 5120 | 0–1 V | µV | 0 V = lower limit (registers 0xX408 / 0xX409)
1 V = upper limit (registers 0xX40A / 0xX40B) |
±(0.2% + 50 µV) | ||
| 0x1401 | 5121 | 0–10 V | µV | 0 V = lower limit (registers 0xX408 / 0xX409)
10 V = upper limit (registers 0xX40A / 0xX40B) |
±(0.5% + 50 µV) | ||
| Note: WB-MAI inputs in this mode have low impedance (50 µA pull-up) to detect unconnected inputs. Contact the manufacturer to disable this. | |||||||
| Voltage-output sensors in differential mode
Operating mode — differential voltage measurement from −2 to +2 V, figure 6 | |||||||
| 0x1500 | 5376 | −50 to +50 mV | µV | −50 mV = lower limit (registers 0xX408 / 0xX409)
50 mV = upper limit (registers 0xX40A / 0xX40B) |
±(0.2% + 30 µV) | ||
| Dry-contact sensors
Operating mode — two-wire resistance measurement, Fig. 4 | |||||||
| 0x1600 | 5632 | Dry contact | Ω × 100 | 0 — sensor open or absent
1 — sensor closed (resistance below 100 Ω) |
|||
| Hall-effect current sensors
Operating mode — single-ended voltage measurement, Fig. 5 | |||||||
| 0x1800 | 6144 | Output (2.500 ± 0.625) V | A × 10 | 2.500 V corresponds to 0 A, or the offset (registers 0xX408 / 0xX409)
(2.500 + 0.625) V corresponds to the rated value (registers 0xX40A / 0xX40B) Registers 0xX408–0xX40B use A × 10 |
±(0.2% + 0.3% of current scale)
(excluding sensor error) | ||
Register map
In Table 5, the symbol X in a register address is the input number from 1 to 6 (0x1–0x6).
Each input supports differential and single-ended operation. Sensor types for INxP and INxN are therefore set separately in registers 0xX400 and 0xX401, where X is the input number from 1 to 6 in hexadecimal.
Manual gain selection is not recommended. Only gains 1, 2 and 4 are available in single-ended mode.
If INxP is configured for differential operation, INxN configuration registers are ignored. INxN supports only single-ended operation.
| Address HEX | Address DEC | Type | Read/write | Default value | Format | Purpose | Note |
|---|---|---|---|---|---|---|---|
| Measurement-channel configuration | |||||||
| 0xX400 | 4096·X + 1024 | holding | RW | 0 | Table 3, Table 4, 0 — off | Sensor type for INxP or differential INx (see Tables 3 and 4) | |
| 0xX401 | 4096·X + 1025 | holding | RW | 0 | Table 3, Table 4, 0 — off | Sensor type for INxN (see Tables 3 and 4) | |
| 0xX402 | 4096·X + 1026 | holding | RW | 20 | 20, 45, 90, 175, 330, 600, 1000 | Data rate for INxP or differential INx, samples/s. For example, 20 gives a sampling time of 1/20 = 0.05 s. | |
| 0xX403 | 4096·X + 1027 | holding | RW | 20 | 20, 45, 90, 175, 330, 600, 1000 | Data rate for INxN, samples/s. | |
| 0xX404 | 4096·X + 1028 | holding | RW | 1 | 1 - 50 | Number of consecutive measurements for INxP or differential INx | |
| 0xX405 | 4096·X + 1029 | holding | RW | 1 | 1 – 50 | Number of consecutive measurements for INxN | |
| 0xX406 | 4096·X + 1030 | holding | RW | 0 | 0 - 65000 | Low-pass filter time constant for INxP or differential INx, ms | |
| 0xX407 | 4096·X + 1031 | holding | RW | 0 | 0 - 65000 | Low-pass filter time constant for INxN, ms | |
| 0xX408 | 4096·X + 1032 | holding | RW | 0 | 16-bit signed int | Active sensor lower measurement limit for INxP or differential INx | |
| 0xX409 | 4096·X + 1033 | holding | RW | 0 | 16-bit signed int | Active sensor lower measurement limit for INxN | |
| 0xX40A | 4096·X + 1034 | holding | RW | 10000 | 16-bit signed int | Active sensor upper measurement limit for INxP or differential INx | |
| 0xX40B | 4096·X + 1035 | holding | RW | 10000 | 16-bit signed int | Active sensor upper measurement limit for INxN | |
| 0xX40C | 4096·X + 1036 | holding | RW | 0 | 0 (automatic), 1, 2, 4, 8, 16, 32, 64, 128 | Gain for INxP or differential INx | |
| 0xX40D | 4096·X + 1037 | holding | RW | 0 | 0 (automatic), 1, 2, 4, 8, 16, 32, 64, 128 | Gain for INxN | |
| 0xX40E | 4096·X + 1038 | holding | RW | 0 | 1 - 10000 | Custom external voltage-divider upper resistor R1 for INxP, kΩ × 10 | Since firmware 2.1.0 |
| 0xX40F | 4096·X + 1039 | holding | RW | 0 | 1 - 10000 | Custom external voltage-divider upper resistor R1 for INxN, kΩ × 10 | Since firmware 2.1.0 |
| 0xX410 | 4096·X + 1040 | holding | RW | 0 | 1 - 10000 | Custom external voltage-divider lower resistor R2 for INxP, kΩ × 10 | Since firmware 2.1.0 |
| 0xX411 | 4096·X + 1041 | holding | RW | 0 | 1 - 10000 | Custom external voltage-divider lower resistor R2 for INxN, kΩ × 10 | Since firmware 2.1.0 |
| Measured values | |||||||
| 0xX500 | 4096·X + 1280 | input | R | 0 | 32-bit signed int | Measured value for INxP or differential INx | Error: 0x7FFFFFFF |
| 0xX502 | 4096·X + 1282 | input | R | 0 | 32-bit signed int | Measured value for INxN | Error: 0x7FFFFFFF |
| 0xX504 | 4096·X + 1284 | input | R | 0 | 16-bit signed int | Value converted to physical units for INxP or differential INx | Error: 0x7FFF |
| 0xX505 | 4096·X + 1285 | input | R | 0 | 16-bit signed int | Value converted to physical units for INxN | Error: 0x7FFF |
| 0xX506 | 4096·X + 1286 | input | R | 1 | 16-bit signed int | Current gain for INxP or differential INx | |
| 0xX507 | 4096·X + 1287 | input | R | 1 | 16-bit signed int | Current gain for INxN | |
| 0x0600 | 1536 | input | R | 0 | 16-bit signed int | Voltage at +5V terminals, mV | |
| 0x0601 | 1537 | input | R | 0 | 16-bit signed int | Internal device temperature, °C × 100 | |
| 0x0700 - 0x070B | 1792 - 1803 | input | R | 0 | 32-bit signed int × 6 | Measured values for IN1P–IN6P | Error: 0x7FFFFFFF; since firmware 2.4.0 |
| 0x070C - 0x0717 | 1804 - 1815 | input | R | 0 | 32-bit signed int × 6 | Measured values for IN1N–IN6N | Error: 0x7FFFFFFF; since firmware 2.4.0 |
| 0x0718 - 0x0723 | 1816 - 1827 | input | R | 0 | 32-bit signed int × 6 | Values converted to physical units (temperature: °C × 100) for IN1P–IN6P or differential IN1–IN6 | Error: 0x7FFFFFFF; since firmware 2.4.0 |
| 0x0724 - 0x072F | 1828 - 1839 | input | R | 0 | 32-bit signed int × 6 | Values converted to physical units for IN1N–IN6N | Error: 0x7FFFFFFF; since firmware 2.4.0 |
| Service registers | |||||||
| 0x7400-0x740D,
0x7500-0x7507, 0x8400-0x840D, 0x8500-0x8507 |
Configuration and data registers for two service calibration channels. See the table above. | ||||||
| 0x0629 | 1577 | input | R | 0 | 16-bit signed int | AVCC reference voltage, mV | |
| 0x062A | 1578 | input | R | 0 | 16-bit signed int | Two-wire resistance offset, channels 1–3, P, mΩ | |
| 0x062B | 1579 | input | R | 0 | 16-bit signed int | Two-wire resistance offset, channels 1–3, N, mΩ | |
| 0x062C | 1580 | input | R | 0 | 16-bit signed int | Two-wire resistance offset, channels 4–6, P, mΩ | |
| 0x062D | 1581 | input | R | 0 | 16-bit signed int | Two-wire resistance offset, channels 4–6, N, mΩ | |
| 0x062E | 1582 | input | R | 0 | 16-bit unsigned int | Input scan cycle counter | |
| 0x0610 | 1552 | input | R | 0 | 16-bit unsigned int | Input scan cycle duration, ms | |
| 0x0800 - 0x80B | 2048 - 2059 | holding | RW | 16-bit signed int | Factory-set calibration coefficients for high-voltage measurement dividers | ||
Common registers
| Address | Register parameters | Description | Values | Note | |||
|---|---|---|---|---|---|---|---|
| Dec | Hex | Type | Access | Format | |||
| Connection settings | |||||||
| 110 | 0x006E | Holding | RW | u16 | RS-485 baud rate. RS-485 connection parameter settings |
×100, baud 12 — 1200 bit/s, 24 — 2400 bit/s, 48 — 4800 bit/s, 96 — 9600 bit/s, 192 — 19200 bit/s, 384 — 38400 bit/s, 576 — 57600 bit/s, 1152 — 115200 bit/s |
|
| 111 | 0x006F | Holding | RW | u16 | RS-485 parity setting | 0 — no parity (none), 1 — odd, 2 — even |
|
| 112 | 0x0070 | Holding | RW | u16 | RS-485 stop bits See: stop-bit tolerance |
1, 2 | |
| 128 | 0x0080 | Holding | RW | u16 | Device Modbus address (details) | ||
| 200-219 | 0x00C8 - 0x00DB | Input | RO | string | Device model | ||
| 220-244 | 0x00DC - 0x00F4 | Input | RO | string | Firmware build commit hash and branch name (2 characters per register) | ||
| 250-265 | 0x00FA - 0x0109 | Input | RO | string | Firmware version | ||
| 266-269 | 0x010A - 0x010D | Input | RO | u64 | Serial number extension | ||
| 270-271 | 0x010E - 0x010F | Input | RO | u32 | Serial number | ||
| 290-301 | 0x0122 - 0x012D | Input | RO | string | Firmware signature | ||
| 320 | 0x0140 | Input | RO | u16 | Firmware version in numeric format (details) | MAJOR | |
| 321 | 0x0141 | MINOR | |||||
| 322 | 0x0142 | PATCH | |||||
| 323 | 0x0143 | s16 | SUFFIX | ||||
| 324-325 | 0x0144 - 0x0145 | Input | RO | u32 | Firmware version in numeric format | ||
| 326-327 | 0x0146 - 0x0147 | Input | RO | u32 | Firmware version in big-endian format | ||
| Other information | |||||||
| 104-105 | 0x0068 - 0x0069 | Input | RO | u32 | Uptime since boot | seconds | |
| 120 | 0x0078 | Holding | RW | u16 | Reboot device without saving state | Any non-zero value reboots the device | |
| 129 | 0x0081 | Holding | RW | u16 | Enter firmware update mode for 2 minutes | Any non-zero value enters firmware update mode | |
| 330-337 | 0x014A - 0x0151 | Input | RO | string | Bootloader version | ||
| 130 | 0x0082 | Holding | RW | u16 | Disable Status LED | 0 — enabled 1 — disabled |
|
| 131 | 0x0083 | Holding | RW | u16 | Enter firmware update mode using the current communication settings. To check whether the firmware and bootloader support this feature, read this register. If reading succeeds and returns 0, the feature is supported.
|
Writing 1 enters firmware update mode | Since firmware 2.0.7 |
| 113 | 0x0071 | Holding | RW | u16 | Delay before replying to a Modbus request | 0 - 254 ms | |
| 114 | 0x0072 | Holding | RW | u16 | Continuous reading across register gaps | 0 - disabled 1 - enabled 2 - enabled, retained after reboot |
|
| 121 | 0x0079 | Input | RO | u16 | Current internal 5 V rail voltage | mV | |
| 122 | 0x007A | Input | RO | u16 | Minimum internal 5 V rail voltage since boot, without averaging | mV | |
| 125 | 0x007D | Input | RO | u16 | Current internal 5 V rail voltage, without averaging | mV | |
| 119 | 0x0077 | Input | RO | u16 | Minimum microcontroller supply voltage since boot, before averaging | mV | |
| 123 | 0x007B | Input | RO | u16 | Microcontroller supply voltage | mV | |
| 124 | 0x007C | Input | RO | s16 | Internal microcontroller temperature | x0.1, °C | |
| 304-319 | 0x0130-0x013F | Input | RO | string | Device batch number.
Available only on devices manufactured from 21 January 2026. |
Since firmware 2.3.0 | |
| 65402 | 0xFF7A | Holding | RW | u16 | Reset device settings to defaults. Communication settings are retained. The device reboots after the reset. |
Writing 1 resets the settings | Since firmware 2.1.4 |
| 64256-64383 | 0xFB00-0xFB7F | Input | RO | u16 | FlashFS: free space per page | bytes | Since firmware 2.2.0 |
| 64384-64511 | 0xFB80-0xFBFF | Input | RO | u16 | FlashFS: total size of current files per page | bytes | |
| 64512-64639 | 0xFC00-0xFC7F | Input | RO | u16 | FlashFS: page fragmentation | 0…100 % 0 — all data is current, 100 — no current data | |
| 64640-64767 | 0xFC80-0xFCFF | Input | RO | u16 | FlashFS: page erase counter | ||
| 65504 | 0xFFE0 | Input | RO | u16 | Maximum stack usage | bytes 0 — stack corrupted |
Since firmware 2.2.0 |
| 65505 | 0xFFE1 | Input | RO | u16 | Free RAM | bytes | |
| 65506 | 0xFFE2 | Input | RO | u16 | Used RAM | bytes | |
| 65507 | 0xFFE3 | Input | RO | u16 | Stack size | bytes | |
| 65508 | 0xFFE4 | Input | RO | u16 | Cause of last MCU reset | 1 — LPWR, 2 — WWDG, 3 — IWDG, 4 — SFT, 5 — POR, 6 — PIN, 7 — OBL, 8 — V18PWR |
Since firmware 2.2.0 |
| 65509 | 0xFFE5 | Input | RO | u32 | Firmware update counter | Since firmware 2.2.0 | |