{
 "manufacturer": "Danfoss",
 "manufacturer_slug": "danfoss",
 "model": "VLT AQUA Drive FC 202 (Modbus RTU)",
 "model_slug": "fc-202",
 "short_model": "FC 202",
 "aliases": [
  "VLT AQUA Drive",
  "FC202",
  "FC-202",
  "AQUA Drive FC 202"
 ],
 "equipment_type": "Variable frequency drive",
 "applies_to": "VLT AQUA Drive FC 202 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 5.4X programming guide.",
 "summary": "Danfoss's water and wastewater variable frequency drive, with a built-in RS-485 port that can speak Modbus RTU. The 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 that control block, the communication and comm-loss parameters, the main 15-xx/16-xx readouts, the process feedback and PID setpoint 1.",
 "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 (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 5.4X guide; Modbus mapping per Design Guide MG20N602 (09/2014)",
 "source": {
  "title": "Design Guide VLT AQUA Drive FC 202 0.25-90 kW (section 3.8 System Integration: Modbus RTU)",
  "doc_number": "MG20N602",
  "revision_date": "2014-09",
  "url": "https://assets.danfoss.com/documents/272866/AJ300847815559en-000006.pdf",
  "pages": "Design Guide printed pp. 83-90 (PDF 85-92): Modbus network setup (Table 3.33), coil/register addressing and coil tables (p. 85), holding register table 3.39 (p. 86), parameter access x10 rule, IND, coil 65 (p. 87), FC profile CTW (pp. 88-89), STW and REF/MAV scaling (pp. 89-90). Programming Guide software 5.4X (AU361182657213en-002101, 2024.06): 3-02/3-03 p. 123, 3-13 p. 126, 3-41/3-42 p. 131, 4-14/4-18 p. 138, 8-01..8-04 pp. 217-219, 8-10 pp. 221-222, 8-30..8-35 pp. 230-232, 15-00..15-05 pp. 385-386, 16-xx pp. 409-425, 20-21 p. 453."
 },
 "notes": [
  "Programming data source: VLT AQUA Drive FC 202 Programming Guide, software 5.4X, AU361182657213en-002101 (2024.06), https://assets.danfoss.com/documents/397954/AU361182657213en-002101.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 printed in the current guide; the older FC 202 Programming Guide MG20OB02 (software 3.30, AU361182657213en-002001, Table 4.1, printed p. 248, https://assets.danfoss.com/documents/274161/AU361182657213en-002001.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-10 Power [kW] has conversion index 1 and the 5.4X 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 = min-max the range runs from 3-02 (0%) to 3-03 (100%), with -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 switch/setting; the guide prints no unit for the readout.",
  "Left out: 16-05 Main Actual Value [%] and 16-15 Frequency [%] (normalised N2 type); 16-26 Power Filtered [kW] (index 0, base unit not stated; its description text in the guide is also wrong); 16-50 External Reference (no unit printed); 15-30..15-33 alarm log arrays (need IND); text parameters; option-card and cascade-controller 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 current FC 202 programming guide no longer documents 3-00 Reference Range; the REF scaling note above comes from the design guide."
 ],
 "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"
   },
   "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.10-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.10-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": 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 (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",
    "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",
    "9": "FC option",
    "23": "Modbus multi master"
   },
   "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": "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": "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": "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": 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": "Resulting 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": 16539,
   "documented": "16540 (par. 16-54)",
   "name": "16-54 Feedback 1 [Unit]",
   "description": "Feedback 1 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": 16549,
   "documented": "16550 (par. 16-55)",
   "name": "16-55 Feedback 2 [Unit]",
   "description": "Feedback 2 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, 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": 20209,
   "documented": "20210 (par. 20-21)",
   "name": "20-21 Setpoint 1",
   "description": "Closed-loop PID setpoint 1 in the process-control 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": 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": 16519,
    "why": "16-52 Process feedback"
   },
   {
    "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), 8-32 FC Port Baud Rate and 8-33 Parity/Stop Bits. 8-02 Control Word Source must be [1] FC port; 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 (1-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, Forced stop and trip, Warning only). 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 the control-card terminals of the built-in FC port; set the Modbus address 1-247 in 8-31.",
   "The design guide gives even parity, 1 stop bit as the Modbus default (8-33); baud is chosen in 8-32 (2400-115200).",
   "8-35 Minimum Response Delay (5-10000 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.",
   "8-30 also offers [23] Modbus multi master; it belongs to the drive-to-drive cascade master/follower pump setup (group 27-**, uses set-ups 1 and 2), so a BMS or PLC master should use [2] Modbus RTU."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/danfoss/fc-202",
 "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."
}
