{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Altus", "model": "PH3500", "models": ["PH3500"], "vendor_website": "altus.com.br", "description": "Power quality analyzer: instantaneous voltages, currents, powers, power factor and frequency, demand, energy, statistics, and communication and system settings", "revision": 1, "revised": "2026-11-10", "source": "PH3500 Multimedidor, Manual de Utilização, Rev. B 08/2022", "sources": [ {"title": "PH3500 Multimedidor, Manual de Utilização (MU821006)", "version": "Rev. B 08/2022", "note": "linked in issue #117; chapter 8 (Protocolos de Comunicação), Tabela de Registros", "date": "2022-08"} ], "notes": [ "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." ], "protocol": "tcp+rtu", "unit_id": 1, "baudrate": 19200, "parity": "N", "databits": 8, "stopbits": 1, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "enums": { "baud_rate": {"0": "600", "1": "1200", "2": "1800", "3": "2400", "4": "4800", "5": "9600", "6": "19200", "7": "38400", "8": "57600"}, "frequency": {"0": "50 Hz", "1": "60 Hz"}, "time_zone": {"0": "UTC-12:00", "1": "UTC-11:00", "2": "UTC-10:00", "3": "UTC-09:30", "4": "UTC-09:00", "5": "UTC-08:00", "6": "UTC-07:00", "7": "UTC-06:00", "8": "UTC-05:00", "9": "UTC-04:30", "10": "UTC-04:00", "11": "UTC-03:30", "12": "UTC-03:00", "13": "UTC-02:00", "14": "UTC-01:00", "15": "UTC+01:00", "16": "UTC+02:00", "17": "UTC+03:00", "18": "UTC+03:30", "19": "UTC+04:00", "20": "UTC+04:30", "21": "UTC+05:00", "22": "UTC+05:30", "23": "UTC+05:45", "24": "UTC+06:00", "25": "UTC+06:30", "26": "UTC+07:00", "27": "UTC+08:00", "28": "UTC+09:00", "29": "UTC+09:30", "30": "UTC+10:00", "31": "UTC+10:30", "32": "UTC+11:00", "33": "UTC+11:30", "34": "UTC+12:00", "35": "UTC+12:45", "36": "UTC+13:00", "37": "UTC+14:00", "38": "UTC"}, "dst": {"0": "Normal", "1": "Summer time"}, "phase_sequence": {"0": "ABC", "1": "ACB"}, "system_connection": {"0": "01: 1P2W-1V1C", "1": "02: 2P2W-1V1C", "2": "03: 2P2W-1V1C", "3": "04: 3P4W-3V3C", "4": "05: 3P4W-3V2C B", "5": "06: 3P4W-3V1C B", "6": "07: 3P4W-2V3C B", "7": "08: 3P4W-2V2C B", "8": "09: 3P4W-2V1C B", "9": "10: 3P4W-1V3C B", "10": "11: 3P4W-1V2C B", "11": "12: 3P4W-1V1C B", "12": "13: 3P3W-3V3C", "13": "14: 3P3W-3V2C", "14": "15: 3P3W-3V1C B", "15": "16: 3P3W-3V1C B", "16": "17: 3P3W-2V2C", "17": "18: 3P3W-2V1C B", "18": "19: 3P3W-1V3C B", "19": "20: 3P3W-1V2C B", "20": "21: 3P3W-1V1C B"}, "ratio_mode": {"0": "Primary/secondary", "1": "Ratio"}, "ct_direction": {"0": "Direct (+)", "1": "Reverse (-)"}, "power_mode": {"0": "Vector", "1": "Arithmetic"}, "serial_format": {"0": "8-N-1", "1": "8-N-2", "2": "8-E-1", "3": "8-E-2", "4": "8-O-1", "5": "8-O-2"}, "language": {"0": "PT-BR", "1": "ES", "2": "EN-US"}, "demand_interval": {"0": "1", "1": "2", "2": "3", "3": "4", "4": "5", "5": "6", "6": "10", "7": "12", "8": "15", "9": "20", "10": "30", "11": "60"}, "modbus_mode": {"0": "Short", "1": "Long"}, "pf_character": {"-1": "None", "0": "Resistive", "1": "Inductive", "2": "Capacitive"}, "phase": {"-1": "None", "0": "A or AB", "1": "B or BC", "2": "C or CA"} }, "registers": [ {"name": "Slave address", "group": "Settings", "area": "holding", "address": 0, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247, "description": "Modbus network address"}, {"name": "Modbus 32-bit mode", "group": "Settings", "area": "holding", "address": 1, "type": "uint16", "access": "RW", "enum": "modbus_mode", "description": "Short = 16-bit addressing (this map), Long = 32-bit addressing"}, {"name": "Byte swap indication", "group": "Settings", "area": "holding", "address": 2, "type": "uint16", "access": "RW"}, {"name": "Word swap indication", "group": "Settings", "area": "holding", "address": 3, "type": "uint16", "access": "RW"}, {"name": "Baud rate", "group": "Settings", "area": "holding", "address": 4, "type": "uint16", "access": "RW", "enum": "baud_rate", "description": "RS-485 baud rate in bit/s"}, {"name": "Nominal frequency", "group": "Settings", "area": "holding", "address": 5, "type": "uint16", "access": "RW", "enum": "frequency"}, {"name": "Time zone", "group": "Settings", "area": "holding", "address": 10, "type": "uint16", "access": "RW", "enum": "time_zone"}, {"name": "Daylight saving time", "group": "Settings", "area": "holding", "address": 11, "type": "uint16", "access": "RW", "enum": "dst"}, {"name": "Phase sequence", "group": "Settings", "area": "holding", "address": 13, "type": "uint16", "access": "RW", "enum": "phase_sequence"}, {"name": "System connection type", "group": "Settings", "area": "holding", "address": 14, "type": "uint16", "access": "RW", "enum": "system_connection", "description": "Wiring configuration; labels as printed in the manual (entries 02 and 03, and 15 and 16, are labelled the same)"}, {"name": "VT setting mode", "group": "Settings", "area": "holding", "address": 15, "type": "uint16", "access": "RW", "enum": "ratio_mode"}, {"name": "CT setting mode", "group": "Settings", "area": "holding", "address": 16, "type": "uint16", "access": "RW", "enum": "ratio_mode"}, {"name": "CT 1 direction", "group": "Settings", "area": "holding", "address": 17, "type": "uint16", "access": "RW", "enum": "ct_direction"}, {"name": "CT 2 direction", "group": "Settings", "area": "holding", "address": 18, "type": "uint16", "access": "RW", "enum": "ct_direction"}, {"name": "CT 3 direction", "group": "Settings", "area": "holding", "address": 19, "type": "uint16", "access": "RW", "enum": "ct_direction"}, {"name": "Power calculation mode", "group": "Settings", "area": "holding", "address": 20, "type": "uint16", "access": "RW", "enum": "power_mode"}, {"name": "Serial frame format", "group": "Settings", "area": "holding", "address": 21, "type": "uint16", "access": "RW", "enum": "serial_format"}, {"name": "Language", "group": "Settings", "area": "holding", "address": 22, "type": "uint16", "access": "RW", "enum": "language"}, {"name": "Demand integration interval", "group": "Settings", "area": "holding", "address": 23, "type": "uint16", "access": "RW", "enum": "demand_interval", "description": "Interval in minutes"}, {"name": "Display refresh time", "group": "Settings", "area": "holding", "address": 40, "type": "uint16", "access": "RW", "enum": {"3": "1.0 s", "4": "2.0 s", "5": "5.0 s"}}, {"name": "Backlight time", "group": "Settings", "area": "holding", "address": 41, "type": "uint16", "access": "RW", "enum": {"0": "Always on", "1": "10 s", "2": "20 s", "3": "30 s", "4": "40 s", "5": "50 s", "6": "60 s"}}, {"name": "VT primary", "group": "Settings", "area": "holding", "address": 200, "type": "uint32", "access": "RW", "unit": "V"}, {"name": "VT secondary", "group": "Settings", "area": "holding", "address": 202, "type": "uint32", "access": "RW", "unit": "V"}, {"name": "VT ratio", "group": "Settings", "area": "holding", "address": 204, "type": "float32", "access": "RW", "write_min": 1, "write_max": 20000}, {"name": "CT primary", "group": "Settings", "area": "holding", "address": 206, "type": "uint32", "access": "RW", "unit": "A"}, {"name": "CT secondary", "group": "Settings", "area": "holding", "address": 208, "type": "uint32", "access": "RW", "unit": "A"}, {"name": "CT ratio", "group": "Settings", "area": "holding", "address": 210, "type": "float32", "access": "RW", "write_min": 1, "write_max": 20000}, {"name": "Datalog interval", "group": "Settings", "area": "holding", "address": 214, "type": "uint32", "access": "RW", "unit": "s", "description": "Interval between logged records"}, {"name": "Timestamp", "group": "Instantaneous", "area": "input", "address": 0, "type": "uint32", "description": "Time of the measurement, seconds since 1970-01-01 UTC"}, {"name": "Average phase voltage", "group": "Instantaneous", "area": "input", "address": 2, "type": "float32", "unit": "V"}, {"name": "Phase A voltage", "group": "Instantaneous", "area": "input", "address": 4, "type": "float32", "unit": "V"}, {"name": "Phase B voltage", "group": "Instantaneous", "area": "input", "address": 6, "type": "float32", "unit": "V"}, {"name": "Phase C voltage", "group": "Instantaneous", "area": "input", "address": 8, "type": "float32", "unit": "V"}, {"name": "Average current", "group": "Instantaneous", "area": "input", "address": 10, "type": "float32", "unit": "A"}, {"name": "Phase A current", "group": "Instantaneous", "area": "input", "address": 12, "type": "float32", "unit": "A"}, {"name": "Phase B current", "group": "Instantaneous", "area": "input", "address": 14, "type": "float32", "unit": "A"}, {"name": "Phase C current", "group": "Instantaneous", "area": "input", "address": 16, "type": "float32", "unit": "A"}, {"name": "Average line voltage", "group": "Instantaneous", "area": "input", "address": 18, "type": "float32", "unit": "V"}, {"name": "Line AB voltage", "group": "Instantaneous", "area": "input", "address": 20, "type": "float32", "unit": "V"}, {"name": "Line BC voltage", "group": "Instantaneous", "area": "input", "address": 22, "type": "float32", "unit": "V"}, {"name": "Line CA voltage", "group": "Instantaneous", "area": "input", "address": 24, "type": "float32", "unit": "V"}, {"name": "Total power factor", "group": "Instantaneous", "area": "input", "address": 26, "type": "float32"}, {"name": "Phase A power factor", "group": "Instantaneous", "area": "input", "address": 28, "type": "float32"}, {"name": "Phase B power factor", "group": "Instantaneous", "area": "input", "address": 30, "type": "float32"}, {"name": "Phase C power factor", "group": "Instantaneous", "area": "input", "address": 32, "type": "float32"}, {"name": "Total power factor character", "group": "Instantaneous", "area": "input", "address": 34, "type": "int32", "enum": "pf_character"}, {"name": "Phase A power factor character", "group": "Instantaneous", "area": "input", "address": 36, "type": "int32", "enum": "pf_character"}, {"name": "Phase B power factor character", "group": "Instantaneous", "area": "input", "address": 38, "type": "int32", "enum": "pf_character"}, {"name": "Phase C power factor character", "group": "Instantaneous", "area": "input", "address": 40, "type": "int32", "enum": "pf_character"}, {"name": "Total active power", "group": "Instantaneous", "area": "input", "address": 42, "type": "float32", "unit": "W"}, {"name": "Phase A active power", "group": "Instantaneous", "area": "input", "address": 44, "type": "float32", "unit": "W"}, {"name": "Phase B active power", "group": "Instantaneous", "area": "input", "address": 46, "type": "float32", "unit": "W"}, {"name": "Phase C active power", "group": "Instantaneous", "area": "input", "address": 48, "type": "float32", "unit": "W"}, {"name": "Total reactive power", "group": "Instantaneous", "area": "input", "address": 50, "type": "float32", "unit": "VAr"}, {"name": "Phase A reactive power", "group": "Instantaneous", "area": "input", "address": 52, "type": "float32", "unit": "VAr"}, {"name": "Phase B reactive power", "group": "Instantaneous", "area": "input", "address": 54, "type": "float32", "unit": "VAr"}, {"name": "Phase C reactive power", "group": "Instantaneous", "area": "input", "address": 56, "type": "float32", "unit": "VAr"}, {"name": "Total apparent power", "group": "Instantaneous", "area": "input", "address": 58, "type": "float32", "unit": "VA"}, {"name": "Phase A apparent power", "group": "Instantaneous", "area": "input", "address": 60, "type": "float32", "unit": "VA"}, {"name": "Phase B apparent power", "group": "Instantaneous", "area": "input", "address": 62, "type": "float32", "unit": "VA"}, {"name": "Phase C apparent power", "group": "Instantaneous", "area": "input", "address": 64, "type": "float32", "unit": "VA"}, {"name": "Frequency", "group": "Instantaneous", "area": "input", "address": 66, "type": "float32", "unit": "Hz"}, {"name": "Phase A voltage peak", "group": "Instantaneous", "area": "input", "address": 68, "type": "float32"}, {"name": "Phase B voltage peak", "group": "Instantaneous", "area": "input", "address": 70, "type": "float32"}, {"name": "Phase C voltage peak", "group": "Instantaneous", "area": "input", "address": 72, "type": "float32"}, {"name": "Neutral current", "group": "Instantaneous", "area": "input", "address": 74, "type": "float32", "unit": "A"}, {"name": "Frequency measured on phase", "group": "Instantaneous", "area": "input", "address": 76, "type": "int32", "enum": "phase"}, {"name": "Phase A current angle", "group": "Instantaneous", "area": "input", "address": 78, "type": "float32", "unit": "°"}, {"name": "Phase B current angle", "group": "Instantaneous", "area": "input", "address": 80, "type": "float32", "unit": "°"}, {"name": "Phase C current angle", "group": "Instantaneous", "area": "input", "address": 82, "type": "float32", "unit": "°"}, {"name": "Active demand total predicted", "group": "Demand", "area": "input", "address": 200, "type": "float32", "unit": "W"}, {"name": "Active demand last interval", "group": "Demand", "area": "input", "address": 202, "type": "float32", "unit": "W"}, {"name": "Active demand total maximum", "group": "Demand", "area": "input", "address": 204, "type": "float32", "unit": "W"}, {"name": "Reactive demand total predicted", "group": "Demand", "area": "input", "address": 206, "type": "float32", "unit": "VAr"}, {"name": "Reactive demand total last interval", "group": "Demand", "area": "input", "address": 208, "type": "float32", "unit": "VAr"}, {"name": "Reactive demand total maximum", "group": "Demand", "area": "input", "address": 210, "type": "float32", "unit": "VAr"}, {"name": "Inductive reactive demand predicted", "group": "Demand", "area": "input", "address": 212, "type": "float32", "unit": "VAr"}, {"name": "Inductive reactive demand last interval", "group": "Demand", "area": "input", "address": 214, "type": "float32", "unit": "VAr"}, {"name": "Inductive reactive demand maximum", "group": "Demand", "area": "input", "address": 216, "type": "float32", "unit": "VAr"}, {"name": "Capacitive reactive demand predicted", "group": "Demand", "area": "input", "address": 218, "type": "float32", "unit": "VAr"}, {"name": "Capacitive reactive demand last interval", "group": "Demand", "area": "input", "address": 220, "type": "float32", "unit": "VAr"}, {"name": "Capacitive reactive demand maximum", "group": "Demand", "area": "input", "address": 222, "type": "float32", "unit": "VAr"}, {"name": "Apparent demand predicted", "group": "Demand", "area": "input", "address": 224, "type": "float32", "unit": "VA"}, {"name": "Apparent demand last interval", "group": "Demand", "area": "input", "address": 226, "type": "float32", "unit": "VA"}, {"name": "Apparent demand maximum", "group": "Demand", "area": "input", "address": 228, "type": "float32", "unit": "VA"}, {"name": "Active energy net", "group": "Energy", "area": "input", "address": 300, "type": "float32", "unit": "kWh"}, {"name": "Active energy gross", "group": "Energy", "area": "input", "address": 302, "type": "float32", "unit": "kWh"}, {"name": "Active energy forward", "group": "Energy", "area": "input", "address": 304, "type": "float32", "unit": "kWh"}, {"name": "Active energy reverse", "group": "Energy", "area": "input", "address": 306, "type": "float32", "unit": "kWh"}, {"name": "Reactive energy net", "group": "Energy", "area": "input", "address": 308, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy gross", "group": "Energy", "area": "input", "address": 310, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy forward", "group": "Energy", "area": "input", "address": 312, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy reverse", "group": "Energy", "area": "input", "address": 314, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy reverse inductive", "group": "Energy", "area": "input", "address": 316, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy reverse capacitive", "group": "Energy", "area": "input", "address": 318, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy forward inductive", "group": "Energy", "area": "input", "address": 320, "type": "float32", "unit": "kvarh"}, {"name": "Reactive energy forward capacitive", "group": "Energy", "area": "input", "address": 322, "type": "float32", "unit": "kvarh"}, {"name": "Apparent energy total", "group": "Energy", "area": "input", "address": 324, "type": "float32", "unit": "kVAh"}, {"name": "Phase A voltage minimum", "group": "Statistics", "area": "input", "address": 360, "type": "float32", "unit": "V"}, {"name": "Phase B voltage minimum", "group": "Statistics", "area": "input", "address": 362, "type": "float32", "unit": "V"}, {"name": "Phase C voltage minimum", "group": "Statistics", "area": "input", "address": 364, "type": "float32", "unit": "V"}, {"name": "Line AB voltage minimum", "group": "Statistics", "area": "input", "address": 366, "type": "float32", "unit": "V"}, {"name": "Line BC voltage minimum", "group": "Statistics", "area": "input", "address": 368, "type": "float32", "unit": "V"}, {"name": "Line CA voltage minimum", "group": "Statistics", "area": "input", "address": 370, "type": "float32", "unit": "V"}, {"name": "Phase A voltage average", "group": "Statistics", "area": "input", "address": 372, "type": "float32", "unit": "V"}, {"name": "Phase B voltage average", "group": "Statistics", "area": "input", "address": 374, "type": "float32", "unit": "V"}, {"name": "Phase C voltage average", "group": "Statistics", "area": "input", "address": 376, "type": "float32", "unit": "V"}, {"name": "Line AB voltage average", "group": "Statistics", "area": "input", "address": 378, "type": "float32", "unit": "V"}, {"name": "Line BC voltage average", "group": "Statistics", "area": "input", "address": 380, "type": "float32", "unit": "V"}, {"name": "Line CA voltage average", "group": "Statistics", "area": "input", "address": 382, "type": "float32", "unit": "V"}, {"name": "Phase A voltage maximum", "group": "Statistics", "area": "input", "address": 384, "type": "float32", "unit": "V"}, {"name": "Phase B voltage maximum", "group": "Statistics", "area": "input", "address": 386, "type": "float32", "unit": "V"}, {"name": "Phase C voltage maximum", "group": "Statistics", "area": "input", "address": 388, "type": "float32", "unit": "V"}, {"name": "Line AB voltage maximum", "group": "Statistics", "area": "input", "address": 390, "type": "float32", "unit": "V"}, {"name": "Line BC voltage maximum", "group": "Statistics", "area": "input", "address": 392, "type": "float32", "unit": "V"}, {"name": "Line CA voltage maximum", "group": "Statistics", "area": "input", "address": 394, "type": "float32", "unit": "V"}, {"name": "Phase A current minimum", "group": "Statistics", "area": "input", "address": 396, "type": "float32", "unit": "A"}, {"name": "Phase B current minimum", "group": "Statistics", "area": "input", "address": 398, "type": "float32", "unit": "A"}, {"name": "Phase C current minimum", "group": "Statistics", "area": "input", "address": 400, "type": "float32", "unit": "A"}, {"name": "Phase A current average", "group": "Statistics", "area": "input", "address": 402, "type": "float32", "unit": "A"}, {"name": "Phase B current average", "group": "Statistics", "area": "input", "address": 404, "type": "float32", "unit": "A"}, {"name": "Phase C current average", "group": "Statistics", "area": "input", "address": 406, "type": "float32", "unit": "A"}, {"name": "Phase A current maximum", "group": "Statistics", "area": "input", "address": 408, "type": "float32", "unit": "A"}, {"name": "Phase B current maximum", "group": "Statistics", "area": "input", "address": 410, "type": "float32", "unit": "A"}, {"name": "Phase C current maximum", "group": "Statistics", "area": "input", "address": 412, "type": "float32", "unit": "A"} ] }