Skip to content

Modbus register map

The ACH550 with the RETA-01 fieldbus adapter, configured for the ABB Drives profile, exposes two kinds of registers over Modbus/TCP:

  1. Quick-access I/O at low addresses (0–11). Pre-defined slots for control word, references, status word, actuals.
  2. Parameter registers addressed by group × 100 + index − 1.

Quick-access I/O

Address Name R/W Used for
0 Control Word (CW) R/W Drive command bits. 0x0476 = prepare / ramp-stop, 0x047F = run, 0x0000 = off / coast.
1 Reference 1 (REF1) R/W Speed reference. Scaled REF1 = drive_RPM × 22.42.
2 Reference 2 (REF2) R/W Unused in our config.
3 Status Word (SW) R Drive state bits (READY, RUN, REM, FAULT, …).
4 Actual 1 (ACT1) R Speed feedback.
5 Actual 2 (ACT2) R Current feedback.

These are addressed directly — no group/index translation needed.

Control Word bits (relevant subset)

Bit Name Meaning
0 OFF1 Inverse — 1 = OFF1 inactive (the drive can run).
1 OFF2 Inverse — 1 = OFF2 inactive.
2 OFF3 Inverse — 1 = OFF3 inactive.
3 RUN 1 = run, 0 = stop.
4 RAMP_OUT_ZERO 1 = ramp output to zero.
5 RAMP_HOLD 1 = hold the current ramp output.
6 RAMP_IN_ZERO 1 = force ramp input to zero.
7 RESET Rising edge clears a latched fault.
10 REMOTE_CMD 1 = control from fieldbus active.

The three named patterns we use:

  • 0x0476 = 0000 0100 0111 0110 — OFF1/OFF2/OFF3 inactive, ramp not held, RUN=0. Drive is prepared and ramps to zero if running.
  • 0x047F = 0000 0100 0111 1111 — same as above but with RUN=1 and the lower three bits set. Drive runs.
  • 0x0000 — all bits zero. Drive coasts.

Status Word bits (relevant subset)

Bit Name Meaning
0 RDY_ON Drive is ready, supply OK.
1 RDY_RUN Drive is enabled.
2 RDY_REF Drive is following its speed reference.
3 TRIPPED A fault is latched.
4 OFF2_STA OFF2 emergency-stop active.
5 OFF3_STA OFF3 emergency-stop active.
6 SWC_INH Switch-on inhibited.
7 ALARM A non-fatal alarm is active.
8 AT_SP At setpoint.
9 REMOTE Drive in remote mode.
10 ABOVE Operating above commanded speed.

Parameter addressing

For any drive parameter <group>.<index>:

$$ \mathrm{Modbus\ address} = \mathrm{group} \times 100 + \mathrm{index} - 1 $$

Examples we use:

Parameter Modbus address
01.01 SPEED 100
01.02 FREQUENCY 101
01.04 CURRENT 103
03.05 FB REF 1 304
10.01 EXT1 COMMANDS 1000
11.03 REF1 SELECT 1102
22.02 DECEL TIME 2201
51.04 IP octet 1 5103
51.16 PROTOCOL 5115
98.02 COMM PROT SEL 9801
99.02 APPLIC MACRO 9901
99.08 MOTOR NOM SPEED 9807

Some parameters (notably group 51) are not writable over Modbus while the connection is live — writing them would cut you off mid-write. Use the drive's keypad for those, then power-cycle. See Parameter recovery.

Function codes

FC Name Used for
0x03 Read Holding Registers Reading any of the above.
0x06 Write Single Register Writing CW, REF1, individual parameters.
0x10 Write Multiple Registers Not currently used; would be useful for atomic multi-register writes.

Exception codes returned in error: 0x82 (FC 0x03 error response), 0x86 (FC 0x06 error response) with sub-codes:

Sub-code Meaning
0x01 Illegal function.
0x02 Illegal data address. (Common: writing a read-only parameter.)
0x03 Illegal data value.
0x04 Slave device failure.

The PowerShell client and the Python client both parse and surface these.