ABB PLC Lab Manual · Lab 20 of 20 · PLC to VFD Communication

How to Control ABB ACS580 via Modbus RTU from an AC500-eco PLC

Make the PLC drive the motor. Build the ABB Drives control word for stop, run and reset, scale the speed reference, decode the status word, poll the drive cyclically and react safely to faults and lost communication.

2,500+ engineers trained 4.9/5 Google rating 21+ years, Chinchwad, Pune Real AC500-eco + ACS580 trainer kits
Lab 20 of 20 · 90 minutes · Level: Intermediate
Quick answer

With the ABB Drives profile, the PLC writes the control word to 400001 and the speed reference to 400002, and reads the status word from 400004. Typical control words are 1150 (0x047E) for ready/stop, 1151 (0x047F) to run and 1278 (0x04FE) to reset a fault. The reference is scaled so 20000 equals the speed in 46.01 (or the frequency in 46.02), and the program polls the drive continuously and stops on a fault or comm loss.

  • Send 0x047E first, then 0x047F to run: the drive needs the ready state
  • 20000 = 46.01 speed scaling (or 46.02 for frequency); negative = reverse
  • Read the status word every cycle and use its bits, not assumptions
  • Alternate read and write requests and supervise both with a watchdog
HardwareLink from Lab 19, motor coupled safely
SoftwareLab 19 COM1 + Modbus library
Drive20.01 / 22.11 = embedded fieldbus

Lab 19 proved the link. Now the PLC takes control of the ACS580: start and stop from the conveyor logic, speed from a recipe or HMI, and all drive status back into the alarm system from Lab 13.

Step 1: Understand the ABB Drives Control Word

Bit level 15 minutes
BitName1 meansTypical run value
0OFF1_CONTROLRun allowed (0 = ramp stop)1
1OFF2_CONTROLNo coast stop1
2OFF3_CONTROLNo emergency ramp stop1
3INHIBIT_OPERATIONOperation enabled1
4RAMP_OUT_ZERORamp generator output enabled1
5RAMP_HOLDRamp not held1
6RAMP_IN_ZERORamp input enabled1
7RESETFault reset on rising edge0
10REMOTE_CMDFieldbus control enabled1

Control word builder

Tick bits or use the presets. The value is what the PLC writes to 400001.

1Power onSW: switch-on inhibited/ready
2Write 0x047Edrive ready to operate
3Write 0x047Fdrive runs to reference
4Write 0x047Eramp stop (OFF1)
5Fault?write 0x04FE edge to reset

Step 2: Scale the Speed Reference

Reference 1 10 minutes

Reference scaling calculator

Reference 1 of 20000 corresponds to parameter 46.01 Speed scaling (or 46.02 Frequency scaling).

ST
(* Scale an HMI speed in % (0..100) to reference 1 *)
Ref1 := REAL_TO_INT(Par_Speed_Pct * 200.0);   (* 100 % -> 20000 = 46.01 *)
IF Cmd_Reverse THEN Ref1 := -Ref1; END_IF;

Step 3: Poll the Drive Cyclically

Drive_Comm POU 25 minutes

Use two Modbus requests and run them one after the other, forever: write CW + Ref1 (FC16, 2 registers from 400001), then read SW + Act1 + Act2 (FC03, 3 registers from 400004). A small step counter starts the next request when the previous one is DONE or ERR.

ST
CASE Comm_Step OF
  0: WR(EN := FALSE); Comm_Step := 1;
  1: Wr_Buf[0] := Drive_CW; Wr_Buf[1] := Ref1;
     WR(EN := TRUE, COM := 1, SLAVE := 1, FCT := 16, TIMEOUT := 500,
        ADDR := 0, NB := 2, DATA := ADR(Wr_Buf));
     IF WR.DONE OR WR.ERR THEN Wr_Err := WR.ERR; RD(EN := FALSE); Comm_Step := 2; END_IF;
  2: RD(EN := TRUE, COM := 1, SLAVE := 1, FCT := 3, TIMEOUT := 500,
        ADDR := 3, NB := 3, DATA := ADR(Rd_Buf));
     IF RD.DONE OR RD.ERR THEN
        Rd_Err := RD.ERR;
        IF NOT RD.ERR THEN Drive_SW := Rd_Buf[0]; Drive_Act1 := Rd_Buf[1]; END_IF;
        WR(EN := FALSE); Comm_Step := 1;
     END_IF;
END_CASE;
T_Comm(IN := Wr_Err OR Rd_Err, PT := T#1s);   (* comm watchdog *)
Alm_VFD_Comm := Alm_VFD_Comm OR T_Comm.Q;
Pin names

Pin names follow the AC500 V2 MODMAST block and are shown for structure. Check your library help for exact names, the meaning of EN (edge or level) and whether ADDR is 0- or 1-based. Only one request may be active on COM1 at a time.

Step 4: Decode the Status Word and Run the Drive

Interactive drive simulator 20 minutes
SW bitNameMeaning when 1Used for
0RDY_ONReady to switch onSts_VFD_Ready
1RDY_RUNReady to operate
2RDY_REFRunning, following referenceSts_VFD_Running
3TRIPPEDFault activeAlm_VFD_Fault (Lab 13)
7ALARMWarning activeHMI warning
8AT_SETPOINTActual = referenceSequence permissive
9REMOTEFieldbus control activeAlarm if lost

PLC → ACS580 Modbus simulator

Set a speed, press Start and watch the control word, reference and status word. Inject a drive fault, reset it, then pull the cable.

Inputs (click / hold)
Outputs
Drive running (SW bit 2)
At setpoint (SW bit 8)
Alm_VFD_Fault (SW bit 3)
Alm_VFD_Comm
Motor shaft (animation speed follows actual rpm)
Control word: 0Ref1: 0Status word: 0Actual rpm: 0Comm: 0

Step 5: Commissioning Test

Motor coupled safely 20 minutes
0 of 6 checks recorded
IDCheckHow to checkPass criterionResult
Drive control tests
V-01ReadyPLC writes 0x047ESW bit 0 = 1, drive shows remote/fieldbus
V-02RunStart in autoCW 0x047F, motor runs to reference
V-03SpeedChange Par_Speed_Pct 50 → 100 %Actual follows, at setpoint bit set
V-04StopPress StopCW 0x047E, ramp stop
V-05Fault resetTrip drive (e.g. remove enable), resetAlm_VFD_Fault, cleared with 0x04FE edge
V-06Comm lossUnplug cable while runningDrive EFB comm loss fault, PLC Alm_VFD_Comm

Practice Exercise

Exercise

Add Act1 (motor speed) and Act2 to the HMI, scaled to rpm and amps, and add a second speed preset for the slow-down step from Lab 17.

Troubleshooting

SymptomLikely causeFix
Drive does not start, CW 0x047F0x047E not sent first, or 20.01 not EFBSend 0x047E, then 0x047F; set 20.01 to embedded fieldbus
Runs but ignores speed22.11/28.11 not EFB ref1 or wrong control modeSet the reference source for the active control mode
Speed is half/double expected46.01 scaling differs from your assumptionRead 46.01 and rescale
Fault will not resetReset bit held, no rising edgePulse 0x04FE for one cycle, then 0x047E
EFB comm loss during normal runningPoll cycle slower than 58.16, or errorsSpeed up polling, check counters, increase 58.16

Frequently asked questions

What is the ACS580 control word to start the drive?

With the ABB Drives profile, write 1150 (0x047E) to make the drive ready, then 1151 (0x047F) to run. 0x047E again stops with a ramp.

How do I reset an ACS580 fault over Modbus?

Set bit 7 of the control word with a rising edge, for example write 1278 (0x04FE) for one cycle, then return to 0x047E.

How is the ACS580 speed reference scaled?

In the ABB Drives profile, a reference of 20000 equals the value of 46.01 Speed scaling (or 46.02 Frequency scaling). Negative values mean reverse.

Which status word bit shows the ACS580 is running?

Bit 2 (RDY_REF) is set when the drive is running and following the reference. Bit 3 shows a fault and bit 8 shows it is at setpoint.

How fast should the PLC poll the drive?

Fast enough that control frames arrive well inside 58.16 Communication loss time. At 19.2 kbit/s a write/read pair takes tens of milliseconds, so a few hundred milliseconds per cycle is easily achieved.

Reviewed by Bhawesh Kumar SinghIndustrial Automation Trainer and Industry 4.0 Consultant · Softwell Automation · 21+ years industry experience

Get the full ABB PLC syllabus + free demo class

Share your details. A Softwell training advisor will call you within 24 hours with batch dates, fees and AC500 hardware access options.

No spam. Used only to share course details for this enquiry.

Practise every lab on real ABB hardware

AC500-eco PLC, ACS580 drive and HMI trainer kits: live online, Pune classroom or corporate in-plant training.

Request Course Details
Verified learning pathway

Discuss This Technical Course

Explore practical curriculum, software, hardware and batch options for this technology.

Content reviewed: 14 October 2026

ABB PLC & Automation Builder Learning Path

Follow the full 20-lab ABB AC500-eco practical series in order, or start from the ABB PLC Lab Manual hub.

  1. Lab 1: Automation Builder Installation & AC500-eco Setup
  2. Lab 2: Connect AC500-eco PLC via Ethernet
  3. Lab 3: Create a New Automation Builder Project
  4. Lab 4: AC500-eco IO Configuration
  5. Lab 5: Digital Input Mapping
  6. Lab 6: Digital Output Mapping
  7. Lab 7: First Ladder Program: Start/Stop
  8. Lab 8: Download a Program to AC500-eco
  9. Lab 9: Upload a Program from AC500-eco
  10. Lab 10: Online Monitoring, Force & Write
  11. Lab 11: Timers & Counters in Ladder
  12. Lab 12: Network & Tag Mapping
  13. Lab 13: Alarm Mapping & Fault Latching
  14. Lab 14: Tower Lamp Logic
  15. Lab 15: Emergency Stop & Interlocks
  16. Lab 16: Manual Mode Logic
  17. Lab 17: Auto Mode Sequence Logic
  18. Lab 18: Structured Text (ST) Programming
  19. Lab 19: AC500-eco to ACS580 Modbus RTU Setup
  20. Lab 20: Control ACS580 via Modbus RTU
  21. ABB AC500 PLC Selection Guide
☎ Call WhatsApp ✉ Email Enquire Now