{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Altus", "model": "PH1600", "models": ["PH1600"], "vendor_website": "altus.com.br", "description": "Panel multimeter: voltages, currents, active, reactive and apparent power, power factor, frequency and energy counters, over Modbus RTU", "revision": 1, "revised": "2026-11-10", "source": "PH1600 Multimedidor, Manual de Utilização, Rev. B 06/2022", "sources": [ {"title": "PH1600 Multimedidor, Manual de Utilização (MU821007)", "version": "Rev. B 06/2022", "note": "linked in issue #116; chapter 5 (Comunicação)", "date": "2022-06"} ], "notes": [ "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." ], "protocol": "rtu", "unit_id": 1, "baudrate": 9600, "parity": "N", "databits": 8, "stopbits": 1, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "registers": [ {"name": "Meter address", "group": "Settings", "area": "holding", "address": 1, "type": "uint16", "access": "RW", "description": "Slave address of the meter"}, {"name": "Connection type", "group": "Settings", "area": "holding", "address": 2, "type": "uint16", "access": "RW", "description": "Wiring type; the manual does not list the values"}, {"name": "VT ratio", "group": "Settings", "area": "holding", "address": 3, "type": "uint16", "access": "RW", "description": "Voltage transformer ratio (TP)"}, {"name": "CT ratio", "group": "Settings", "area": "holding", "address": 4, "type": "uint16", "access": "RW", "description": "Current transformer ratio (TC)"}, {"name": "Voltage and current exponents", "group": "Measurements", "area": "holding", "address": 36, "type": "uint16", "description": "DPT and DCT, the power-of-ten exponents for voltage and current; packing not described"}, {"name": "Power exponent and signs", "group": "Measurements", "area": "holding", "address": 37, "type": "uint16", "description": "DPQ (power exponent) and the SIGN byte with one negative-sign bit each for Pa, Pb, Pc, Ps, Qa, Qb, Qc, Qs"}, {"name": "Voltage phase A", "group": "Measurements", "area": "holding", "address": 38, "type": "uint16", "description": "Raw: V = R / 10000 * 10^DPT"}, {"name": "Voltage phase B", "group": "Measurements", "area": "holding", "address": 39, "type": "uint16", "description": "Raw: V = R / 10000 * 10^DPT"}, {"name": "Current phase A", "group": "Measurements", "area": "holding", "address": 44, "type": "uint16", "description": "Raw: I = R / 10000 * 10^DCT; see notes about the address"}, {"name": "Current phase B", "group": "Measurements", "area": "holding", "address": 45, "type": "uint16", "description": "Raw: I = R / 10000 * 10^DCT; see notes about the address"}, {"name": "Current phase C", "group": "Measurements", "area": "holding", "address": 46, "type": "uint16", "description": "Raw: I = R / 10000 * 10^DCT; see notes about the address"}, {"name": "Active power phase A", "group": "Measurements", "area": "holding", "address": 47, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Active power phase B", "group": "Measurements", "area": "holding", "address": 48, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Active power phase C", "group": "Measurements", "area": "holding", "address": 49, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Active power total", "group": "Measurements", "area": "holding", "address": 50, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Reactive power phase A", "group": "Measurements", "area": "holding", "address": 51, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Reactive power phase B", "group": "Measurements", "area": "holding", "address": 52, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Reactive power phase C", "group": "Measurements", "area": "holding", "address": 53, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Reactive power total", "group": "Measurements", "area": "holding", "address": 54, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ; sign in the SIGN register"}, {"name": "Power factor phase A", "group": "Measurements", "area": "holding", "address": 55, "type": "uint16", "scale": 0.001}, {"name": "Power factor phase B", "group": "Measurements", "area": "holding", "address": 56, "type": "uint16", "scale": 0.001}, {"name": "Power factor phase C", "group": "Measurements", "area": "holding", "address": 57, "type": "uint16", "scale": 0.001}, {"name": "Power factor total", "group": "Measurements", "area": "holding", "address": 58, "type": "uint16", "scale": 0.001}, {"name": "Apparent power phase A", "group": "Measurements", "area": "holding", "address": 59, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ"}, {"name": "Apparent power phase B", "group": "Measurements", "area": "holding", "address": 60, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ"}, {"name": "Apparent power phase C", "group": "Measurements", "area": "holding", "address": 61, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ"}, {"name": "Apparent power total", "group": "Measurements", "area": "holding", "address": 62, "type": "uint16", "description": "Raw: P = R / 10000 * 10^DPQ"}, {"name": "Frequency", "group": "Measurements", "area": "holding", "address": 63, "type": "uint16", "scale": 0.01, "unit": "Hz"}, {"name": "Active energy forward", "group": "Energy", "area": "holding", "address": 64, "type": "uint32", "description": "Two registers; word order and unit not stated in the manual"}, {"name": "Active energy reverse", "group": "Energy", "area": "holding", "address": 66, "type": "uint32", "description": "Two registers; word order and unit not stated in the manual"}, {"name": "Reactive energy forward", "group": "Energy", "area": "holding", "address": 68, "type": "uint32", "description": "Two registers; word order and unit not stated in the manual"}, {"name": "Reactive energy reverse", "group": "Energy", "area": "holding", "address": 70, "type": "uint32", "description": "Two registers; word order and unit not stated in the manual"} ] }