Schneider Electric PM2100 / PM2200 Modbus register map
Also covers PM2120, PM2130, PM2220, PM2230
Power meter
- Verified
- 2,418 registers
- Modbus RTU
- Revision 4 · 2026-11-10
- Identity: model, serial number
Verified: Tested on a real device.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 1
- Serial
- 19200 8N1 · 19200 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 1-based · wire address = address − 1
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 2418 holding registers
- Groups
- 12
- Revision
- 4 · 2026-11-10
- Added
- ()
- File
- maps/schneider-electric/pm2100.mbmap.json · 603 KB · history
- SHA-256
- 75467e73f743d1954da9f01e8fb2071a26cb5f41ad9b02aade2e50e0eb85b88f
- Manufacturer
- se.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Model | Meter Model | holding 50 | string[20] | |
| Serial number | Serial Number | holding 130 | uint32 ABCD |
Sources and notes
- Schneider Electric, PM2000 series firmware, revision history and Modbus register map, LCD v01.05.03 · version v1050_6, 2022-08 spreadsheet Public_EM6400_PM2xxx PMC Register List_v1050_6.xls, sheet Register List
Source: Schneider Electric, PM2000 series firmware, revision history and Modbus register map, LCD v01.05.03
- Addresses are the register numbers of the register list (Modicon numbering, 1-based): the address on the wire is the register number minus 1.
- Registers marked RWC in the register list are changed through the command interface, so they are listed as read-only.
- Values the meter cannot provide read as the N/A value of their data type (0xFFFF, 0xFFFFFFFF, 0x8000 or a float NaN).
- Power factor registers are four-quadrant values from -2 to 2, not plain power factors: 0° = 1, 90° = 0, 180° = -1, 270° = 2. Above 1, the power factor is 2 minus the value and leading; below -1 it is -2 minus the value and leading; otherwise it is the value, lagging (unity at ±1).
- The register list does not state the order of the two registers of a 32-bit value; this map uses the order of the PM5000 family (most significant register first). If the values look wrong on a device, try little word order.
- Registers that exist only on some of the models say so in their description.
- Tested on two PM2130, both firmware 1.2.1.34 (register 1637 reads 1021), read over a Modbus TCP gateway, November 2026: on the first all 2418 registers read without errors, 367 of them as the N/A value (registers of other models, such as the phase energies of the PM2220 / PM2230, the multi-tariff energies, and unused setup). Checked: identification, setup, currents, voltages, frequency, power (L1 + L2 + L3 active power = total on both, -46.36 kW and 120.40 kW), power factor, and the 64-bit accumulated energies; 32-bit floats read correctly with most significant register first. On the second, 2412 registers read; alarm log entries 16 and 17 (11307-11315) got no response from the gateway. Both meters answer FC17 with illegal function.
- The integer power factors at 3196 and 3197 are sign-magnitude: bit 15 is the sign and bits 0-14 are thousandths (0x814F = -0.335 with the float at -0.336; on the second meter 3196 read 0x03AA = 0.938 and 3197 0x83AA, the float copy at 3194 being negative). The map reads the magnitude only; the sign is not decoded. Not tested: the models other than the PM2130.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 30 | string[20] | R | ||||
| HR | 50 | string[20] | R | ||||
| HR | 70 | string[20] | R | ||||
| HR | 90 | uint16 | R | ||||
| HR | 91 | uint64 ABCD | R | Bitmap. Range: 0x0000 – 0xFFFF. Bitmap indicating base hardware options detected Bit 01 = HMI Bit 02 = Modbus Serial Communications Port Bit 03 = Modbus Ethernet Communications Port Bit 04 = Digital Inputs Bit 05 = Digital Outputs Bit 06-16 Not Used | |||
| HR | 95 | uint64 ABCD | R | Bitmap. Range: 0x0000 – 0xFFFF | |||
| HR | 129 | uint16 | R | (To be prefixed in Serial Number While Displaying) | |||
| HR | 130 | uint32 ABCD | R | ||||
| HR | 132 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds) | |||
| HR | 136 | string[5] | R | ||||
| HR | 141 | uint16 | R | ||||
| HR | 142 | uint16 | R | ||||
| HR | 143 | uint16 | R | ||||
| HR | 144 | uint16 | R | ||||
| HR | 145 | uint16 | R | ||||
| HR | 146 | uint16 | R | ||||
| HR | 147 | uint16 | R | ||||
| HR | 148 | uint16 | R | ||||
| HR | 149 | uint16 | R | ||||
| HR | 150 | uint16 | R | ||||
| HR | 151 | uint16 | R | ||||
| HR | 152 | uint16 | R | ||||
| HR | 153 | uint16 | R | ||||
| HR | 154 | uint16 | R | ||||
| HR | 155 | uint16 | R | ||||
| HR | 156 | uint16 | R | ||||
| HR | 157 | uint16 | R | ||||
| HR | 158 | uint16 | R | ||||
| HR | 159 | uint16 | R | ||||
| HR | 160 | uint16 | R | ||||
| HR | 161 | uint16 | R | ||||
| HR | 400 | uint16 | R | For PM2130, PM2230 Options slots 1DI1DO - 0x0111 2DI2DO - 0x0122 1AI1AO - 0x0211 2AI2AO - 0x0222 2RO2DI- 0x0422. Only on PM2130, PM2230 | |||
| HR | 403 | uint32 ABCD | R | Only on PM2130, PM2230 | |||
| HR | 405 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds). Only on PM2130, PM2230 | |||
| HR | 409 | string[5] | R | Only on PM2130, PM2230 | |||
| HR | 414 | uint16 | R | This is encoded into a packed binary format. Only on PM2130, PM2230 | |||
| HR | 1637 | uint16 | R | Range: 0 – 32,767. The firmware version takes the following form: XXYYT | |||
| HR | 1638 | uint16 | R | Range: 00 – 99 | |||
| HR | 1639 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1640 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1641 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1642 | uint16 | R | Range: 0 – 32,767. The firmware version takes the following form: XXYYT | |||
| HR | 1643 | uint16 | R | Range: 00 – 99 | |||
| HR | 1644 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1645 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1646 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1647 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds) | |||
| HR | 1669 | uint16 | R | Range: 0 – 32,767. The firmware version takes the following form: XXYYT | |||
| HR | 1670 | uint16 | R | Range: 00 – 99 | |||
| HR | 1671 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1672 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1673 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1674 | uint16 | R | Range: 0 – 32,767. Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1675 | uint16 | R | Range: 00 – 99. Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1676 | uint16 | R | Range: 0000 – 9999. Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1677 | uint16 | R | Range: 0000 – 9999. Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1678 | uint16 | R | Range: 0000 – 9999. Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1679 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds). Not supported in PM5xxx. Space reserved to preserve NVRAM locations | |||
| HR | 1701 | uint16 | R | Range: 0 – 32,767. The firmware version takes the following form: XXYYT | |||
| HR | 1702 | uint16 | R | Range: 00 – 99 | |||
| HR | 1703 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1704 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1705 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1706 | uint16 | R | Range: 0 – 32,767 | |||
| HR | 1707 | uint16 | R | Range: 00 – 99 | |||
| HR | 1708 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1709 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1710 | uint16 | R | Range: 0000 – 9999 | |||
| HR | 1711 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds) | |||
| HR | 1715 | uint16 | R | ||||
| HR | 1716 | uint16 | R | ||||
| HR | 1747 | uint16 | R | ||||
| HR | 1748 | uint16 | R | ||||
| HR | 1749 | uint16 | R | Range: 0 – 100 | |||
| HR | 1750 | uint16 | RW | ||||
| HR | 1824 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds) | |||
| HR | 1828 | uint16 | R | ||||
| HR | 1829 | uint16 | R | ||||
| HR | 1830 | uint64 ABCD | R | DATETIME, 4 registers (IEC 870-5-4: year, day/weekday/month, hour/minute, milliseconds) | |||
| HR | 1834 | uint32 ABCD | R | s | |||
| HR | 1836 | uint16 | R | Range: 0 – 2. 0 = Unknown 1 = Reset command 2 = Power failure | |||
| HR | 1837 | uint16 | R | year | Range: 2000 – 2127 | ||
| HR | 1838 | uint16 | R | month | Range: 1 – 12 | ||
| HR | 1839 | uint16 | R | days | Range: 1 – 31 | ||
| HR | 1840 | uint16 | R | hours | Range: 0 – 23 | ||
| HR | 1841 | uint16 | R | min | Range: 0 – 59 | ||
| HR | 1842 | uint16 | R | s | Range: 0 – 59 | ||
| HR | 1843 | uint16 | R | ms | Range: 0 – 999 | ||
| HR | 1845 | uint16 | R | Range: 0 – 127 | |||
| HR | 1846 | uint16 | R | Range: 1 – 12, 1 – 31 | |||
| HR | 1847 | uint16 | R | Range: 0 – 23, 0 – 59 | |||
| HR | 1848 | uint16 | R | Range: 0 – 59,999 | |||
| HR | 1880 | string[4] | R | ||||
| HR | 1884 | string[4] | R | ||||
| HR | 1888 | string[4] | R | ||||
| HR | 1892 | string[4] | R | ||||
| HR | 1896 | string[4] | R | ||||
| HR | 2002 | uint32 ABCD | R | s | Increments when average current exceeds the Active Load Timer Setpoint | ||
| HR | 2004 | uint32 ABCD | R | s | |||
| HR | 2006 | uint32 ABCD | R |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).