{
 "manufacturer": "Carlo Gavazzi",
 "manufacturer_slug": "carlo-gavazzi",
 "model": "EM24-IS (SFA and SFB models)",
 "model_slug": "em24-is-sfa-sfb",
 "short_model": "EM24-IS SFA/SFB",
 "aliases": [
  "EM24DINAV23XISSFA",
  "EM24DINAV53XISSFA",
  "EM24DINAV23XISSFB",
  "EM24DINAV53XISSFB",
  "EM24 SFA",
  "EM24 SFB"
 ],
 "equipment_type": "Energy meter",
 "applies_to": "EM24-DIN AV2/AV5 IS SFA and SFB versions (identification codes 1696-1699), protocol revision 2.0.",
 "summary": "The SFA and SFB versions of the EM24-DIN are reduced-function meters whose RS485 Modbus RTU map exposes only voltages, currents, power factor, frequency, phase sequence and imported active energy, plus status and serial settings. Values are 32-bit integers sent low word first with fixed weights.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": "None",
  "data_bits": null,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "Modicon",
  "note": "Each register is printed twice: a 6-digit Modicon number for function 04 (3xxxxx; the same data is readable with function 03 by changing the leading 3 to 4) and the hex 'physical address' that goes in the frame. Wire address = physical address, e.g. 300001 / 0000h is address 0. Configuration rows are also printed as 3xxxxx but are written with function 06, so they are listed here as holding registers."
 },
 "default_word_order": "CDAB",
 "firmware": null,
 "source": {
  "title": "EM24-IS SFA and SFB versions Communication Protocol",
  "doc_number": "Revision 2.0",
  "revision_date": null,
  "url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/EM24_IS_SFA_SFB.pdf",
  "pages": "Tables pp. 8-11 (data format p. 7)"
 },
 "notes": [
  "Word order: the document states INT32/UINT32/UINT64 are sent LSW first (bytes MSB first), so 32-bit values are CDAB.",
  "Functions 03 and 04 are equivalent; at most 11 registers per request.",
  "The identification code is printed at 000Bh, which is also the second word of V L3-L1; read it on its own.",
  "All other rows in the measurement table are marked reserved in this document and are left out, as are the reserved configuration and reset rows and the ASCII serial-number letters."
 ],
 "integration": {
  "summary": "Read input registers (04 or 03) in blocks of up to 11; decode INT32 low word first. Energy is only kWh(+) total at 003Eh, x10.",
  "minimum_registers": [
   {
    "table": "input_register",
    "address": 0,
    "why": "V L1-N"
   },
   {
    "table": "input_register",
    "address": 12,
    "why": "A L1"
   },
   {
    "table": "input_register",
    "address": 53,
    "why": "PF system"
   },
   {
    "table": "input_register",
    "address": 55,
    "why": "Frequency"
   },
   {
    "table": "input_register",
    "address": 62,
    "why": "kWh(+) total"
   }
  ],
  "enable": "Modbus RTU is on the IS (RS485) versions. Set the address and baud rate in the serial port menu or via registers 110Ah/110Bh.",
  "watchdog": null,
  "quirks": [
   "INT32 values are low word first (CDAB).",
   "Max 11 registers per read.",
   "Parity fixed to none, 1 stop bit."
  ],
  "setup": [
   "Address 1-247, baud 4800 or 9600.",
   "Terminate both bus ends with 120 ohm."
  ],
  "gotchas": [
   "No power or reactive registers exist on these versions; they read as reserved."
  ]
 },
 "registers": [
  {
   "table": "input_register",
   "address": 0,
   "documented": "300001 / 0000h",
   "name": "V L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 2,
   "documented": "300003 / 0002h",
   "name": "V L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 4,
   "documented": "300005 / 0004h",
   "name": "V L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 6,
   "documented": "300007 / 0006h",
   "name": "V L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 8,
   "documented": "300009 / 0008h",
   "name": "V L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 10,
   "documented": "300011 / 000Ah",
   "name": "V L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 11,
   "documented": "300012 / 000Bh",
   "name": "Carlo Gavazzi identification code",
   "description": "Shares 000Bh with the high word of V L3-L1; read it alone.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1696": "EM24DINAV23XISSFA",
    "1697": "EM24DINAV53XISSFA",
    "1698": "EM24DINAV23XISSFB",
    "1699": "EM24DINAV53XISSFB"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 12,
   "documented": "300013 / 000Ch",
   "name": "A L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 14,
   "documented": "300015 / 000Eh",
   "name": "A L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 16,
   "documented": "300017 / 0010h",
   "name": "A L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 36,
   "documented": "300037 / 0024h",
   "name": "V L-N system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 38,
   "documented": "300039 / 0026h",
   "name": "V L-L system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 50,
   "documented": "300051 / 0032h",
   "name": "PF L1",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 51,
   "documented": "300052 / 0033h",
   "name": "PF L2",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 52,
   "documented": "300053 / 0034h",
   "name": "PF L3",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 53,
   "documented": "300054 / 0035h",
   "name": "PF system",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 54,
   "documented": "300055 / 0036h",
   "name": "Phase sequence",
   "description": "Meaningful on 3-phase systems only.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "-1": "L1-L3-L2",
    "0": "L1-L2-L3"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 55,
   "documented": "300056 / 0037h",
   "name": "Frequency",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 62,
   "documented": "300063 / 003Eh",
   "name": "kWh(+) total",
   "description": "Imported active energy.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 768,
   "documented": "300769 / 0300h",
   "name": "Digital input status",
   "description": "Bit = 0 input closed, 1 input open.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Input 1 open",
    "1": "Input 2 open",
    "2": "Input 3 open"
   },
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 770,
   "documented": "300771 / 0302h",
   "name": "Version and revision code",
   "description": "High byte: bits 4-7 major, 0-3 minor; low byte revision (101Eh = 1.0.30).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 772,
   "documented": "300773 / 0304h",
   "name": "Front selector status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Keypad unlocked",
    "1": "Keypad unlocked",
    "2": "Keypad unlocked",
    "3": "Keypad locked"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4352,
   "documented": "304353 / 1100h",
   "name": "Password",
   "description": "0-9999; out-of-range values are treated as 0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4354,
   "documented": "304355 / 1102h",
   "name": "Measuring system",
   "description": "SFA/SFB models support only 3Pn.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "3Pn",
    "1": "3P1",
    "2": "2P",
    "3": "1P",
    "4": "3P"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4360,
   "documented": "304361 / 1108h",
   "name": "Filter span parameter",
   "description": "0-100.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4361,
   "documented": "304362 / 1109h",
   "name": "Filter coefficient",
   "description": "1-32.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4362,
   "documented": "304363 / 110Ah",
   "name": "RS485 instrument address",
   "description": "1-247.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4363,
   "documented": "304364 / 110Bh",
   "name": "RS485 baud rate",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "4800",
    "1": "9600"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4396,
   "documented": "304397 / 112Ch",
   "name": "CT ratio",
   "description": "Raw 10-600000 = CT 1.0-60000.0.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4398,
   "documented": "304399 / 112Eh",
   "name": "VT ratio",
   "description": "Raw 10-60000 = VT 1.0-6000.0.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "page": "https://easymodbus.com/modbus-register-maps/carlo-gavazzi/em24-is-sfa-sfb",
 "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."
}
