{
 "manufacturer": "Danfoss",
 "manufacturer_slug": "danfoss",
 "model": "VLT HVAC Drive FC 102 (Modbus RTU)",
 "model_slug": "fc-102",
 "short_model": "FC 102",
 "aliases": [
  "VLT HVAC Drive",
  "FC102",
  "FC-102"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "VLT HVAC Drive FC 102 using the built-in RS-485 (FC) port with 8-30 Protocol = Modbus RTU and the FC control profile; parameter scaling checked against the software 7.61 programming guide.",
 "summary": "Danfoss's HVAC variable frequency drive with a built-in RS-485 port that can run Modbus RTU. Control word, bus reference, status word and main actual value sit at fixed holding registers 50000-50210, and every drive 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 whose conversion index is published.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": "Even",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "parameter-derived",
  "note": "Registers are printed 1-based. 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 (3-03 is read at address 3029 = 0x0BD5, per the manual's own example). The fixed process registers CTW 50000, REF 50010, STW 50200 and MAV 50210 follow the same minus-1 rule (CTW = address 49999). Coils are also numbered from 1 (coil 65 = address 64)."
 },
 "default_word_order": "ABCD",
 "firmware": "Programming data per software 7.61 guide; Modbus mapping per Design Guide MG11BC02 (software 3.9x)",
 "source": {
  "title": "VLT HVAC Drive FC 102 Design Guide 1.1-90 kW (chapter 8 RS485 Installation and Set-up, Modbus RTU)",
  "doc_number": "MG11BC02",
  "revision_date": "2014-06",
  "url": "https://assets.danfoss.com/documents/272734/AJ299549559248en-001801.pdf",
  "pages": "Design Guide PDF pp. 138-146 (printed pp. 136-146): Modbus setup, coil/holding register tables (printed p. 139), parameter access and examples (pp. 140-144), FC profile CTW/STW and reference scaling (pp. 144-146). Programming Guide 7.61 (AU430028034214en-001901): group 8 printed pp. 221-235, conversion-index blocks for 15-xx/16-xx in chapter 6; cross-checked with the 4.x programming guide parameter lists (MG11CE02, pp. 223-240)."
 },
 "notes": [
  "Scaling comes from each parameter's conversion index in the programming guide: -1 = x0.1, -2 = x0.01, -3 = x0.001, 0 = x1, 1 = x10. The 4.x guide's conversion table gives indices 67, 74, 75 and 100 the factors 1/60, 3600, 3600000 and 1 relative to SI units, so the transferred integer is already in RPM, hours, kWh and degC respectively (scale 1).",
  "3-02/3-03 conversion index -3 is printed in the 7.61 guide and agrees with the design guide example (0016E360h = 1500000 = 1500.000 RPM). Programming data source: VLT HVAC Drive FC 102 Programming Guide, software 7.61, AU430028034214en-001901 (2024.10), https://assets.danfoss.com/documents/435027/AU430028034214en-001901.pdf.",
  "32-bit parameters occupy two registers, high word first: the manual's example reads 3-03 at registers 3030/3031 and returns 0016E360h = 1500000 = 1500.000 RPM.",
  "8-bit parameters (Uint8) are read and written as one 16-bit register.",
  "REF and MAV are signed 16-bit values where 16384 (4000h) = 100%; with 3-00 = min-max the range runs from 3-02 (0%) to 3-03 (100%), with -max..+max it runs from -3-03 to +3-03.",
  "Left out: 16-26 Power Filtered [kW] (conversion index 0 on a kW parameter; the 7.61 guide gives W as the base unit for 16-10, so 16-26's raw unit could be W or kW and is not stated), 16-23 Motor Shaft Power (index 1 with no stated base unit); 16-05 Main Actual Value [%] and 16-15 Frequency [%] (normalised N2 type); 15-30..15-33 alarm log arrays (need the IND pointer in register 9); text parameters. 16-10 Power [kW] is included because the 7.61 guide states its fieldbus value is in 10 W steps (index 1, base unit W).",
  "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 bit by bit; only coil 65 (parameter write control) is listed separately.",
  "The design guide's 3-14 example prints registers 3410/3411; by the x10 rule 3-14 is 3140/3141, so treat that example as a typo.",
  "FC 202 / FC 302 use the same scheme but have their own programming guides; this file only claims FC 102."
 ],
 "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": 3409,
   "documented": "3410 (par. 3-41)",
   "name": "3-41 Ramp 1 Ramp Up Time",
   "description": "",
   "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": "",
   "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": 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 port",
    "2": "USB port",
    "3": "Option A",
    "4": "Option B",
    "5": "Option C0",
    "6": "Option C1",
    "30": "External can"
   },
   "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.5-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",
    "7": "Select setup 1",
    "8": "Select setup 2",
    "9": "Select setup 3",
    "10": "Select setup 4",
    "20": "N2 Override release",
    "27": "Forced stop and trip",
    "30": "Warning 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",
    "5": "ODVA",
    "7": "CANopen DSP 402",
    "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",
    "3": "Metasys N2",
    "4": "FLN",
    "5": "BACnet",
    "9": "FC option",
    "20": "LEN"
   },
   "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 (5-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": "Energy consumed by the drive.",
   "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 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": 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": "",
   "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": 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": 16219,
   "documented": "16220 (par. 16-22)",
   "name": "16-22 Torque [%]",
   "description": "",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "%",
   "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 process-control 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": 16599,
   "documented": "16600 (par. 16-60)",
   "name": "16-60 Digital Input",
   "description": "Digital input states as a binary value.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "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": 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 powering the drive off and on), 8-31 Address, 8-32 FC Port Baud Rate and 8-33 Parity/Stop Bits. Control word source 8-02 must be [1] FC port; 8-01 Control Site chooses digital and/or control word; 8-50..8-56 decide how bus bits combine with digital inputs (8-50, 8-55 and 8-56 default to Logic OR). STW bit 9 must read 1 (not in local operation) for bus control, and CTW bit 10 (data valid) must be 1.",
  "watchdog": "8-03 Control Word Timeout Time (0.5-18000 s, 0.1 s units) and 8-04 Control Word Timeout Function (default Off; options include Freeze output, Stop, Jogging, Max. speed, Stop and trip, set-up switching, Warning only). A valid control word restarts the timer. 8-05 decides what happens after communication returns from a set-up-switching timeout, and 8-06 resets that timeout when 8-05 = Hold set-up.",
  "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 (these words are not printed in the manual): 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 the control terminals of the built-in FC port; set address 1-247 for Modbus RTU in 8-31.",
   "Parity default is even with 1 stop bit (8-33); baud is chosen in 8-32 (2400-115200).",
   "8-35 Minimum Response Delay can be raised for slow masters or 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 changes are lost at power-down.",
   "If 8-02 was changed to an option slot (e.g. after a fieldbus option was fitted), Modbus control words on the FC port are ignored.",
   "Pressing [Stop/Reset] on the keypad or selecting local in 3-13 Reference Site blocks bus control (STW bit 9 = 0)."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/danfoss/fc-102",
 "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."
}
