{
 "manufacturer": "Danfoss",
 "manufacturer_slug": "danfoss",
 "model": "VLT AutomationDrive FC 301/302 (Modbus RTU)",
 "model_slug": "fc-302",
 "short_model": "FC 302",
 "aliases": [
  "VLT AutomationDrive",
  "FC 301",
  "FC301",
  "FC302",
  "FC-302",
  "FC-301",
  "FC 300"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "VLT AutomationDrive FC 301 and FC 302 (0.25-75 kW design guide; same scheme across sizes) using the built-in RS-485 (FC) port with 8-30 Protocol = Modbus RTU and the FC control profile; parameter data checked against the software 9.5x / 48.96 programming guide.",
 "summary": "Danfoss's general-purpose industrial variable frequency drive family (FC 301, and FC 302 which adds flux control modes), with a built-in RS-485 port that can speak Modbus RTU. Control word, bus reference, status word and main actual value sit at fixed holding registers 50000-50210, and every parameter is a holding register at ten times its parameter number. This map covers the control block, the communication and comm-loss parameters and the main 15-xx/16-xx readouts, including the FC 302 high-resolution torque readouts.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": null,
  "parity": "Even",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "parameter-derived",
  "note": "Registers are printed 1-based (the design guide's own rule: register 40001 is address 0, coil 1 is address 0). A parameter's register number is 10 x its parameter number (3-03 -> 3030, 16-13 -> 16130) and the request carries that number minus 1 (16-13 is read at address 16129). The fixed process registers CTW 50000, REF 50010, STW 50200 and MAV 50210 follow the same minus-1 rule (CTW = address 49999). Coil 65 is address 64."
 },
 "default_word_order": "ABCD",
 "firmware": "Programming data per software 9.5x / 48.96 guide; Modbus mapping per Design Guide MG33BF02 (software 6.72)",
 "source": {
  "title": "Design Guide VLT AutomationDrive FC 301/302 0.25-75 kW (chapter 12 RS-485 Installation and Set-up, Modbus RTU)",
  "doc_number": "MG33BF02",
  "revision_date": "2013-12-20",
  "url": "https://assets.danfoss.com/documents/272493/AJ286655760917en-000301.pdf",
  "pages": "Design Guide printed pp. 181-190 (PDF 183-192): conversion table 12.8 (p. 181), Modbus network setup Table 12.10 (p. 183), coil/register addressing (p. 184), coil and holding register tables 12.13-12.16 (p. 185), x10 rule (p. 186), coil 65, IND, data types and FC profile CTW (pp. 187-188), STW (p. 189), REF/MAV scaling (p. 190). Programming Guide 9.5x/48.96 (AU275636650261en-003201, 2024.09): 3-02/3-03 p. 146, 3-13 pp. 150-151, 3-41/3-42 pp. 165-166, 4-14 p. 178, 4-18/4-19 p. 179, 8-01..8-04 pp. 315-317, 8-10 pp. 319-320, 8-30..8-35 pp. 332-333, 15-00..15-05 pp. 533-534, 16-xx pp. 555-574."
 },
 "notes": [
  "Programming data source: VLT AutomationDrive FC 301/FC 302 Programming Guide, software 9.5x and 48.96, AU275636650261en-003201 (2024.09), https://assets.danfoss.com/documents/431896/AU275636650261en-003201.pdf. Each parameter's conversion index gives the scale: -1 = x0.1, -2 = x0.01, -3 = x0.001, 0 = x1, 1 = x10.",
  "Indices 67, 74, 75 and 100 have no factor in the current guide or in the design guide's conversion table; the FC 301/302 Programming Guide MG33MP02 (software 8.23/48.33, AU275636650261en-001101, Table 5.2, printed p. 262, https://assets.danfoss.com/documents/271654/AU275636650261en-001101.pdf) gives them 1/60, 3600, 3600000 and 1 relative to SI units, so the transferred integer is already in RPM, hours, kWh and degC (scale 1).",
  "Word order: the design guide says 32-bit parameters use 2 registers but prints no 32-bit example. Danfoss's Modbus RTU Operating Instructions MG92B102 (https://assets.danfoss.com/documents/latest/271338/AQ361181101347en-000101.pdf), written for the Danfoss FC series as a whole and using the same register scheme as this drive's design guide, maps an Int32/Uint32 as bytes 3-2 in the first register and bytes 1-0 in the second (printed p. 17) and its read example for 3-03 at registers 3030/3031 returns 0016E360h = 1500000 (printed p. 22): high word first (ABCD).",
  "16-16 Torque [Nm] is Int16 on FC 301/302 (range -3000..3000 Nm, index -1), unlike FC 102/FC 202 where it is Int32; for larger drives read 16-25 Torque [Nm] High (Int32). The MG33MP02 parameter list agrees.",
  "16-10 Power [kW] has conversion index 1 and the guide states its fieldbus value is in 10 W steps with W as the base unit, so raw x 0.01 = kW.",
  "REF and MAV are signed 16-bit values where 16384 (4000h) = 100%; with 3-00 = [0] Min - Max the range runs from 3-02 (0%) to 3-03 (100%), with [1] -Max - +Max it runs from -3-03 to +3-03. Coils 17-32 carry the same reference (0x0-0xFFFF = -200%..~200%).",
  "8-bit parameters (Uint8, e.g. 8-31, 16-18, 16-34) are read and written as one 16-bit register.",
  "16-62/16-64 analog inputs are in volts or milliamps depending on the terminal mode; the guide prints no unit for the readout.",
  "Left out: 16-05 Main Actual Value [%] and 16-15 Frequency [%] (normalised N2 type); 16-23 Motor Shaft Power (index 1, base unit not stated); 16-20 Motor Angle (raw encoder units); 16-50 External Reference (no unit printed); 15-30..15-33 alarm log arrays (need IND); text parameters; MCO/positioning (software 48.xx) groups.",
  "Alarm/warning/extended status words (16-90..16-95) are listed as raw UINT32; their bit meanings are in the programming guide's troubleshooting tables.",
  "Coils 1-16 / 17-32 / 33-48 / 49-64 mirror CTW, REF, STW and MAV (output frequency in open loop, feedback in closed loop); only coil 65 (parameter write control) is listed separately.",
  "The design guide's 3-14 example prints registers 3410/3411 and '11300 = 1113.00'; by the x10 rule 3-14 is 3140/3141, so treat that example as a typo.",
  "The Modbus mapping comes from the MG33BF02 (2013-12-20) edition of the design guide; the parameter numbers, types and conversion indices it relies on were re-checked in the 9.5x programming guide.",
  "FC 301 and FC 302 share the programming guide; options marked 'FC 302 only' or 'software 48.xx' are noted in the value lists."
 ],
 "registers": [
  {
   "table": "coil",
   "address": 64,
   "documented": "65",
   "name": "Parameter write control",
   "description": "0 = parameter writes go to RAM only, 1 = RAM and EEPROM.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "RAM only",
    "1": "RAM and EEPROM"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6,
   "documented": "00007",
   "name": "Last error code",
   "description": "Last error from the FC data object interface.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8,
   "documented": "00009",
   "name": "Parameter index (IND)",
   "description": "Array index used for subsequent array-parameter reads/writes.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3019,
   "documented": "3020 (par. 3-02)",
   "name": "3-02 Minimum Reference",
   "description": "Lower reference limit in the reference unit.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3029,
   "documented": "3030 (par. 3-03)",
   "name": "3-03 Maximum Reference",
   "description": "Reference value that REF 4000h (100%) corresponds to.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3129,
   "documented": "3130 (par. 3-13)",
   "name": "3-13 Reference Site",
   "description": "Local/remote reference selection.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Linked to hand/auto",
    "1": "Remote",
    "2": "Local",
    "3": "Linked to H/A MCO (for MCO 305)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3409,
   "documented": "3410 (par. 3-41)",
   "name": "3-41 Ramp 1 Ramp Up Time",
   "description": "Range 0.01-3600 s.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3419,
   "documented": "3420 (par. 3-42)",
   "name": "3-42 Ramp 1 Ramp Down Time",
   "description": "Range 0.01-3600 s.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4139,
   "documented": "4140 (par. 4-14)",
   "name": "4-14 Motor Speed High Limit [Hz]",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4179,
   "documented": "4180 (par. 4-18)",
   "name": "4-18 Current Limit",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "%",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4189,
   "documented": "4190 (par. 4-19)",
   "name": "4-19 Max Output Frequency",
   "description": "Absolute output frequency ceiling.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8009,
   "documented": "8010 (par. 8-01)",
   "name": "8-01 Control Site",
   "description": "Which inputs the drive obeys.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Digital and ctrl.word",
    "1": "Digital only",
    "2": "Controlword only"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8019,
   "documented": "8020 (par. 8-02)",
   "name": "8-02 Control Word Source",
   "description": "Port the control word is taken from.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "None",
    "1": "FC RS485",
    "2": "FC USB",
    "3": "Option A",
    "4": "Option B",
    "5": "Option C0",
    "6": "Option C1",
    "30": "External Can",
    "35": "Option A fast (FC 302 only)",
    "37": "Option C0 fast (FC 302 only)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8029,
   "documented": "8030 (par. 8-03)",
   "name": "8-03 Control Word Timeout Time",
   "description": "Comm-loss timeout (0.1-18000 s).",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8039,
   "documented": "8040 (par. 8-04)",
   "name": "8-04 Control Word Timeout Function",
   "description": "Action when the timeout expires.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "Freeze output",
    "2": "Stop",
    "3": "Jogging",
    "4": "Max. speed",
    "5": "Stop and trip",
    "6": "Qstop and trip (software 48.xx only)",
    "7": "Select setup 1",
    "8": "Select setup 2",
    "9": "Select setup 3",
    "10": "Select setup 4",
    "26": "Trip (with MCO 302 only)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8099,
   "documented": "8100 (par. 8-10)",
   "name": "8-10 Control Word Profile",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "FC profile",
    "1": "PROFIdrive profile",
    "3": "FC motion profile (software 48.xx only)",
    "5": "ODVA",
    "7": "CANopen DSP 402",
    "8": "MCO",
    "22": "PROFIdrive v4_2 profile"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8299,
   "documented": "8300 (par. 8-30)",
   "name": "8-30 Protocol",
   "description": "Takes effect after a power cycle.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "FC",
    "1": "FC MC",
    "2": "Modbus RTU"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8309,
   "documented": "8310 (par. 8-31)",
   "name": "8-31 Address",
   "description": "Drive address on the FC (RS-485) port.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8319,
   "documented": "8320 (par. 8-32)",
   "name": "8-32 FC Port Baud Rate",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "2400",
    "1": "4800",
    "2": "9600",
    "3": "19200",
    "4": "38400",
    "5": "57600",
    "6": "76800",
    "7": "115200"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8329,
   "documented": "8330 (par. 8-33)",
   "name": "8-33 Parity/Stop Bits",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Even parity, 1 stop bit",
    "1": "Odd parity, 1 stop bit",
    "2": "No parity, 1 stop bit",
    "3": "No parity, 2 stop bits"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8349,
   "documented": "8350 (par. 8-35)",
   "name": "8-35 Minimum Response Delay",
   "description": "Delay before the drive answers (1-10000 ms).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "s",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 14999,
   "documented": "15000 (par. 15-00)",
   "name": "15-00 Operating hours",
   "description": "Hours the drive has been powered.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15009,
   "documented": "15010 (par. 15-01)",
   "name": "15-01 Running Hours",
   "description": "Hours the motor has run.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15019,
   "documented": "15020 (par. 15-02)",
   "name": "15-02 kWh Counter",
   "description": "Motor energy consumption.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15029,
   "documented": "15030 (par. 15-03)",
   "name": "15-03 Power Up's",
   "description": "Number of power-ups.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15039,
   "documented": "15040 (par. 15-04)",
   "name": "15-04 Over Temp's",
   "description": "Number of drive temperature faults.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15049,
   "documented": "15050 (par. 15-05)",
   "name": "15-05 Over Volt's",
   "description": "Number of drive overvoltages.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15999,
   "documented": "16000 (par. 16-00)",
   "name": "16-00 Control Word",
   "description": "Control word the drive received (same bits as CTW).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Preset reference select LSB",
    "1": "Preset reference select MSB",
    "2": "0 = DC brake, 1 = ramp",
    "3": "0 = coast stop, 1 = no coasting",
    "4": "0 = quick stop, 1 = ramp",
    "5": "0 = hold (freeze) output frequency, 1 = use ramp",
    "6": "0 = ramp stop, 1 = start",
    "7": "Reset (on 0->1 edge)",
    "8": "1 = jog",
    "9": "0 = ramp 1, 1 = ramp 2",
    "10": "1 = data valid (0 = control word ignored)",
    "11": "1 = relay 01 active (if 5-40 set to CTW bit 11)",
    "12": "1 = relay active if 5-40 is set to CTW bit 12 (table says relay 02, text says relay 04)",
    "13": "Set-up select LSB",
    "14": "Set-up select MSB",
    "15": "1 = reverse"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16009,
   "documented": "16010 (par. 16-01)",
   "name": "16-01 Reference [Unit]",
   "description": "Active reference in the configured reference unit.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16019,
   "documented": "16020 (par. 16-02)",
   "name": "16-02 Reference %",
   "description": "Total reference in percent.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16029,
   "documented": "16030 (par. 16-03)",
   "name": "16-03 Status Word",
   "description": "Drive status word (same bits as STW).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Control ready",
    "1": "Drive ready",
    "2": "1 = enable (0 = coasting)",
    "3": "Trip",
    "4": "Error (no trip)",
    "5": "Reserved",
    "6": "Triplock",
    "7": "Warning",
    "8": "Speed = reference",
    "9": "1 = bus control possible (0 = local operation)",
    "10": "Frequency within limits",
    "11": "In operation (running)",
    "12": "Stopped, auto start (inverter overtemperature)",
    "13": "Voltage limit exceeded",
    "14": "Torque/current limit exceeded",
    "15": "Thermal timer exceeded"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16099,
   "documented": "16100 (par. 16-10)",
   "name": "16-10 Power [kW]",
   "description": "Motor power; fieldbus value is in 10 W steps.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16109,
   "documented": "16110 (par. 16-11)",
   "name": "16-11 Power [hp]",
   "description": "Motor power in hp.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "hp",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16119,
   "documented": "16120 (par. 16-12)",
   "name": "16-12 Motor Voltage",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16129,
   "documented": "16130 (par. 16-13)",
   "name": "16-13 Frequency",
   "description": "Output frequency.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16139,
   "documented": "16140 (par. 16-14)",
   "name": "16-14 Motor current",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.01,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16159,
   "documented": "16160 (par. 16-16)",
   "name": "16-16 Torque [Nm]",
   "description": "Signed shaft torque.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Nm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16169,
   "documented": "16170 (par. 16-17)",
   "name": "16-17 Speed [RPM]",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "RPM",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16179,
   "documented": "16180 (par. 16-18)",
   "name": "16-18 Motor Thermal",
   "description": "Calculated motor thermal load.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16209,
   "documented": "16210 (par. 16-21)",
   "name": "16-21 Torque [%] High Res.",
   "description": "Torque in percent of nominal, 0.1% resolution.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16219,
   "documented": "16220 (par. 16-22)",
   "name": "16-22 Torque [%]",
   "description": "Torque in percent of nominal, signed.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16249,
   "documented": "16250 (par. 16-25)",
   "name": "16-25 Torque [Nm] High",
   "description": "Signed shaft torque, 32-bit range.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.1,
   "units": "Nm",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16299,
   "documented": "16300 (par. 16-30)",
   "name": "16-30 DC Link Voltage",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16339,
   "documented": "16340 (par. 16-34)",
   "name": "16-34 Heatsink Temp.",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16349,
   "documented": "16350 (par. 16-35)",
   "name": "16-35 Inverter Thermal",
   "description": "Inverter thermal load.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16389,
   "documented": "16390 (par. 16-39)",
   "name": "16-39 Control Card Temp.",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16519,
   "documented": "16520 (par. 16-52)",
   "name": "16-52 Feedback [Unit]",
   "description": "Process feedback in the reference/feedback unit.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16569,
   "documented": "16570 (par. 16-57)",
   "name": "16-57 Feedback [RPM]",
   "description": "Motor speed from the feedback source.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "RPM",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16599,
   "documented": "16600 (par. 16-60)",
   "name": "16-60 Digital Input",
   "description": "Digital input states, one bit per terminal.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Terminal 33",
    "1": "Terminal 32",
    "2": "Terminal 29",
    "3": "Terminal 27",
    "4": "Terminal 19",
    "5": "Terminal 18",
    "6": "Terminal 37 (Safe Torque Off, inverted: 0 = on)",
    "7": "MCB 101 terminal X30/4",
    "8": "MCB 101 terminal X30/3",
    "9": "MCB 101 terminal X30/2"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16619,
   "documented": "16620 (par. 16-62)",
   "name": "16-62 Analog Input 53",
   "description": "Actual value at terminal 53 (V or mA per terminal mode).",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16639,
   "documented": "16640 (par. 16-64)",
   "name": "16-64 Analog Input 54",
   "description": "Actual value at terminal 54 (V or mA per terminal mode).",
   "data_type": "INT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16649,
   "documented": "16650 (par. 16-65)",
   "name": "16-65 Analog Output 42 [mA]",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "mA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16899,
   "documented": "16900 (par. 16-90)",
   "name": "16-90 Alarm Word",
   "description": "Active alarms as bit flags (see programming guide).",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16909,
   "documented": "16910 (par. 16-91)",
   "name": "16-91 Alarm Word 2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16919,
   "documented": "16920 (par. 16-92)",
   "name": "16-92 Warning Word",
   "description": "Active warnings as bit flags.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16929,
   "documented": "16930 (par. 16-93)",
   "name": "16-93 Warning Word 2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16939,
   "documented": "16940 (par. 16-94)",
   "name": "16-94 Ext. Status Word",
   "description": "Extended status bit flags.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16949,
   "documented": "16950 (par. 16-95)",
   "name": "16-95 Ext. Status Word 2",
   "description": "",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "ABCD",
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 49999,
   "documented": "50000",
   "name": "Control word (CTW)",
   "description": "FC profile control word (8-10 = FC profile).",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": {
    "0": "Preset reference select LSB",
    "1": "Preset reference select MSB",
    "2": "0 = DC brake, 1 = ramp",
    "3": "0 = coast stop, 1 = no coasting",
    "4": "0 = quick stop, 1 = ramp",
    "5": "0 = hold (freeze) output frequency, 1 = use ramp",
    "6": "0 = ramp stop, 1 = start",
    "7": "Reset (on 0->1 edge)",
    "8": "1 = jog",
    "9": "0 = ramp 1, 1 = ramp 2",
    "10": "1 = data valid (0 = control word ignored)",
    "11": "1 = relay 01 active (if 5-40 set to CTW bit 11)",
    "12": "1 = relay active if 5-40 is set to CTW bit 12 (table says relay 02, text says relay 04)",
    "13": "Set-up select LSB",
    "14": "Set-up select MSB",
    "15": "1 = reverse"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 50009,
   "documented": "50010",
   "name": "Bus reference (REF)",
   "description": "Signed; 16384 (4000h) = 100% of 3-03 Maximum Reference.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 50199,
   "documented": "50200",
   "name": "Status word (STW)",
   "description": "FC profile status word.",
   "data_type": "BITMAP16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": {
    "0": "Control ready",
    "1": "Drive ready",
    "2": "1 = enable (0 = coasting)",
    "3": "Trip",
    "4": "Error (no trip)",
    "5": "Reserved",
    "6": "Triplock",
    "7": "Warning",
    "8": "Speed = reference",
    "9": "1 = bus control possible (0 = local operation)",
    "10": "Frequency within limits",
    "11": "In operation (running)",
    "12": "Stopped, auto start (inverter overtemperature)",
    "13": "Voltage limit exceeded",
    "14": "Torque/current limit exceeded",
    "15": "Thermal timer exceeded"
   },
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 50209,
   "documented": "50210",
   "name": "Main actual value (MAV)",
   "description": "Actual output; scaled like REF (4000h = 100%).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Set 8-30 to Modbus RTU and power-cycle, make sure 8-02 points at the FC port and the drive is not in local/Hand control, then write the control word to 50000 and the reference to 50010 and poll 50200/50210. Read readouts from the 16-xx registers at parameter number x 10 (minus 1 on the wire).",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 49999,
    "why": "CTW: start/stop/reset"
   },
   {
    "table": "holding_register",
    "address": 50009,
    "why": "REF: speed reference, 4000h = 100%"
   },
   {
    "table": "holding_register",
    "address": 50199,
    "why": "STW: ready/running/trip/warning"
   },
   {
    "table": "holding_register",
    "address": 16129,
    "why": "16-13 Frequency, 0.1 Hz"
   },
   {
    "table": "holding_register",
    "address": 16139,
    "why": "16-14 Motor current, 0.01 A"
   },
   {
    "table": "holding_register",
    "address": 16169,
    "why": "16-17 Speed, RPM"
   },
   {
    "table": "holding_register",
    "address": 16099,
    "why": "16-10 Power, 10 W steps (0.01 kW)"
   },
   {
    "table": "holding_register",
    "address": 16899,
    "why": "16-90 Alarm word"
   },
   {
    "table": "holding_register",
    "address": 15019,
    "why": "15-02 kWh counter"
   }
  ],
  "enable": "Set 8-30 Protocol = [2] Modbus RTU (effective only after the drive is powered off and on), 8-31 Address (1-247, default 1), 8-32 FC Port Baud Rate and 8-33 Parity/Stop Bits. 8-02 Control Word Source must be [1] FC RS485; 8-01 Control Site picks digital inputs and/or control word; 8-50, 8-53, 8-55 and 8-56 default to Logic OR, which decides how bus bits combine with terminals. STW bit 9 must read 1 (not local) and CTW bit 10 (data valid) must be 1 for the control word to act.",
  "watchdog": "8-03 Control Word Timeout Time (0.1-18000 s, 0.1 s units) and 8-04 Control Word Timeout Function (Off, Freeze output, Stop, Jogging, Max. speed, Stop and trip, set-up switching; Qstop and trip on software 48.xx; Trip with MCO 302). A valid control word restarts the timer. 8-05 End-of-Timeout Function (default Resume set-up) and 8-06 Reset Control Word Timeout handle recovery after a set-up-switching timeout.",
  "quirks": [
   "Parameter register = parameter number x 10, request address = that minus 1 (16-13 -> 16130 -> address 16129).",
   "32-bit values are high word first (ABCD).",
   "REF/MAV use 4000h = 100% of the 3-02..3-03 reference range, negative values in two's complement.",
   "CTW bit 10 must be 1 or the whole control word is ignored. Derived from the bit table (no ready-made words are printed): bits 2, 3, 4, 5, 6 and 10 set = 047Ch runs on the ramp; clearing bit 6 (043Ch) ramps to stop; bit 7 resets on its rising edge.",
   "Uint8 parameters still occupy a full 16-bit register."
  ],
  "setup": [
   "RS-485 on control-card terminals 68/69 (the built-in FC port); set the Modbus address 1-247 in 8-31 (default 1).",
   "8-33 defaults to even parity, 1 stop bit; baud is chosen in 8-32 (2400-115200).",
   "8-35 Minimum Response Delay (1-10000 ms, default 10 ms) can be raised for slow masters or RS-485 converters.",
   "Array parameters need the index written to holding register 9 before the read or write."
  ],
  "gotchas": [
   "Parameter writes go to RAM only unless coil 65 is set to 1; RAM-only changes are lost at power-down.",
   "If a fieldbus option is fitted in slot A the drive sets 8-02 to Option A at first power-up, and Modbus control words on the FC port are then ignored.",
   "Pressing [Stop/Reset] on the keypad or setting 3-13 Reference Site to Local blocks bus control (STW bit 9 = 0); a Local setting survives power-down.",
   "Torque readout 16-16 is only 16 bits on FC 301/302; use 16-25 for drives whose torque can exceed 3000 Nm."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/danfoss/fc-302",
 "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."
}
