Altus PH3500 Modbus register map
Power quality analyzer: instantaneous voltages, currents, powers, power factor and frequency, demand, energy, statistics, and communication and system settings
- Official
- 125 registers
- Modbus TCP and RTU
- Revision 1 · 2026-11-10
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus TCP and RTU
- Unit ID
- 1
- TCP port
- 502default
- Serial
- 19200 8N1 · 19200 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 28 holding registers, 97 input registers
- Groups
- 5
- Translation tables
- 15
- Revision
- 1 · 2026-11-10
- Added
- ()
- File
- maps/altus/ph3500.mbmap.json · 22 KB · history
- SHA-256
- 671b30f31872f08009db2353d067413276a034c5159683980114c11f6b7bc66c
- Manufacturer
- altus.com.br
Sources and notes
- PH3500 Multimedidor, Manual de Utilização (MU821006) · version Rev. B 08/2022, 2022-08 linked in issue #117; chapter 8 (Protocolos de Comunicação), Tabela de Registros
Source: PH3500 Multimedidor, Manual de Utilização, Rev. B 08/2022
- Modbus RTU on the RS-485 port (D+ and D-, default 19200 bit/s, 8-N-1, address 1 to 247) and Modbus TCP on the Ethernet port (the port is set in the device; 502 is assumed). Functions 01, 03, 04, 05, 06, 16 and 17 are described; the manual also describes extended functions (such as 0x33 and 0x34) that are not used here.
- The manual has two address columns, Short and Long, chosen by the device setting COM - Modbus 32-bit mode (holding register 1: 0 = Short, 1 = Long). This map uses the Short column, the setting 0, where 32-bit values (floats, Long, DateTime) take two registers and the addresses are 2 apart. In Long mode every 32-bit value is one register at the address of the Long column and the byte layout is different, so this map does not fit it. The manual does not say which mode is the factory default: if the values look wrong, read holding register 1.
- The byte and word swap (holding registers 2 and 3) default to none (ABCD, big-endian). The manual does not state the factory values. If a swap is set, change byte_order and word_order here. The tables are 0-based, as the manual says.
- The manual's Long type is an unsigned 32-bit integer, Float is IEEE 754 (NaN is 0x7FC00000), DateTime is seconds since 1970-01-01 UTC, and CaracFP and Fase are signed small codes in a 32-bit register: CaracFP -1 none, 0 resistive, 1 inductive, 2 capacitive; Fase -1 none, 0 A or AB, 1 B or BC, 2 C or CA.
- Not included: coils, the Ethernet address characters, the datalog and event areas, the digital input and output counters, and the rest of the statistics block. Several tables in the manual repeat rows, and the manual says writable registers have no protection against invalid values.
- Written from the manufacturer's manual; not tested on a device.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 0 | uint16 | RW | Modbus network address | |||
| HR | 1 | uint16 | RW | Short = 16-bit addressing (this map), Long = 32-bit addressing | |||
| HR | 2 | uint16 | RW | ||||
| HR | 3 | uint16 | RW | ||||
| HR | 4 | uint16 | RW | RS-485 baud rate in bit/s | |||
| HR | 5 | uint16 | RW | ||||
| HR | 10 | uint16 | RW | ||||
| HR | 11 | uint16 | RW | ||||
| HR | 13 | uint16 | RW | ||||
| HR | 14 | uint16 | RW | Wiring configuration; labels as printed in the manual (entries 02 and 03, and 15 and 16, are labelled the same) | |||
| HR | 15 | uint16 | RW | ||||
| HR | 16 | uint16 | RW | ||||
| HR | 17 | uint16 | RW | ||||
| HR | 18 | uint16 | RW | ||||
| HR | 19 | uint16 | RW | ||||
| HR | 20 | uint16 | RW | ||||
| HR | 21 | uint16 | RW | ||||
| HR | 22 | uint16 | RW | ||||
| HR | 23 | uint16 | RW | Interval in minutes | |||
| HR | 40 | uint16 | RW | ||||
| HR | 41 | uint16 | RW | ||||
| HR | 200 | uint32 ABCD | RW | V | |||
| HR | 202 | uint32 ABCD | RW | V | |||
| HR | 204 | float32 ABCD | RW | ||||
| HR | 206 | uint32 ABCD | RW | A | |||
| HR | 208 | uint32 ABCD | RW | A | |||
| HR | 210 | float32 ABCD | RW | ||||
| HR | 214 | uint32 ABCD | RW | s | Interval between logged records | ||
| IR | 0 | uint32 ABCD | R | Time of the measurement, seconds since 1970-01-01 UTC | |||
| IR | 2 | float32 ABCD | R | V | |||
| IR | 4 | float32 ABCD | R | V | |||
| IR | 6 | float32 ABCD | R | V | |||
| IR | 8 | float32 ABCD | R | V | |||
| IR | 10 | float32 ABCD | R | A | |||
| IR | 12 | float32 ABCD | R | A | |||
| IR | 14 | float32 ABCD | R | A | |||
| IR | 16 | float32 ABCD | R | A | |||
| IR | 18 | float32 ABCD | R | V | |||
| IR | 20 | float32 ABCD | R | V | |||
| IR | 22 | float32 ABCD | R | V | |||
| IR | 24 | float32 ABCD | R | V | |||
| IR | 26 | float32 ABCD | R | ||||
| IR | 28 | float32 ABCD | R | ||||
| IR | 30 | float32 ABCD | R | ||||
| IR | 32 | float32 ABCD | R | ||||
| IR | 34 | int32 ABCD | R | ||||
| IR | 36 | int32 ABCD | R | ||||
| IR | 38 | int32 ABCD | R | ||||
| IR | 40 | int32 ABCD | R | ||||
| IR | 42 | float32 ABCD | R | W | |||
| IR | 44 | float32 ABCD | R | W | |||
| IR | 46 | float32 ABCD | R | W | |||
| IR | 48 | float32 ABCD | R | W | |||
| IR | 50 | float32 ABCD | R | VAr | |||
| IR | 52 | float32 ABCD | R | VAr | |||
| IR | 54 | float32 ABCD | R | VAr | |||
| IR | 56 | float32 ABCD | R | VAr | |||
| IR | 58 | float32 ABCD | R | VA | |||
| IR | 60 | float32 ABCD | R | VA | |||
| IR | 62 | float32 ABCD | R | VA | |||
| IR | 64 | float32 ABCD | R | VA | |||
| IR | 66 | float32 ABCD | R | Hz | |||
| IR | 68 | float32 ABCD | R | ||||
| IR | 70 | float32 ABCD | R | ||||
| IR | 72 | float32 ABCD | R | ||||
| IR | 74 | float32 ABCD | R | A | |||
| IR | 76 | int32 ABCD | R | ||||
| IR | 78 | float32 ABCD | R | ° | |||
| IR | 80 | float32 ABCD | R | ° | |||
| IR | 82 | float32 ABCD | R | ° | |||
| IR | 200 | float32 ABCD | R | W | |||
| IR | 202 | float32 ABCD | R | W | |||
| IR | 204 | float32 ABCD | R | W | |||
| IR | 206 | float32 ABCD | R | VAr | |||
| IR | 208 | float32 ABCD | R | VAr | |||
| IR | 210 | float32 ABCD | R | VAr | |||
| IR | 212 | float32 ABCD | R | VAr | |||
| IR | 214 | float32 ABCD | R | VAr | |||
| IR | 216 | float32 ABCD | R | VAr | |||
| IR | 218 | float32 ABCD | R | VAr | |||
| IR | 220 | float32 ABCD | R | VAr | |||
| IR | 222 | float32 ABCD | R | VAr | |||
| IR | 224 | float32 ABCD | R | VA | |||
| IR | 226 | float32 ABCD | R | VA | |||
| IR | 228 | float32 ABCD | R | VA | |||
| IR | 300 | float32 ABCD | R | kWh | |||
| IR | 302 | float32 ABCD | R | kWh | |||
| IR | 304 | float32 ABCD | R | kWh | |||
| IR | 306 | float32 ABCD | R | kWh | |||
| IR | 308 | float32 ABCD | R | kvarh | |||
| IR | 310 | float32 ABCD | R | kvarh | |||
| IR | 312 | float32 ABCD | R | kvarh | |||
| IR | 314 | float32 ABCD | R | kvarh | |||
| IR | 316 | float32 ABCD | R | kvarh | |||
| IR | 318 | float32 ABCD | R | kvarh | |||
| IR | 320 | float32 ABCD | R | kvarh | |||
| IR | 322 | float32 ABCD | R | kvarh | |||
| IR | 324 | float32 ABCD | R | kVAh | |||
| IR | 360 | float32 ABCD | R | V | |||
| IR | 362 | float32 ABCD | R | V |
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).