MG Energy Systems batteries on NMEA 2000: PGNs, VREGs and MGREGs
MG Energy Systems' battery systems are a common partner for Victron gear on electric and hybrid boats — the MG Master LV is what used to be sold as Victron's Lynx Ion BMS, and MG is the battery maker with VE.Can built into its Master BMS. Unusually, MG publishes exactly what it sends on the bus. This guide walks through it, with frames you can paste into the CAN frame decoder.
Everything here is from MG's Master LV Communication Guide, version 1.42.0.0 (27 August 2026) unless stated. The Master HV and SmartLink MX have their own communication guides.
Choosing the protocol
The Master LV's CAN interface — the two right-most connectors, one RJ45 and one M12 — runs one of three current protocols: MG NMEA2000, SMA, or a general BMS protocol (SMA plus extra messages), one at a time. The MG NMEA2000 protocol uses MG's own NMEA 2000 manufacturer code (1160) and is MG's recommendation for new designs; the older VE-NMEA2000 variants use Victron's code. This guide covers MG NMEA2000.
- 250 kbit/s, 29-bit identifiers (CAN 2.0B).
- Default source address 0x50; it can change through address claiming when more than one MG device is on the bus.
- If Micropower chargers are enabled in the BMS settings, 11-bit CAN messages with ID 0x600 also appear; MG doesn't describe them in this guide.
For a Victron GX, MG's installation guide says to check that the external CAN bus protocol is MG NMEA2000 — the device then shows in the GX device list with a name starting with MG — and to use DVCC, selecting the MG BMS as Controlling BMS (GX firmware 3.00 or later).
Message list
| PGN | Name | Notes |
|---|---|---|
| 60928 (0xEE00) | ISO Address Claim | manufacturer 1160, class 35, function 170 |
| 126996 (0x1F014) | Product Information | model, e.g. MG BMS 24-48V/600A; serial MGE… |
| 127508 (0x1F214) | Battery Status | instances: data, data + 1, data + 2 |
| 127506 (0x1F212) | DC Detailed Status | fast-packet |
| 128003 (0x1F403) | Electric Energy Storage Status, Rapid Update | every 500 ms |
| 127491 (0x1F203) | Electric Energy Storage Status, Dynamic | fast-packet, every 1.5 s |
| 127495 (0x1F207) | Electric Energy Storage Information | fast-packet, every 3 s |
Data instance is one number shared by all of them (it is called Battery instance, DC instance or Energy Storage Identifier depending on the PGN). It can be set in steps of 32 — 0, 32, 64 … 224 — so several MG systems can share a bus. It is stored, and falls back to 0 if invalid at boot.
Address claim
MG's own example, a SmartLink MX at address 0x50:
ID 18EEFF50
data AE 00 10 91 00 AA 46 C0
Decode it: manufacturer MG Energy Systems, function Battery, class Electrical Generation. To find out which MG product holds an address, MG sends a VREG request for the product ID (see below) and checks the answer before trusting the address.
Battery Status — PGN 127508, three instances
Every 1.5 s, single frame, the same layout three times:
| Battery instance | Bytes 1–2 (0.01 V) | Bytes 3–4 (0.1 A) | Bytes 5–6 (0.01 K) |
|---|---|---|---|
| data instance | pack voltage | pack current (+ = charging) | highest battery temperature |
| data instance + 1 | lowest cell voltage | not implemented, FF 7F | lowest cell temperature |
| data instance + 2 | highest cell voltage | not implemented, FF 7F | highest cell temperature |
19F21450 00 78 14 83 FF 3F 75 05 instance 0: 52.40 V, −12.5 A, 27 °C
19F21450 01 48 01 FF 7F B5 72 05 instance 1: lowest cell 3.28 V, 20.5 °C
19F21450 02 4E 01 FF 7F 13 74 05 instance 2: highest cell 3.34 V, 24.0 °C
Decode instance 0, 1 and 2. A generic display labels all three "battery voltage" — the instance number is what tells you a 3.28 V reading is a cell, not a flat pack. The last byte is the sequence ID shared by related messages.
The voltage field is signed 16-bit in 0.01 V steps, so it stops at 327.64 V. For high-voltage systems MG points to its own MGREG system voltage register (below), and 128003 carries voltage up to 6553.2 V.
DC Detailed Status — PGN 127506
Eleven bytes in two fast-packet frames: SID, DC instance, DC type (0 = battery), state of charge (1 %), state of health (1 %), time remaining (1 minute), ripple voltage (not implemented) and amp hours (1 Ah). It is the same layout as on a Victron Lynx BMS — see the Lithium NG guide for a byte-by-byte example.
The Electric Energy Storage PGNs
NMEA added electric-propulsion and energy-storage messages to NMEA 2000 in version 3.000. MG sends three of them. One caution first: the open-source canboat database marks its entries for these PGNs as guesses, and its field layout does not match MG's. Our frame decoder uses MG's documented layout for these three PGNs; other tools built on canboat may show different numbers.
128003 — Electric Energy Storage Status, Rapid Update
Every 500 ms, one frame:
| Byte | Bits | Field |
|---|---|---|
| 0 | Energy Storage Identifier (= data instance) | |
| 1 | 0–3 | Battery status: 0 normal, 1 pre-charge, 2 connected, 3 storage, 4 balancing, 14 error, 15 n/a |
| 1 | 4–5 | Isolation status (not implemented) |
| 1 | 6–7 | Battery error: 0 normal, 1 error |
| 2–3 | Battery voltage, unsigned, 0.1 V | |
| 4–5 | Battery current, signed, 0.1 A | |
| 6–7 | reserved (FF 7F) |
ID 15F40350
data 00 32 0C 02 83 FF FF 7F connected, no error, 52.4 V, −12.5 A
Decode it. Byte 1 0x32 = binary 00 11 0010: status 2 (connected), isolation 3 (n/a), error 0.
127491 — Electric Energy Storage Status, Dynamic
Every 1.5 s, fast-packet, 15 bytes. The fields you can't get elsewhere are here: usable state of charge, signed time remaining, three cell temperatures, and the BMS's live current limits.
| Bytes | Field | Encoding |
|---|---|---|
| 0 | Energy Storage Identifier | |
| 1 | State of charge (usable, not physical) | 0.5 %, 0–200 = 0–100 % |
| 2–3 | Time remaining | signed, minutes: negative = time to full, positive = time to empty |
| 4–5 / 6–7 / 8–9 | Highest / lowest / average cell temperature | 0.01 K |
| 10–11 | Max discharge current | 0.1 A, changes with conditions |
| 12–13 | Max charge current | 0.1 A, changes with conditions |
| 14 | Cooling / heating system status | not implemented |
reassembled payload: 00 AA A6 FF 3F 75 77 74 DB 74 B8 0B DC 05 FF
Decode it: SoC 0xAA = 170 × 0.5 = 85 %; time 0xFFA6 = −90 → 90 minutes to full; cells 27 / 25 / 26 °C; limits 300 A discharge, 150 A charge.
127495 — Electric Energy Storage Information
Every 3 s, fast-packet, 19 bytes: chemistry, the four temperature thresholds where the BMS derates or shuts off, state of health and charge/discharge permission.
| Bytes | Field |
|---|---|
| 0 | Energy Storage Identifier |
| 1 bits 0–1 | Energy storage mode (not implemented) |
| 1 bits 4–7 + byte 2 | Chemistry, 12 bits: 0x040 lithium, 0x041 LiFePO4, 0x044 NMC |
| 3–4, 5–6 | Max temperature derating / shut-off threshold, 0.01 K |
| 7–8, 9–10 | Min temperature derating / shut-off threshold, 0.01 K |
| 11–12 | Usable energy, 0.1 kWh (not implemented) |
| 13 | State of health, 0.5 % |
| 14–15 | Cycle counter (not implemented) |
| 16 bits 0–1 | Full status: 0 charge allowed, 1 no charge allowed |
| 16 bits 2–3 | Empty status: 0 discharge allowed, 1 no discharge allowed |
| 17, 18 | Max / min SoC threshold (not implemented) |
An example payload decodes as LiFePO4, derating above 45 °C, shut-off above 55 °C, derating below 5 °C, shut-off below −10 °C, SoH 98 %, charge and discharge allowed. (The threshold values in the example are illustrative, not MG's settings.)
VREGs: Victron's register messages
MG also answers Victron's proprietary VREG messages: PGN 61184, CAN ID 1CEF<to><from> (1CEFFF<from> for broadcast), data starting 66 99, then the register ID and up to four data bytes, little endian. Registers marked periodic are broadcast every 5 s; on change within a second of a change.
Useful ones from MG's list:
| VREG | Meaning | Format |
|---|---|---|
| 0x0100 | Product ID | e.g. 0xB0C3 = MG BMS 24-48V/600A |
| 0x0102 | Firmware version | identifier + 24-bit version, 0x123456 = v12.34.56 |
| 0xED8D / 0xED8F | Voltage / current | sn16, 0.01 V / 0.1 A (periodic) |
| 0x0385 | Lowest : highest cell voltage | 2 × un16, 0.01 V (periodic) |
| 0x0386 | Lowest : highest cell temperature | 2 × un16, 0.01 K (periodic) |
| 0x0FFF | State of charge | un16, 0.01 % (periodic + on change) |
| 0xEEFF | Consumed Ah | sn32, 0.1 Ah |
| 0x2100 | Status flags | 32 bit flags: charged, charging, contactor closed, alarms, allowed to charge / discharge … |
| 0x0371 | BMS state | 9 running, 10 error, 14 standby, 16 pre-charging … |
| 0x2101 | BMS error | 0 OK, 13 over-voltage, 26 contactor failure, 37 interlock … |
| 0x0390–0x0393 | Charge voltage, charge current, discharge voltage, discharge current limits | un32, 0.01 V / 0.1 A (periodic + on change) |
MG's own request–reply example — firmware version of the node at 0x50, asked by 0x20:
1CEF5020 66 99 01 00 02 01 FF FF VREQ (0x0001) for register 0x0102
1CEFFF50 66 99 02 01 00 00 04 01 broadcast reply: identifier 0, v1.04
1CEF2050 66 99 02 00 02 01 00 80 …or, if unsupported: VACK with code 0x8000
Decode the request, reply and NACK. A status-flags broadcast like 66 99 00 21 90 00 00 06 decodes as charging, main safety contactor closed, allowed to charge, allowed to discharge. The frame decoder knows the registers in the table above.
MGREGs: MG's own registers
Same idea, MG's manufacturer code instead: data starts 88 9C. Two worth knowing:
- 0x48EE System voltage — sn32, 0.001 V, every 250 ms. The way to read pack voltage above 327 V.
- 0x2140 / 0x2141 System status external 1 and 2 — bit flags: initializing, operational, DC bus connected, warning, failure, pre-charging, charging / discharging allowed, temperature alerts and more.
1CEFFF50 88 9C EE 48 E0 CC 00 00 system voltage 52.448 V
Combined systems
With several MG BMSes under a SmartLink MX (or SmartLink PLC), MG recommends reading the registers sent by the combining device rather than each BMS: it combines the raw data and adjusts for the number of devices available.
Sources
Checked on 25 October 2026:
- MG Energy Systems — Master LV Communication Guide, v1.42.0.0 (27-08-2026): protocols, PGN list and field definitions, data instances, VREG and MGREG lists and examples
- MG Energy Systems Knowledge Base — Tracking an MG device on the NMEA2000 CAN bus, Managing MG devices on NMEA2000 CAN-bus and MG – Victron Energy installation guide
- Victron Energy — Battery compatibility: MG Energy Systems (Master LV = former Lynx Ion BMS; VE.Can in the Master BMS)
- Victron Energy — VE.Can registers (public): VREG message format
- canboat v9.0.0 — layouts of the standard PGNs, and its "unverified" flag on PGNs 128003, 127491 and 127495
- Panbo — NMEA adds electric propulsion messages to NMEA 2000 standard (version 3.000)
We are not affiliated with MG Energy Systems or Victron Energy.