{
 "manufacturer": "Siemens",
 "manufacturer_slug": "siemens",
 "model": "SINAMICS G120 / G120C (Modbus RTU)",
 "model_slug": "sinamics-g120",
 "short_model": "SINAMICS G120",
 "aliases": [
  "G120C USS/MB",
  "CU230P-2 HVAC",
  "CU230P-2 BT",
  "CU240B-2",
  "CU240E-2",
  "CU240E-2 F",
  "CU250S-2",
  "G110M CU240M USS",
  "G120P"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "SINAMICS G120 with an RS485 Control Unit (CU230P-2 HVAC/BT, CU240B-2, CU240E-2 / -2 F, CU250S-2), G120C USS/MB and G110M CU240M USS, firmware V4.7, per Fieldbuses function manual A5E34229197B AA. Not SINAMICS G120X, which has its own documentation.",
 "summary": "Siemens' modular drive family (Control Unit plus Power Module) and its compact G120C variant. Control Units with an RS485 port run Modbus RTU as a slave when p2030 = 2. Holding registers 40100-40111 carry the PROFIdrive control word, main setpoint, status word and actual value; 40200-40522 map I/O, drive data, measurements, fault numbers and technology (PID) controller settings. This map covers that whole table except two registers: one with an inconsistent scaling entry and one with no stated bit polarity.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 19200,
  "parity": "Even",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "Modicon",
  "note": "Registers are printed as 40100-40522. The manual's request examples send 00 6D for register 40110 and 00 63 for 40100, so the wire address is the printed number minus 40001 (control word 40100 = address 99)."
 },
 "default_word_order": null,
 "firmware": "V4.7",
 "source": {
  "title": "SINAMICS G120, G120P, G120C, G120D, G110M Fieldbuses Function Manual",
  "doc_number": "A5E34229197B AA",
  "revision_date": "2014-04",
  "url": "https://cache.industry.siemens.com/dl/files/275/109981275/att_1314024/v1/A6V10556730.pdf",
  "pages": "Section 5.4 Modbus RTU pp. 94-104 (settings pp. 94-96, timing Table 5-10 p. 98, register ranges p. 98, mapping Table 5-11 pp. 99-100, FC03/FC06 and examples pp. 101-103, exception codes and p2040 pp. 103-104); RS485 Control Units Tables 5-1/5-2 pp. 79-80; STW1 p. 20, ZSW1 p. 21; fieldbus scaling 4000 hex Table A-1 p. 173, 047E hex example p. 174"
 },
 "notes": [
  "All values are single 16-bit registers. The table's 'scaling factor' is what the engineering value is multiplied by before transmission (e.g. 100 for 0.01 Hz), so the scale here is 1 / factor.",
  "Signed/unsigned is not printed per register; registers with a negative range are INT16, the rest UINT16. Ramp times (650.0 s x 100) exceed 32767 raw, which only fits as unsigned.",
  "Control and status word bits are the PROFIdrive STW1/ZSW1 layout ('all other telegrams' column of the PROFIdrive section), which assumes the default interconnection of the received/sent process data; they change if that interconnection is altered (e.g. free telegram configuration via p0922/p2079 = 999 or BICO changes).",
  "Left out: 40301 Converter firmware (scaling factor 0.0001 contradicts its printed range 0.00-327.67) and 40349 Control priority (HAND/AUTO text without a stated bit polarity).",
  "Table 5-11 labels 40401-40407 as 'Failure number, index 1..6' with index 2 printed twice; the parameter column (r0947[1]..r0947[7]) is used here.",
  "40001-40065 (MICROMASTER MM436 compatible range) is mentioned but not mapped in this manual, so it is not included.",
  "SINAMICS G120X is not covered by this manual; do not use this map for it without its own documentation."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 99,
   "documented": "40100",
   "name": "Control word",
   "description": "Process data 1 (STW1).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "ON/OFF1 (0 = OFF1 ramp stop, 0->1 = ON)",
    "1": "0 = OFF2 coast stop (1 = no OFF2)",
    "2": "0 = OFF3 quick stop (1 = no OFF3)",
    "3": "1 = Enable operation (0 = inhibit, pulses off)",
    "4": "1 = Do not disable RFG",
    "5": "1 = Enable RFG (0 = hold RFG output)",
    "6": "1 = Enable setpoint",
    "7": "0->1 = Acknowledge faults",
    "10": "1 = Control via PLC (process data accepted)",
    "11": "Direction reversal (setpoint inversion, p1113)",
    "13": "1 = MOP up",
    "14": "1 = MOP down"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 100,
   "documented": "40101",
   "name": "Main setpoint",
   "description": "Process data 2; 4000 hex = 100 % of p2000.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 109,
   "documented": "40110",
   "name": "Status word",
   "description": "Process data 1 (ZSW1).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Ready to start",
    "1": "Ready",
    "2": "Operation enabled",
    "3": "Fault active",
    "4": "1 = OFF2 inactive",
    "5": "1 = OFF3 inactive",
    "6": "Closing lockout active",
    "7": "Alarm active",
    "8": "Speed deviation within tolerance",
    "9": "Master control requested",
    "10": "Comparison speed reached or exceeded",
    "11": "Torque limit reached",
    "12": "Holding brake open",
    "13": "0 = alarm, motor overtemperature",
    "14": "1 = clockwise, 0 = counterclockwise",
    "15": "0 = alarm, inverter thermal overload"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 110,
   "documented": "40111",
   "name": "Main actual value",
   "description": "Process data 2; 4000 hex = 100 % of p2000.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 199,
   "documented": "40200",
   "name": "DO 0",
   "description": "Mapped to p0730, r0747.0 and p0748.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 200,
   "documented": "40201",
   "name": "DO 1",
   "description": "Mapped to p0731, r0747.1 and p0748.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 201,
   "documented": "40202",
   "name": "DO 2",
   "description": "Mapped to p0732, r0747.2 and p0748.2.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 219,
   "documented": "40220",
   "name": "AO 0",
   "description": "r0774.0.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 220,
   "documented": "40221",
   "name": "AO 1",
   "description": "r0774.1.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 239,
   "documented": "40240",
   "name": "DI 0",
   "description": "r0722.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 240,
   "documented": "40241",
   "name": "DI 1",
   "description": "r0722.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 241,
   "documented": "40242",
   "name": "DI 2",
   "description": "r0722.2.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 242,
   "documented": "40243",
   "name": "DI 3",
   "description": "r0722.3.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 243,
   "documented": "40244",
   "name": "DI 4",
   "description": "r0722.4.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 244,
   "documented": "40245",
   "name": "DI 5",
   "description": "r0722.5.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1": "HIGH",
    "0": "LOW"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 259,
   "documented": "40260",
   "name": "AI 0",
   "description": "r0755[0], -300.0 to 300.0 %.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 260,
   "documented": "40261",
   "name": "AI 1",
   "description": "r0755[1], -300.0 to 300.0 %.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 261,
   "documented": "40262",
   "name": "AI 2",
   "description": "r0755[2], -300.0 to 300.0 %.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 262,
   "documented": "40263",
   "name": "AI 3",
   "description": "r0755[3], -300.0 to 300.0 %.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 299,
   "documented": "40300",
   "name": "Powerstack number",
   "description": "r0200 power unit code.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 319,
   "documented": "40320",
   "name": "Rated power of the power unit",
   "description": "r0206.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 320,
   "documented": "40321",
   "name": "Current limit",
   "description": "p0640, 10.0-400.0 %.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 321,
   "documented": "40322",
   "name": "Ramp-up time",
   "description": "p1120, 0.00-650.0 s (raw up to 65000).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 322,
   "documented": "40323",
   "name": "Ramp-down time",
   "description": "p1121, 0.00-650.0 s (raw up to 65000).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 323,
   "documented": "40324",
   "name": "Reference speed",
   "description": "p2000: speed that 4000 hex represents.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 339,
   "documented": "40340",
   "name": "Speed setpoint",
   "description": "r0020.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 340,
   "documented": "40341",
   "name": "Actual speed value",
   "description": "r0022.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 341,
   "documented": "40342",
   "name": "Output frequency",
   "description": "r0024.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 342,
   "documented": "40343",
   "name": "Output voltage",
   "description": "r0025.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 343,
   "documented": "40344",
   "name": "DC-link voltage",
   "description": "r0026.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 344,
   "documented": "40345",
   "name": "Actual current value",
   "description": "r0027.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 345,
   "documented": "40346",
   "name": "Actual torque value",
   "description": "r0031.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "Nm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 346,
   "documented": "40347",
   "name": "Actual active power",
   "description": "r0032.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 347,
   "documented": "40348",
   "name": "Energy consumption",
   "description": "r0039.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 399,
   "documented": "40400",
   "name": "Failure number r0947[0]",
   "description": "Most recent fault number.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 400,
   "documented": "40401",
   "name": "Failure number r0947[1]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 401,
   "documented": "40402",
   "name": "Failure number r0947[2]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 402,
   "documented": "40403",
   "name": "Failure number r0947[3]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 403,
   "documented": "40404",
   "name": "Failure number r0947[4]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 404,
   "documented": "40405",
   "name": "Failure number r0947[5]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 405,
   "documented": "40406",
   "name": "Failure number r0947[6]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 406,
   "documented": "40407",
   "name": "Failure number r0947[7]",
   "description": "Fault history entry.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 407,
   "documented": "40408",
   "name": "Alarm number",
   "description": "r2110[0].",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 498,
   "documented": "40499",
   "name": "PRM ERROR code",
   "description": "0-99; why the last register access failed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 499,
   "documented": "40500",
   "name": "Technology controller enable",
   "description": "Writes p2200; reads r2349.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 500,
   "documented": "40501",
   "name": "Technology controller MOP",
   "description": "p2240, -200.0 to 200.0 %.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 509,
   "documented": "40510",
   "name": "Tech. controller actual-value filter time",
   "description": "p2265, 0.00-60.0; no unit printed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 510,
   "documented": "40511",
   "name": "Tech. controller actual-value scaling",
   "description": "p2269, 0.00-500.00 %.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 511,
   "documented": "40512",
   "name": "Tech. controller proportional gain",
   "description": "p2280, 0.000-65.000.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 512,
   "documented": "40513",
   "name": "Tech. controller integral time",
   "description": "p2285, 0-60 s.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 513,
   "documented": "40514",
   "name": "Tech. controller D time constant",
   "description": "p2274, 0-60; no unit printed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 514,
   "documented": "40515",
   "name": "Tech. controller max. limit",
   "description": "p2291.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 515,
   "documented": "40516",
   "name": "Tech. controller min. limit",
   "description": "p2292.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 519,
   "documented": "40520",
   "name": "Tech. controller effective setpoint",
   "description": "r2250, after MOP ramp-function generator.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 520,
   "documented": "40521",
   "name": "Tech. controller actual value after filter",
   "description": "r2266.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 521,
   "documented": "40522",
   "name": "Tech. controller output",
   "description": "r2294.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Set p0015 = 21 (USS fieldbus macro), then p2030 = 2 (Modbus), the address and baud rate. Write 047E hex to 40100, then 047F hex (bit 0 going 0 to 1 = ON) to start, the speed setpoint to 40101 (4000 hex = p2000), and poll 40110/40111 plus 40342-40347 for frequency, current and power.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 99,
    "why": "Control word STW1"
   },
   {
    "table": "holding_register",
    "address": 100,
    "why": "Main setpoint, 4000 hex = p2000"
   },
   {
    "table": "holding_register",
    "address": 109,
    "why": "Status word ZSW1"
   },
   {
    "table": "holding_register",
    "address": 110,
    "why": "Main actual value"
   },
   {
    "table": "holding_register",
    "address": 341,
    "why": "Output frequency in 0.01 Hz"
   },
   {
    "table": "holding_register",
    "address": 344,
    "why": "Output current in 0.01 A"
   },
   {
    "table": "holding_register",
    "address": 346,
    "why": "Active power in 0.01 kW"
   },
   {
    "table": "holding_register",
    "address": 399,
    "why": "Latest fault number"
   }
  ],
  "enable": "p0015 = 21 'USS fieldbus' (CU230P-2 HVAC/BT can instead use macro 109 'BT Mac 9: Modbus RTU Fieldbus'), then p2030 = 2 for Modbus, p2020 for baud rate (factory 7 = 19200 bit/s, range 4800-187500), and the address via the Control Unit's address switches or p2021. With STARTER, save the settings afterwards.",
  "watchdog": "p2040 fieldbus monitoring time (factory 100 ms, 0 disables): if no process data (40100, 40101, 40110, 40111) is accessed within this time, the drive trips with F01910 'setpoint timeout'. Accessing only parameter registers 40200-40522 does not keep it alive.",
  "quirks": [
   "Only FC03 (read, up to 125 registers) and FC06 (single write); there is no FC16.",
   "Valid registers are 40001-40065 and 40100-40522; anything else returns exception 02. Reading a reserved or write-only register returns zeros.",
   "Writing a read-only or reserved register returns exception 04; the reason is in 40499.",
   "The manual states the Control Unit runs Modbus RTU with even parity; no parity parameter is described.",
   "The unit switchover function must not be used with Modbus."
  ],
  "setup": [
   "RS485 on connector X128 (CU) pins 2 = RS485P, 3 = RS485N, 1 = 0 V, 4 = shield; G110M uses M12 X03/X04.",
   "Switch on the bus terminating resistor at the first and last node; both must be powered.",
   "Address 1-247: DIP switches set 1-127 and override p2021; set all switches to 0 to use p2021 (needed for 128-247). Power-cycle until all LEDs go dark after changing the address.",
   "p2024[0..2] set slave response time, character delay and inter-telegram gap; p2024[1] and [2] are 0 from the factory, which lets the drive derive them from the baud rate.",
   "Maximum cable length 100 m; r2029 shows receive error statistics."
  ],
  "gotchas": [
   "The factory protocol on the RS485 port is USS; nothing answers Modbus until p2030 = 2.",
   "If the address switches hold a valid address, p2021 cannot be changed and is ignored.",
   "With p2040 > 0 a master that only polls 40200+ will still trip F01910; include the process-data registers in the poll."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/siemens/sinamics-g120",
 "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."
}
