{
 "manufacturer": "Woodward",
 "manufacturer_slug": "woodward",
 "model": "easYgen-3000XT Series",
 "model_slug": "easygen-3000xt",
 "short_model": "easYgen-3000XT",
 "aliases": [
  "easYgen-3100XT-P1",
  "easYgen-3200XT-P1",
  "easYgen-3200XT-P1-LT",
  "easYgen-3100XT",
  "easYgen-3200XT"
 ],
 "equipment_type": "Generator controller",
 "applies_to": "easYgen-3100XT-P1 / 3200XT-P1 / 3200XT-P1-LT, release 2.17-0, default Modbus data protocol 5010 (Basic Visualization).",
 "summary": "The easYgen-3000XT is Woodward's genset controller for standby, AMF, peak-shaving and mains-parallel plants. It is a Modbus RTU slave on RS-485 and a Modbus TCP server on Ethernet. Measurements, status and alarm flags are read from a fixed telegram (protocol 5010) starting at address 50000; remote start/stop, acknowledge and interface setpoints are written to parameter addresses 503-511. This page covers generator, mains and engine values, the main status and alarm words, and the remote-control words.",
 "transport": [
  "RTU",
  "TCP"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 19200,
  "parity": "None",
  "data_bits": null,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "0-based",
  "note": "The protocol 5010 table in the appendix prints wire addresses (Protocol ID at 50000). The Modbus chapter shows the same block Modicon-style from 450001 and says 450001 can become bus address 50000. Parameters (remote control, setpoints) use Modicon address = 40000 + (parameter ID + 1), so parameter 503 is 40504 and wire address 503. The manual warns some PC tools need a shift of one (e.g. 504); if a write has no effect, try the neighbour."
 },
 "default_word_order": "ABCD",
 "firmware": "Release 2.17-0",
 "source": {
  "title": "Manual easYgen-3000XT Series Genset Control, Release 2.17-0",
  "doc_number": "B37574 Revision U",
  "revision_date": "2025",
  "url": "https://www.woodward.com/products/wp-content/uploads/sites/3/2025/04/B37574_U.pdf",
  "pages": "pp. 632-633 (RS-485 / Modbus settings), 676 (Modbus/TCP slave ID), 760-761 and 844-848 (remote control via Modbus), 919-922 (Modbus address ranges, data types), 987-1024 (protocol 5010 table), 1147-1152 (remote control words and interface setpoints)"
 },
 "notes": [
  "The manual states Modbus registers are big-endian; 32-bit values are read high word first (ABCD). LogicsManager composite parameters are the exception (little-endian) and are not on this page.",
  "Left out: the 16-bit power, voltage and current values at 50010-50021 and 50031-50040. Their scale depends on exponents published at 50001-50003 and the manual does not give the formula clearly enough; use the 32-bit values from 50322, which have fixed scaling.",
  "Left out: 50028/50029 (setpoint frequency / PF, printed with a multiplier of 1 that does not fit their units), the 'active (reserved)' alarm words, and rows the table marks for the easYgen-3400XT/3500XT only (busbar L2-L3/L3-L1, LSx values, GGB bits, analog inputs 4-12, relays 13-22).",
  "The status message at 50100 is an index into the manual's status message list; the index-to-text mapping is not tabulated, so no enum is given.",
  "'Latched' alarm words hold an alarm until it is acknowledged. The controller also offers alarm telegrams (protocols 5011/5017) that are not covered here.",
  "Interface setpoints only take effect when the matching AnalogManager source (05.56, 05.12, 05.53, 05.59, 05.83) is selected. Parameters 507-511 are described with CANopen object data types; their Modbus addresses follow the parameter rule on p. 921.",
  "The easYgen-3400XT/3500XT use the same 5010 telegram but are documented in their own manual, which was not checked for this page.",
  "The parameter list gives Ethernet A a default IP of 10.31.140.0 with mask 255.255.240.0. The TCP port is not stated in the manual."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 503,
   "documented": "40504 (parameter 503)",
   "name": "Remote control word 1",
   "description": "Start, stop, acknowledge and shutdown on rising edges; write 0 then 1.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "Start (rising edge)",
    "1": "Stop (rising edge)",
    "2": "Must always be 0",
    "3": "Must always be 0",
    "4": "External acknowledge (rising edge, needed twice)",
    "9": "Shutdown command (rising edge)"
   }
  },
  {
   "table": "holding_register",
   "address": 504,
   "documented": "40505 (parameter 504)",
   "name": "Remote control word 2",
   "description": "Selects setpoint 2 instead of setpoint 1 for P, PF, frequency, voltage.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "4": "Request voltage setpoint 2 (04.37)",
    "5": "Request frequency setpoint 2 (04.38)",
    "6": "Request power factor setpoint 2 (04.39)",
    "7": "Request active power setpoint 2 (04.40)"
   }
  },
  {
   "table": "holding_register",
   "address": 505,
   "documented": "40506 (parameter 505)",
   "name": "Remote control word 3",
   "description": "Sixteen free remote-control bits for LogicsManager use.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "Remote control bit 1 (04.44)",
    "1": "Remote control bit 2 (04.45)",
    "2": "Remote control bit 3 (04.46)",
    "3": "Remote control bit 4 (04.47)",
    "4": "Remote control bit 5 (04.48)",
    "5": "Remote control bit 6 (04.49)",
    "6": "Remote control bit 7 (04.50)",
    "7": "Remote control bit 8 (04.51)",
    "8": "Remote control bit 9 (04.52)",
    "9": "Remote control bit 10 (04.53)",
    "10": "Remote control bit 11 (04.54)",
    "11": "Remote control bit 12 (04.55)",
    "12": "Remote control bit 13 (04.56)",
    "13": "Remote control bit 14 (04.57)",
    "14": "Remote control bit 15 (04.58)",
    "15": "Remote control bit 16 (04.59)"
   }
  },
  {
   "table": "holding_register",
   "address": 507,
   "documented": "40508 (parameter 507)",
   "name": "Remote active power setpoint",
   "description": "Interface P setpoint (05.56), kW x 10. Write 2 registers at this address; used only if an AnalogManager selects it.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 508,
   "documented": "40509 (parameter 508)",
   "name": "Remote power factor setpoint",
   "description": "Interface PF setpoint (05.12); 1000 = 1.00, +710 inductive, -710 capacitive. Separate from 507.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 509,
   "documented": "40510 (parameter 509)",
   "name": "Remote frequency setpoint",
   "description": "Interface frequency setpoint (05.53); 5000 = 50.00 Hz. Its own parameter.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 510,
   "documented": "40511 (parameter 510)",
   "name": "Remote voltage setpoint",
   "description": "Interface voltage setpoint (05.59); 400 = 400 V. Write 2 registers at this address.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 511,
   "documented": "40512 (parameter 511)",
   "name": "Remote reactive power setpoint",
   "description": "Interface kvar setpoint (05.83), signed; 1000 = 100.0 kvar. Write 2 registers at this address.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kvar",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50000,
   "documented": "50000",
   "name": "Protocol ID",
   "description": "Always reads 5010 when the default visualization protocol is active.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50009,
   "documented": "50009",
   "name": "Generator frequency",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50012,
   "documented": "50012",
   "name": "Generator power factor",
   "description": "Transmitted as PF x 1000.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50022,
   "documented": "50022",
   "name": "Busbar 1 frequency",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50030,
   "documented": "50030",
   "name": "Mains frequency",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50033,
   "documented": "50033",
   "name": "Mains power factor",
   "description": "Transmitted as PF x 1000.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50045,
   "documented": "50045",
   "name": "Nominal real power in system",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50046,
   "documented": "50046",
   "name": "Real power in system",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50047,
   "documented": "50047",
   "name": "Reserve real power in system",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50051,
   "documented": "50051",
   "name": "Engine pickup speed",
   "description": "Speed from the magnetic pickup input.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50052,
   "documented": "50052",
   "name": "Battery voltage",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50053,
   "documented": "50053",
   "name": "Auxiliary excitation D+",
   "description": "Charging alternator D+ voltage.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50054,
   "documented": "50054",
   "name": "Engine number of start requests",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50055,
   "documented": "50055",
   "name": "Hours until next maintenance",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50094,
   "documented": "50094",
   "name": "Days until next maintenance",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "days",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50099,
   "documented": "50099",
   "name": "Control mode",
   "description": "Active operating mode; only the low four bits (mask 000Fh) are used.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "AUTO",
    "1": "STOP",
    "2": "MANUAL",
    "3": "TEST"
   }
  },
  {
   "table": "holding_register",
   "address": 50100,
   "documented": "50100",
   "name": "Status message",
   "description": "Index of the current status text; see the manual's status messages chapter.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50102,
   "documented": "50102",
   "name": "Control bits 1",
   "description": "Engine sequence flags: start/stop requests, cooldown, engine release.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "04.61 Lamp test request",
    "1": "03.31 Auxiliary services postrun active",
    "2": "03.30 Auxiliary services prerun active",
    "3": "03.06 Engine release is active",
    "4": "04.27 Critical mode is active",
    "5": "03.25 Engine shall run",
    "6": "03.08 Breaker delay timer expired",
    "7": "03.07 Engine monitoring delay expired",
    "8": "03.01 Auxiliary services active",
    "9": "04.10 Cooldown is active",
    "10": "Manual STOP requested",
    "11": "Manual START requested",
    "12": "04.64 Key activation",
    "13": "04.12 Start without closing GCB",
    "14": "04.15 Idle run is active",
    "15": "Idle mode or ramp to rated active"
   }
  },
  {
   "table": "holding_register",
   "address": 50103,
   "documented": "50103",
   "name": "Control bits 2",
   "description": "Starter, ignition, emergency mode and mains-parallel flags.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Increment engine start counter",
    "1": "03.36 Free PID 1 raise",
    "2": "03.37 Free PID 1 lower",
    "3": "Genset runs mains parallel",
    "5": "03.27 Stop solenoid is active",
    "6": "03.34 Free PID 2 raise",
    "7": "03.35 Free PID 2 lower",
    "8": "03.32 Free PID 3 raise",
    "9": "03.33 Free PID 3 lower",
    "10": "03.40 Remote shutdown (ID 503 bit 9)",
    "11": "04.09 Emergency mode is active",
    "12": "04.11 Mains settling",
    "13": "03.04 Preglow or ignition is active",
    "14": "03.28 Operating magnet / gas relay active",
    "15": "03.02 Starter / crank is active"
   }
  },
  {
   "table": "holding_register",
   "address": 50104,
   "documented": "50104",
   "name": "Control bits 3",
   "description": "Breaker states and synchronising / open / close commands.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "04.30 Power limited prerun",
    "1": "04.29 Unloading mains active",
    "2": "04.28 Unloading generator active",
    "3": "04.23 Close command MCB active",
    "4": "04.22 Open command MCB active",
    "5": "04.21 MCB synchronisation active",
    "6": "04.20 Close command GCB active",
    "7": "04.19 Opening GCB relay active",
    "8": "04.18 GCB synchronisation active",
    "9": "05.16 Derating active",
    "10": "04.07 MCB is closed",
    "11": "04.06 GCB is closed",
    "12": "03.23 3-pos. controller volt./reactive power lower",
    "13": "03.22 3-pos. controller volt./reactive power raise",
    "14": "03.21 3-pos. controller freq./power lower",
    "15": "03.20 3-pos. controller freq./power raise"
   }
  },
  {
   "table": "holding_register",
   "address": 50106,
   "documented": "50106",
   "name": "Control bits 5",
   "description": "Remote request / acknowledge echo, droop and sync-mode flags.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "3": "04.70 Opening GCB active",
    "4": "02.39 Mains decoupling enabled",
    "5": "86.42 LDSS MOP reserve power 2 ready",
    "6": "86.41 LDSS IOP reserve power 2 ready",
    "7": "86.85 LM Enable MCB",
    "8": "Sync mode Run active",
    "9": "Sync mode Permissive active",
    "10": "Sync mode Check active",
    "11": "86.26 LM voltage droop active",
    "12": "86.25 LM frequency droop active",
    "13": "05.17 Uprating active",
    "14": "04.14 Remote acknowledge",
    "15": "04.13 Remote start request"
   }
  },
  {
   "table": "holding_register",
   "address": 50108,
   "documented": "50108",
   "name": "Relay outputs 1",
   "description": "State of relay outputs 1-12.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "4": "Relay 12",
    "5": "Relay 11",
    "6": "Relay 10",
    "7": "Relay 9",
    "8": "Relay 8",
    "9": "Relay 7",
    "10": "Relay 6",
    "11": "Relay 5",
    "12": "Relay 4",
    "13": "Relay 3",
    "14": "Relay 2",
    "15": "Relay 1 (self-test relay)"
   }
  },
  {
   "table": "holding_register",
   "address": 50114,
   "documented": "50114",
   "name": "Alarm general",
   "description": "New-alarm flag and latched alarm classes A-F.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "01.01 Alarm class A latched",
    "1": "01.02 Alarm class B latched",
    "2": "01.03 Alarm class C latched",
    "3": "01.04 Alarm class D latched",
    "4": "01.05 Alarm class E latched",
    "5": "01.06 Alarm class F latched",
    "15": "01.11 New alarm triggered"
   }
  },
  {
   "table": "holding_register",
   "address": 50115,
   "documented": "50115",
   "name": "Alarms 2 latched",
   "description": "Unacknowledged sync timeouts, breaker 50BF failures, ECU lamp alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "05.14 ECU amber lamp alarm",
    "1": "05.13 ECU red lamp alarm",
    "2": "08.48 MCB plausibility",
    "3": "08.17 Missing members",
    "4": "08.16 Parameter alignment LDSS",
    "5": "08.19 CANopen error CAN interface 2",
    "6": "05.23 ECU emission alarm",
    "7": "05.22 ECU protect alarm",
    "8": "08.46 GCB failure 50BF",
    "9": "08.47 MCB failure 50BF",
    "10": "08.45 CPU overload R1 trip",
    "11": "Operating range failure 12",
    "12": "05.11 Charge fail (D+)",
    "14": "08.31 Timeout synchronisation MCB",
    "15": "08.30 Timeout synchronisation GCB"
   }
  },
  {
   "table": "holding_register",
   "address": 50120,
   "documented": "50120",
   "name": "Alarms 1 latched (engine)",
   "description": "Unacknowledged engine, start-fail, breaker-fail and maintenance alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "08.18 CANopen error CAN interface 1",
    "1": "05.10 Maintenance hours exceeded",
    "2": "05.09 Maintenance days exceeded",
    "3": "05.08 Start fail detected",
    "4": "08.10 General CAN-J1939 fault",
    "5": "08.08 MCB fail to open",
    "6": "08.07 MCB fail to close",
    "7": "08.06 GCB fail to open",
    "8": "08.05 GCB fail to close",
    "9": "05.06 Shutdown malfunction detected",
    "10": "05.07 Speed detection alarm",
    "11": "05.05 Unintended stop detected",
    "12": "05.04 Engine underspeed 2",
    "13": "05.03 Engine underspeed 1",
    "14": "05.02 Engine overspeed 2",
    "15": "05.01 Engine overspeed 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50122,
   "documented": "50122",
   "name": "Alarms AI 1 latched (battery)",
   "description": "Unacknowledged battery voltage and charging alternator alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "08.03 Battery undervoltage 1",
    "1": "08.01 Battery overvoltage 1",
    "2": "08.04 Battery undervoltage 2",
    "3": "08.02 Battery overvoltage 2",
    "4": "05.11 Failure charging alternator (D+)"
   }
  },
  {
   "table": "holding_register",
   "address": 50126,
   "documented": "50126",
   "name": "Alarms generator latched",
   "description": "Unacknowledged generator frequency, voltage, current and power alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "1": "06.15 Gen overload IOP 2",
    "2": "06.14 Gen overload IOP 1",
    "3": "06.13 Reverse / reduced power 2",
    "4": "06.12 Reverse / reduced power 1",
    "5": "06.11 Gen overcurrent 3",
    "6": "06.10 Gen overcurrent 2",
    "7": "06.09 Gen overcurrent 1",
    "8": "06.08 Gen undervoltage 2",
    "9": "06.07 Gen undervoltage 1",
    "10": "06.06 Gen overvoltage 2",
    "11": "06.05 Gen overvoltage 1",
    "12": "06.04 Gen underfrequency 2",
    "13": "06.03 Gen underfrequency 1",
    "14": "06.02 Gen overfrequency 2",
    "15": "06.01 Gen overfrequency 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50128,
   "documented": "50128",
   "name": "Alarms generator 1 latched",
   "description": "Unacknowledged unbalance, ground fault, rotation, overload MOP and PF alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "06.28 Gen PF leading 2",
    "1": "06.27 Gen PF leading 1",
    "2": "06.26 Gen PF lagging 2",
    "3": "06.25 Gen PF lagging 1",
    "4": "06.24 Gen overload MOP 2",
    "5": "06.23 Gen overload MOP 1",
    "6": "06.31 Operating range failed",
    "7": "06.22 Inverse time overcurrent",
    "8": "06.30 Gen unloading mismatch",
    "9": "06.29 Gen active power mismatch",
    "10": "06.21 Gen phase rotation mismatch",
    "11": "06.20 Ground fault 2",
    "12": "06.19 Ground fault 1",
    "13": "06.18 Gen voltage asymmetry",
    "14": "06.17 Gen unbalanced load 2",
    "15": "06.16 Gen unbalanced load 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50132,
   "documented": "50132",
   "name": "Alarms mains latched",
   "description": "Unacknowledged mains frequency, voltage, phase shift and decoupling alarms.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "2": "07.05 Mains phase rotation mismatch",
    "5": "07.32 Mains AC wiring",
    "6": "07.25 Mains decoupling",
    "7": "07.14 Mains phase shift",
    "8": "07.13 Mains undervoltage 2",
    "9": "07.12 Mains undervoltage 1",
    "10": "07.11 Mains overvoltage 2",
    "11": "07.10 Mains overvoltage 1",
    "12": "07.09 Mains underfrequency 2",
    "13": "07.08 Mains underfrequency 1",
    "14": "07.07 Mains overfrequency 2",
    "15": "07.06 Mains overfrequency 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50133,
   "documented": "50133",
   "name": "Alarms mains active",
   "description": "Same mains alarms as 50132, showing the currently active state.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "2": "Mains phase rotation mismatch",
    "5": "Mains AC wiring",
    "6": "Mains decoupling",
    "7": "Mains phase shift",
    "8": "Mains undervoltage 2",
    "9": "Mains undervoltage 1",
    "10": "Mains overvoltage 2",
    "11": "Mains overvoltage 1",
    "12": "Mains underfrequency 2",
    "13": "Mains underfrequency 1",
    "14": "Mains overfrequency 2",
    "15": "Mains overfrequency 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50138,
   "documented": "50138",
   "name": "Alarms DI 1 latched",
   "description": "Unacknowledged alarms from discrete inputs 1-12 (inputs with alarm class Control show here only if parameter 8854 allows it).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "4": "09.12 Discrete input 12",
    "5": "09.11 Discrete input 11",
    "6": "09.10 Discrete input 10",
    "7": "09.09 Discrete input 9",
    "8": "09.08 Discrete input 8",
    "9": "09.07 Discrete input 7",
    "10": "09.06 Discrete input 6",
    "11": "09.05 Discrete input 5",
    "12": "09.04 Discrete input 4",
    "13": "09.03 Discrete input 3",
    "14": "09.02 Discrete input 2",
    "15": "09.01 Discrete input 1"
   }
  },
  {
   "table": "holding_register",
   "address": 50159,
   "documented": "50159",
   "name": "Alarms AI wire break latched",
   "description": "Wire-break alarms for analog inputs 1-3; bit 0 is unused here.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "1": "10.01 Analog input 1 wire break",
    "2": "10.02 Analog input 2 wire break",
    "3": "10.03 Analog input 3 wire break"
   }
  },
  {
   "table": "holding_register",
   "address": 50191,
   "documented": "50191",
   "name": "J1939 lamp status DM1",
   "description": "ECU lamp states from the active-fault (DM1) message.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Protect lamp off",
    "1": "Protect lamp on",
    "4": "Amber warning lamp off",
    "5": "Amber warning lamp on",
    "8": "Red stop lamp off",
    "9": "Red stop lamp on",
    "12": "Malfunction lamp off",
    "13": "Malfunction lamp on"
   }
  },
  {
   "table": "holding_register",
   "address": 50201,
   "documented": "50201",
   "name": "J1939 engine speed (SPN 190)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50202,
   "documented": "50202",
   "name": "J1939 coolant temperature (SPN 110)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50203,
   "documented": "50203",
   "name": "J1939 fuel temperature (SPN 174)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50204,
   "documented": "50204",
   "name": "J1939 engine oil temperature 1 (SPN 175)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50205,
   "documented": "50205",
   "name": "J1939 engine oil pressure (SPN 100)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kPa",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50206,
   "documented": "50206",
   "name": "J1939 fuel rate (SPN 183)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "L/h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50207,
   "documented": "50207",
   "name": "J1939 coolant level (SPN 111)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50209,
   "documented": "50209",
   "name": "J1939 load at current speed (SPN 92)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50211,
   "documented": "50211",
   "name": "J1939 boost pressure (SPN 102)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kPa",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50216,
   "documented": "50216",
   "name": "J1939 exhaust gas temperature (SPN 173)",
   "description": "From the engine ECU over J1939; needs the ECU connected.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50322,
   "documented": "50322",
   "name": "Total generator active power",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50324,
   "documented": "50324",
   "name": "Total generator reactive power",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50326,
   "documented": "50326",
   "name": "Total generator apparent power",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50328,
   "documented": "50328",
   "name": "Average generator wye voltage",
   "description": "Average line-to-neutral voltage.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50330,
   "documented": "50330",
   "name": "Average generator delta voltage",
   "description": "Average line-to-line voltage.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50332,
   "documented": "50332",
   "name": "Average busbar 1 delta voltage",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50334,
   "documented": "50334",
   "name": "Average generator current",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50336,
   "documented": "50336",
   "name": "Generator current 1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50338,
   "documented": "50338",
   "name": "Generator current 2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50340,
   "documented": "50340",
   "name": "Generator current 3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50342,
   "documented": "50342",
   "name": "Measured ground current",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50346,
   "documented": "50346",
   "name": "Generator voltage L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50348,
   "documented": "50348",
   "name": "Generator voltage L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50350,
   "documented": "50350",
   "name": "Generator voltage L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50352,
   "documented": "50352",
   "name": "Generator voltage L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50354,
   "documented": "50354",
   "name": "Generator voltage L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50356,
   "documented": "50356",
   "name": "Generator voltage L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50358,
   "documented": "50358",
   "name": "Generator active power L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50360,
   "documented": "50360",
   "name": "Generator active power L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50362,
   "documented": "50362",
   "name": "Generator active power L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50364,
   "documented": "50364",
   "name": "Busbar 1 voltage L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50366,
   "documented": "50366",
   "name": "Generator real energy",
   "description": "Active energy counter.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "MWh",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50368,
   "documented": "50368",
   "name": "Generator positive reactive energy",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Mvarh",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50370,
   "documented": "50370",
   "name": "Generator hours of operation",
   "description": "Run-hours counter kept by the controller.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50372,
   "documented": "50372",
   "name": "Setpoint active power",
   "description": "Active power setpoint currently in use.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50374,
   "documented": "50374",
   "name": "Setpoint voltage",
   "description": "Voltage setpoint currently in use.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50384,
   "documented": "50384",
   "name": "Total mains active power",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50386,
   "documented": "50386",
   "name": "Total mains reactive power",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50388,
   "documented": "50388",
   "name": "Average mains wye voltage",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50390,
   "documented": "50390",
   "name": "Average mains delta voltage",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50392,
   "documented": "50392",
   "name": "Average mains current",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50394,
   "documented": "50394",
   "name": "Mains current L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50400,
   "documented": "50400",
   "name": "Mains voltage L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50402,
   "documented": "50402",
   "name": "Mains voltage L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50404,
   "documented": "50404",
   "name": "Mains voltage L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50406,
   "documented": "50406",
   "name": "Mains voltage L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50408,
   "documented": "50408",
   "name": "Mains voltage L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50410,
   "documented": "50410",
   "name": "Mains voltage L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50444,
   "documented": "50444",
   "name": "J1939 total engine hours",
   "description": "Engine hours reported by the ECU (J1939 HOURS).",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  }
 ],
 "integration": {
  "summary": "Block-read holding registers from 50000 (up to 128 per request) for status and alarms, and the 32-bit generator and mains values at 50322-50411. To start or stop the set, write parameter 503 with 0 and then the start (bit 0) or stop (bit 1) bit; acknowledge alarms by pulsing bit 4 twice.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 50099,
    "why": "Operating mode (AUTO/STOP/MANUAL/TEST)"
   },
   {
    "table": "holding_register",
    "address": 50104,
    "why": "GCB / MCB closed flags"
   },
   {
    "table": "holding_register",
    "address": 50114,
    "why": "Latched alarm classes A-F"
   },
   {
    "table": "holding_register",
    "address": 50009,
    "why": "Generator frequency"
   },
   {
    "table": "holding_register",
    "address": 50322,
    "why": "Total generator active power (32-bit)"
   },
   {
    "table": "holding_register",
    "address": 50346,
    "why": "Generator voltage L1-L2 (32-bit)"
   },
   {
    "table": "holding_register",
    "address": 50336,
    "why": "Generator current 1 (32-bit)"
   },
   {
    "table": "holding_register",
    "address": 50052,
    "why": "Battery voltage"
   },
   {
    "table": "holding_register",
    "address": 503,
    "why": "Remote start / stop / acknowledge"
   }
  ],
  "enable": "RS-485: set Modbus slave ID (parameter 3188, default 1; 0 disables Modbus) and baud/parity/stop bits (3170-3172). Ethernet: set Modbus/TCP slave ID (7485) and the Ethernet A IP settings, then turn on the matching 'Set IP address' parameter. Protocol number 3184 must stay 5010 for this map; a change needs a reboot. For a remote start, the LogicsManager start request must include 04.13 Remote request.",
  "watchdog": "No Modbus communication timeout is documented. Bits 2 and 3 of parameter 503 must always be 0; the manual reserves them for a watchdog. A remote start request (04.13) stays set until a stop bit arrives or power is lost.",
  "quirks": [
   "Start, stop and acknowledge act on rising edges: write 0, then the bit. Writing the same value again does nothing.",
   "Acknowledge needs two rising edges of bit 4: the first silences the horn, the second resets alarms that are no longer active.",
   "Status-word bit numbers here follow the manual's masks: mask 8000h = bit 15.",
   "Reads use function 03; parameters are written with 06 or 16. Parameters are accessed one at a time, with a length that matches their data type.",
   "Some PC tools need the address shifted by one (e.g. 504 instead of 503); the manual says to try both.",
   "Each parameter ID has its own address, and a 32-bit parameter is read or written as 2 registers starting at that address (high word first). So 507 (INT32) is sent as 507+508 in one request, yet 508 alone is the separate PF setpoint; likewise 510 and 511. Never block-read or block-write across 503-511; send one request per parameter with the length of its data type."
  ],
  "setup": [
   "RS-485 defaults: 19.2 kBd, no parity, one stop bit, full-duplex mode (parameter 3173). Select half-duplex for a two-wire bus and set a reply delay (3189) if the master needs it.",
   "Modbus/TCP: up to 5 sockets. An idle socket closes after about 2.2 s and opening one takes about 200 ms, so poll continuously or expect reconnects.",
   "The manual recommends a 10 ms pause after each response; RTU replies can take up to 2-3 s on display / plastic-housing units."
  ],
  "gotchas": [
   "This controller starts engines and closes breakers. Make sure the site is safe and the operators know before writing parameter 503.",
   "Bit 9 of parameter 503 sets 03.40 Remote Shutdown. One chapter says it shuts the engine down at once, but the configuration chapters route 03.40 through a LogicsManager flag and a free alarm with a shutdown class. Check how your unit is set up before relying on it.",
   "Writing setpoints 507-511 changes nothing until the AnalogManager setpoint source points at the interface value.",
   "Password protection for Modbus RS-485 (9128) and Ethernet (9129) defaults to On. The manual says the remote-control words and interface setpoints need no password; parameter changes do."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/woodward/easygen-3000xt",
 "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."
}
