{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Altus", "model": "PH31XX (PH3100 series)", "models": ["PH3100", "PH3120", "PH3131", "PH3150", "PH3151", "PH3220", "PH3231", "PH3250", "PH3251"], "vendor_website": "altus.com.br", "description": "Phase series three-phase power meter with expansion modules: system settings, voltages, currents, powers, power factor, frequency, unbalance, harmonics and alarm status", "revision": 1, "revised": "2026-11-10", "source": "Manual de Utilização Série Phase, Rev. E 09/2015", "sources": [ {"title": "Manual de Utilização Série Phase (MU215100)", "version": "Rev. E 09/2015", "note": "linked in issue #115; chapter 5 (MODBUS RTU Escravo), tables 5-7 to 5-15", "date": "2015-09"} ], "notes": [ "Modbus RTU on the RS-485 channel of the PH3100 (terminals 15 TX+, 16 TX-, 17 shield), 1 start, 8 data and 1 stop bit. The manual does not state a default baud rate or parity: 9600 N is a placeholder. Baud rates 2400 to 38400 (register 0x0103); address 1 to 247 (register 0x0100), factory address 1. Only function codes 03, 06 and 16 are described, so every register is a holding register.", "The PH3150/PH3250 Ethernet module serves Modbus TCP/IP, or Modbus RTU over TCP/IP, with one connection. TCP/IP is the factory protocol from PH3100 revision AJ; RTU over TCP needs the PH3101 configurator 2.19 or later. The module's factory IP is given in the manual; the port is not stated here, 502 is assumed.", "Addresses are those printed in the manual (hexadecimal), taken as wire addresses (0-based). The manual warns that masters that start at 1 need address + 1.", "Registers 0x0300 to 0x0320 do not state a unit or decimals. The manual only says to multiply voltages by the VT ratio (register 0x0101) and currents by the CT ratio (register 0x0102). They are given as raw values: check against the display before applying a scale.", "Not included: the energy registers (0x1A00 onward), which split a value into a quotient and a remainder in a way the manual does not make clear, the demand, maximum and minimum tables, the monthly profile registers (addresses in that part of the table are inconsistent) and the harmonic spectrum tables. The harmonics module (PH3131) is required for the harmonic registers.", "Written from the manufacturer's manual; not tested on a device." ], "protocol": "tcp+rtu", "unit_id": 1, "baudrate": 9600, "parity": "N", "databits": 8, "stopbits": 1, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "enums": { "baud_rate": {"2": "38400", "3": "19200", "4": "9600", "5": "4800", "6": "2400"} }, "registers": [ {"name": "Hardware version", "group": "Info", "area": "holding", "address": "0x0000", "type": "uint16", "description": "Hardware version number"}, {"name": "Software version", "group": "Info", "area": "holding", "address": "0x0130", "type": "uint16", "description": "Software version number"}, {"name": "Connection method", "group": "Settings", "area": "holding", "address": "0x0001", "type": "uint16", "access": "RW", "description": "0 = 3-phase 3-wire, any other value = 3-phase 4-wire"}, {"name": "Operating time (high)", "group": "Info", "area": "holding", "address": "0x0002", "type": "uint16", "description": "High word of the operating time; unit not given"}, {"name": "Operating time (low)", "group": "Info", "area": "holding", "address": "0x0003", "type": "uint16", "description": "Low word of the operating time; unit not given"}, {"name": "Voltage range", "group": "Settings", "area": "holding", "address": "0x0004", "type": "uint16", "access": "RW", "scale": 0.1, "unit": "V", "description": "Voltage scope, 0 to 690 V"}, {"name": "Current range", "group": "Settings", "area": "holding", "address": "0x0005", "type": "uint16", "access": "RW", "scale": 0.001, "unit": "A", "description": "Current scope, 0 to 5 A"}, {"name": "Slave address", "group": "Settings", "area": "holding", "address": "0x0100", "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247, "description": "Modbus address"}, {"name": "VT ratio", "group": "Settings", "area": "holding", "address": "0x0101", "type": "uint16", "access": "RW", "description": "Voltage transformer ratio"}, {"name": "CT ratio", "group": "Settings", "area": "holding", "address": "0x0102", "type": "uint16", "access": "RW", "description": "Current transformer ratio"}, {"name": "Baud rate", "group": "Settings", "area": "holding", "address": "0x0103", "type": "uint16", "access": "RW", "enum": "baud_rate"}, {"name": "Demand period", "group": "Settings", "area": "holding", "address": "0x0104", "type": "uint16", "access": "RW", "description": "1 to 15; the manual says seconds in this table and minutes elsewhere"}, {"name": "Meter constant", "group": "Settings", "area": "holding", "address": "0x012D", "type": "uint16", "access": "RW", "write_min": 1, "write_max": 9600, "description": "Pulse constant, 1 to 9600"}, {"name": "Display interval", "group": "Settings", "area": "holding", "address": "0x012F", "type": "uint16", "access": "RW", "unit": "s", "write_min": 2, "write_max": 30, "description": "Display interval, 2 to 30 s"}, {"name": "Data logging interval", "group": "Settings", "area": "holding", "address": "0x0132", "type": "uint16", "access": "RW", "unit": "s", "write_min": 1, "write_max": 3600}, {"name": "Profibus address", "group": "Settings", "area": "holding", "address": "0x0134", "type": "uint16", "access": "RW", "write_min": 3, "write_max": 123, "description": "Address used by the PROFIBUS module"}, {"name": "L1 phase voltage", "group": "Measurements", "area": "holding", "address": "0x0300", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L2 phase voltage", "group": "Measurements", "area": "holding", "address": "0x0301", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L3 phase voltage", "group": "Measurements", "area": "holding", "address": "0x0302", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "Average phase voltage", "group": "Measurements", "area": "holding", "address": "0x0303", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L12 line voltage", "group": "Measurements", "area": "holding", "address": "0x0304", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L23 line voltage", "group": "Measurements", "area": "holding", "address": "0x0305", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L31 line voltage", "group": "Measurements", "area": "holding", "address": "0x0306", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "Average line voltage", "group": "Measurements", "area": "holding", "address": "0x0307", "type": "uint16", "description": "Raw value, multiply by the VT ratio; unit and decimals not given"}, {"name": "L1 current", "group": "Measurements", "area": "holding", "address": "0x0308", "type": "uint16", "description": "Raw value, multiply by the CT ratio; unit and decimals not given"}, {"name": "L2 current", "group": "Measurements", "area": "holding", "address": "0x0309", "type": "uint16", "description": "Raw value, multiply by the CT ratio; unit and decimals not given"}, {"name": "L3 current", "group": "Measurements", "area": "holding", "address": "0x030A", "type": "uint16", "description": "Raw value, multiply by the CT ratio; unit and decimals not given"}, {"name": "Average current", "group": "Measurements", "area": "holding", "address": "0x030B", "type": "uint16", "description": "Raw value, multiply by the CT ratio; unit and decimals not given"}, {"name": "L1 apparent power", "group": "Measurements", "area": "holding", "address": "0x030C", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "L2 apparent power", "group": "Measurements", "area": "holding", "address": "0x030D", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "L3 apparent power", "group": "Measurements", "area": "holding", "address": "0x030E", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "Three-phase apparent power", "group": "Measurements", "area": "holding", "address": "0x030F", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "L1 active power", "group": "Measurements", "area": "holding", "address": "0x0310", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L2 active power", "group": "Measurements", "area": "holding", "address": "0x0311", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L3 active power", "group": "Measurements", "area": "holding", "address": "0x0312", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "Three-phase active power", "group": "Measurements", "area": "holding", "address": "0x0313", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L1 reactive power", "group": "Measurements", "area": "holding", "address": "0x0314", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L2 reactive power", "group": "Measurements", "area": "holding", "address": "0x0315", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L3 reactive power", "group": "Measurements", "area": "holding", "address": "0x0316", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "Three-phase reactive power", "group": "Measurements", "area": "holding", "address": "0x0317", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L1 power factor", "group": "Measurements", "area": "holding", "address": "0x0318", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L2 power factor", "group": "Measurements", "area": "holding", "address": "0x0319", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "L3 power factor", "group": "Measurements", "area": "holding", "address": "0x031A", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "Three-phase power factor", "group": "Measurements", "area": "holding", "address": "0x031B", "type": "int16", "description": "Raw value; unit and decimals not given"}, {"name": "System frequency", "group": "Measurements", "area": "holding", "address": "0x031C", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "Zero-sequence current", "group": "Measurements", "area": "holding", "address": "0x031D", "type": "uint16", "description": "Raw value; unit and decimals not given"}, {"name": "Voltage unbalance", "group": "Measurements", "area": "holding", "address": "0x031E", "type": "uint16", "description": "Unbalance ratio as defined in the manual, (VH - VL) / VH * 1000"}, {"name": "Current unbalance", "group": "Measurements", "area": "holding", "address": "0x031F", "type": "uint16", "description": "Unbalance ratio as defined in the manual, (IH - IL) / IH * 1000"}, {"name": "Output 1 alarm", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 0, "description": "1 = alarm active"}, {"name": "Output 2 alarm", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 1, "description": "1 = alarm active"}, {"name": "Output 3 alarm", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 2, "description": "1 = alarm active"}, {"name": "Output 4 alarm", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 3, "description": "1 = alarm active"}, {"name": "Output 1 alarm above limit", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 8, "description": "Alarm type: 1 = above the limit, 0 = below the limit"}, {"name": "Output 2 alarm above limit", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 9, "description": "Alarm type: 1 = above the limit, 0 = below the limit"}, {"name": "Output 3 alarm above limit", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 10, "description": "Alarm type: 1 = above the limit, 0 = below the limit"}, {"name": "Output 4 alarm above limit", "group": "Status", "area": "holding", "address": "0x0321", "type": "bool", "bit": 11, "description": "Alarm type: 1 = above the limit, 0 = below the limit"}, {"name": "L1 THD voltage", "group": "Harmonics", "area": "holding", "address": "0x0660", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic voltage distortion"}, {"name": "L1 voltage", "group": "Harmonics", "area": "holding", "address": "0x068E", "type": "uint16", "scale": 0.1, "unit": "V", "description": "Voltage in the harmonics block"}, {"name": "L1 voltage phase angle", "group": "Harmonics", "area": "holding", "address": "0x0691", "type": "uint16", "scale": 0.1, "unit": "°"}, {"name": "I1 current", "group": "Harmonics", "area": "holding", "address": "0x0694", "type": "uint16", "scale": 0.001, "unit": "A", "description": "Current in the harmonics block"}, {"name": "L1 active power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x069C", "type": "int16", "scale": 0.001, "unit": "kW", "description": "Signed, -32767 to 32767"}, {"name": "L1 reactive power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x069F", "type": "int16", "scale": 0.001, "unit": "kvar", "description": "Signed, -32767 to 32767"}, {"name": "L1 apparent power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x06A2", "type": "uint16", "scale": 0.001, "unit": "kVA"}, {"name": "L2 THD voltage", "group": "Harmonics", "area": "holding", "address": "0x0661", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic voltage distortion"}, {"name": "L2 voltage", "group": "Harmonics", "area": "holding", "address": "0x068F", "type": "uint16", "scale": 0.1, "unit": "V", "description": "Voltage in the harmonics block"}, {"name": "L2 voltage phase angle", "group": "Harmonics", "area": "holding", "address": "0x0692", "type": "uint16", "scale": 0.1, "unit": "°"}, {"name": "I2 current", "group": "Harmonics", "area": "holding", "address": "0x0695", "type": "uint16", "scale": 0.001, "unit": "A", "description": "Current in the harmonics block"}, {"name": "L2 active power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x069D", "type": "int16", "scale": 0.001, "unit": "kW", "description": "Signed, -32767 to 32767"}, {"name": "L2 reactive power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x06A0", "type": "int16", "scale": 0.001, "unit": "kvar", "description": "Signed, -32767 to 32767"}, {"name": "L2 apparent power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x06A3", "type": "uint16", "scale": 0.001, "unit": "kVA"}, {"name": "L3 THD voltage", "group": "Harmonics", "area": "holding", "address": "0x0662", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic voltage distortion"}, {"name": "L3 voltage", "group": "Harmonics", "area": "holding", "address": "0x0690", "type": "uint16", "scale": 0.1, "unit": "V", "description": "Voltage in the harmonics block"}, {"name": "L3 voltage phase angle", "group": "Harmonics", "area": "holding", "address": "0x0693", "type": "uint16", "scale": 0.1, "unit": "°"}, {"name": "I3 current", "group": "Harmonics", "area": "holding", "address": "0x0696", "type": "uint16", "scale": 0.001, "unit": "A", "description": "Current in the harmonics block"}, {"name": "L3 active power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x069E", "type": "int16", "scale": 0.001, "unit": "kW", "description": "Signed, -32767 to 32767"}, {"name": "L3 reactive power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x06A1", "type": "int16", "scale": 0.001, "unit": "kvar", "description": "Signed, -32767 to 32767"}, {"name": "L3 apparent power (scaled)", "group": "Harmonics", "area": "holding", "address": "0x06A4", "type": "uint16", "scale": 0.001, "unit": "kVA"}, {"name": "I1 THD current", "group": "Harmonics", "area": "holding", "address": "0x066C", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic current distortion"}, {"name": "I2 THD current", "group": "Harmonics", "area": "holding", "address": "0x066D", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic current distortion"}, {"name": "I3 THD current", "group": "Harmonics", "area": "holding", "address": "0x066E", "type": "uint16", "scale": 0.01, "unit": "%", "description": "Total harmonic current distortion"}, {"name": "Neutral THD current", "group": "Harmonics", "area": "holding", "address": "0x066F", "type": "uint16", "scale": 0.01, "unit": "%"}, {"name": "I1 current phase angle", "group": "Harmonics", "area": "holding", "address": "0x0698", "type": "uint16", "scale": 0.1, "unit": "°"}, {"name": "I2 current phase angle", "group": "Harmonics", "area": "holding", "address": "0x0699", "type": "uint16", "scale": 0.1, "unit": "°"} ] }