{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Danfoss",
  "model": "VLT Micro Drive FC 51",
  "models": ["FC 51"],
  "vendor_website": "danfoss.com",
  "description": "VLT Micro Drive FC 51 over the built-in RS485 port, Modbus RTU with the FC control profile",
  "revision": 1,
  "revised": "2026-11-10",
  "source": "Danfoss, \"VLT Micro Drive FC 51 Design Guide\", MG02K402 (01/2016) and \"VLT Micro Drive FC 51 Programming Guide\", MG02C602 (software 2.7X)",
  "sources": [{"title": "VLT Micro Drive FC 51 Design Guide", "version": "MG02K402", "date": "2016-01", "url": "https://assets.danfoss.com/documents/273509/AJ361178983102en-000401.pdf", "note": "linked in issue #187; chapter 8.6 to 8.11 (Modbus RTU, register addressing, FC profile)"}, {"title": "VLT Micro Drive FC 51 Programming Guide", "version": "MG02C602", "url": "https://assets.danfoss.com/documents/273445/AU361182403098en-000301.pdf", "note": "linked in issue #187; chapter 5 parameter lists (data type and conversion index)"}],
  "notes": ["Holding register of parameter x-yy is 10 times its number: 3-41 is register 3410, 16-14 is register 16140, 8-30 is register 8300. The guide counts registers from 1 and the bus address is one less, so this map uses address_base 1.", "Control word, bus reference, status word and main actual value are registers 50000, 50010, 50200 and 50210. From software 2.32 they are also at 2810, 2811, 2910 and 2911.", "Array parameters (3-10, 15-30) need the index in register 9 first. A 32-bit parameter uses two registers, high word first. One-byte parameters are read and written as one register.", "Coil 65 chooses whether written parameters go to RAM only (0) or to RAM and EEPROM (1). Coils 1 to 64 repeat the control word, reference, status word and output frequency; they are not in this map, use the registers instead.", "To enable Modbus: 8-30 Protocol = Modbus RTU, 8-31 Address 1 to 247, 8-32 baud rate, 8-33 parity. The guide gives even parity with 1 stop bit as the default; the Programming Guide lists 19200 baud as the Modbus default.", "The guide's text for 8-32 allows up to 115200 baud, while the Programming Guide for software 2.7X lists 2400 to 38400. Only the Programming Guide values are in the table.", "The Design Guide is for software 3.1X and the Programming Guide for 2.7X; conversion indexes are taken from the latter. Some Programming Guide parameters (motor power 1-20, text parameters such as 15-43 and 15-51) are not listed, as no size or scaling is given.", "Function codes: 1, 3, 5, 6, 15 and 16, plus 11, 17 and the diagnostics function 8.", "Written from the manufacturer's documents; not tested on a device."],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 19200,
  "parity": "E",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "official",
  "enums": {
    "protocol": {"0": "FC", "2": "Modbus RTU"},
    "baud_rate": {"0": "2400", "1": "4800", "2": "9600", "3": "19200", "4": "38400"},
    "parity": {"0": "Even, 1 stop bit", "1": "Odd, 1 stop bit", "2": "None, 1 stop bit", "3": "None, 2 stop bits"},
    "control_site": {"0": "Digital and control word", "1": "Digital only", "2": "Control word only"},
    "control_source": {"0": "None", "1": "FC RS-485"},
    "timeout_function": {"0": "Off", "1": "Freeze output", "2": "Stop", "3": "Jogging", "4": "Max. speed", "5": "Stop and trip"}
  },
  "registers": [
    {"name": "Last fault code", "group": "Info", "area": "holding", "address": 7, "type": "uint16", "description": "Fault code last returned by the parameter database"},
    {"name": "Last error register", "group": "Info", "area": "holding", "address": 8, "type": "uint16", "description": "Address of the register that caused the last error"},
    {"name": "Parameter index", "group": "Info", "area": "holding", "address": 9, "type": "uint16", "access": "RW", "description": "Index used for the next access to an array parameter (for example 3-10 or 15-30); set it before reading or writing one"},
    {"name": "Control word", "group": "Control", "area": "holding", "address": 50000, "type": "uint16", "access": "RW", "description": "FC profile control word (8-10 Control Word Profile = FC profile)"},
    {"name": "Control word - Preset reference select", "group": "Control", "area": "holding", "address": 50000, "type": "uint16", "access": "RW", "bit": 0, "bits": 2, "enum": {"0": "Preset reference 1", "1": "Preset reference 2", "2": "Preset reference 3", "3": "Preset reference 4"}, "description": "Chooses one of the four values of 3-10 Preset Reference (bits 0 and 1)"},
    {"name": "Control word - DC brake", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 2, "description": "0 = DC brake and stop, 1 = ramp"},
    {"name": "Control word - Coasting", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 3, "description": "0 = coast to a stop, 1 = no coasting"},
    {"name": "Control word - Quick stop", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 4, "description": "0 = quick stop, 1 = ramp"},
    {"name": "Control word - Hold output frequency", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 5, "description": "0 = hold the present output frequency, 1 = use the ramp"},
    {"name": "Control word - Start", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 6, "description": "0 = ramp stop, 1 = start"},
    {"name": "Control word - Reset", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 7, "description": "Reset a trip on the rising edge"},
    {"name": "Control word - Jog", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 8, "description": "1 = run at the jog speed (3-11)"},
    {"name": "Control word - Ramp 2", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 9, "description": "0 = ramp 1, 1 = ramp 2"},
    {"name": "Control word - Data valid", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 10, "description": "1 = the drive uses the control word, 0 = it ignores it"},
    {"name": "Control word - Relay 01", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 11, "description": "1 = relay 01 on, if 5-40 Function Relay selects control word bit 11"},
    {"name": "Control word - Relay 02", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 12, "description": "1 = relay 02 on, if 5-40 Function Relay selects control word bit 12"},
    {"name": "Control word - Set-up select", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 13, "description": "0 = set-up 1, 1 = set-up 2 (only with 0-10 Active Set-up = Multi set-up)"},
    {"name": "Control word - Reverse", "group": "Control", "area": "holding", "address": 50000, "type": "bool", "access": "RW", "bit": 15, "description": "1 = reverse (acts only if 8-54 Reversing Select allows the bus)"},
    {"name": "Bus reference", "group": "Control", "area": "holding", "address": 50010, "type": "int16", "access": "RW", "scale": 0.006103515625, "unit": "%", "description": "Speed reference in percent of the maximum reference (3-03): 16384 (4000 hex) = 100%, negative values in two's complement. Scale is 100/16384"},
    {"name": "Status word", "group": "Status", "area": "holding", "address": 50200, "type": "uint16", "description": "FC profile status word"},
    {"name": "Status word - Control ready", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 0, "description": "0 = control not ready, 1 = control ready"},
    {"name": "Status word - Drive ready", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 1, "description": "0 = not ready, 1 = ready for operation"},
    {"name": "Status word - Enabled", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 2, "description": "0 = coasting, 1 = enabled"},
    {"name": "Status word - Trip", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 3, "description": "1 = the drive has tripped"},
    {"name": "Status word - Error", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 4, "description": "1 = error without a trip"},
    {"name": "Status word - Trip lock", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 6, "description": "1 = tripped and locked"},
    {"name": "Status word - Warning", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 7, "description": "1 = a warning is active"},
    {"name": "Status word - Speed at reference", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 8, "description": "0 = speed differs from the reference, 1 = speed matches the reference"},
    {"name": "Status word - Bus control", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 9, "description": "0 = local operation, 1 = the drive can be controlled over the bus"},
    {"name": "Status word - Frequency within limits", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 10, "description": "0 = output frequency at a speed limit (4-12 or 4-14), 1 = within limits"},
    {"name": "Status word - Running", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 11, "description": "0 = motor not running, 1 = in operation"},
    {"name": "Status word - Stopped by overtemperature (auto start)", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 12, "description": "1 = stopped for temporary overtemperature, resumes by itself"},
    {"name": "Status word - DC link voltage warning", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 13, "description": "1 = DC link voltage too low or too high"},
    {"name": "Status word - Current limit exceeded", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 14, "description": "1 = the current limit is exceeded"},
    {"name": "Status word - Timer exceeded", "group": "Status", "area": "holding", "address": 50200, "type": "bool", "bit": 15, "description": "1 = a motor or drive thermal timer has passed 100%"},
    {"name": "Main actual value", "group": "Status", "area": "holding", "address": 50210, "type": "int16", "scale": 0.006103515625, "unit": "%", "description": "Actual output frequency, scaled like the bus reference: 16384 (4000 hex) = 100%. Scale is 100/16384"},
    {"name": "Control word (low area)", "group": "Control", "area": "holding", "address": 2810, "type": "uint16", "access": "RW", "description": "Same control word as register 50000, in the lower register area (software 2.32 and later)"},
    {"name": "Bus reference (low area)", "group": "Control", "area": "holding", "address": 2811, "type": "int16", "access": "RW", "scale": 0.006103515625, "unit": "%", "description": "Same bus reference as register 50010 (16384 = 100%), lower register area (software 2.32 and later)"},
    {"name": "Status word (low area)", "group": "Status", "area": "holding", "address": 2910, "type": "uint16", "description": "Same status word as register 50200, lower register area (software 2.32 and later)"},
    {"name": "Main actual value (low area)", "group": "Status", "area": "holding", "address": 2911, "type": "int16", "scale": 0.006103515625, "unit": "%", "description": "Same main actual value as register 50210 (16384 = 100%), lower register area (software 2.32 and later)"},
    {"name": "16-01 Reference [Unit]", "group": "Measurements", "area": "holding", "address": 16010, "type": "int32", "scale": 0.001, "description": "Present reference in the unit of the configuration (Hz in open loop)"},
    {"name": "16-02 Reference %", "group": "Measurements", "area": "holding", "address": 16020, "type": "int16", "scale": 0.1, "unit": "%"},
    {"name": "16-05 Main Actual Value [%]", "group": "Measurements", "area": "holding", "address": 16050, "type": "int16", "scale": 0.01, "unit": "%"},
    {"name": "16-10 Power [kW]", "group": "Measurements", "area": "holding", "address": 16100, "type": "uint16", "scale": 0.001, "unit": "kW"},
    {"name": "16-11 Power [hp]", "group": "Measurements", "area": "holding", "address": 16110, "type": "uint16", "scale": 0.001, "unit": "hp"},
    {"name": "16-12 Motor Voltage", "group": "Measurements", "area": "holding", "address": 16120, "type": "uint16", "unit": "V"},
    {"name": "16-13 Frequency", "group": "Measurements", "area": "holding", "address": 16130, "type": "uint16", "scale": 0.1, "unit": "Hz"},
    {"name": "16-14 Motor Current", "group": "Measurements", "area": "holding", "address": 16140, "type": "uint16", "scale": 0.01, "unit": "A"},
    {"name": "16-15 Frequency [%]", "group": "Measurements", "area": "holding", "address": 16150, "type": "uint16", "scale": 0.1, "unit": "%"},
    {"name": "16-18 Motor Thermal", "group": "Measurements", "area": "holding", "address": 16180, "type": "uint16", "unit": "%", "description": "Calculated thermal load of the motor; 100% is the cutout limit. The parameter is one byte, read as a register"},
    {"name": "16-30 DC Link Voltage", "group": "Measurements", "area": "holding", "address": 16300, "type": "uint16", "unit": "V"},
    {"name": "16-34 Heatsink Temp.", "group": "Measurements", "area": "holding", "address": 16340, "type": "uint16", "unit": "°C", "description": "One-byte parameter, read as a register"},
    {"name": "16-35 Inverter Thermal", "group": "Measurements", "area": "holding", "address": 16350, "type": "uint16", "unit": "%", "description": "One-byte parameter, read as a register"},
    {"name": "16-36 Inv. Nom. Current", "group": "Measurements", "area": "holding", "address": 16360, "type": "uint16", "scale": 0.01, "unit": "A"},
    {"name": "16-37 Inv. Max. Current", "group": "Measurements", "area": "holding", "address": 16370, "type": "uint16", "scale": 0.01, "unit": "A"},
    {"name": "16-60 Digital input 18,19,27,33", "group": "Inputs and outputs", "area": "holding", "address": 16600, "type": "uint16", "description": "Bit pattern of the digital inputs"},
    {"name": "16-62 Analog Input 53 (V)", "group": "Inputs and outputs", "area": "holding", "address": 16620, "type": "uint16", "scale": 0.01, "unit": "V"},
    {"name": "16-63 Analog Input 53 (mA)", "group": "Inputs and outputs", "area": "holding", "address": 16630, "type": "uint16", "scale": 0.01, "unit": "mA"},
    {"name": "16-64 Analog Input 60", "group": "Inputs and outputs", "area": "holding", "address": 16640, "type": "uint16", "scale": 0.01, "unit": "mA"},
    {"name": "16-65 Analog Output 42 [mA]", "group": "Inputs and outputs", "area": "holding", "address": 16650, "type": "uint16", "scale": 0.01, "unit": "mA"},
    {"name": "16-71 Relay Output [bin]", "group": "Inputs and outputs", "area": "holding", "address": 16710, "type": "uint16", "description": "Bit pattern of the relay outputs; one-byte parameter, read as a register"},
    {"name": "16-90 Alarm Word", "group": "Alarms", "area": "holding", "address": 16900, "type": "uint32", "description": "Alarm word as a bit pattern (bits are in the Programming Guide)"},
    {"name": "16-92 Warning Word", "group": "Alarms", "area": "holding", "address": 16920, "type": "uint32", "description": "Warning word as a bit pattern (bits are in the Programming Guide)"},
    {"name": "16-94 Ext. Status Word", "group": "Alarms", "area": "holding", "address": 16940, "type": "uint32"},
    {"name": "15-00 Operating Time", "group": "Info", "area": "holding", "address": 15000, "type": "uint32", "unit": "days", "description": "Days the drive has been powered up"},
    {"name": "15-01 Running Hours", "group": "Info", "area": "holding", "address": 15010, "type": "uint32", "unit": "h"},
    {"name": "15-02 kWh Counter", "group": "Info", "area": "holding", "address": 15020, "type": "uint32", "unit": "kWh"},
    {"name": "15-03 Power Up's", "group": "Info", "area": "holding", "address": 15030, "type": "uint32"},
    {"name": "15-04 Over Temp's", "group": "Info", "area": "holding", "address": 15040, "type": "uint16"},
    {"name": "15-05 Over Volt's", "group": "Info", "area": "holding", "address": 15050, "type": "uint16"},
    {"name": "15-30 Fault Log: Error Code", "group": "Info", "area": "holding", "address": 15300, "type": "uint16", "description": "Array of the last trips; set the index in register 9 first (one-byte parameter, read as a register)"},
    {"name": "1-22 Motor Voltage", "group": "Motor", "area": "holding", "address": 1220, "type": "uint16", "access": "RW", "unit": "V"},
    {"name": "1-23 Motor Frequency", "group": "Motor", "area": "holding", "address": 1230, "type": "uint16", "access": "RW", "unit": "Hz"},
    {"name": "1-24 Motor Current", "group": "Motor", "area": "holding", "address": 1240, "type": "uint16", "access": "RW", "scale": 0.01, "unit": "A"},
    {"name": "1-25 Motor Nominal Speed", "group": "Motor", "area": "holding", "address": 1250, "type": "uint16", "access": "RW", "unit": "RPM"},
    {"name": "3-02 Minimum Reference", "group": "Reference and ramps", "area": "holding", "address": 3020, "type": "int32", "access": "RW", "scale": 0.001},
    {"name": "3-03 Maximum Reference", "group": "Reference and ramps", "area": "holding", "address": 3030, "type": "int32", "access": "RW", "scale": 0.001},
    {"name": "3-10 Preset Reference", "group": "Reference and ramps", "area": "holding", "address": 3100, "type": "int16", "access": "RW", "scale": 0.01, "unit": "%", "description": "Array of 8 values; set the index in register 9 first"},
    {"name": "3-11 Jog Speed [Hz]", "group": "Reference and ramps", "area": "holding", "address": 3110, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "Hz"},
    {"name": "3-41 Ramp 1 Ramp up Time", "group": "Reference and ramps", "area": "holding", "address": 3410, "type": "uint32", "access": "RW", "scale": 0.01, "unit": "s"},
    {"name": "3-42 Ramp 1 Ramp Down Time", "group": "Reference and ramps", "area": "holding", "address": 3420, "type": "uint32", "access": "RW", "scale": 0.01, "unit": "s"},
    {"name": "3-51 Ramp 2 Ramp up Time", "group": "Reference and ramps", "area": "holding", "address": 3510, "type": "uint32", "access": "RW", "scale": 0.01, "unit": "s"},
    {"name": "3-52 Ramp 2 Ramp down Time", "group": "Reference and ramps", "area": "holding", "address": 3520, "type": "uint32", "access": "RW", "scale": 0.01, "unit": "s"},
    {"name": "4-12 Motor Speed Low Limit [Hz]", "group": "Limits", "area": "holding", "address": 4120, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "Hz"},
    {"name": "4-14 Motor Speed High Limit [Hz]", "group": "Limits", "area": "holding", "address": 4140, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "Hz"},
    {"name": "4-16 Torque Limit Motor Mode", "group": "Limits", "area": "holding", "address": 4160, "type": "uint16", "access": "RW", "unit": "%"},
    {"name": "4-17 Torque Limit Generator Mode", "group": "Limits", "area": "holding", "address": 4170, "type": "uint16", "access": "RW", "unit": "%"},
    {"name": "8-01 Control Site", "group": "Communication", "area": "holding", "address": 8010, "type": "uint16", "access": "RW", "enum": "control_site", "description": "One-byte parameter, written as a register"},
    {"name": "8-02 Control Word Source", "group": "Communication", "area": "holding", "address": 8020, "type": "uint16", "access": "RW", "enum": "control_source"},
    {"name": "8-03 Control Word Timeout Time", "group": "Communication", "area": "holding", "address": 8030, "type": "uint16", "access": "RW", "scale": 0.1, "unit": "s"},
    {"name": "8-04 Control Word Timeout Function", "group": "Communication", "area": "holding", "address": 8040, "type": "uint16", "access": "RW", "enum": "timeout_function"},
    {"name": "8-30 Protocol", "group": "Communication", "area": "holding", "address": 8300, "type": "uint16", "access": "RW", "enum": "protocol", "description": "Takes effect after the drive is powered off and on"},
    {"name": "8-31 Address", "group": "Communication", "area": "holding", "address": 8310, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247},
    {"name": "8-32 FC Port Baud Rate", "group": "Communication", "area": "holding", "address": 8320, "type": "uint16", "access": "RW", "enum": "baud_rate"},
    {"name": "8-33 FC Port Parity", "group": "Communication", "area": "holding", "address": 8330, "type": "uint16", "access": "RW", "enum": "parity"}
  ]
}
