Explainer
What Is J1939? A Plain Guide to the Heavy Equipment CAN Standard
Updated 1 October 2026 · 7 min read
J1939 is the standard most diesel engines, trucks, construction plant and generator engines use to share data over CAN bus. If you want engine hours, fuel level or fault codes from a machine without visiting it, J1939 is usually how that data is read. This guide explains what it is, how it works and what you can get from it.
J1939 in one paragraph
SAE J1939 is a set of standards from SAE International that defines how the electronic control units on heavy-duty vehicles and machines talk to each other over CAN bus. CAN provides the wiring and the way messages are sent; J1939 defines what those messages mean — which message carries engine speed, which carries coolant temperature, how fault codes are reported — so equipment from different manufacturers can understand each other.
Where J1939 is used
J1939 started on trucks and buses and spread to almost anything with a heavy-duty diesel engine. Agricultural ISOBUS (ISO 11783) and marine NMEA 2000 are both based on it, so the same ideas appear on tractors and boats.
- Trucks, buses and coaches
- Construction plant: excavators, dumpers, telehandlers, rollers and cranes
- Agricultural tractors and machinery
- Generator sets and industrial engines
- Marine engines and other off-highway equipment
How J1939 works: PGNs and SPNs
J1939 runs on CAN 2.0B using 29-bit extended identifiers, usually at 250 kbit/s (500 kbit/s is also defined). Each message on the bus carries a Parameter Group Number (PGN), which says what kind of data the message contains, plus the address of the unit that sent it.
Inside each message are individual values called Suspect Parameter Numbers (SPNs) — one SPN for engine speed, another for coolant temperature, and so on. The standard defines the position, scaling and units of each SPN, so a value read from one manufacturer's engine means the same as from another's.
Most data is broadcast continuously: the engine control unit sends engine speed many times a second and engine hours less often, and any device on the bus can listen. Some values are only sent when requested.
| Example data | PGN | SPN |
|---|---|---|
| Engine speed (RPM) | 61444 (EEC1) | 190 |
| Total engine hours | 65253 (HOURS) | 247 |
| Engine coolant temperature | 65262 (ET1) | 110 |
| Fuel level | 65276 (DD) | 96 |
| Active fault codes | 65226 (DM1) | SPN + FMI per fault |
J1939 fault codes (DM1)
When a J1939 unit detects a problem it reports a diagnostic trouble code in a diagnostic message called DM1. Each code is made up of the SPN that has the problem and a Failure Mode Identifier (FMI) that says what kind of problem — for example, value too high, value too low, or signal erratic.
Reading DM1 remotely is one of the most useful things telematics can do: you can see that a machine on hire has an active fault, which system it relates to and how serious it is, before deciding whether an engineer needs to go and with which parts.
J1939 vs OBD-II
OBD-II is the diagnostic standard on cars and light vans, using 11-bit CAN identifiers at 500 kbit/s and a 16-pin connector under the dashboard. J1939 is the heavy-duty equivalent, used on diesel engines in trucks, plant and generators, often with a 9-pin Deutsch diagnostic connector on trucks or a connection into the engine harness on plant. A telematics device built for cars will usually not read J1939 machines, and vice versa.
On trucks you may also hear of FMS (Fleet Management Systems), a subset of J1939 messages that truck manufacturers make available on a dedicated interface for telematics.
| OBD-II | J1939 | |
|---|---|---|
| Used on | Cars and light vans | Trucks, plant, generators, tractors |
| CAN identifiers | 11-bit | 29-bit |
| Typical speed | 500 kbit/s | 250 kbit/s (or 500 kbit/s) |
| Typical connector | 16-pin under the dashboard | 9-pin Deutsch on trucks; harness connection on plant |
| Data model | Request and reply | Mostly continuous broadcast (PGNs / SPNs) |
Reading J1939 remotely with a telematics gateway
To get J1939 data off a machine you need a telematics gateway connected to the CAN bus, which reads the messages, picks out the values you care about and sends them over a mobile network to a monitoring platform.
TrackSyte Neo 2 supports J1939. Connected to a machine's CAN bus, it reads standard J1939 messages such as engine hours, engine speed, temperatures, fuel level and active fault codes where the machine broadcasts them, and sends them to the TrackSyte Portal with GNSS location. Because Neo 2 also has RS485 / Modbus, GPIO and Ethernet, the same unit can read other equipment on the asset — and towers, generators and pumps on the same site report into the same Portal.
Some manufacturers also use their own proprietary messages alongside J1939. Exactly which values are available depends on the machine, so it is worth confirming before installation.
Before you connect to a J1939 machine
- Confirm the machine uses J1939 and where the approved connection point is — diagnostic port or harness
- Check the bus speed (usually 250 kbit/s)
- Agree which values you need: hours, fuel, temperatures, fault codes
- Check the hire agreement or warranty allows a third-party device
- Make sure the gateway is fitted securely and its power supply is fused
FAQs
What is J1939?
J1939 is a standard from SAE International that defines how electronic control units on heavy-duty vehicles and machines share data over CAN bus — used on trucks, construction plant, tractors and generator engines.
Is J1939 the same as CAN bus?
No. CAN bus is the underlying network and message format. J1939 is a higher-level standard that runs on CAN and defines what each message means, such as engine speed or fault codes.
What is a PGN in J1939?
A Parameter Group Number identifies what a J1939 message contains. For example, PGN 65253 carries total engine hours and PGN 65226 (DM1) carries active fault codes.
What is the difference between J1939 and OBD-II?
OBD-II is the diagnostic standard on cars and light vans; J1939 is used on heavy-duty diesel equipment such as trucks, plant and generators. They use different identifiers, speeds and connectors.
Does TrackSyte support J1939?
Yes. TrackSyte Neo 2 supports J1939 and reads standard messages such as engine hours, engine speed, temperatures, fuel level and fault codes where a machine broadcasts them, sending them to the TrackSyte Portal.
Want engine data from your plant?
Tell us which machines and generators you run and we will show you which J1939 data Neo 2 can bring into the TrackSyte Portal.
