ABB ACS580 Modbus register map
General-purpose AC drive from ABB with a standard control program. The embedded fieldbus interface speaks Modbus RTU over EIA-485 and gives access to control and status words, two references, two actual values, and every drive parameter through a mapped register range.
- Protocol
- Modbus RTU (embedded fieldbus, EIA-485)
- Defaults
- Node address 1, 19.2 kbit/s, 8 data bits with even parity and 1 stop bit, ABB Drives control profile, addressing mode 0, word order low word first (p. 572-573). Settings in group 58 take effect after a reboot or after parameter 58.06 is set to Refresh settings.
- Addresses in the manual
- Modicon style numbers (for example 40001 is holding register 0)
- 32 and 64-bit values
- Low word first (CD AB)
- Registers listed
- 66
- Checked against
- 3AXD50000016097 Rev J, effective 2025-10-01
Address base. The manual prints holding registers with six digits from 400001 to 465536, where 400001 is the first register, so the wire address is the printed number minus 400001 (p. 576, p. 591). Parameters are mapped into the 400101 to 465536 range by parameter 58.33: in mode 0 a 16-bit parameter sits at 400000 + 100 x group + index and a 32-bit parameter at 420000 + 200 x group + 2 x index (p. 442). Coil and discrete input references are not listed here because the manual's wording on their wire address is ambiguous. For example 400001 in the manual (Control word (default Data I/O 1)) is address 0 on the wire.
Word order. Applies to the 32-bit parameter registers. Parameter 58.34 selects the order: low word first is the default, high word first is the alternative; bytes inside each register are high byte first (p. 442).
Modbus Poll and the Modbus protocol itself count from 0. The "Wire address" column is the number to type into Modbus Poll.
Downloads
The register table has every column on this page. The blocks file imports into Modbus Poll. The template JSON holds the same blocks plus unit, scale and access for scripts.
Registers
| Manual | Wire | Register | Type | Regs | Unit | Scale | Access | Area |
|---|---|---|---|---|---|---|---|---|
| 400001 | 0 | Control word (default Data I/O 1)ControlWord · ABB Drives profile bit layout on p. 579 (OFF1, OFF2, OFF3, inhibit operation, ramp controls, reset on rising edge of bit 7, jogging, remote command, EXT1/EXT2 select, four user bits). The source of this register can be remapped with parameter 58.101. |
bitfield16 | 1 | 1 | RW | Holding (FC03) | |
| 400002 | 1 | Reference 1 (default Data I/O 2)Reference1 · Scaled by the type chosen in 58.26: 20000 corresponds to 46.01 speed scaling or 46.02 frequency scaling, 10000 to 46.03 torque scaling or 46.04 power scaling; negative values are two's complement (p. 589). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 400003 | 2 | Reference 2 (default Data I/O 3)Reference2 · Scaled by the type chosen in 58.27, same scale points as reference 1 (p. 589). |
int16 | 1 | 1 | RW | Holding (FC03) | |
| 400004 | 3 | Status word (default Data I/O 4)StatusWord · ABB Drives profile bit layout on p. 583 (ready on, ready run, ready ref, tripped, OFF2 and OFF3 status, switch-on inhibited, alarm, at setpoint, remote, above limit, four user bits). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400005 | 4 | Actual value 1 (default Data I/O 5)ActualValue1 · Scaled by the type chosen in 58.28: 20000 corresponds to 46.01 speed scaling or 46.02 frequency scaling, 10000 to 46.03 torque or 46.04 power scaling (p. 590). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 400006 | 5 | Actual value 2 (default Data I/O 6)ActualValue2 · Scaled by the type chosen in 58.29, same scale points as actual value 1 (p. 590). |
int16 | 1 | 1 | R | Holding (FC03) | |
| 400090 | 89 | Reset error registersErrorReset · Write 1 to clear the internal error registers 400091 to 400095. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 400091 | 90 | Function code of the last failed queryErrorFunctionCode |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400092 | 91 | Error code after a device failure exceptionErrorCode · Values: 0 no error, 2 limit exceeded, 3 bad array index, 5 wrong data type, 101 general error (hex 65). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400093 | 92 | Last register that failed to read or writeErrorFailedRegister |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400094 | 93 | Last register written successfullyLastRegisterWritten |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400095 | 94 | Last register read successfullyLastRegisterRead |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400101 | 100 | Motor speed used (01.01)MotorSpeedUsed · Parameter 01.01 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.01 (speed scaling), so the raw value is not rpm unless that parameter is set accordingly. |
int16 | 1 | rpm | 1 | R | Holding (FC03) |
| 400103 | 102 | Motor speed percent of synchronous speed (01.03)MotorSpeedPercent · Parameter 01.03 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1%. |
int16 | 1 | % | 0.1 | R | Holding (FC03) |
| 400106 | 105 | Output frequency (01.06)OutputFrequency · Parameter 01.06 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.02 (frequency scaling). |
int16 | 1 | Hz | 1 | R | Holding (FC03) |
| 400107 | 106 | Motor current (01.07)MotorCurrent · Parameter 01.07 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.05 (current scaling). |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 400108 | 107 | Motor current percent of nominal motor current (01.08)MotorCurrentPctMotor · Parameter 01.08 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 1 = 1%. |
uint16 | 1 | % | 1 | R | Holding (FC03) |
| 400109 | 108 | Motor current percent of nominal drive current (01.09)MotorCurrentPctDrive · Parameter 01.09 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 1 = 1%. |
uint16 | 1 | % | 1 | R | Holding (FC03) |
| 400110 | 109 | Motor torque percent of nominal (01.10)MotorTorque · Parameter 01.10 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.03 (torque scaling). |
int16 | 1 | % | 1 | R | Holding (FC03) |
| 400111 | 110 | DC link voltage (01.11)DCVoltage · Parameter 01.11 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1 V. |
uint16 | 1 | V | 0.1 | R | Holding (FC03) |
| 400113 | 112 | Output voltage (01.13)OutputVoltage · Parameter 01.13 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 1 = 1 V. |
uint16 | 1 | V | 1 | R | Holding (FC03) |
| 400114 | 113 | Output power (01.14)OutputPower · Parameter 01.14 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.04 (power scaling); the unit depends on parameter 96.16. |
int16 | 1 | kW | 1 | R | Holding (FC03) |
| 400115 | 114 | Output power percent of nominal motor power (01.15)OutputPowerPctMotor · Parameter 01.15 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1%. |
int16 | 1 | % | 0.1 | R | Holding (FC03) |
| 400118 | 117 | Inverter energy counter, GWh part (01.18)InverterGWh · Parameter 01.18 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | GWh | 1 | R | Holding (FC03) |
| 400119 | 118 | Inverter energy counter, MWh part (01.19)InverterMWh · Parameter 01.19 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | MWh | 1 | R | Holding (FC03) |
| 400120 | 119 | Inverter energy counter, kWh part (01.20)InverterkWh · Parameter 01.20 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1 kWh. |
uint16 | 1 | kWh | 0.1 | R | Holding (FC03) |
| 400124 | 123 | Actual flux percent of nominal (01.24)FluxActualPct · Parameter 01.24 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | % | 1 | R | Holding (FC03) |
| 400131 | 130 | Ambient temperature (01.31)AmbientTemperature · Parameter 01.31 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Only for frame sizes R6 or larger. The unit follows the unit selection (Celsius or Fahrenheit). |
int16 | 1 | °C | 1 | R | Holding (FC03) |
| 400172 | 171 | U-phase RMS current (01.72)CurrentPhaseU · Parameter 01.72 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.05 (current scaling). |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 400173 | 172 | V-phase RMS current (01.73)CurrentPhaseV · Parameter 01.73 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.05 (current scaling). |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 400174 | 173 | W-phase RMS current (01.74)CurrentPhaseW · Parameter 01.74 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.05 (current scaling). |
uint16 | 1 | A | 1 | R | Holding (FC03) |
| 400401 | 400 | Code of the active tripping fault (04.01)TrippingFault · Parameter 04.01 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400402 | 401 | Code of the second active fault (04.02)ActiveFault2 · Parameter 04.02 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400403 | 402 | Code of the third active fault (04.03)ActiveFault3 · Parameter 04.03 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400406 | 405 | Code of the first active warning (04.06)ActiveWarning1 · Parameter 04.06 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400407 | 406 | Code of the second active warning (04.07)ActiveWarning2 · Parameter 04.07 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400408 | 407 | Code of the third active warning (04.08)ActiveWarning3 · Parameter 04.08 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | 1 | R | Holding (FC03) | |
| 400440 | 439 | User-defined event word 1 (04.40)EventWord1 · Parameter 04.40 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Each bit shows the state of an event code chosen with parameters 04.41 to 04.71. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400501 | 500 | Power-on time counter (05.01)OnTimeDays · Parameter 05.01 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | d | 1 | R | Holding (FC03) |
| 400502 | 501 | Motor run-time counter (05.02)RunTimeDays · Parameter 05.02 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | d | 1 | R | Holding (FC03) |
| 400504 | 503 | Cooling fan on-time counter (05.04)FanOnTimeDays · Parameter 05.04 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
uint16 | 1 | d | 1 | R | Holding (FC03) |
| 400510 | 509 | Control board temperature (05.10)ControlBoardTemp · Parameter 05.10 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). The unit follows the unit selection (Celsius or Fahrenheit). |
int16 | 1 | °C | 1 | R | Holding (FC03) |
| 400511 | 510 | Inverter temperature percent of fault limit (05.11)InverterTempPct · Parameter 05.11 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 1 = 1%. |
int16 | 1 | % | 1 | R | Holding (FC03) |
| 400520 | 519 | Diagnostic word 1 (05.20)DiagnosticWord1 · Parameter 05.20 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400521 | 520 | Diagnostic word 2 (05.21)DiagnosticWord2 · Parameter 05.21 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400522 | 521 | Diagnostic word 3 (05.22)DiagnosticWord3 · Parameter 05.22 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400601 | 600 | Main control word as seen by the drive (06.01)MainControlWord · Parameter 06.01 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Read-only. When fieldbus control is used it can differ from the word the PLC sent. |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400611 | 610 | Main status word (06.11)MainStatusWord · Parameter 06.11 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400616 | 615 | Drive status word 1 (06.16)DriveStatusWord1 · Parameter 06.16 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400617 | 616 | Drive status word 2 (06.17)DriveStatusWord2 · Parameter 06.17 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 400618 | 617 | Start inhibit status word (06.18)StartInhibitWord · Parameter 06.18 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). |
bitfield16 | 1 | 1 | R | Holding (FC03) | |
| 402312 | 2311 | Acceleration time 1 (23.12)AccelTime1 · Parameter 23.12 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1 s. Time to go from zero to the speed in 46.01. |
uint16 | 1 | s | 0.1 | RW | Holding (FC03) |
| 402313 | 2312 | Deceleration time 1 (23.13)DecelTime1 · Parameter 23.13 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Printed scale is 10 = 1 s. Time to go from the speed in 46.01 to zero. |
uint16 | 1 | s | 0.1 | RW | Holding (FC03) |
| 403011 | 3010 | Minimum speed (30.11)MinimumSpeed · Parameter 30.11 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.01 (speed scaling), so the raw value is not rpm unless that parameter is set accordingly. |
int16 | 1 | rpm | 1 | RW | Holding (FC03) |
| 403012 | 3011 | Maximum speed (30.12)MaximumSpeed · Parameter 30.12 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Scaling follows parameter 46.01 (speed scaling), so the raw value is not rpm unless that parameter is set accordingly. |
int16 | 1 | rpm | 1 | RW | Holding (FC03) |
| 405803 | 5802 | Embedded fieldbus node address (58.03)EFB_NodeAddress · Parameter 58.03 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Values 1 to 247 are allowed. Takes effect after a reboot or a refresh through 58.06. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 405804 | 5803 | Embedded fieldbus baud rate (58.04)EFB_BaudRate · Parameter 58.04 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Enumeration: 0 autodetect, 1 = 4.8, 2 = 9.6, 3 = 19.2, 4 = 38.4, 5 = 57.6, 6 = 76.8, 7 = 115.2 kbit/s. Default 19.2 kbit/s. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 405805 | 5804 | Embedded fieldbus parity and stop bits (58.05)EFB_Parity · Parameter 58.05 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). Enumeration: 0 = 8N1, 1 = 8N2, 2 = 8E1, 3 = 8O1. Default 8E1. |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 405834 | 5833 | Word order for 32-bit parameters (58.34)EFB_WordOrder · Parameter 58.34 read as a 16-bit value: register = 400000 + 100 x group + index (addressing mode 0, p. 442). 0 = high word first, 1 = low word first (default). |
uint16 | 1 | 1 | RW | Holding (FC03) | |
| 420202 | 20201 | Motor speed used, 32-bit (01.01)MotorSpeedUsed_32 · Parameter 01.01 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
int32 | 2 | rpm | 0.01 | R | Holding (FC03) |
| 420212 | 20211 | Output frequency, 32-bit (01.06)OutputFrequency_32 · Parameter 01.06 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
int32 | 2 | Hz | 0.01 | R | Holding (FC03) |
| 420214 | 20213 | Motor current, 32-bit (01.07)MotorCurrent_32 · Parameter 01.07 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
uint32 | 2 | A | 0.01 | R | Holding (FC03) |
| 420220 | 20219 | Motor torque percent, 32-bit (01.10)MotorTorque_32 · Parameter 01.10 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
int32 | 2 | % | 0.1 | R | Holding (FC03) |
| 420222 | 20221 | DC link voltage, 32-bit (01.11)DCVoltage_32 · Parameter 01.11 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
uint32 | 2 | V | 0.01 | R | Holding (FC03) |
| 420228 | 20227 | Output power, 32-bit (01.14)OutputPower_32 · Parameter 01.14 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
int32 | 2 | kW | 0.01 | R | Holding (FC03) |
| 420308 | 20307 | Cumulative inverter energy, 32-bit (01.54)CumulativeEnergy_32 · Parameter 01.54 read as a 32-bit value over two registers: register = 420000 + 200 x group + 2 x index (addressing mode 0, p. 442). 32-bit scaling from p. 499. |
int32 | 2 | kWh | 1 | R | Holding (FC03) |
Scale is the number to multiply the raw value by to get the unit. Types with more than one register (32 and 64-bit) follow the word order above.
Open in Modbus Poll
- Download the Modbus Poll blocks file.
- Open Modbus Poll, connect to the device and set its unit ID. In Modbus Poll set Word order to CD AB.
- In the blocks panel on the right, click Import CSV and pick the file. CSV import is a Pro feature. Without Pro, Modbus Poll polls the first 20 values of your blocks.
- The wire addresses are already in the file, so there is no 0-based or 1-based conversion to do.
Once the values look right, export the tag list to Ignition, Kepware, Node-RED, Home Assistant or Voltrus SCADA.
Source and accuracy
Manufacturer document: ACS580 standard control program firmware manual (library.e.abb.com)
3AXD50000016097 Rev J, effective 2025-10-01, p. 223-236, 315-316, 343, 436-442, 499, 569-598. Read on 2026-10-24.
Addresses, types, units and scale are taken from the document above. Names and descriptions are written by Voltrus. Firmware versions can differ, so confirm a value on your own device before you rely on it.
Found a mistake? Report it by email with the register address and the manual page.