J1939 DM1计算器

📋 J1939 DM1 报文计算器

用于计算 J1939 诊断报文 DM1(PGN 0xFECA/65226),自动处理单帧与 TP.BAM 多包传输。本工具仅生成 CAN 报文数据,不执行实际发送。

J1939 DM1 协议详细说明

基本信息

DM1 功能:诊断报文1(Active Diagnostic Trouble Codes),用于广播当前激活的故障码及警告灯状态。

PGN:0xFECA (65226),广播消息,默认优先级6。

数据结构:前2字节为灯状态,后续每4字节为一个DTC(诊断故障码)。

传输模式:≤8字节用单帧DM1;>8字节自动使用TP.BAM(Transport Protocol - Broadcast Announce Message)分包传输。

29位CAN ID结构(扩展帧)

位域位范围说明示例
Prioritybit 28-26 (3位)优先级,0最高7最低6 (110₂)
Reservedbit 25 (1位)保留位,通常为00
Data Pagebit 24 (1位)数据页,DM1为11
PDU Formatbit 23-16 (8位)PF,DM1=0xFE (254)11111110₂
PDU Specificbit 15-8 (8位)PS,广播=0xCA (202)11001010₂
Source Addrbit 7-0 (8位)源地址SA0x80 (10000000₂)

灯状态编码(2字节)

字节位域说明值示例
Byte 0
状态字节
bit 1-0MIL 状态0=关 1=开 2=保留 3=不可用
bit 3-2Red Stop 状态00₂=关 01₂=开 10₂=保留 11₂=不可用
bit 5-4Amber Warning 状态同上
bit 7-6Protect 状态同上
Byte 1
闪烁字节
bit 1-0MIL 闪烁0=不闪 1=慢闪 2=快闪 3=不可用
bit 3-2Red Stop 闪烁同上
bit 5-4Amber Warning 闪烁同上
bit 7-6Protect 闪烁同上

DTC编码(4字节/条)

字节位域说明示例(SPN=1083,FMI=22)
Byte 0bit 7-0SPN低8位 [7:0]0x3B (00111011₂) = 59
Byte 1bit 7-0SPN中8位 [15:8]0x04 (00000100₂) = 4
Byte 2bit 2-0SPN高3位 [18:16]000₂ = 0
(完整SPN = 59+4×256+0×65536 = 1083)
bit 7-3FMI (5位)10110₂ = 22
Byte 3bit 6-0OC 故障次数 (7位)0000001₂ = 1
bit 7CM 转换方法 (1位)0

⚠️ 常见错误:将 SPN[18:16] 放在 Byte2 的 bit5-7、FMI 放在 bit0-4 会导致解码错误(如1083/22错误解码为328763/16)。

ref(APA): Babel36acl. Babel36acl的个人博客.
https://babel36acl.xyz. Retrieved 2026/1/21

基本参数

SA(源地址):发送节点的地址,范围 0x00-0xFF。
Priority:CAN 优先级,0最高,7最低。DM1 默认6,TP.BAM 通常也用6。

灯状态 (2bit/灯)

MIL
Red Stop
Amber Warning
Protect

每个灯占2位:
状态(0=关/1=开/2=保留/3=不可用)+ 闪烁(0=不闪/1=慢闪/2=快闪/3=不可用)。
MIL:故障指示灯(Malfunction Indicator Lamp)
Red Stop:红色停车灯
Amber Warning:琥珀警告灯
Protect:保护灯
符合 SAE J1939-73 标准。

DTC 列表

SPN(Suspect Parameter Number):可疑参数编号,19位,范围 0-524287。
FMI(Failure Mode Identifier):故障模式,5位,范围 0-31。
OC(Occurrence Count):故障次数,7位,范围 0-127。
CM(Conversion Method):转换方法,1位(0/1)。

#SPNFMIOCCMBytes自检decode另一种模式对照
批量导入 DTC(文本)

每行一条:SPN,FMI,OC[,CM] 或 SPN:FMI:OC[:CM]
支持 0x 前缀;支持前缀格式 SPN1083 / FMI=22
也可直接粘贴 JSON 数组(如 [{"spn":1083,"fmi":22,"oc":1}] 或 {"dtcs":[...]})

计算结果

算法说明(含 1083/22 -> 328763/16 问题)

DTC 编码(4字节):B1=SPN[7:0],B2=SPN[15:8],B3=(SPN[18:16]在bit0..2)+(FMI在bit3..7),B4=OC(0..6)+CM(bit7)。

正确解码:SPN=B1+(B2<<8)+((B3&0x07)<<16),FMI=(B3>>3)&0x1F。

常见错误:把 SPN[18:16] 当作 B3 的 bit5..7、把 FMI 当作 B3 的 bit0..4,会出现 1083/22 -> 328763/16。

高低位交换模式:若对端设备/软件使用“常见错误”位域,本工具可在 DTC 列表里切换 B3模式,按该位域直接生成 Bytes 与 DM1/TP.BAM 帧。