{
  "spec_version": 1,
  "slug": "siemens-sinamics-g120-modbus",
  "manufacturer": "Siemens",
  "model": "SINAMICS G120 / G120C (CU240E-2, CU230P-2) via Modbus RTU",
  "category": "VFD",
  "supplier_url": "https://support.industry.siemens.com/cs/document/109791930",
  "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": [],
  "holding_registers": [
    {
      "address": 100,
      "count": 1,
      "name": "Control word 1 (STW1)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Process data 1. Bit 0: 0 = OFF1, 1 = ON. Bit 1: 0 = OFF2 (coast), 1 = no OFF2. Bit 2: 0 = quick stop OFF3, 1 = no OFF3. Bit 3: 0 = inhibit operation, 1 = enable operation. Bit 4: ramp-function generator enable. Bit 5: 0 = stop RFG, 1 = enable RFG. Bit 6: 0 = inhibit setpoint, 1 = enable setpoint. Bit 7: 1 = acknowledge faults. Bit 10: 0 = no control via PLC, 1 = control via PLC. Bit 11: 1 = direction reversal. Bit 13: MOP up. Bit 14: MOP down."
    },
    {
      "address": 101,
      "count": 1,
      "name": "Main setpoint",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.006103515625,
      "offset": 0,
      "access": "RW",
      "description": "Process data 2: speed setpoint relative to the reference speed p2000; 4000 hex (16384) = 100 % = p2000."
    },
    {
      "address": 110,
      "count": 1,
      "name": "Status word 1 (ZSW1)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Process data 1. Bit 0: ready for switching on. Bit 1: ready. Bit 2: operation enabled. Bit 3: fault active. Bit 4: OFF2 inactive. Bit 5: OFF3 inactive. Bit 6: switching on inhibited. Bit 7: alarm active. Bit 8: speed deviation within tolerance. Bit 9: master control requested. Bit 10: comparison speed reached or exceeded. Bit 11: torque limit not reached. Bit 14: motor turning. Bit 15: overload warning."
    },
    {
      "address": 111,
      "count": 1,
      "name": "Main actual value",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.006103515625,
      "offset": 0,
      "access": "R",
      "description": "Process data 2: actual speed relative to p2000; 4000 hex (16384) = 100 %."
    },
    {
      "address": 200,
      "count": 1,
      "name": "Digital output 0 (DO 0)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "HIGH/LOW, signal source p0730 / r747.0."
    },
    {
      "address": 201,
      "count": 1,
      "name": "Digital output 1 (DO 1)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "HIGH/LOW, signal source p0731 / r747.1."
    },
    {
      "address": 202,
      "count": 1,
      "name": "Digital output 2 (DO 2)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "HIGH/LOW, signal source p0732 / r747.2."
    },
    {
      "address": 220,
      "count": 1,
      "name": "Analog output 0 (AO 0)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0774.0, -100.0 ... 100.0 %."
    },
    {
      "address": 221,
      "count": 1,
      "name": "Analog output 1 (AO 1)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0774.1, -100.0 ... 100.0 %."
    },
    {
      "address": 222,
      "count": 1,
      "name": "Analog output 2 (AO 2)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0774.2, -100.0 ... 100.0 %."
    },
    {
      "address": 240,
      "count": 1,
      "name": "Digital input 0 (DI 0)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.0."
    },
    {
      "address": 241,
      "count": 1,
      "name": "Digital input 1 (DI 1)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.1."
    },
    {
      "address": 242,
      "count": 1,
      "name": "Digital input 2 (DI 2)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.2."
    },
    {
      "address": 243,
      "count": 1,
      "name": "Digital input 3 (DI 3)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.3."
    },
    {
      "address": 244,
      "count": 1,
      "name": "Digital input 4 (DI 4)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.4."
    },
    {
      "address": 245,
      "count": 1,
      "name": "Digital input 5 (DI 5)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "HIGH/LOW, r0722.5."
    },
    {
      "address": 260,
      "count": 1,
      "name": "Analog input 0 (AI 0)",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0755[0], -300.0 ... 300.0 %."
    },
    {
      "address": 261,
      "count": 1,
      "name": "Analog input 1 (AI 1)",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0755[1], -300.0 ... 300.0 %."
    },
    {
      "address": 262,
      "count": 1,
      "name": "Analog input 2 (AI 2)",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0755[2], -300.0 ... 300.0 %."
    },
    {
      "address": 263,
      "count": 1,
      "name": "Analog input 3 (AI 3)",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0755[3], -300.0 ... 300.0 %."
    },
    {
      "address": 300,
      "count": 1,
      "name": "Powerstack number",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0200."
    },
    {
      "address": 320,
      "count": 1,
      "name": "Rated power",
      "data_type": "UInt16",
      "units": "kW",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0206, 0 ... 327.67 kW."
    },
    {
      "address": 321,
      "count": 1,
      "name": "Current limit",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "p0640, 10.0 ... 400.0 A."
    },
    {
      "address": 322,
      "count": 1,
      "name": "Ramp-up time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "p1120, 0.00 ... 650.00 s."
    },
    {
      "address": 323,
      "count": 1,
      "name": "Ramp-down time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "p1121, 0.00 ... 650.00 s."
    },
    {
      "address": 324,
      "count": 1,
      "name": "Reference speed",
      "data_type": "UInt16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "p2000, 6 ... 32767 rpm."
    },
    {
      "address": 340,
      "count": 1,
      "name": "Speed setpoint",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0020, -16250 ... 16250 rpm."
    },
    {
      "address": 341,
      "count": 1,
      "name": "Actual speed value",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0022, -16250 ... 16250 rpm."
    },
    {
      "address": 342,
      "count": 1,
      "name": "Output frequency",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0024, -327.68 ... 327.67 Hz."
    },
    {
      "address": 343,
      "count": 1,
      "name": "Output voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0025, 0 ... 32767 V."
    },
    {
      "address": 344,
      "count": 1,
      "name": "DC link voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0026, 0 ... 32767 V."
    },
    {
      "address": 345,
      "count": 1,
      "name": "Current actual value",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0027, 0 ... 163.83 A."
    },
    {
      "address": 346,
      "count": 1,
      "name": "Actual torque value",
      "data_type": "Int16",
      "units": "Nm",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0031, -325.00 ... 325.00 Nm."
    },
    {
      "address": 347,
      "count": 1,
      "name": "Actual active power",
      "data_type": "UInt16",
      "units": "kW",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "r0032, 0 ... 327.67 kW."
    },
    {
      "address": 348,
      "count": 1,
      "name": "Energy consumption",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0039, 0 ... 32767 kWh."
    },
    {
      "address": 349,
      "count": 1,
      "name": "Control priority",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0807: HAND = local control, AUTO = control from the fieldbus."
    },
    {
      "address": 400,
      "count": 1,
      "name": "Fault number, index 0",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[0], current fault code."
    },
    {
      "address": 401,
      "count": 1,
      "name": "Fault number, index 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[1]."
    },
    {
      "address": 402,
      "count": 1,
      "name": "Fault number, index 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[2]."
    },
    {
      "address": 403,
      "count": 1,
      "name": "Fault number, index 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[3]."
    },
    {
      "address": 404,
      "count": 1,
      "name": "Fault number, index 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[4]."
    },
    {
      "address": 405,
      "count": 1,
      "name": "Fault number, index 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[5]."
    },
    {
      "address": 406,
      "count": 1,
      "name": "Fault number, index 6",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[6]."
    },
    {
      "address": 407,
      "count": 1,
      "name": "Fault number, index 7",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r0947[7]."
    },
    {
      "address": 408,
      "count": 1,
      "name": "Alarm number",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r2110[0], current alarm code."
    },
    {
      "address": 409,
      "count": 1,
      "name": "Actual alarm code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "r2132."
    },
    {
      "address": 499,
      "count": 1,
      "name": "PRM ERROR code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Parameter access error code when a parameter request failed."
    }
  ],
  "combined_registers": [],
  "notes": "The SINAMICS G120 family reaches Modbus RTU over its RS-485 interface (CU240E-2, CU230P-2 HVAC, G120C): reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above. Factory settings for Modbus (p2030 = 2): address p2021 = 1, baud rate p2020 = 7 (19200 bit/s), parity even (p2031 = 2), 8 data bits, 1 stop bit; fieldbus monitoring time p2040 = 1000 ms. All values are single 16-bit holding registers read with FC03 and written with FC06. The register numbers in this file are the manual's 4xxxx references expressed as 1-based register numbers, so 100 is register 40100 (wire address 99) - one_based addressing makes the client subtract one. Scaling follows the manual, where the 'Scaling' column is the divisor (100 means a factor of 0.01). Process data 1/2 are the standard telegram 1 control word STW1, main setpoint, status word ZSW1 and main actual value; the setpoint and actual value are relative to the reference speed p2000 (4000 hex = 100 %). Source (freely downloadable, no login): Siemens 'SINAMICS G120, G120P, G120C, G120D, G110M - Fieldbuses' Function Manual, edition 11/2020, document id A5E34229197B AG (Siemens support entry 109791930), section 5.4 'Communication using Modbus RTU', tables 5-12 to 5-16; PDF at https://cache.industry.siemens.com/dl/files/930/109791930/att_1049446/v1/G120_fieldbus_fct_man_1120_en-US.pdf. The 40300-40348 converter-data/diagnostics rows are table 5-14 pages 141-142, and the 40400-40409 / 40499 fault-diagnostic rows are table 5-15 on page 142 of that PDF. The technology controller and PID diagnostics tables (40500+) are left out because their register content depends on the application configuration."
}
