Altus PH1600 Modbus register map
Panel multimeter: voltages, currents, active, reactive and apparent power, power factor, frequency and energy counters, over Modbus RTU
- Official
- 32 registers
- Modbus 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 RTU
- Unit ID
- 1
- Serial
- 9600 8N1 · 9600 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
- 32 holding registers
- Groups
- 3
- Revision
- 1 · 2026-11-10
- Added
- ()
- File
- maps/altus/ph1600.mbmap.json · 8 KB · history
- SHA-256
- 413ed650e6ccf4aaf00b0feebf9908312d9a699381ec3496a982f7181393dad6
- Manufacturer
- altus.com.br
Sources and notes
- PH1600 Multimedidor, Manual de Utilização (MU821007) · version Rev. B 06/2022, 2022-06 linked in issue #116; chapter 5 (Comunicação)
Source: PH1600 Multimedidor, Manual de Utilização, Rev. B 06/2022
- Modbus RTU over one RS-485 port, 1200 to 9600 bit/s, 8 data bits with no, odd or even parity. The manual gives no default baud rate, parity or slave address: 9600 N and 1 are placeholders. Only function codes 03 (read) and 16 (write) are described; the registers marked with an asterisk in the manual (1 to 4) are the writable ones.
- The manual's address table and its worked example disagree. The table lists current A at 44 and voltage C at 43, while the example reads currents IA, IB and IC as three registers starting at address 43 (2BH). The map follows the table for the currents and leaves voltage C out. If current values look wrong, try one address lower.
- Values are raw. The manual converts them as V = R / 10000 * 10^DPT, I = R / 10000 * 10^DCT, P = R / 10000 * 10^DPQ, power factor = R / 1000 and frequency = R / 100, where DPT, DCT and DPQ are exponents kept in registers 36 and 37. The manual does not say how the exponents are packed in those registers, so the voltage, current and power registers have no scale here. The power-sign byte (register 37) holds one sign bit per power, 1 meaning negative.
- Energy counters take two registers each; the manual gives neither the word order nor the unit.
- Written from the manufacturer's manual; not tested on a device.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 1 | uint16 | RW | Slave address of the meter | |||
| HR | 2 | uint16 | RW | Wiring type; the manual does not list the values | |||
| HR | 3 | uint16 | RW | Voltage transformer ratio (TP) | |||
| HR | 4 | uint16 | RW | Current transformer ratio (TC) | |||
| HR | 36 | uint16 | R | DPT and DCT, the power-of-ten exponents for voltage and current; packing not described | |||
| HR | 37 | uint16 | R | DPQ (power exponent) and the SIGN byte with one negative-sign bit each for Pa, Pb, Pc, Ps, Qa, Qb, Qc, Qs | |||
| HR | 38 | uint16 | R | Raw: V = R / 10000 * 10^DPT | |||
| HR | 39 | uint16 | R | Raw: V = R / 10000 * 10^DPT | |||
| HR | 44 | uint16 | R | Raw: I = R / 10000 * 10^DCT; see notes about the address | |||
| HR | 45 | uint16 | R | Raw: I = R / 10000 * 10^DCT; see notes about the address | |||
| HR | 46 | uint16 | R | Raw: I = R / 10000 * 10^DCT; see notes about the address | |||
| HR | 47 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 48 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 49 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 50 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 51 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 52 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 53 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 54 | uint16 | R | Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register | |||
| HR | 55 | uint16 | R | ×0.001 | |||
| HR | 56 | uint16 | R | ×0.001 | |||
| HR | 57 | uint16 | R | ×0.001 | |||
| HR | 58 | uint16 | R | ×0.001 | |||
| HR | 59 | uint16 | R | Raw: P = R / 10000 * 10^DPQ | |||
| HR | 60 | uint16 | R | Raw: P = R / 10000 * 10^DPQ | |||
| HR | 61 | uint16 | R | Raw: P = R / 10000 * 10^DPQ | |||
| HR | 62 | uint16 | R | Raw: P = R / 10000 * 10^DPQ | |||
| HR | 63 | uint16 | R | Hz | ×0.01 | ||
| HR | 64 | uint32 ABCD | R | Two registers; word order and unit not stated in the manual | |||
| HR | 66 | uint32 ABCD | R | Two registers; word order and unit not stated in the manual | |||
| HR | 68 | uint32 ABCD | R | Two registers; word order and unit not stated in the manual | |||
| HR | 70 | uint32 ABCD | R | Two registers; word order and unit not stated in the manual |
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).