Variable frequency drives are everywhere — pumps, fans, compressors, conveyors. They're also the first thing that trips when something goes wrong on the floor. Most VFDs have a Modbus RTU port sitting idle on the back. This guide shows you how to wire it up, map the registers, and get real-time VFD data into your cloud dashboard over 4G.

We'll use ABB ACS550 as the primary example (extremely common in Indian industry), with notes for Schneider ATV and Danfoss FC series.

What You Can Monitor

Before you wire anything, understand what data is actually available via Modbus on a VFD:

Parameter Why It Matters
Output Frequency (Hz) Motor speed, process throughput
Output Current (A) Load monitoring, overload prediction
Output Voltage (V) Drive health, power quality
Motor RPM Process speed, pump efficiency
Run / Stop status Uptime tracking, cycle counting
Active Fault Code Remote fault detection, faster maintenance
Drive temperature Thermal protection monitoring
Power (kW) Energy consumption per drive
Operating hours Maintenance scheduling
DC Bus Voltage Drive health indicator

These aren't theoretical — they're what separates reactive maintenance from predictive maintenance. A current spike trending upward over three weeks is a bearing warning. A fault code at 3 AM tells you exactly why the line stopped without waiting for a technician to check the keypad.

Enabling Modbus on the VFD

Most VFDs ship with the RS485 port disabled. You need to configure it from the keypad before anything else.

ABB ACS550 / ACS310 Setup

The ACS550 has a built-in RS485 port (terminals SCR, SDA, SDB on the control board).

Parameter Value Description
P9802 1 (Standard) Activate Modbus protocol
P5303 1–247 Set Modbus slave address
P5304 9600 / 19200 / 38400 Baud rate
P5305 0 (8N1) or 1 (8E1) Parity / stop bits
P5306 10–1000 ms Communication timeout

After saving parameters, cycle power to the drive. The DRIVE LED should stop flashing once Modbus is active.

Schneider ATV312 / ATV32

The ATV series uses the same RS485 physical port but calls its settings differently:

Parameter Path Value
Modbus address COMAdd 1–247
Baud rate COMtBr 19200 recommended
Stop bits COMStBt 1
Parity COMPrtY None (nO)

Danfoss FC Series (FC51, FC102, FC302)

Danfoss supports Modbus via the RS485 terminal on the control card (terminals 68, 69, 61 for A, B, GND).

Parameter Description
8-30 Protocol = FC (Modbus RTU)
8-31 Address (1–126)
8-32 Baud rate
8-33 Parity / stop bits

Wiring RS485

VFDs generate significant EMI. Your wiring has to be clean.

BusLog 4G               VFD Control Board
  RS485_A ────────────── SDA (or A/D+)
  RS485_B ────────────── SDB (or B/D-)
  GND ────────────────── SCR / GND

Critical rules for VFD environments:

  1. Use shielded twisted pair cable — minimum CAT5, dedicated RS485 cable (Belden 9841 or equivalent) for noisy sites
  2. Ground the shield at ONE end only — typically at the gateway side; floating at the VFD side prevents ground loops
  3. Physical separation — route your RS485 cable at least 30cm away from power cables. Cross power cables at 90° only
  4. 120Ω termination — at the last device if bus length > 50m. On ABB ACS550, there's a built-in termination switch (SW1) on the option board
  5. Ferrite core — clip one on the RS485 cable near the VFD if you see intermittent communication errors

If you're monitoring multiple VFDs on one RS485 bus, daisy-chain them:

BusLog ──── VFD#1 (ID=1) ──── VFD#2 (ID=2) ──── VFD#3 (ID=3)
                                                     │
                                                   120Ω (last device)

Max 31 drives per bus segment (standard RS485 driver load). Use a repeater if you need more.

ABB ACS550 Register Map

ABB uses Modbus Function Code 03 (Read Holding Registers) for most parameters. Addresses are 1-indexed in the manual but 0-indexed in Modbus frames.

Parameter Manual Register Modbus Address (0-indexed) Scale Unit
Output Frequency 1 0 ×0.01 Hz
Motor Speed 2 1 ×1 RPM
Output Current 3 2 ×0.1 A
Motor Torque 4 3 ×0.1 %
Motor Power 5 4 ×0.1 %
DC Bus Voltage 6 5 ×1 V
Output Voltage 7 6 ×1 V
Drive Temperature 8 7 ×1 °C
Drive kWh (total) 50 49 ×10 kWh
Active Fault Code 58 57 fault#
Drive Status Word 43 42 bitfield

Decoding the Status Word (Register 42):

Bit Meaning
Bit 0 Ready
Bit 1 Running
Bit 2 Fault active
Bit 3 Fault reset needed
Bit 5 Emergency stop
Bit 7 Warning active
Bit 11 Run requested

Read register 42, check bit 2 — if set, you have an active fault. Read register 57 for the fault code, look it up in the manual.

Common ABB ACS550 Fault Codes:

Code Fault Likely Cause
F0001 Overcurrent Load jam, motor fault, too-short accel ramp
F0002 DC Overvoltage Load is regenerating, regen into the DC bus
F0003 Device overtemperature Ambient too hot, cooling fan failure, blocked vents
F0006 DC Undervoltage Input power quality, input fuse blown
F0009 Motor overtemperature Motor overloaded, poor ventilation
F0014 Earthfault Motor or cable insulation failure
F0022 Brake transistor fault Brake resistor issue
F0020 AI low (Analog input loss) Speed reference signal cable disconnected

Gateway Configuration (BusLog 4G)

In the BusLog web UI, configure a Modbus RTU poll task:

Port:         RS485
Baud Rate:    9600 (match VFD setting)
Parity:       None
Stop Bits:    1
Device ID:    1 (or whatever you set on the VFD)

Poll interval: 30 seconds (or as needed)

Registers to read:
  - FC03, Start=0, Count=8     reads output freq, RPM, current, torque, power, DCbus, voltage, temp
  - FC03, Start=42, Count=16   reads status word and fault codes
  - FC03, Start=49, Count=1    energy (kWh)

The BusLog will format these into JSON and publish via MQTT on your configured interval:

{
  "device_id": "vfd_pump_01",
  "ts": 1745000000,
  "output_hz": 48.50,
  "motor_rpm": 1455,
  "output_current_a": 12.3,
  "motor_power_pct": 78.5,
  "dc_bus_v": 560,
  "drive_temp_c": 42,
  "status_word": 1027,
  "active_fault": 0,
  "total_kwh": 14820
}

Set up alerts in your cloud dashboard: fault ≠ 0, current > 90% of rated, temperature > 70°C.

Useful Automations

Once data is in the cloud, you can set up:

Overload prediction: Plot current vs time. A motor drawing 15A against a 12A nameplate rating that gradually increased over 2 weeks is a bearing warning.

Run hour tracking: Status bit 1 (Running) toggles. Count seconds it's high. Maintenance at 5,000 hours instead of calendar-based.

Fault log: Any time fault code changes from 0, log timestamp + code. You now have a fault history that persists even after someone hits reset on the keypad.

Energy sub-metering: Per-drive kWh tracking. Find out which motor is the energy hog.

Troubleshooting

No response from VFD: - Verify Modbus is enabled in the VFD parameters (most common mistake) - Check baud rate and parity match on both ends - Confirm slave ID is correct - Try swapping A and B — ACS550 labelling sometimes confuses people

CRC errors intermittently: - Shield not grounded, or grounded at both ends (ground loop) - RS485 cable running parallel to VFD power output cable — reroute - Add termination resistor at the far end

Reads work but values look wrong: - Check the scaling factor — ABB stores frequency as integer (×0.01 Hz), so 4850 → 48.50 Hz - Confirm you're reading from correct register block (manual register vs 0-indexed Modbus address differ by 1)

Drive throws communication fault (F0002, F0022 etc.) when Modbus is connected: - VFD is configured to trip on communication loss. Set the communication timeout parameter (P5306 on ACS550) to 0 (disabled) unless you specifically want this behaviour


Modbus RS485 is built into virtually every modern VFD. Once you know the register map, you have a window into every motor on your plant floor — not just when it breaks, but before it does.