NMEA 2000 in Detail¶
Everything the XREG-010 does on the boat network, message by message: what it puts on the bus and what that looks like on a chartplotter, a Victron GX or a Signal K server; what it reads back off the bus and what it does with that; and how it follows charge limits from a managed battery. The short version is the NMEA 2000 page.
Four independent switches govern all of it — NMEA 2000 transmit, receive, RV-C transmit, and charge-limit follow — and all four ship off. Until you turn one on, the regulator is a silent listener and nothing on this page is happening on your bus.
The first half of this page is what the regulator sends, which needs the transmit switch.
How it introduces itself¶
| Product name | XREG-010 |
| Device class | 35 — Electrical Generation |
| Device function | 141 — DC Generator / Alternator |
| Source address | Claimed at power-up, remembered, re-offered at boot (starts at 22) |
| Also published | Heartbeat, product information, configuration information, and the list of PGNs it transmits and receives |
That is a normal, well-behaved node. Any MFD, Signal K server or gateway that enumerates the bus will list it.
On a chartplotter or MFD¶
Add it to a data page like any other DC source.
| What you see | Message | Default instance | Ships |
|---|---|---|---|
| Battery bank — voltage, current, temperature, state of charge | 127508 + 127506 | 0 | on |
| The alternator as its own DC source — voltage, output current, temperature | 127508 + 127506, DC type Alternator | 1 | on |
| Alternator temperature on a dedicated temperature instance | 130312 | 4, source Engine Room | on |
| The extra probe's temperature on a second temperature instance | 130312 | 5, source Engine Room | off |
| Charge stage — bulk, absorption, float, not charging | 127507 | charger 0 | on |
| Field drive percentage — how hard the field is being driven | 127510 | charger 0 | on |
| Battery configuration — chemistry, capacity, nominal voltage | 127513 | 0 | off |
| Engine RPM, from the alternator W-terminal | 127488 | 0 | off |
| Standard engine warning bits — over-temperature, low voltage, not charging | 127489 | 0 | off |
The last three ship off on purpose. Engine RPM and engine parameters collide with a real engine gateway on the same instance, and a battery monitor already on the bus usually owns the bank's configuration. Turn them on only if nothing else is publishing them.
The alarm you want is a temperature alarm on the regulator's temperature instance. If the sensor fails or goes stale the regulator stops sending that message rather than publishing a stale number, which trips the data-lost alarm every major MFD offers. A silently failed temperature sensor is how alternators cook.
On a Victron GX¶
A GX shows it as a generic alternator, with no Victron-side support for this specific product and nothing to configure on their end.
Victron's requirements for that, from the Cerbo GX manual, and what the regulator does:
| Victron requires | Regulator |
|---|---|
| Device Class 35 — Electrical Generation | yes |
| Device Function 141 — DC Generator | yes |
| DC type set to Alternator in PGN 127506 | yes, on the alternator instance |
| PGN 127508 carrying voltage, current and temperature | yes, on the same instance |
Connect the GX to the backbone the normal way — its CAN ports are RJ45, so it needs Victron's VE.Can-to-NMEA 2000 cable. The regulator's own port is the standard NMEA 2000 Micro-C connector; no adapter and no crossover cable are involved on our end.
Two limits, stated plainly because they matter:
- Victron's own wording is that this data is used for display, not for system calculations or control functions. The alternator appears; the GX does not fold its output into DVCC current sharing. A GX sends a charge-current allocation only to charging devices it has built-in support for — three alternator regulators have it, this one does not yet. We are in touch with Victron about it.
- This path is documented by Victron but has not yet been confirmed on our own bench against a real GX. If you run one, we would like to hear what you see.
Charge limits travel the other way and do work today: the charge voltage set-point a GX broadcasts is followed, if you turn that on — see Following charge limits from a managed battery, below.
On Signal K¶
Nothing to configure. A Signal K server reading the NMEA 2000 bus picks up everything in the table above, where you can set threshold alarms, push notifications to a phone, and build dashboards.
On an RV-C system¶
RV-C is the CAN protocol used by RVs, off-grid installs and a few marine battery systems — Lithionics-class ones in particular. It runs at the same 250 kbps on the same wire as NMEA 2000, so nothing extra is fitted and nothing else has to be switched off. The regulator can speak it as well, from its own switch in Setup → Integrations → RV-C, off out of the box because on a purely NMEA 2000 boat there is nothing listening. Joining the bus happens at startup, so a reboot is needed after turning it on.
What it publishes:
- Charger status. The voltage and current being aimed for, the current as a percentage of the alternator's rating, and the charge stage.
- Measured output. The voltage, current and temperature measured at the alternator, and how the regulator ranks against other charging sources on the same DC bus.
- Whether output is being held back, and why. RV-C names a small set of reasons; where the cause is a heat derate or the voltage loop, that is what is published. Where the reason is one RV-C has no word for — a belt-load limit at low engine speed, for instance — the fact that output is limited is still published, with the cause left blank rather than mislabelled.
- Configuration. Battery type, bank size, alternator rating, charging algorithm.
- The alternator as its own DC source: voltage, output current and temperature.
- Faults. A red or yellow flag with a code naming what failed and how — over voltage, over current, alternator over temperature, a sensor that stopped updating or disagrees with its partner, an implausible tachometer reading, a bank too cold or too hot to charge. It repeats every five seconds when nothing is wrong, so a display can tell a healthy regulator from a missing one. States that are deliberate are never faults: switched off, manual mode, engine below the minimum speed, a solar rest, or a battery system withholding permission.
Two things it will not do. It never publishes a battery bank as a DC source — that is the battery monitor's or BMS's job, and two devices describing one bank is how a display ends up showing the wrong number. And it never publishes the message a battery master uses to command charge limits; that message is one the regulator listens to, and sending it would make the regulator look like an authority over every other charging source on the bus.
Instance numbers, and the one collision worth knowing¶
Every instance above is user-settable in Setup → Integrations → NMEA 2000. Two devices sharing an instance talk over each other, and the symptom is a reading that flickers between two values or vanishes.
- Give the alternator a different instance from the battery bank. They ship different.
- If the boat also has a Wakespeed regulator, avoid alternator instances 48 to 55. That block is what a Wakespeed uses for its alternator, and 48 is where a default one lands.
- If a shore charger or solar controller already claims charger instance 0, move ours.
- RV-C has its own separate instance numbers, set in the RV-C card. The alternator ships as charger 49 and DC source 5, which keeps clear of both a default Wakespeed and the four DC source numbers RV-C reserves for battery banks.
What is deliberately not sent¶
- Nothing is fabricated. A value with no live source is transmitted as the NMEA "not available" code, never as a stale or invented number, and a single-value temperature message is skipped entirely while its probe reads nothing. The battery bank's temperature field is sent only from a probe wired to the battery and given the battery role, never a temperature read back off the network.
- Alternator shaft speed has no standard NMEA 2000 message. The regulator computes it from engine speed and the pulley ratio for the bearing-life estimate, but there is nowhere standard to publish it, and putting it in the engine-speed message would misreport engine RPM.
- The alternative charger-status message (127750). It is the newer stand-in for 127507, and it duplicates what 127507 and 127510 already carry.
What it reads from the network¶
Receiving is its own switch, separate from transmitting, and it also ships off. With it on, the bus becomes a sensor input:
| What it reads | Message | What it is for |
|---|---|---|
| Battery voltage, current, temperature, state of charge and health | 127508 + 127506 | Display and telemetry only. The instance is selectable (ships 0), which is how you point it at a shunt, a battery monitor, or the "virtual shunt" a Victron GX bridges onto the bus |
| Position and satellite count | 129029 + 129540 | Anchorage and trip records |
| Course and speed over ground | 129026 | Sailing performance, speed records, distance run |
| Heading | 127250 | True-wind maths — the regulator uses the reference frame and the magnetic variation the message itself carries rather than assuming either |
| Apparent wind speed and angle | 130306 | Sailing performance. A sender that reports wind in an earth frame instead is converted to a boat-relative angle |
| Speed through water | 128259 | Preferred over speed over ground for sailing performance, because it excludes current |
| Depth | 128267 | Anchorage comfort scoring |
| GPS time | 126992 | The preferred clock source whenever it is arriving |
| Charge limits from a managed battery | below | The only received data that can influence charging, behind its own switch |
Two things worth stating plainly. No received value moves the alternator field — apart from the charge limits below, and from a received battery temperature, everything here is display, records and performance maths, and received battery data never feeds the regulator's own state-of-charge count or its voltage and current targets. The temperature exception is narrow and deliberate: a battery temperature published on the bus is one of the sources the cold- and hot-charge lockouts and the voltage loop's battery-temperature gain correction can act on, in place of a probe wired to the bank. Voltage, current and state of charge received from the bus stay display-only. And a chatty bus cannot swamp the regulator: heading, wind, position and course/speed are each throttled to roughly one update every couple of seconds, and messages the regulator does not use are dropped at the door.
Following charge limits from a managed battery¶
Its own switch again, also off out of the box. Turned on, the regulator follows the charge voltage limit and charge current limit published by a managed battery system — a Victron system on VE.Can, or an RV-C battery master.
What arrives differs by dialect. An RV-C battery master broadcasts both limits, and both are followed. On a Victron system the charge voltage set-point is broadcast to the whole bus and is followed today; the per-device current allocation a GX hands out goes only to regulators Victron has added support for on their side.
The Victron side has to be configured for anything to be published at all. A GX broadcasts its charge voltage set-point only when DVCC is enabled and the system has a battery that reports its own charge voltage — a managed or smart battery, or an ESS system. If the charge-limit panel sits in waiting on a boat with a GX, check that first: it is the usual answer, and it is a setting on the GX rather than a fault here. The Maximum Charge Voltage setting in the DVCC menu lowers what the battery asked for; on its own it does not create a set-point where there was none.
The rules, in order of importance:
- Every local protection outranks anything on the bus, at all times.
- A received limit can only lower the regulator's charge targets, never raise them past what the regulator itself considers safe.
- A published charge-current limit of zero is obeyed as stop-charging.
- If the authority goes quiet, the regulator reverts to its own targets and says so in the header rather than obeying a frozen number. This one heals itself: when sensible frames come back and stay sensible for a short settling period, following resumes on its own.
- If the authority publishes a limit that cannot be true, or keeps flipping between conflicting ones, the regulator stops following and stays stopped — on its own targets — until a person clears it. Clearing it is the Reset Trust button on the charge-limit panel, which stays greyed out until the latch has tripped — or switching charge-limit follow off and back on, or a reboot. The difference is deliberate: silence is usually a wire or a powered-down display, but a source that has published a number that cannot be true has something wrong with it, and should not resume steering your charging on its own.
- Until you enable it, limits are decoded and displayed but never acted on — decoding with follow off needs the receive switch on, since with both off nothing is read from the bus. That is the intended way to start: watch the decoded numbers, confirm they match what the battery system itself is showing, then turn it on.
One thing to understand about a Victron system: the limit on the bus is the GX's number, not the battery's. A GX takes what the battery reports and rewrites it according to the brand of battery it is talking to, and what reaches the bus is the result. That is the GX doing its job — but it is why a limit read off the bus should never be described as "the battery is asking for this".
If you do not see it¶
- Is the master Transmit on NMEA2K switch on (Setup → Integrations → NMEA 2000)? It ships off, and it is read at boot, so a change needs a reboot.
- Is the individual message switched on? Four of them ship off, listed above.
- Is the backbone terminated at both ends and powered? The regulator's CAN side is powered from the backbone, not from the regulator.
- Did the address claim succeed? The claimed address and the sent and dropped frame counts are shown on the NMEA 2000 card (Setup → Integrations → NMEA 2000) and under Live Data → Integrations. Dropped frames are normal and expected on a bench with no backbone attached.
- Instance collision — see above.