{
  "spec_version": 1,
  "slug": "grundfos-cu302-cu202",
  "manufacturer": "Grundfos",
  "model": "SQ controller CU 302 / CU 202 (SQ and SQFlex solar pump controllers)",
  "category": "Pump controller",
  "supplier_url": "https://product-selection.grundfos.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "Even",
      "baud_rate": 19200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 201,
      "count": 1,
      "name": "Acknowledge register",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit0 AckResetAlarm, bit1 AckSetRtc, bit2 AckResetEventLog: 0 = not acknowledged, 1 = acknowledged."
    },
    {
      "address": 202,
      "count": 1,
      "name": "System status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit0 reserved, bit1 AlarmActive (1 = one or more active alarms), bit2 WarningActive, bit3 ManualControl."
    },
    {
      "address": 210,
      "count": 1,
      "name": "System alarm events, item 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted alarm word 1; see the alarms and warnings table of the functional profile."
    },
    {
      "address": 211,
      "count": 1,
      "name": "System alarm events, item 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted alarm word 2."
    },
    {
      "address": 212,
      "count": 1,
      "name": "System alarm events, item 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted alarm word 3."
    },
    {
      "address": 213,
      "count": 1,
      "name": "System warning events, item 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted warning word 1."
    },
    {
      "address": 214,
      "count": 1,
      "name": "System warning events, item 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted warning word 2."
    },
    {
      "address": 215,
      "count": 1,
      "name": "System warning events, item 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted warning word 3."
    },
    {
      "address": 216,
      "count": 1,
      "name": "Event log latest ID",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ID code of the latest event-log entry."
    },
    {
      "address": 217,
      "count": 1,
      "name": "Number of float switches",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of installed float switches, 0-5."
    },
    {
      "address": 218,
      "count": 1,
      "name": "Float switch status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit0-4 = float switch 1-5: 0 = off, 1 = on."
    },
    {
      "address": 289,
      "count": 1,
      "name": "Actual control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 monitoring, 1 filling, 2 emptying, 3 pressure control, 4 constant frequency, 5 constant pressure, 6 pump out, 7 constant temperature, 8 constant flow, 9 constant level."
    },
    {
      "address": 301,
      "count": 1,
      "name": "System water level",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Sensor-measured water level; requires a level sensor. 0xFFFF = not available."
    },
    {
      "address": 308,
      "count": 2,
      "name": "System power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power consumption of the system, 32-bit value with the high word at 308 and the low word at 309 (value = HI × 65536 + LO)."
    },
    {
      "address": 310,
      "count": 2,
      "name": "System energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Energy consumption of the system, 32-bit value (high word 310, low word 311), scale 0.1 kWh."
    },
    {
      "address": 312,
      "count": 1,
      "name": "System energy yesterday",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "System energy consumption yesterday, 0.1 kWh."
    },
    {
      "address": 313,
      "count": 1,
      "name": "System energy today",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "System energy consumption today, 0.1 kWh."
    },
    {
      "address": 329,
      "count": 2,
      "name": "System operating time",
      "data_type": "UInt32",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total system operating (power-on) time, 32-bit value (high word 329, low word 330), 1 minute."
    },
    {
      "address": 351,
      "count": 1,
      "name": "User analog input 1",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined measurement on analog input 1, 0.1 % of the configured sensor range."
    },
    {
      "address": 352,
      "count": 1,
      "name": "User analog input 2",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined measurement on analog input 2, 0.1 %."
    },
    {
      "address": 353,
      "count": 1,
      "name": "User analog input 3",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined measurement on analog input 3, 0.1 %."
    },
    {
      "address": 378,
      "count": 1,
      "name": "Actual set-point",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Actual set-point for the SQ pump. Scaling follows the active control mode, see register 186."
    },
    {
      "address": 379,
      "count": 1,
      "name": "Sensor feedback",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Feedback from the control-loop sensor. Scaling follows the active control mode, see register 186."
    },
    {
      "address": 380,
      "count": 1,
      "name": "Pressure",
      "data_type": "UInt16",
      "units": "bar",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "Pressure from the pressure sensor, 0.001 bar."
    },
    {
      "address": 381,
      "count": 1,
      "name": "Temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Temperature from the temperature sensor, 0.01 °C."
    },
    {
      "address": 382,
      "count": 1,
      "name": "User analog output 1",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined analog output 1, 0.1 %."
    },
    {
      "address": 383,
      "count": 1,
      "name": "User analog output 2",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined analog output 2, 0.1 %."
    },
    {
      "address": 391,
      "count": 1,
      "name": "User digital inputs 1-16",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "User digital inputs DI16-DI1, one bit per input."
    },
    {
      "address": 392,
      "count": 1,
      "name": "User digital inputs 17-32",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "User digital inputs DI32-DI17, one bit per input."
    },
    {
      "address": 393,
      "count": 1,
      "name": "User digital outputs 1-16",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "User digital outputs DO16-DO1, one bit per output."
    },
    {
      "address": 394,
      "count": 1,
      "name": "User analog input 4",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined measurement on analog input 4, 0.1 %."
    },
    {
      "address": 395,
      "count": 1,
      "name": "User analog input 5",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "User-defined measurement on analog input 5, 0.1 %."
    },
    {
      "address": 401,
      "count": 1,
      "name": "Pump status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit0 Presence, bit1 Running, bit3 Warning, bit4 Alarm: 0 = no, 1 = yes."
    },
    {
      "address": 402,
      "count": 1,
      "name": "Pump control source",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = auto, 1 = manually by switch, 2 = manually via display, 3 = remote-controlled by bus."
    },
    {
      "address": 403,
      "count": 1,
      "name": "Pump connection type",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = pump connected to a wall-mounted controller or not present, 0 = connected to a controller or not present, 1 = connected via pump module."
    },
    {
      "address": 404,
      "count": 2,
      "name": "Pump operating time",
      "data_type": "UInt32",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total operating time of the pump, 32-bit value (high word 404, low word 405), 1 minute."
    },
    {
      "address": 406,
      "count": 2,
      "name": "Pump time to next service",
      "data_type": "UInt32",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Time to next service, 32-bit value (high word 406, low word 407), 1 minute."
    },
    {
      "address": 408,
      "count": 1,
      "name": "Pump operating time yesterday",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Operating time yesterday, 1 minute."
    },
    {
      "address": 409,
      "count": 1,
      "name": "Pump operating time today",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Operating time today, 1 minute."
    },
    {
      "address": 410,
      "count": 1,
      "name": "Pump latest operating time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Duration of the last operating cycle, 1 second."
    },
    {
      "address": 411,
      "count": 2,
      "name": "Pump start counter",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total number of pump starts, 32-bit value (high word 411, low word 412)."
    },
    {
      "address": 413,
      "count": 1,
      "name": "Pump start counter yesterday",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total number of pump starts yesterday."
    },
    {
      "address": 414,
      "count": 1,
      "name": "Pump start counter today",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total number of pump starts today."
    },
    {
      "address": 415,
      "count": 1,
      "name": "Pump starts per hour",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of pump starts within the last hour."
    },
    {
      "address": 418,
      "count": 1,
      "name": "Pump current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor current, 0.1 A."
    },
    {
      "address": 419,
      "count": 1,
      "name": "Pump latest current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Latest motor current, 0.1 A."
    },
    {
      "address": 420,
      "count": 1,
      "name": "Pump voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor voltage, 0.1 V."
    },
    {
      "address": 423,
      "count": 1,
      "name": "Pump alarms 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 1; see the alarms and warnings table."
    },
    {
      "address": 424,
      "count": 1,
      "name": "Pump alarms 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 2."
    },
    {
      "address": 425,
      "count": 1,
      "name": "Pump alarms 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 3."
    },
    {
      "address": 426,
      "count": 1,
      "name": "Pump warnings 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 1."
    },
    {
      "address": 427,
      "count": 1,
      "name": "Pump warnings 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 2."
    },
    {
      "address": 428,
      "count": 1,
      "name": "Pump warnings 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 3."
    },
    {
      "address": 431,
      "count": 2,
      "name": "Pump power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Power consumption of the pump, 32-bit value (high word 431, low word 432), 1 W."
    },
    {
      "address": 433,
      "count": 2,
      "name": "Pump energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Energy consumption of the pump, 32-bit value (high word 433, low word 434), 0.1 kWh."
    },
    {
      "address": 435,
      "count": 1,
      "name": "Pump cos phi",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Motor cosine phi, scale 0.01."
    },
    {
      "address": 436,
      "count": 1,
      "name": "Pump speed",
      "data_type": "UInt16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Pump speed, 1 rpm."
    },
    {
      "address": 437,
      "count": 1,
      "name": "Pump motor temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Motor temperature, 0.01 °C."
    },
    {
      "address": 441,
      "count": 1,
      "name": "Pump alarms 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 4."
    },
    {
      "address": 442,
      "count": 1,
      "name": "Pump warnings 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 4."
    },
    {
      "address": 451,
      "count": 1,
      "name": "Pump alarms 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 5."
    },
    {
      "address": 452,
      "count": 1,
      "name": "Pump warnings 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 5."
    },
    {
      "address": 453,
      "count": 1,
      "name": "Pump alarms 6",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump alarm word 6."
    },
    {
      "address": 454,
      "count": 1,
      "name": "Pump warnings 6",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-interpreted pump warning word 6."
    }
  ],
  "holding_registers": [
    {
      "address": 101,
      "count": 1,
      "name": "Control",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit0 ResetAlarm, bit2 ResetEventLog, bit10 PumpOut: 0 = no action, 1 = trigger. Control bits act on rising edge; acknowledgement behaviour is set by register 5."
    },
    {
      "address": 103,
      "count": 1,
      "name": "Pump control",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Remote manual control: 0 = auto (controlled by the CU 302/202), 1 = forced start, 2 = forced stop."
    },
    {
      "address": 110,
      "count": 1,
      "name": "Set event-log clear ID",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Selects which records to clear in the event log."
    },
    {
      "address": 112,
      "count": 1,
      "name": "Set real-time clock high word",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "High word of the UNIX time (seconds since 1 January 1970). Write this register before register 113."
    },
    {
      "address": 113,
      "count": 1,
      "name": "Set real-time clock low word",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Low word of the UNIX time."
    },
    {
      "address": 114,
      "count": 1,
      "name": "Set RTC second",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Second of the minute, 0-59."
    },
    {
      "address": 115,
      "count": 1,
      "name": "Set RTC minute",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Minute of the hour, 0-59."
    },
    {
      "address": 116,
      "count": 1,
      "name": "Set RTC hour",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Hour of the day, 0-23."
    },
    {
      "address": 117,
      "count": 1,
      "name": "Set RTC day",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Day of the month, 1-31."
    },
    {
      "address": 118,
      "count": 1,
      "name": "Set RTC month",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Month of the year, 1-12."
    },
    {
      "address": 119,
      "count": 1,
      "name": "Set RTC year",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Year 0-254, corresponding to 2000-2254."
    },
    {
      "address": 120,
      "count": 1,
      "name": "Set real-time clock",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to apply registers 114-119 as the new real-time clock (rising edge)."
    },
    {
      "address": 122,
      "count": 1,
      "name": "Set high level",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "New level for activation of the high-level alarm, 0.01 m."
    },
    {
      "address": 124,
      "count": 1,
      "name": "Set dry-running level",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "New level for activation of the dry-running alarm, 0.01 m."
    },
    {
      "address": 126,
      "count": 1,
      "name": "Set start level pump",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "New pump start level, 0.01 m."
    },
    {
      "address": 127,
      "count": 1,
      "name": "Set stop level pump",
      "data_type": "UInt16",
      "units": "m",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "New pump stop level, 0.01 m."
    },
    {
      "address": 185,
      "count": 1,
      "name": "Set control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 monitoring, 1 filling, 2 emptying, 3 pressure control, 4 constant frequency, 5 constant pressure, 6 pump out, 7 constant temperature, 8 constant flow, 9 constant level."
    },
    {
      "address": 186,
      "count": 1,
      "name": "Set set-point",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Set-point for the SQ pump. Scaling follows the control mode: 0.01 % (constant frequency / pump out), 0.001 bar (constant pressure), 1 °C (constant temperature), 0.01 m3/h (constant flow), 0.01 m (constant level)."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Grundfos \"Modbus RTU for SQ Controller CU 302/202 - Functional profile and user manual\", document 03_EN_MAS001754, read from the Grundfos distributor mirror https://try.pumpa.eu/-/media/Files/commerce/MAS00/17/54/03_EN_MAS001754.pdf (MIRROR-SOURCED; the vendor's product-selection host did not answer automated requests). File SHA-256: bfc2c7cb4db7e1c9c453e66a01c089bb1056fc15a95e9133349097d5e11243b8. Section 4.1 documents the factory communication defaults used here: 9600/19200/38400 baud with 19200 as default, even/odd/no parity with even as default, 8 data bits, 1 or 2 stop bits with 1 as default. The slave address is 1-247 and is set with the Grundfos GO app; the document states no factory address, so unit ID 1 is a placeholder. Section 10.1 states registers numbered X are addressed in telegrams as X-1 (register 00104 addressed as 00103) and the read example sends start address 0x012C for register 00301, hence one-based. The document says the same data are available in both input and holding registers (FC 03 or 04); the seed keeps the control/configuration block in holding registers and everything read-only in input registers. 32-bit values are combined as HI × 65536 + LO with the high word at the lower address. Input registers 201-289 are read-only status; registers 351-395 are user-configurable inputs/outputs. Omitted on purpose: the SoftCIM configuration block (00001-00012), the event log, clock scheduler, data log and alarm-simulation blocks, the analog scaling block (00274-00288) and the float-switch function registers (00219-00223), whose bit-per-register rows are not paired reliably enough in the source layout."
}
