Electric motor drives on a Cerbo GX
A Victron GX device can show the propulsion motor next to the batteries — RPM, power, direction, motor and controller temperature — on its Boat page. There are three ways the data gets there, and they look very different on the wire. This guide covers each one down to the messages, so you can check your installation with the log analyzer or read the values from your own code.
| Route | For | On the wire |
|---|---|---|
| CANopen E-drive | Sevcon Gen4 AC, Curtis F, Curtis E/SE, DMC Sigma2N controllers | GX polls the controller with CANopen SDO reads, 11-bit IDs |
| NMEA 2000 E-drive | drives with an NMEA 2000 interface | the drive broadcasts e-drive and engine PGNs, 29-bit IDs |
| DC meter as "Electric Drive" | any motor, via a SmartShunt or similar | battery-side voltage, current, power only |
All three end up in the same place: the com.victronenergy.motordrive service.
Route 1: CANopen E-drive
Requirements and wiring
- Venus OS 3.70 or later.
- A modified RJ45 cable from the controller's CAN port to a GX VE.Can port: RJ45 pin 3 CAN ground, pin 7 CAN-H, pin 8 CAN-L. Victron's GX manual gives the controller pins — for example Sevcon Gen4: CAN-H on 13 or 16, CAN-L on 24 or 27, ground to B−. All nodes need a common ground; terminate both ends of the bus with 120 Ω.
- A unique CANopen node ID per controller if there is more than one.
On the GX: Settings → Connectivity → (VE.Can port) → CAN-bus profile, then either VE.Can & CANopen E-drive (250 kbit/s) to share the VE.Can network, or CANopen E-drive (500 kbit/s) for a dedicated bus. Then CANopen E-drives → Scan. Found node IDs are listed and kept across reboots and firmware updates. Tested by Victron: Sevcon Gen4 AC size 4 (size 2 and 6 expected to work, Gen4 DC not tested), Curtis F6-A, Curtis 1232 SE and 1234 E.
What the GX does on the bus
Victron publishes the driver as open source, dbus-canopen-motordrive, which makes it possible to say exactly what happens. (Details below are from the code as of 14 October 2026; they can change between Venus OS versions.)
Discovery. For each node it reads object 0x1008 (manufacturer device name) with a segmented SDO upload. A name containing Gen4 is a Sevcon; one starting AC F is a Curtis F. Curtis E/SE controllers don't implement 0x1008, so on failure the GX reads 0x1018 sub 1 (vendor ID): 0x4349 means Curtis, 0x04F1 means DMC.
Polling. Every 125 ms it reads the motor speed; once a second that read is replaced by a full read of every value. Per controller that is roughly 12–15 SDO requests a second depending on the driver, each with a response — around 25–30 frames a second, worth knowing on a shared 250 kbit/s VE.Can network. The GX also checks for controllers every 10 s.
The objects it reads:
| Value | Sevcon Gen4 | Curtis F | Curtis E/SE | DMC Sigma2N |
|---|---|---|---|---|
| Battery voltage | 0x5100 sub 1, u16 × 0.0625 V | 0x34C1, u16 × 0.01 V | 0x324C, s16 × 0.015625 V | 0x383F, s16 × 0.1 V |
| Battery current | 0x5100 sub 2, s16 × 0.0625 A | 0x338F, s16 × 0.1 A | 0x359E, s16 × 0.1 A | 0x383E, s16 × 0.1 A |
| Motor speed | 0x606C, s16 rpm | 0x352F, s16 rpm | 0x3207, s16 rpm | 0x606C, s32 rpm |
| Motor temperature | 0x4600 sub 3, s16 | 0x3536, s16 × 0.1 °C | 0x320B, s16 × 0.1 °C | 0x3836, byte − 51 |
| Torque | 0x4602 sub 0x0C, s16 | 0x3538, float | — | 0x411C, s16 × 0.1 |
| Controller temperature | 0x5100 sub 4, s8 | 0x3000, s16 × 0.1 °C | 0x322A, s16 × 0.1 °C | 0x3837, byte − 51 |
Power is not read: the GX multiplies voltage by current. Direction comes from the sign of the speed — positive forward, negative reverse, zero neutral — flipped if the controller is configured with reversed direction (Curtis F reads 0x362F, Curtis E/SE 0x306C for this). The Curtis E/SE driver treats speeds within ±25 rpm and currents within ±0.1 A as zero. On a DMC it also reads fault code and sub-code (0x3840, 0x3841).
Reading the traffic yourself
A speed read on a Sevcon at node 1:
601 40 6C 60 00 00 00 00 00 SDO upload request, object 0x606C sub 0
581 4B 6C 60 00 DC 05 00 00 response, 2 bytes: 0x05DC = 1500 rpm
Decode the request and response. The command byte says how many data bytes are valid (4B = 2, 43 = 4, 4F = 1).
The frame decoder shows the raw value; the scaling is device-specific. Battery voltage 0x0340 from 0x5100 sub 1 is 832 × 0.0625 = 52.0 V; battery current 80 FD from sub 2 is signed: −640 × 0.0625 = −40 A (links open the signal calculator with these settings).
A heartbeat 701 05 means node 1 is operational. An SDO response starting 80 is an abort — for example code 0x06020000, object does not exist, which is what a wrong controller type or firmware returns.
Faults. For a Sevcon, the driver reads a fault ID from bytes 3–4 of the controller's emergency (EMCY) message — the manufacturer-specific part — and raises a GX notification for known faults such as 0x4602 device too hot or 0x4D43 motor stalled. If an SDO read fails, the GX drops the controller until its next connection check.
Route 2: NMEA 2000 E-drive
NMEA added electric-propulsion messages to NMEA 2000 in version 3.000. A drive with an NMEA 2000 interface shows up on the GX if it meets Victron's requirements:
| Required | |
|---|---|
| Device class | 50 — Propulsion |
| Device function | 155 — Motor, or 160 — Engine gateway |
| PGNs | 128002 Electric Drive Status, Rapid Update; 127490 Electric Drive Status, Dynamic; 127488 Engine Parameters, Rapid Update; 127489 Engine Parameters, Dynamic; 127493 Transmission Parameters, Dynamic |
Check the device's address claim (PGN 60928) first — class and function are there.
127488, 127489 and 127493 are long-established engine PGNs (speed, temperatures, hours, gear). The two e-drive PGNs are new, and here is the honest state of public documentation: the NMEA's definitions are sold, not published, and the open-source canboat database marks both layouts as unverified. canboat's current reading:
128002 — Electric Drive Status, Rapid Update (single frame):
| Bytes | Field (canboat) |
|---|---|
| 0 | Inverter/motor controller instance |
| 1 bits 0–1 / 2–3 | Active motor mode / brake mode |
| 2–3 | Rotational shaft speed, 0.25 rpm |
| 4–5 | Motor DC voltage, 0.1 V |
| 6–7 | Motor DC current, signed 0.1 A |
09F40210 00 FF C0 12 00 02 52 03 (priority 2, from 0x10)
Decodes as 1200 rpm, 51.2 V, 85 A under canboat's layout — the decoder warns that the layout is unverified.
127490 — Electric Drive Status, Dynamic (fast-packet): identifier, operating mode, then motor, inverter, coolant and gear temperatures (0.01 K) and shaft torque.
Before relying on these fields — for an alarm, say — check them against the drive maker's own documentation, the way MG publishes its energy-storage PGNs.
Route 3: a DC meter as "Electric Drive"
A SmartShunt or other DC meter on the motor's supply can be set to the DC meter type Electric Drive; the GX then publishes it as a motordrive service too. You get battery-side voltage, current and power — no RPM or temperatures — but it works with any motor.
Where the data ends up
D-Bus — com.victronenergy.motordrive, per Victron's D-Bus documentation:
| Path | Meaning |
|---|---|
/Dc/0/Voltage, /Dc/0/Current, /Dc/0/Power | V, A, W — current and power can be negative during regeneration |
/Motor/RPM | speed |
/Motor/Direction | 0 neutral, 1 reverse, 2 forward |
/Motor/Temperature, /Controller/Temperature, /Coolant/Temperature | °C, each optional |
/Motor/Torque | optional |
MQTT — the GX's MQTT broker mirrors D-Bus as N/<portal ID>/<service type>/<device instance>/<D-Bus path>, so motor speed is N/<portal ID>/motordrive/<instance>/Motor/RPM. Send a keepalive to R/<portal ID>/keepalive to keep the values flowing.
Modbus TCP — from Victron's register list (attributes.csv):
| Register | Path | Type, scale |
|---|---|---|
| 2048 | /Motor/RPM | int16, × 1 |
| 2049 | /Motor/Temperature | int16, × 10 (°C) |
| 2050 | /Dc/0/Voltage | uint16, × 100 |
| 2051 | /Dc/0/Current | int16, × 10 |
| 2052 | /Dc/0/Power | int16, × 10 — stops at 3,276.7 W |
| 2053 | /Controller/Temperature | int16, × 10 (°C) |
The power register's limit is easy to miss on a multi-kilowatt motor: compute power from registers 2050 × 2051 instead.
Sources
Checked on 25 October 2026:
- Victron Energy — Cerbo GX manual, "Connecting supported non-Victron products": §6.19 CANopen E-drive support (requirements, wiring, profiles, scan) and §6.20 Connecting a NMEA 2000 E-Drive
- Victron Energy on GitHub — dbus-canopen-motordrive (commit of 14 October 2026): discovery, polling intervals, objects and scaling per controller, Sevcon EMCY handling
- Victron Energy on GitHub — Venus OS D-Bus documentation, section motordrive
- Victron Energy on GitHub — dbus_modbustcp
attributes.csv: motordrive registers 2048–2053 - Victron Energy on GitHub — dbus-flashmq: MQTT topic format and keepalive
- Faulhaber — Communications Manual 7000.05050: CANopen SDO command bytes, abort codes, heartbeat states
- canboat v9.0.0 — PGN 128002 and 127490 layouts (flagged unverified)
- Panbo — NMEA adds electric propulsion messages to NMEA 2000 standard
We are not affiliated with Victron Energy, Sevcon (BorgWarner), Curtis Instruments or DMC.
Related reading
- Motor controllers compared — Kelly, Sevcon, Curtis and emDrive ratings
- Marine motor and controller selection
- Victron Lithium NG on NMEA 2000
- MG Energy Systems batteries on NMEA 2000
Want exact numbers for your boat?
Use the configurator to generate a vendor-ready spec sheet.
Start the configurator