---
title: "INVT Goodrive 20 VFD"
description: "INVT Goodrive 20 drive via an RS-485-to-Ethernet gateway on Modbus TCP: fault code, motor RPM, output current and a Fault Reset button in TapHome."
url: "https://taphome.com/en/compatibility/invt-gd20-sid2/"
language: en
lastmod: 2026-10-08
generator: hugo
ai:
  topics: ["modbus-tcp","modbus-rtu","rs485","inverter","variable-frequency-drive","vfd","motor-control","rs485-to-ethernet-gateway"]
  questions: ["How to integrate INVT GD20 with TapHome?","What does the INVT GD20 TapHome template measure and control?","How to connect INVT Goodrive 20 to TapHome via Modbus TCP?","Which gateway is required to use INVT GD20 with TapHome?","How to enable Modbus communication on the INVT GD20?","Why does Total Consumption show amps instead of kWh on the INVT GD20?"]
---

# INVT Goodrive 20 VFD

Communication: Modbus TCP

- [INVT Goodrive 20-EU Product Page](https://www.invt.com/products/gd20-eu-series-vfd-drive-18)
- [INVT Official Website](https://www.invt.com)

> Network address
> 
> TapHome reaches this device at the address entered on import. Give the device a fixed address — an IP reservation in the router, or its mDNS name if it supports one — otherwise the integration stops working when the router changes the address.
> 
> [Network Preparation](https://taphome.com/en/docs/setup/network-preparation/)

## Integration guide

The INVT Goodrive 20 (GD20) and Goodrive 20-EU (GD20EU) are mini general-purpose variable frequency drives (VFDs) for 3-phase AC induction motors used in pumps, fans, conveyors and other industrial loads. They speak Modbus RTU on a 2-wire RS-485 bus through INVT's optional **SID2** communication card or the on-board RS-485 terminals.

The TapHome template uses **Modbus TCP** on port 502 and expects an external RS-485-to-Ethernet gateway (the XML description recommends a Waveshare RS485-to-ETH B converter) to bridge the IP network to the VFD's RS-485 bus. The template exposes diagnostics — latched fault code, motor RPM, output current and a VFD identification register — together with a Fault Reset push-button. Run/stop, frequency setpoint and live status are not implemented.

> [!NOTE]
> **About the slug name "SID2".** SID2 is INVT's internal name for the RS-485 communication card option on the GD20 — it has no Ethernet port. The TapHome template still talks Modbus **TCP**, so an external gateway (Waveshare RS485-to-ETH B, Moxa MGate, USR-W630 or equivalent) is always required. Any standard Modbus TCP-to-RTU converter works; SID2 vs. on-board RS-485 only changes the physical terminal block on the VFD side.

## Hardware connection

The communication chain has two stages:

```
TapHome Core ── Modbus TCP (port 502) ── Gateway ── Modbus RTU 2-wire RS-485 ── INVT GD20
```

The gateway must be on the same local network as TapHome Core and configured with a **static IP** (DHCP reservation or its own web UI). The gateway's RS-485 port is wired in parallel with the VFD's `485+` / `485-` terminals.

### Wiring of the control circuit

![INVT Goodrive 20 control circuit wiring (Figure 3-9) showing 485+/485- terminals, twisted pair, shield and PE](https://taphome.com/images/compatibility/invt-gd20-sid2/wiring-control-circuit_hu_6f47b74bb38a30ac.jpg)

The RS-485 terminals are part of the GD20 control terminal block:

| Terminal | Function |
|----------|----------|
| `485+` | RS-485 line A (positive) |
| `485-` | RS-485 line B (negative) |
| `PE` | Cable shield / protective earth |

**Wiring rules (from manual V1.9, section 3.2.4):**

- Use a **shielded twisted pair** for the RS-485 bus.
- Connect `485+` of the gateway to `485+` on the VFD, and `485-` to `485-`.
- Bond the cable shield to `PE` at one end only (typically the gateway side).
- Maximum cable length depends on baud rate — at 19 200 bps with 24 AWG twisted pair the practical limit is roughly 600 m.
- Route control cables separately from the U/V/W motor cable to avoid noise pickup.

### RS-485 bus layout

![INVT Goodrive 20 RS-485 bus wiring for a single VFD via RS232/RS485 converter (Figure 7-1)](https://taphome.com/images/compatibility/invt-gd20-sid2/wiring-rs485-bus_hu_7e4050aca04d0fc6.jpg)

For a single drive, connect the gateway directly between `485+` and `485-` on the VFD. For multiple drives, daisy-chain them on a single bus and place a **120 Ω terminator at each end**. Star (chrysanthemum) topology is supported but daisy-chain is preferred for noise immunity. Each VFD on the bus must have a unique slave address (P14.00).

### Termination resistor

![INVT Goodrive 20 control terminal block with the 485 termination DIP switch (Figures 3-10 and 3-11 — sub-4 kW and 4 kW+ models)](https://taphome.com/images/compatibility/invt-gd20-sid2/dip-switch-layout_hu_e89230f20abe3bbb.jpg)

Each GD20 has a small DIP switch block above the control terminals (labelled `AO1`, `AO2`, `AI2`, `485`). The `485` switch toggles the on-board **120 Ω termination resistor** for the RS-485 line. Set it to `ON` only on the **last** VFD at the end of the bus; on intermediate drives leave it `OFF`. The factory default position is marked by a black rectangle on the switch.

> [!WARNING]
> **Verify the rear wire-cap.** A common cause of communication errors is the small wire-cap on the back of the terminal block that connects the on-board termination to the bus — if it is missing or unseated, the 485 DIP switch has no effect.

## Configuration

When importing the template in TapHome, provide:

- **IP Address** — the gateway's address on the local network (default placeholder: `192.168.1.0`)
- **Slave ID** — Modbus slave address of the VFD (default `1`, range `1–247`)

Modbus TCP runs on port `502` (hardcoded in the template).

### Enabling Modbus communication

The VFD ignores writes from Modbus until the **run channel** and the **frequency source** are switched to communication. The relevant parameters live in the **P00 and P14 groups** on the VFD's keypad menu (manual V1.9, section 5):

| Parameter | Function | Recommended value | Notes |
|-----------|----------|-------------------|-------|
| `P00.01` | Run command channel | `2` (Communication) | Allows writes to H:0x2000 to control run/stop. Without this, only diagnostic reads work. |
| `P00.06` | A frequency source | `8` (Modbus) | Required only if the frequency setpoint will be sent over Modbus. |
| `P14.00` | Local communication address | `1` (default), unique per drive | Slave ID — must match the value entered in TapHome. `0` is reserved for broadcast. |
| `P14.01` | Communication baud rate | `4` = 19 200 bps (default) | Must match the gateway's RS-485 setting. |
| `P14.02` | Data bit check | `1` = E,8,1 (Even, 8 data bits, 1 stop bit) | Must match the gateway. Other RTU options: `0`=N,8,1; `2`=O,8,1; `3`=N,8,2. |
| `P14.04` | RS-485 timeout period | `0.0` (disabled) | If enabled and the bus goes silent for longer than the configured time, the VFD raises a `CE` fault (485 communication fault). |

The keypad navigation is: `PRG` → group `P14` → select sub-index → press `DATA/ENT` → adjust value → press `DATA/ENT` again to save.

> [!TIP]
> The TapHome template only reads diagnostic registers (the Fault Reset button ships without a write script), so `P00.01` and `P00.06` are not strictly required. If you only need monitoring, leave the run channel on the keypad/terminals and set just `P14.00`–`P14.02` so the VFD answers Modbus reads.

### Gateway configuration

The gateway needs the following settings:

- **Operating mode:** Modbus TCP server on port `502`
- **RS-485 side:** baud rate, parity, data and stop bits matching `P14.01` and `P14.02` (default 19 200, E, 8, 1)
- **Static IP:** assigned via the gateway's web UI or DHCP reservation
- **Transparent or RTU-in-TCP encapsulation** is not required — TapHome speaks pure Modbus TCP and the gateway must convert frames internally

> [!WARNING]
> If the gateway is configured for "transparent UDP/TCP forwarding" instead of "Modbus TCP server", TapHome will see timeouts. Use the Modbus protocol mode of the gateway, not raw passthrough.

## Device capabilities

The template exposes six devices on the VFD module — all are read-only diagnostics except the empty Fault Reset push-button.

### Diagnostics and monitoring

- **Operation Speed** — motor rotational speed in RPM, computed internally by the VFD from the running frequency and the configured motor parameters (motor parameter group P02). Reads register H:0x3005, range 0–65535 RPM.
- **Output Current** — motor line current from H:0x3004 in 0.1 A units (raw register value). Divide by 10 in TapHome scripts to get amperes; range up to 3000.0 A.
- **VFD Identification Code** — model identifier from H:0x3016. Useful for confirming the template is bound to a Goodrive 20 unit (see the note below about the choice of register).

### Fault handling

- **Fault Code (latched)** — latched fault number from H:0x5000. Persists across a transient fault until the user issues a Fault Reset, so the last fault stays visible on the dashboard. Codes follow the GD20 fault table:

  | Code | Mnemonic | Meaning |
  |------|----------|---------|
  | 1 | OUt1 | Inverter unit U-phase protection |
  | 2 | OUt2 | Inverter unit V-phase protection |
  | 3 | OUt3 | Inverter unit W-phase protection |
  | 4 | OC1 | Overcurrent during acceleration |
  | 5 | OC2 | Overcurrent during deceleration |
  | 6 | OC3 | Overcurrent at constant speed |
  | 7 | OV1 | Overvoltage during acceleration |
  | 8 | OV2 | Overvoltage during deceleration |
  | 9 | OV3 | Overvoltage at constant speed |
  | 10 | UV | Bus undervoltage |
  | 11 | OL1 | Motor overload |
  | 12 | OL2 | VFD overload |
  | 13 | SPI | Phase loss on input side |
  | 14 | SPO | Phase loss on output side |
  | 15 | OH1 | Rectifier module overheat |
  | 16 | OH2 | Inverter module overheat |
  | 17 | EF | External fault |
  | 18 | CE | 485 communication fault |
  | 19 | ItE | Current detection fault |
  | 20 | tE | Motor auto-tuning fault |
  | 21 | EEP | EEPROM operation fault |
  | 22 | PIDE | PID feedback offline |
  | 23 | bCE | Braking unit fault |
  | 24 | END | Running time reached |
  | 25 | OL3 | Electronic overload pre-alarm |
  | 26 | PCE | Keypad communication error |
  | 27 | UPE | Parameter upload error |
  | 28 | DNE | Parameter download error |
  | 32 | ETH1 | To-ground short-circuit fault 1 |
  | 33 | ETH2 | To-ground short-circuit fault 2 |
  | 34 | dEu | Speed deviation fault |
  | 35 | STo | Synchronous-motor maladjustment |
  | 36 | LL | Electronic underload |

- **Fault Reset** — push-button device intended to write `0x0007` to the control register H:0x2000. **The Read and Write scripts ship empty** in the supplied template — the button is visible in TapHome but does not send any Modbus frame when pressed. To make it functional, open the device in the TapHome integration tool and add `WriteButtonPressedState = MODBUSW(H, 0x2000, 0x0007)`, or trigger the same write from a Smart Rule.

### Energy meter wrapper (Output Current, mislabelled)

- **Output Current (electricity meter wrapper)** — a `ModbusElectricityMeter` device that maps two service attributes onto the same Output Current register (H:0x3004, 0.1 A units):

  | Service attribute | UI label | Reads | Reality |
  |-------------------|----------|-------|---------|
  | `readtotalconsumption` | Total Consumption (kWh) | `H:0x3004 / 100` | Output current scaled by 1/100 — **not** cumulative energy |
  | `readdemand` | Demand (W) | `H:0x3004` | Raw output current in 0.1 A — **not** instantaneous power |

  The GD20 does not expose a kWh totalizer over Modbus, and the template does not read the output power register (H:0x3006), so the original template fakes both values by reading the line current. Use the dedicated **Output Current** sensor (above) for accurate readings, and ignore the values shown under "Total Consumption" and "Demand". For real consumption tracking add an external kWh meter on the VFD's input feed.

> [!NOTE]
> **Why "Total Consumption" shows amps.** The XML reuses register H:0x3004 (Output Current) three times. Both the energy and the power service attribute on the wrapper read the same current register and label it incorrectly. This is a known quirk of the supplied template — the correct power register would be H:0x3006, and the GD20 has no kWh totalizer.

## Troubleshooting

### No Modbus communication (timeouts in TapHome)

1. Ping the gateway from TapHome Core — confirm the static IP is reachable.
2. Verify the gateway is configured as a **Modbus TCP server on port 502** (not raw transparent passthrough).
3. Confirm the VFD's slave address (`P14.00`) matches the Slave ID entered in TapHome.
4. Match the gateway's RS-485 settings to `P14.01` (baud rate) and `P14.02` (parity / data / stop bits) — defaults are 19 200, E, 8, 1.
5. Check the on-board **485 DIP switch** at the end of the bus is `ON` and that the rear wire-cap of the terminal block is seated.
6. Swap `485+` and `485-` if the LEDs on the gateway are blinking but TapHome reports CRC errors — A/B polarity is the most common wiring mistake.

### Drive shows fault `CE` (18)

The VFD itself has detected an RS-485 communication fault. Check:

- Wiring polarity (`485+` ↔ A, `485-` ↔ B).
- Termination resistor at both ends of the bus (120 Ω each).
- Cable shield grounded at one end only.
- Baud rate and parity match between gateway and `P14.01` / `P14.02`.
- `P14.04` (RS-485 timeout) — if a value is set, the VFD must see traffic at least that often. Set to `0.0` to disable the watchdog while debugging.

### Fault Reset button has no effect

The supplied template has empty Read/Write scripts on the Fault Reset device. Open the device in the TapHome integration tool and add a write script that sends `0x0007` to register H:0x2000. Until then, reset latched faults from the VFD keypad (`STOP/RST` button) or by power-cycling the drive.

### Operation Speed reads 0 while the motor runs

`Operation Speed` (H:0x3005) is computed from the running frequency and the motor parameter group `P02` (rated frequency, rated speed, pole count). If those motor parameters are at defaults that do not match your motor, the drive may report 0 or nominal nameplate values. Run motor auto-tuning or set the motor nameplate values manually in `P02` so the drive can derive RPM correctly.

### VFD Identification Code returns an unexpected value

The template reads the undocumented register H:0x3016. The **documented** identification register is H:0x2103, which returns `0x0106` for both Goodrive 20 and Goodrive 20-EU. If H:0x3016 returns something unfamiliar, treat it as opaque diagnostic data — the VFD is otherwise functional. To switch the read to the documented register, change the script in the TapHome integration tool to `MODBUSR(H, 0x2103, Int16)`.

## Available devices 6

These devices appear in TapHome after import.

INVT Goodrive 20 VFD Module

Output Current (electricity meter wrapper) Electricity Meter Read-only

ModbusElectricityMeter wrapper — both service attributes read the Output Current register (H:0x3004), so values are in amps, not kWh or watts. See note below.

Register: H:0x3004 Int16 Unit: A direct (0.1 A per LSB)

Read total consumption

```taphome
MODBUSR(H, 0x3004, Int16) / 100
```

Read demand

```taphome
MODBUSR(H, 0x3004, Int16)
```

Fault Code (latched) Variable Read-only

Latched VFD fault number from H:0x5000 — persists until a Fault Reset is issued. Codes follow the GD20 fault table (e.g. 1=OUt1 IGBT phase-U fault, 4=OC1 acceleration overcurrent, 18=CE communication fault)

Register: H:0x5000 Int16 numeric (fault code lookup)

Read

```taphome
MODBUSR(H, 0x5000, Int16)
```

Fault Reset Push Button Read and write

Push-button device intended to clear a latched VFD fault. Read/Write scripts ship empty in the template — the button must be wired to write 0x0007 to H:0x2000 in the TapHome integration tool before it actually issues a reset

Register: H:0x2000 (intended) Int16 command (write 0x0007 = Fault reset)

Operation Speed Variable Read-only

Motor rotational speed in RPM, computed internally by the VFD from the running frequency and the configured motor parameters (motor parameter group P02). Read from H:0x3005 — value range 0–65535 RPM

Register: H:0x3005 Int16 Unit: RPM

Read

```taphome
MODBUSR(H, 0x3005, Int16)
```

Output Current Variable Read-only

Output line current to the motor in 0.1 A units (raw register value). Read from H:0x3004 — divide by 10 in TapHome scripts to get amperes

Register: H:0x3004 Int16 Unit: A (raw value is 0.1 A) direct (0.1 A per LSB)

Read

```taphome
MODBUSR(H, 0x3004, Int16)
```

VFD Identification Code Variable Read-only

Model identifier read from H:0x3016. Note: the documented identification register is H:0x2103 (returns 0x0106 for the Goodrive 20 family). The template reads an undocumented alias — treat the value as opaque diagnostic data

Register: H:0x3016 Int16 numeric (model code, undocumented decode)

Read

```taphome
MODBUSR(H, 0x3016, Int16)
```

**Connection:** Modbus TCP • Slave ID: $\[SlaveId]

Possible improvements (16)

- H:0x2000 Run / Stop / Direction control — Write 0x0001=Forward run, 0x0002=Reverse run, 0x0003=Forward jog, 0x0004=Reverse jog, 0x0005=Stop, 0x0006=Coast to stop, 0x0007=Fault reset, 0x0008=Jog stop. The template has FM\_Fault\_Reset device but its WriteButtonPressedState is empty so even the documented Fault Reset is not actually issued. There are no Run/Stop/Forward/Reverse buttons at all. Without these the VFD cannot be commanded from TapHome - this is the most significant gap.
- H:0x2001 Frequency setpoint — 0-Fmax in 0.01 Hz units. Required to drive the motor speed via Modbus when P00.06=8 (frequency source = Modbus). Not exposed by template.
- H:0x2100 Status word 1 (running state) — 1=Forward running, 2=Reverse running, 3=Stop, 4=Fault, 5=POFF, 6=Pre-exciting. The INVT manual prints '0001=Forward, 0002=Forward' which is a typo - the second value is Reverse. Without this register the user cannot tell from TapHome whether the drive is currently running, stopped, or in fault.
- H:0x2102 Active (live) fault code — Same fault-table values as H:0x5000 but reflects the CURRENTLY active fault, not the latched one. The template uses the latched register (0x5000) instead. Both are valid; 0x2102 is more useful for live diagnostics, 0x5000 for keeping the last fault visible until reset.
- H:0x2103 Documented VFD identification code — Returns 0x0106 = Goodrive series (Goodrive 20 vector VFD) for both GD20 and GD20-EU. The template reads 0x3016 instead, which is not documented. EU manual V1.6 has a typo stating 0x0110 in one paragraph - real-world devices return 0x0106.
- H:0x3000 Running frequency (Hz) — 0-Fmax in 0.01 Hz units. The template reads RPM (0x3005) but not the underlying Hz value. Hz is more useful for VFD diagnostics and PID tuning.
- H:0x3001 Set frequency (Hz) — Reflects the active frequency reference (0.01 Hz units). Useful to confirm the setpoint sent on 0x2001 is accepted.
- H:0x3002 DC bus voltage — 0.0-2000.0 V in 0.1 V units. Not in template.
- H:0x3003 Output voltage — 0-1200 V (1 V units). Combined with output current would allow approximate power computation.
- H:0x3006 Output power — -300.0 to 300.0% of rated motor power (0.1% units). This is the correct register for 'Demand' / instantaneous power - the template's FM\_Elektromer.Demand mislabels output current as power.
- H:0x3007 Output torque — -250.0 to 250.0% (0.1% units).
- H:0x3008 / 0x3009 PID setting / PID feedback — -100.0% to 100.0% (0.1% units). For PID control loops.
- H:0x300C-0x300E Analog inputs AI1 / AI2 / AI3 — AI1/AI2 = 0.00-10.00 V, AI3 = -10.00 to +10.00 V. Useful when external sensors are wired to the VFD terminals.
- H:0x300A / 0x300B Digital input / output state — Bit-encoded I/O state (0x000-0x1FF). Not in template.
- — The GD20 does NOT expose a kWh totalizer over Modbus. The XML's FM\_Elektromer.TotalConsumption fakes one by reading current and dividing by 100, which is meaningless as energy. For real consumption tracking add an external kWh meter (e.g. Eastron SDM630, Carlo Gavazzi EM24) on the VFD's input feed.
- — The XML's FM\_Elektromer.Demand reads output current and labels it as Demand (typically W). Real instantaneous power is at H:0x3006 (output power, % of rated) - not exposed by the template. To get watts the user must combine bus voltage (0x3002), output current (0x3004), and a power-factor estimate.

## Import parameters

Enter these values when you import the XML.

| Asked in the app | Default       |
|------------------|---------------|
| Slave Id         | `1`           |
| IP address       | `192.168.1.0` |

## Sources

- INVT Goodrive20 Series VFD Operation Manual V1.9
  
  [www.invt.com](https://www.invt.com/uploads/file1/20230629/GD20%20Series%20VFD%20Manual_V1.9.pdf) 2026-04-25
  
  [PDF](https://taphome.com/compatibility/devices/invt-gd20-sid2/manufacturer/gd20-series-vfd-manual.pdf)
- Goodrive20-EU Series VFD Operation Manual V1.6
  
  [download.savior.com.tr](http://download.savior.com.tr/INVT/AC_DRIVER/GD20_EU/Goodrive20-EU%20Series%20VFD_V1.6.pdf) 2026-04-25
  
  [PDF](https://taphome.com/compatibility/devices/invt-gd20-sid2/manufacturer/goodrive20-eu-series-vfd-v16.pdf)
- ControlVFDviaModbus — Community GitHub project for INVT GD20 Modbus RTU
  
  [github.com](https://github.com/DrT2103/ControlVFDviaModbus) 2026-04-25

Manufacturer documents are © their respective owners. They are provided as published by the manufacturer, for reference only.

## Related Documentation

- [Modbus Integration](https://taphome.com/en/compatibility/modbus-guide/)
- [Modbus](https://taphome.com/en/docs/integration/modbus/)
- [Simple configuration using templates](https://taphome.com/en/docs/integration/modbus/templates/)
- [Modbus scripts and prefetch](https://taphome.com/en/docs/script/modbus-scripts/)
- [Modbus functions](https://taphome.com/en/docs/script/modbus/)
- [Modbus data types](https://taphome.com/en/docs/script/modbus-data-types/)

