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 dataPGNSPN
Engine speed (RPM)61444 (EEC1)190
Total engine hours65253 (HOURS)247
Engine coolant temperature65262 (ET1)110
Fuel level65276 (DD)96
Active fault codes65226 (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-IIJ1939
Used onCars and light vansTrucks, plant, generators, tractors
CAN identifiers11-bit29-bit
Typical speed500 kbit/s250 kbit/s (or 500 kbit/s)
Typical connector16-pin under the dashboard9-pin Deutsch on trucks; harness connection on plant
Data modelRequest and replyMostly 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.