{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Danfoss",
  "model": "VLT HVAC Drive FC 102",
  "models": [
    "FC 102"
  ],
  "vendor_website": "danfoss.com",
  "description": "VLT HVAC Drive FC 102 (1.1-90 kW) over the built-in RS485 port, Modbus RTU with the FC control profile",
  "revision": 1,
  "revised": "2026-10-18",
  "source": "Danfoss, \"VLT HVAC Drive FC 102 1.1-90 kW Design Guide\", MG11BC22 (06/2014); https://assets.danfoss.com/documents/272740/AJ299549559248en-US1801.pdf",
  "sources": [
    {
      "title": "VLT HVAC Drive FC 102 1.1-90 kW Design Guide",
      "version": "MG11BC22",
      "date": "2014-06",
      "url": "https://assets.danfoss.com/documents/272740/AJ299549559248en-US1801.pdf",
      "note": "chapter 8.6 to 8.11 (Modbus RTU, register map, FC profile)"
    }
  ],
  "notes": [
    "Holding register of parameter x-yy is 10 times its number: 3-12 is register 3120, 8-30 is register 8300. Array parameters need the index in register 9 first.",
    "Registers and coils are numbered from 1 in the guide, and the bus address is one less (register 50000 is sent as 49999), so this map uses address_base 1.",
    "Control word, bus reference, status word and main actual value sit at registers 50000, 50010, 50200 and 50210.",
    "This map lists the registers the design guide describes and a few parameters it uses as examples. The other parameters, their sizes and conversion indexes are in the FC 102 programming guide; a 32-bit parameter takes two registers.",
    "The guide also describes the control word and status word as coils (1 to 16 and 33 to 48); 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 2400 to 115200, 8-33 even parity with 1 stop bit by default.",
    "Function codes: 1, 3, 5, 6, 15 and 16, plus 11, 17 and the diagnostics function 8."
  ],
  "protocol": "rtu",
  "parity": "E",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "official",
  "registers": [
    {
      "name": "Last error code",
      "group": "Info",
      "area": "holding",
      "address": 7,
      "type": "uint16",
      "access": "R",
      "description": "Last error code from an FC data object interface"
    },
    {
      "name": "Parameter index",
      "group": "Info",
      "area": "holding",
      "address": 9,
      "type": "uint16",
      "access": "RW",
      "description": "Index used for the next access to an array parameter; 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 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-19)"
    },
    {
      "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 on, if 5-40 Function Relay selects control word bit 12. The text calls it relay 04 and the table relay 02"
    },
    {
      "name": "Control word - Set-up select",
      "group": "Control",
      "area": "holding",
      "address": 50000,
      "type": "uint16",
      "access": "RW",
      "bit": 13,
      "bits": 2,
      "enum": {
        "0": "Set-up 1",
        "1": "Set-up 2",
        "2": "Set-up 3",
        "3": "Set-up 4"
      },
      "description": "Needs Multi Set-ups (bits 13 and 14)"
    },
    {
      "name": "Control word - Reverse",
      "group": "Control",
      "area": "holding",
      "address": 50000,
      "type": "bool",
      "access": "RW",
      "bit": 15,
      "description": "1 = reverse"
    },
    {
      "name": "Bus reference",
      "group": "Control",
      "area": "holding",
      "address": 50010,
      "type": "int16",
      "access": "RW",
      "scale": 0.006103515625,
      "unit": "%",
      "write_min": -200,
      "write_max": 199.993896484375,
      "description": "Speed reference as a share of the maximum reference: 16384 (4000 hex) is 100 %, negative is reverse (two's complement)"
    },
    {
      "name": "Status word",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "uint16",
      "access": "R",
      "description": "FC profile status word"
    },
    {
      "name": "Status word - Control ready",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 0
    },
    {
      "name": "Status word - Drive ready",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 1
    },
    {
      "name": "Status word - Enabled (not coasting)",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 2,
      "description": "0 = coasting, 1 = enabled"
    },
    {
      "name": "Status word - Trip",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 3,
      "description": "1 = tripped; reset to resume"
    },
    {
      "name": "Status word - Error (no trip)",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 4
    },
    {
      "name": "Status word - Trip locked",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 6
    },
    {
      "name": "Status word - Warning",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 7
    },
    {
      "name": "Status word - Speed equals reference",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 8,
      "description": "1 = motor speed matches the reference"
    },
    {
      "name": "Status word - Bus control",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 9,
      "description": "1 = the drive can be controlled over the serial line, 0 = local operation"
    },
    {
      "name": "Status word - Frequency limit OK",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 10,
      "description": "0 = output frequency at the low or high speed limit"
    },
    {
      "name": "Status word - In operation",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 11
    },
    {
      "name": "Status word - Stopped, auto-start",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 12,
      "description": "1 = stopped for inverter over-temperature and resumes by itself"
    },
    {
      "name": "Status word - Voltage limit exceeded",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 13
    },
    {
      "name": "Status word - Torque limit exceeded",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 14
    },
    {
      "name": "Status word - Timer limit exceeded",
      "group": "Status",
      "area": "holding",
      "address": 50200,
      "type": "bool",
      "access": "R",
      "bit": 15
    },
    {
      "name": "Main actual value",
      "group": "Status",
      "area": "holding",
      "address": 50210,
      "type": "int16",
      "access": "R",
      "scale": 0.006103515625,
      "unit": "%",
      "description": "Actual output frequency in the same scale as the bus reference: 16384 (4000 hex) is 100 %"
    },
    {
      "name": "3-12 Catch up/slow-down value",
      "group": "Parameters",
      "area": "holding",
      "address": 3120,
      "type": "uint16",
      "access": "RW",
      "scale": 0.01,
      "unit": "%",
      "description": "Parameter 3-12; the manual's example: 1352 is 12.52 %"
    },
    {
      "name": "4-14 Motor speed high limit [Hz]",
      "group": "Parameters",
      "area": "holding",
      "address": 4140,
      "type": "uint16",
      "access": "RW",
      "scale": 0.1,
      "unit": "Hz",
      "description": "Parameter 4-14; the manual's write example sends 1000 for 100 Hz"
    },
    {
      "name": "8-30 Protocol",
      "group": "Serial",
      "area": "holding",
      "address": 8300,
      "type": "uint16",
      "access": "RW",
      "description": "Set to Modbus RTU to use this map"
    },
    {
      "name": "8-31 Address",
      "group": "Serial",
      "area": "holding",
      "address": 8310,
      "type": "uint16",
      "access": "RW",
      "write_min": 1,
      "write_max": 247
    },
    {
      "name": "8-32 Baud rate",
      "group": "Serial",
      "area": "holding",
      "address": 8320,
      "type": "uint16",
      "access": "RW",
      "description": "2400 to 115200 baud, coded as in the programming guide"
    },
    {
      "name": "8-33 Parity / stop bits",
      "group": "Serial",
      "area": "holding",
      "address": 8330,
      "type": "uint16",
      "access": "RW",
      "description": "Default: even parity, 1 stop bit; coded as in the programming guide"
    },
    {
      "name": "Parameter write control",
      "group": "Control",
      "area": "coil",
      "address": 65,
      "type": "bool",
      "access": "RW",
      "description": "0 = parameter changes go to RAM only, 1 = to RAM and EEPROM"
    }
  ]
}
