SAE J1939 allows electronic control units in mobile machinery to exchange not only operating data but also diagnostic information.
One of the most important diagnostic messages is DM1.
DM1 is used to report currently active Diagnostic Trouble Codes (DTCs). When an engine ECU or another J1939 device detects an active fault, DM1 can communicate information such as:
Lamp status
SPN
FMI
Occurrence Count
A mobile controller or HMI can receive this information and use it to warn operators, display fault details, or support troubleshooting.
This article explains what a J1939 DM1 message is, what information it contains, and how it can be used in mobile machinery diagnostic systems.
DM1 stands for:
Diagnostic Message 1
Its primary purpose is to report active diagnostic trouble codes from a J1939 device.
For example, an engine ECU may detect:
Excessive coolant temperature
Low oil pressure
Sensor circuit faults
Abnormal voltage
Communication problems
When one of these faults becomes active, the ECU can report it through DM1.
A simplified diagnostic path looks like this:
Engine ECU
↓
Active Fault Detected
↓
J1939 DM1
↓
Mobile Controller
↓
HMI Warning
This allows fault information to travel across the same J1939 network used for normal machine data.
DM1 contains two main categories of diagnostic information:
1. Diagnostic lamp status
2. Active Diagnostic Trouble Codes
The DTC information includes important fields such as:
SPN — Suspect Parameter Number
FMI — Failure Mode Identifier
OC — Occurrence Count
Together, these fields help identify what fault has occurred.
SPN stands for Suspect Parameter Number.
It identifies the parameter, signal, component, or condition associated with the fault.
For example:
SPN 110
refers to:
Engine Coolant Temperature
If DM1 contains SPN 110, the ECU is reporting a fault related to engine coolant temperature.
However, SPN alone does not describe the type of failure.
For that, DM1 also includes an FMI.

FMI stands for Failure Mode Identifier.
It describes how the parameter identified by the SPN has failed or become abnormal.
For example:
SPN 110 FMI 0
indicates that the engine coolant temperature is valid but above its normal operating range at the most severe level.
The basic relationship is:
SPN = What parameter has a problem?
FMI = What type of problem has occurred?
This combination forms an important part of the J1939 DTC.
DM1 can also include an Occurrence Count (OC) as part of each DTC.
The occurrence count provides information about how many times the ECU has detected the fault, according to the ECU's diagnostic implementation.
For example:
SPN: 110
FMI: 0
OC: 3
This tells the diagnostic system that the fault is associated with SPN 110 and FMI 0, with an occurrence count of 3.
Occurrence information can provide additional context when technicians investigate intermittent or recurring faults.
DM1 also includes information related to diagnostic lamps.
J1939 defines diagnostic lamp indications such as:
MIL — Malfunction Indicator Lamp
RSL — Red Stop Lamp
AWL — Amber Warning Lamp
PL — Protect Lamp
These lamp states help indicate the general severity or category of a diagnostic condition.
For example, a serious engine condition may be associated with a Red Stop Lamp request, while another fault may trigger an Amber Warning Lamp.
The HMI can use this information to display an appropriate visual warning to the operator.
A machine does not necessarily have only one active fault at a time.
An ECU may detect multiple faults simultaneously.
For example:
Engine ECU
DTC 1
SPN 110
FMI 0
DTC 2
SPN XXX
FMI 3
DTC 3
SPN XXX
FMI 9
DM1 can communicate multiple active DTCs.
This is important when designing controller and HMI software because the system should be able to process and display more than one fault.
A CAN data frame has limited payload capacity.
When the DM1 information is small enough, it may fit within a single CAN frame.
However, when multiple active DTCs need to be transmitted, the diagnostic information may exceed the capacity of one Classical CAN frame.
J1939 can then use its transport protocol to transmit the larger message across multiple CAN frames.
Conceptually:
Few Diagnostic Data
↓
Single CAN Frame
Multiple DTCs
↓
J1939 Transport Protocol
↓
Multiple CAN Frames
This is important for controller software because receiving DM1 may involve more than simply reading one CAN frame.
DM1 is not simply a message that appears once and disappears.
An ECU can transmit DM1 periodically while faults remain active, and diagnostic state changes can also affect transmission behavior.
This allows other devices on the network to maintain an updated view of active faults.
For a mobile controller, this means DM1 information can be monitored continuously rather than treated as a one-time event.
A programmable mobile controller can receive J1939 DM1 messages from an engine ECU or other compatible devices.
A simplified process is:
Engine ECU
↓
DM1
↓
Mobile Controller
↓
Decode Diagnostic Data
↓
SPN + FMI + OC + Lamp Status
↓
Fault Logic
After decoding the message, the controller can use the information for different purposes.
For example, it may:
Send a warning to the HMI
Record the fault
Trigger an audible alarm
Change machine operating mode
Limit certain functions
Support maintenance diagnostics
The exact machine response depends on the application and control strategy.
Raw DM1 data is useful to engineers, but operators usually need simpler information.
Instead of displaying:
SPN 110 FMI 0
an HMI can show:
ENGINE COOLANT TEMPERATURE TOO HIGH
A diagnostic page may still provide detailed information for technicians:
ACTIVE ENGINE FAULT
Source: Engine ECU
SPN: 110
FMI: 0
Occurrence Count: 3
Status: Active
Coolant Temperature: 108°C
This allows one interface to serve both operators and maintenance personnel.
DM1 becomes especially useful when combined with other machine information.
For example:
Engine ECU
│
J1939
│
↓
Mobile Controller
↙ ↓ ↘
DM1 Live Data I/O
↓ ↓ ↓
└─────────┬────────┘
↓
HMI
The controller may combine:
J1939 diagnostic messages
Engine operating parameters
Analog sensor values
Digital I/O status
CAN device status
This gives technicians more context when troubleshooting a machine.
For example, a coolant-temperature DTC becomes more useful when the HMI can also display the current coolant temperature and engine operating condition.
DM1 and DM2 are both J1939 diagnostic messages, but they serve different purposes.
DM1 is used for currently active DTCs.
DM2 is associated with previously active DTCs.
In simple terms:
| Message | Purpose |
|---|---|
| DM1 | Active faults |
| DM2 | Previously active faults |
If an abnormal condition is happening now, DM1 is the primary diagnostic message of interest.
If a technician is investigating a fault that occurred earlier but is no longer active, previously active diagnostic information may also be useful.
Not exactly.
DM1 is a diagnostic message, while the DTC is the fault information carried within that message.
The relationship can be understood as:
DM1
│
├── Lamp Status
│
├── DTC 1
│ ├── SPN
│ ├── FMI
│ └── OC
│
├── DTC 2
│ ├── SPN
│ ├── FMI
│ └── OC
│
└── ...
So saying “DM1 fault code” is convenient in everyday discussion, but technically DM1 is the message that communicates active DTC information.
Not necessarily.
Suppose DM1 reports a DTC related to a pressure sensor.
Possible causes may include:
Failed sensor
Broken wire
Loose connector
Open circuit
Short circuit
Poor ground
Power supply problem
Actual pressure outside the expected range
The DTC tells technicians what condition the ECU has detected, but further troubleshooting is still required to determine the root cause.
DM1 should therefore be treated as an important diagnostic starting point rather than an automatic instruction to replace a component.
DM1 information can also become part of the machine control strategy.
For example, if the controller receives a critical engine fault, the system may:
DM1 Critical Fault
↓
Controller Evaluates Fault
↓
HMI Warning + Audible Alarm
↓
Limit Machine Function
The actual response should be defined according to the machine's control and safety requirements.
This allows J1939 diagnostics to support not only maintenance but also more intelligent machine operation.
J1939 DM1 is one of the key diagnostic messages used in mobile machinery.
It communicates currently active diagnostic trouble codes together with information such as:
Lamp status
SPN
FMI
Occurrence Count
A mobile controller can receive and decode DM1 messages, while an HMI can convert the diagnostic data into clear warnings and detailed service information.
The basic diagnostic flow is:
ECU detects fault → DM1 transmits DTC → Controller decodes SPN/FMI → HMI displays fault → Technician diagnoses the cause
For mobile machinery OEMs, integrating DM1 diagnostics into the controller and HMI can improve fault visibility, simplify troubleshooting, and help reduce machine downtime.