{
 "manufacturer": "Eaton",
 "manufacturer_slug": "eaton",
 "model": "IQ 250 / IQ 260 Electronic Power Meter",
 "model_slug": "iq-250-260",
 "short_model": "IQ 250/260",
 "aliases": [
  "IQ 250",
  "IQ 260",
  "IQ 250L",
  "IQ 260L",
  "IQ250",
  "IQ260"
 ],
 "equipment_type": "Power meter",
 "applies_to": "Eaton IQ 250 and IQ 260 meters (including the L logging versions), Modbus map Appendix B of IB02601006E.",
 "summary": "The IQ 250 and IQ 260 are panel-mount multifunction power meters with a serial COM2 port (Modbus RTU, Modbus ASCII or DNP) and optional plug-in cards, including a network card for Modbus TCP. Everything sits in holding registers: live readings and demand values are IEEE floats in primary units, while status, THD and angles are 16-bit integers. This map covers identification, primary readings, demand, maximum demand, phase angles, status, THD, reset commands and the CT/PT and COM2 settings.",
 "transport": [
  "RTU",
  "ASCII",
  "TCP"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": null,
  "data_bits": null,
  "stop_bits": null,
  "tcp_port": null
 },
 "addressing": {
  "convention": "1-based",
  "note": "Each map row prints a hex address and a decimal register. The hex column is the wire address; the decimal column is one higher (the map's own example: serial number at hex 0008 = register 9, entered as 40009 in a SCADA tool). Here 'documented' is the decimal register and address = decimal minus 1."
 },
 "default_word_order": "ABCD",
 "firmware": null,
 "source": {
  "title": "Appendix B: IQ 250/260 Meter, IQ 250/260 Modbus Map",
  "doc_number": "IB02601006E",
  "revision_date": null,
  "url": "https://www.eaton.com/content/dam/eaton/products/low-voltage-power-distribution-controls-systems/power-energy-meters/power-xpert-meter-2000-series/iq250-260-and-pxm2k-modbus-register-map-ib02601006e.pdf",
  "pages": "Data formats pp. B-1 to B-3; register map MM-1 to MM-43 (PDF pages 25-67)"
 },
 "notes": [
  "Word order: the map's data-format preface says that for 32-bit integers and floats the lower-addressed register holds the high-order half, and its worked float example (C4E1 then 1DB9 = -1800.929) confirms it. All 32-bit values here are ABCD.",
  "Eaton publishes this map on its Power Xpert Meter 2000 product page under a file name that also mentions the PXM 2000, but the document text itself only names the IQ 250/260. This entry is therefore limited to the IQ 250/260.",
  "Left out: the integer Readings Block (registers 279-305). Its scale and decimal-point position come from the programmable settings, so a fixed scale cannot be given. Use the float Primary Readings Block instead.",
  "Left out: every energy counter (Primary Energy Block 1500-1571, Uncompensated energy 3032-3103 and the secondary-block energy 40022-40061). They are signed or unsigned 32-bit integers whose implied decimal point and unit/kilo/mega multiplier depend on the Power & Energy Format register (30006), which the schema cannot express as a fixed scale. Read 30006 and apply its energy scale and decimal digits yourself if you need them.",
  "Left out: the secondary readings block 40002-40073. These values use offset formulas such as 150 x (raw - 2047) / 2047 that do not fit a simple scale and offset.",
  "Left out: short-term and minimum/maximum blocks other than the maximum demand values, timestamped min/max blocks, option-card blocks, log setup and log retrieval blocks, TSTAMP registers (three-register date/time) and the limit setpoints.",
  "Map typo, not used here: in the Short Term Primary Maximum block, Volts C-N Maximum is printed with hex 232F-2320 against decimal 8992-8993; the decimal column implies hex 231F.",
  "Values marked 'M' in the source range column mean a 1,000,000 multiplier on the range only; the floats themselves are in plain volts, amps, watts, VARs and VAs.",
  "Command registers always read 0. If a password is wrong the meter still answers normally but does nothing; with passwords disabled the password is 5555."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 0,
   "documented": "1",
   "name": "Meter Name",
   "description": "16 ASCII characters, two per register, high byte first.",
   "data_type": "STRING",
   "length": 8,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8,
   "documented": "9",
   "name": "Meter Serial Number",
   "description": "16 ASCII characters.",
   "data_type": "STRING",
   "length": 8,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16,
   "documented": "17",
   "name": "Meter Type",
   "description": "Model code and transducer/submeter flags.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0-2": "IQ model code (V40 IQ 250, V41 IQ 260, V48 IQ 250L, V49 IQ 260L)",
    "8": "Transducer model (1 = yes)",
    "9": "Submeter model (1 = yes)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 17,
   "documented": "18",
   "name": "Firmware Version",
   "description": "4 ASCII characters.",
   "data_type": "STRING",
   "length": 2,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19,
   "documented": "20",
   "name": "Map Version",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20,
   "documented": "21",
   "name": "Meter Configuration",
   "description": "CT secondary and calibration frequency.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0-5": "Calibration frequency (50 or 60)",
    "8-10": "CT denominator (1 or 5)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 26,
   "documented": "27",
   "name": "Meter Type Name",
   "description": "8 ASCII characters.",
   "data_type": "STRING",
   "length": 4,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 999,
   "documented": "1000-1001",
   "name": "Volts A-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1001,
   "documented": "1002-1003",
   "name": "Volts B-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1003,
   "documented": "1004-1005",
   "name": "Volts C-N",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1005,
   "documented": "1006-1007",
   "name": "Volts A-B",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1007,
   "documented": "1008-1009",
   "name": "Volts B-C",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1009,
   "documented": "1010-1011",
   "name": "Volts C-A",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1011,
   "documented": "1012-1013",
   "name": "Amps A",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1013,
   "documented": "1014-1015",
   "name": "Amps B",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1015,
   "documented": "1016-1017",
   "name": "Amps C",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1017,
   "documented": "1018-1019",
   "name": "Watts, 3-Ph total",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1019,
   "documented": "1020-1021",
   "name": "VARs, 3-Ph total",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1021,
   "documented": "1022-1023",
   "name": "VAs, 3-Ph total",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1023,
   "documented": "1024-1025",
   "name": "Power Factor, 3-Ph total",
   "description": "Range -1.00 to +1.00.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1025,
   "documented": "1026-1027",
   "name": "Frequency",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1027,
   "documented": "1028-1029",
   "name": "Neutral Current",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1029,
   "documented": "1030-1031",
   "name": "Watts, Phase A",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1031,
   "documented": "1032-1033",
   "name": "Watts, Phase B",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1033,
   "documented": "1034-1035",
   "name": "Watts, Phase C",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1035,
   "documented": "1036-1037",
   "name": "VARs, Phase A",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1037,
   "documented": "1038-1039",
   "name": "VARs, Phase B",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1039,
   "documented": "1040-1041",
   "name": "VARs, Phase C",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1041,
   "documented": "1042-1043",
   "name": "VAs, Phase A",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1043,
   "documented": "1044-1045",
   "name": "VAs, Phase B",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1045,
   "documented": "1046-1047",
   "name": "VAs, Phase C",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1047,
   "documented": "1048-1049",
   "name": "Power Factor, Phase A",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1049,
   "documented": "1050-1051",
   "name": "Power Factor, Phase B",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1051,
   "documented": "1052-1053",
   "name": "Power Factor, Phase C",
   "description": "Per-phase value; reads zero unless the hookup is wye.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1053,
   "documented": "1054-1055",
   "name": "Symmetrical Component Magnitude, 0 Seq",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1055,
   "documented": "1056-1057",
   "name": "Symmetrical Component Magnitude, + Seq",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1057,
   "documented": "1058-1059",
   "name": "Symmetrical Component Magnitude, - Seq",
   "description": "",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1062,
   "documented": "1063",
   "name": "Unbalance, 0 sequence component",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1063,
   "documented": "1064",
   "name": "Unbalance, - sequence component",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1064,
   "documented": "1065",
   "name": "Current Unbalance",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1999,
   "documented": "2000-2001",
   "name": "Amps A, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2001,
   "documented": "2002-2003",
   "name": "Amps B, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2003,
   "documented": "2004-2005",
   "name": "Amps C, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2005,
   "documented": "2006-2007",
   "name": "Positive Watts, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2007,
   "documented": "2008-2009",
   "name": "Positive VARs, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2009,
   "documented": "2010-2011",
   "name": "Negative Watts, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2011,
   "documented": "2012-2013",
   "name": "Negative VARs, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2013,
   "documented": "2014-2015",
   "name": "VAs, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2015,
   "documented": "2016-2017",
   "name": "Positive PF, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2017,
   "documented": "2018-2019",
   "name": "Negative PF, 3-Ph, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2019,
   "documented": "2020-2021",
   "name": "Neutral Current, Average",
   "description": "Demand average over the programmed interval.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4099,
   "documented": "4100",
   "name": "Phase A Current angle",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4100,
   "documented": "4101",
   "name": "Phase B Current angle",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4101,
   "documented": "4102",
   "name": "Phase C Current angle",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4102,
   "documented": "4103",
   "name": "Angle, Volts A-B",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4103,
   "documented": "4104",
   "name": "Angle, Volts B-C",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4104,
   "documented": "4105",
   "name": "Angle, Volts C-A",
   "description": "Range -180.0 to +180.0 degrees.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "°",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4499,
   "documented": "4500",
   "name": "Port ID",
   "description": "COM port the polling master is connected to (1-4).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4500,
   "documented": "4501",
   "name": "Meter Status",
   "description": "Measurement, memory, logging and edit state fields.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0-2": "Port enabled for edit (0 none, 1-4 COM1-COM4, 7 front panel)",
    "3-4": "Edit state (0 startup, 1 normal, 2 privileged session, 3 settings update)",
    "5-6": "Flash state (0 initializing, 1 logging disabled by model, 3 logging)",
    "7": "CT/PT compensation enabled",
    "10": "Header NVMEM block OK",
    "11": "Calibration NVMEM block OK",
    "12": "Profile NVMEM block OK",
    "13-15": "Measurement state (0 off, 1 running, 2 limp, 3 warmup, 6/7 boot)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4501,
   "documented": "4502",
   "name": "Limits Status",
   "description": "Out-of-limit flags for the eight programmable limits (1 = out).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0-7": "Limits 1-8, below (LM2) setpoint",
    "8-15": "Limits 1-8, above (LM1) setpoint"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4502,
   "documented": "4503-4504",
   "name": "Time Since Reset",
   "description": "Counts in 4 ms steps; wraps after maximum.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.004,
   "units": "s",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4511,
   "documented": "4512",
   "name": "Current Day of Week",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "Sunday",
    "2": "Monday",
    "3": "Tuesday",
    "4": "Wednesday",
    "5": "Thursday",
    "6": "Friday",
    "7": "Saturday"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5999,
   "documented": "6000",
   "name": "Volts A-N, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6000,
   "documented": "6001",
   "name": "Volts B-N, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6001,
   "documented": "6002",
   "name": "Volts C-N, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6002,
   "documented": "6003",
   "name": "Amps A, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6003,
   "documented": "6004",
   "name": "Amps B, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6004,
   "documented": "6005",
   "name": "Amps C, %THD",
   "description": "Raw 10000 means THD is not available for this channel.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9011,
   "documented": "9012-9013",
   "name": "Amps A, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9013,
   "documented": "9014-9015",
   "name": "Amps B, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9015,
   "documented": "9016-9017",
   "name": "Amps C, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9017,
   "documented": "9018-9019",
   "name": "Positive Watts, 3-Ph, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9019,
   "documented": "9020-9021",
   "name": "Positive VARs, 3-Ph, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9021,
   "documented": "9022-9023",
   "name": "Negative Watts, 3-Ph, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9023,
   "documented": "9024-9025",
   "name": "Negative VARs, 3-Ph, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9025,
   "documented": "9026-9027",
   "name": "VAs, 3-Ph, Maximum Avg Demand",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9031,
   "documented": "9032-9033",
   "name": "Frequency, Maximum",
   "description": "Highest value since the last max/min reset.",
   "data_type": "FLOAT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 19999,
   "documented": "20000",
   "name": "Reset Max/Min Blocks",
   "description": "Write the meter password (5555 when passwords are disabled); always reads 0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 20000,
   "documented": "20001",
   "name": "Reset Energy Accumulators",
   "description": "Write the meter password (5555 when passwords are disabled); always reads 0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21000,
   "documented": "21001",
   "name": "Force Meter Restart",
   "description": "Write the password to restart the meter.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21001,
   "documented": "21002",
   "name": "Open Privileged Command Session",
   "description": "Write the password; session stays open up to 5 minutes.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21002,
   "documented": "21003",
   "name": "Initiate Programmable Settings Update",
   "description": "Write the password inside a privileged session to enter settings-update mode.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21003,
   "documented": "21004",
   "name": "Calculate Programmable Settings Checksum",
   "description": "Settings-update mode only; tells the meter to compute the settings checksum.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21004,
   "documented": "21005",
   "name": "Programmable Settings Checksum",
   "description": "Settings-update mode only; writing it saves settings to non-volatile memory.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21006,
   "documented": "21007",
   "name": "Terminate Programmable Settings Update",
   "description": "Write any value to leave settings-update mode (meter resets).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21018,
   "documented": "21019",
   "name": "Close Privileged Command Session",
   "description": "Write any value to end the session.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 29999,
   "documented": "30000",
   "name": "CT multiplier & denominator",
   "description": "CT multiplier and secondary rating. Writable only in settings-update mode.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0-7": "CT multiplier (1, 10 or 100)",
    "8-15": "CT denominator (1 or 5, read-only)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30000,
   "documented": "30001",
   "name": "CT numerator",
   "description": "Range 1-9999. Writable only in settings-update mode.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30001,
   "documented": "30002",
   "name": "PT numerator",
   "description": "Range 1-9999. Writable only in settings-update mode.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30002,
   "documented": "30003",
   "name": "PT denominator",
   "description": "Range 1-9999. Writable only in settings-update mode.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30003,
   "documented": "30004",
   "name": "PT multiplier & hookup",
   "description": "PT multiplier and wiring hookup. Writable only in settings-update mode.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0-3": "Hookup (0 3-element wye 9S, 1 delta 2 CTs 5S, 3 2.5-element wye 6S)",
    "4-15": "PT multiplier (1, 10, 100 or 1000)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30004,
   "documented": "30005",
   "name": "Averaging Method",
   "description": "Demand interval and method. Writable only in settings-update mode.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0-2": "Number of subintervals (1-4)",
    "7": "0 = block, 1 = rolling",
    "8-13": "Interval in minutes (5, 15, 30, 60)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30005,
   "documented": "30006",
   "name": "Power & Energy Format",
   "description": "Scaling and decimal places for power/energy registers. Writable only in settings-update mode.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0-2": "Energy digits after decimal point (0-6)",
    "4-6": "Energy scale (0 unit, 3 kilo, 6 mega)",
    "7": "Power decimal point (0 data-dependent, 1 fixed)",
    "8-9": "Number of energy digits (0-3 = 5-8 digits)",
    "10-11": "Power digits after decimal point (0-3)",
    "12-15": "Power scale (0 unit, 3 kilo, 6 mega, 8 auto)"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30025,
   "documented": "30026",
   "name": "COM2 setup",
   "description": "RS-485 (COM2) protocol, baud rate and reply delay. Writable only in settings-update mode.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0-2": "Baud rate (1 9600, 2 19200, 4 38400, 6 57600)",
    "4-6": "Protocol (1 Modbus RTU, 2 Modbus ASCII, 3 DNP)",
    "8-11": "Reply delay in 50 ms steps"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 30026,
   "documented": "30027",
   "name": "COM2 address",
   "description": "Modbus address 1-247. Writable only in settings-update mode.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 40000,
   "documented": "40001",
   "name": "System Sanity Indicator",
   "description": "0 means the meter is operating normally.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Meter operating properly",
    "1": "Not operating properly"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 40099,
   "documented": "40100",
   "name": "Reset Energy Accumulators (secondary block)",
   "description": "Write the meter password (5555 when passwords are disabled); always reads 0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Poll holding registers 999-1028 (wire) with function 03 to get voltages, currents, totals, PF and frequency as big-endian floats in primary units; read the demand block at 1999 and the status word at 4500. Settings changes need a password-protected privileged session and settings-update mode.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 999,
    "why": "Volts A-N"
   },
   {
    "table": "holding_register",
    "address": 1011,
    "why": "Amps A"
   },
   {
    "table": "holding_register",
    "address": 1017,
    "why": "Total watts"
   },
   {
    "table": "holding_register",
    "address": 1023,
    "why": "Total power factor"
   },
   {
    "table": "holding_register",
    "address": 1025,
    "why": "Frequency"
   },
   {
    "table": "holding_register",
    "address": 2005,
    "why": "Positive watt demand"
   },
   {
    "table": "holding_register",
    "address": 4500,
    "why": "Meter status (measurement state)"
   }
  ],
  "enable": "Reads need no enabling. To change settings: write the password to Open Privileged Command Session (21002), then Initiate Programmable Settings Update (21003), write the settings, use the checksum registers 21004/21005 (writing 21005 saves the settings to non-volatile memory), then write Terminate (21007), which restarts the meter. Reset commands (20000, 20001) take the password directly.",
  "watchdog": null,
  "quirks": [
   "Holding registers only; the map has no input registers.",
   "32-bit values are high word first (ABCD).",
   "The printed decimal register is one higher than the wire address; the printed hex column is the wire address.",
   "Per-phase power and power factor read zero unless the hookup is wye.",
   "Registers not in the map read 0 and accept writes that do nothing."
  ],
  "setup": [
   "Set the COM2 address, baud rate and protocol from the front panel or Eaton's configuration software; over Modbus they live in 30026-30027 and can only be written in settings-update mode.",
   "COM2 baud choices in the map: 9600, 19200, 38400 or 57600."
  ],
  "gotchas": [
   "Meter Data readings are 0 until the first measurements are ready and while the meter is in settings-update mode (measurement state 'off').",
   "Reset energy after changing the Power & Energy Format register, as the map advises.",
   "A THD register reading raw 10000 means THD is unavailable (low signal, delta voltage, or model)."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/eaton/iq-250-260",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
