{
  "spec_version": 1,
  "slug": "abb-acs580",
  "manufacturer": "ABB",
  "model": "ACS580 with FMBT-21 Modbus/TCP adapter",
  "category": "VFD",
  "supplier_url": "https://www.abb.com/global/en/areas/motion/drives/connectivity/fieldbus/modbus-tcp/fmbt-21",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Control word (ABB Drives profile)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "ABB Drives control word: bit 0 = OFF1, bit 1 = OFF2, bit 2 = OFF3, bit 3 = enable operation, bits 4-6 = ramp in/out/hold, bits 8-11 = request. 0x047F (1151) runs in speed mode, 0x047E (1150) means ready to switch on."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Reference 1 (REF1)",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Reference 1. In speed control the value is scaled by 46.01 Speed scaling; the reference chain selects whether it acts as speed or frequency reference."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Reference 2 (REF2)",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Reference 2 (torque, PID or process reference, depending on the reference chain configuration)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "DATA OUT 1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "First 16-bit value written to the parameter selected by 52.01 FBA A data in 1."
    },
    {
      "address": 4,
      "count": 1,
      "name": "DATA OUT 2",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "First 16-bit value written to the parameter selected by 52.02 FBA A data in 2."
    },
    {
      "address": 5,
      "count": 1,
      "name": "DATA OUT 3",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "First 16-bit value written to the parameter selected by 52.03 FBA A data in 3."
    },
    {
      "address": 50,
      "count": 1,
      "name": "Status word (ABB Drives profile)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ABB Drives status word: bit 0 = ready to switch on, bit 1 = ready to operate, bit 2 = operation enabled, bit 3 = fault, bits 4-5 = OFF2/OFF3 active, bit 8 = at setpoint, bit 9 = remote control."
    },
    {
      "address": 51,
      "count": 1,
      "name": "Actual value 1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Value of the parameter selected by 53.01 FBA A data out 1 (default 01.01 Motor speed used, scaled by 46.01)."
    },
    {
      "address": 52,
      "count": 1,
      "name": "Actual value 2",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Value of the parameter selected by 53.02 FBA A data out 2."
    },
    {
      "address": 53,
      "count": 1,
      "name": "DATA IN 1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "First 16-bit value read from the parameter selected by 53.01 FBA A data out 1."
    },
    {
      "address": 54,
      "count": 1,
      "name": "DATA IN 2",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "First 16-bit value read from the parameter selected by 53.02 FBA A data out 2."
    },
    {
      "address": 55,
      "count": 1,
      "name": "DATA IN 3",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "First 16-bit value read from the parameter selected by 53.03 FBA A data out 3."
    },
    {
      "address": 3000,
      "count": 1,
      "name": "Limit word 1 (30.01)",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-coded drive limit indications: bit 0 = torque limited, bit 5 = limited by 30.12 Maximum speed, bit 6 = limited by 30.11 Minimum speed, bit 7 = maximum current limit, bit 8 = DC overvoltage limit, bit 9 = DC undervoltage limit."
    },
    {
      "address": 3010,
      "count": 1,
      "name": "Minimum speed (30.11)",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Minimum allowed speed. Writable setting; the drive limits apply after the write."
    },
    {
      "address": 3011,
      "count": 1,
      "name": "Maximum speed (30.12)",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum allowed speed. Default 1500 rpm for 4-pole 50 Hz motors."
    },
    {
      "address": 3012,
      "count": 1,
      "name": "Minimum frequency (30.13)",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Minimum allowed output frequency; -50.00 Hz by default. Scaling follows 46.02 (10 = 1 Hz)."
    },
    {
      "address": 3013,
      "count": 1,
      "name": "Maximum frequency (30.14)",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum allowed output frequency; 50.00 Hz by default. Scaling follows 46.02 (10 = 1 Hz)."
    },
    {
      "address": 2210,
      "count": 1,
      "name": "Ext1 speed reference (22.11)",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Constant speed reference value for external control location 1, used when the reference source is set to 22.11."
    },
    {
      "address": 2810,
      "count": 1,
      "name": "Ext1 frequency reference (28.11)",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Constant frequency reference value for external control location 1; scaling follows 46.02 (10 = 1 Hz)."
    },
    {
      "address": 4600,
      "count": 1,
      "name": "Speed scaling (46.01)",
      "data_type": "Int16",
      "units": "rpm",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Speed that corresponds to 20000 in 16-bit fieldbus communication. Also defines the scaling of speed-related parameters."
    },
    {
      "address": 4601,
      "count": 1,
      "name": "Frequency scaling (46.02)",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Frequency that corresponds to 20000 in 16-bit fieldbus communication; 10 = 1 Hz, so 50.00 Hz is sent as 500."
    },
    {
      "address": 4602,
      "count": 1,
      "name": "Torque scaling (46.03)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Torque (in percent of nominal motor torque) that corresponds to 10000 in fieldbus communication."
    },
    {
      "address": 4603,
      "count": 1,
      "name": "Power scaling (46.04)",
      "data_type": "UInt16",
      "units": "kW",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Power that corresponds to 10000 in fieldbus communication; 1 = 1 kW (or hp, per 96.16 Unit selection)."
    },
    {
      "address": 4604,
      "count": 1,
      "name": "Current scaling (46.05)",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Current that corresponds to 10000 in fieldbus communication; 1 = 1 A."
    },
    {
      "address": 5000,
      "count": 1,
      "name": "FBA A enable (50.01)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Enables communication between the drive and the FMBT-21 adapter; 1 = enabled."
    },
    {
      "address": 5100,
      "count": 1,
      "name": "FBA A type (51.01)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Shows the detected fieldbus adapter type; Modbus/TCP for an FMBT-21."
    },
    {
      "address": 5101,
      "count": 1,
      "name": "Protocol/profile (51.02)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Selects the application protocol and the communication profile. Default 1 = Modbus/TCP with the ABB Drives - Enhanced profile; this map describes the register layout of that profile."
    },
    {
      "address": 5103,
      "count": 1,
      "name": "IP configuration (51.04)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = Static IP (address from 51.05-51.13), 1 = Dynamic IP via DHCP."
    },
    {
      "address": 5102,
      "count": 1,
      "name": "Comm rate (51.03)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Ethernet communication rate; 0 = Auto (negotiated)."
    },
    {
      "address": 5104,
      "count": 1,
      "name": "IP address octet 1 (51.05)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "First octet of the adapter's static IP address (192 by default)."
    },
    {
      "address": 5105,
      "count": 1,
      "name": "IP address octet 2 (51.06)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Second octet of the adapter's static IP address (168 by default)."
    },
    {
      "address": 5106,
      "count": 1,
      "name": "IP address octet 3 (51.07)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Third octet of the adapter's static IP address (0 by default)."
    },
    {
      "address": 5107,
      "count": 1,
      "name": "IP address octet 4 (51.08)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Fourth octet of the adapter's static IP address (16 by default, i.e. 192.168.0.16)."
    },
    {
      "address": 5108,
      "count": 1,
      "name": "Subnet CIDR (51.09)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Subnet mask expressed as CIDR prefix length; 24 by default."
    },
    {
      "address": 5119,
      "count": 1,
      "name": "Timeout time (51.20)",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 100,
      "offset": 0,
      "access": "RW",
      "description": "Fieldbus communication supervision time as a multiple of 100 ms (default 10 = 1.0 s); 0 disables supervision."
    },
    {
      "address": 5120,
      "count": 1,
      "name": "Timeout mode (51.21)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Function on communication timeout: 0 = None (timeout disabled), 1 = Any message, 2 = Control RW (default: a new control word or reference resets the counter)."
    },
    {
      "address": 5126,
      "count": 1,
      "name": "FBA A par refresh (51.27)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Write 1 to validate changes made to the adapter parameter groups 51, 52 and 53."
    },
    {
      "address": 5200,
      "count": 1,
      "name": "FBA A data in 1 (52.01)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter written by DATA OUT 1; 01.14 Output power by default in the start-up example."
    },
    {
      "address": 5201,
      "count": 1,
      "name": "FBA A data in 2 (52.02)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter written by DATA OUT 2."
    },
    {
      "address": 5202,
      "count": 1,
      "name": "FBA A data in 3 (52.03)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter written by DATA OUT 3; 01.11 DC voltage by default in the start-up example."
    },
    {
      "address": 5300,
      "count": 1,
      "name": "FBA A data out 1 (53.01)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter read into DATA IN 1; 28.26 by default in the start-up example."
    },
    {
      "address": 5301,
      "count": 1,
      "name": "FBA A data out 2 (53.02)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter read into DATA IN 2."
    },
    {
      "address": 5302,
      "count": 1,
      "name": "FBA A data out 3 (53.03)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Parameter read into DATA IN 3; 28.27 by default in the start-up example."
    },
    {
      "address": 9903,
      "count": 1,
      "name": "Motor control mode (99.04)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = Vector, 1 = Scalar (default)."
    },
    {
      "address": 20201,
      "count": 2,
      "name": "Motor speed used (01.01, 32-bit)",
      "data_type": "Int32",
      "units": "rpm",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Actual motor speed. Read through the 32-bit parameter access register; fieldbus scaling 100 = 1 rpm."
    },
    {
      "address": 20203,
      "count": 2,
      "name": "Motor speed estimated (01.02, 32-bit)",
      "data_type": "Int32",
      "units": "rpm",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Estimated motor speed when no encoder is used."
    },
    {
      "address": 20205,
      "count": 2,
      "name": "Motor speed percentage (01.03, 32-bit)",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Motor speed in percent of the synchronous motor speed."
    },
    {
      "address": 20211,
      "count": 2,
      "name": "Output frequency (01.06, 32-bit)",
      "data_type": "Int32",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Estimated drive output frequency."
    },
    {
      "address": 20213,
      "count": 2,
      "name": "Motor current (01.07, 32-bit)",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Measured absolute motor current."
    },
    {
      "address": 20217,
      "count": 2,
      "name": "Motor current % of drive nominal (01.09, 32-bit)",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor current in percent of the drive's nominal current."
    },
    {
      "address": 20219,
      "count": 2,
      "name": "Motor torque (01.10, 32-bit)",
      "data_type": "Int32",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Motor shaft torque in percent of nominal motor torque."
    },
    {
      "address": 20221,
      "count": 2,
      "name": "DC voltage (01.11, 32-bit)",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Intermediate circuit DC voltage."
    },
    {
      "address": 20227,
      "count": 2,
      "name": "Output power (01.14, 32-bit)",
      "data_type": "Int32",
      "units": "kW",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Drive output power."
    },
    {
      "address": 20233,
      "count": 2,
      "name": "Motor shaft power (01.17, 32-bit)",
      "data_type": "Int32",
      "units": "kW",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Estimated mechanical power at the motor shaft. Unit follows 96.16 Unit selection (kW or hp)."
    },
    {
      "address": 20239,
      "count": 2,
      "name": "Inverter kWh counter (01.20, 32-bit)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Inverter energy counter in kWh; rolls over at 1000 kWh."
    },
    {
      "address": 20299,
      "count": 2,
      "name": "Current hour energy (01.50, 32-bit)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Energy consumed during the current hour."
    },
    {
      "address": 20303,
      "count": 2,
      "name": "Current day energy (01.52, 32-bit)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Energy consumed during the current day."
    },
    {
      "address": 20307,
      "count": 2,
      "name": "Cumulative inverter energy (01.54, 32-bit)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Total energy consumed by the drive since commissioning."
    },
    {
      "address": 20343,
      "count": 2,
      "name": "U-phase RMS current (01.72, 32-bit)",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "RMS current of motor phase U."
    },
    {
      "address": 20345,
      "count": 2,
      "name": "V-phase RMS current (01.73, 32-bit)",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "RMS current of motor phase V."
    },
    {
      "address": 20347,
      "count": 2,
      "name": "W-phase RMS current (01.74, 32-bit)",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "RMS current of motor phase W."
    }
  ],
  "combined_registers": [],
  "notes": "The ACS580 has no native Modbus TCP port; this map applies to an ACS580 with the FMBT-21 Modbus/TCP adapter module, which acts as the Modbus server on port 502. The adapter does not use the unit identifier, so 1 is sent as a harmless default. Register numbers follow the adapter's ABB Drives - Enhanced profile, which is 51.02 Protocol/profile default value 1: control word, REF1 and REF2 at 400001-400003, status word, actual 1 and actual 2 at 400051-400053, DATA OUT 1-12 at 400004-400015 and DATA IN 1-12 at 400054-400065. Settings are reached as drive parameters: 16-bit parameter access address = 100 x group + index - 1 (e.g. 30.12 = 3011), 32-bit parameter access address = 20000 + 200 x group + 2 x index - 1 (e.g. 01.01 = 20201); both assume address mode 0 (parameter group 51). Monitoring rows use the 32-bit access registers because their scaling is fixed by the firmware manual (100 = 1 rpm, 100 = 1 Hz, 100 = 1 A, 10 = 1 %, 100 = 1 V), while 16-bit values are scaled by group 46 and therefore by the configured speed/frequency scaling. Default profile settings: 51.20 timeout 10 (0.1 s steps, so 1.0 s), 51.21 timeout mode 2 (control RW). Call 51.27 FBA A par refresh (write 1) after changing adapter settings."
}
