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:
- Quick-access I/O at low addresses (0–11). Pre-defined slots for control word, references, status word, actuals.
- 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.