📋 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结构(扩展帧)
| 位域 | 位范围 | 说明 | 示例 |
|---|---|---|---|
| Priority | bit 28-26 (3位) | 优先级,0最高7最低 | 6 (110₂) |
| Reserved | bit 25 (1位) | 保留位,通常为0 | 0 |
| Data Page | bit 24 (1位) | 数据页,DM1为1 | 1 |
| PDU Format | bit 23-16 (8位) | PF,DM1=0xFE (254) | 11111110₂ |
| PDU Specific | bit 15-8 (8位) | PS,广播=0xCA (202) | 11001010₂ |
| Source Addr | bit 7-0 (8位) | 源地址SA | 0x80 (10000000₂) |
灯状态编码(2字节)
| 字节 | 位域 | 说明 | 值示例 |
|---|---|---|---|
| Byte 0 状态字节 | bit 1-0 | MIL 状态 | 0=关 1=开 2=保留 3=不可用 |
| bit 3-2 | Red Stop 状态 | 00₂=关 01₂=开 10₂=保留 11₂=不可用 | |
| bit 5-4 | Amber Warning 状态 | 同上 | |
| bit 7-6 | Protect 状态 | 同上 | |
| Byte 1 闪烁字节 | bit 1-0 | MIL 闪烁 | 0=不闪 1=慢闪 2=快闪 3=不可用 |
| bit 3-2 | Red Stop 闪烁 | 同上 | |
| bit 5-4 | Amber Warning 闪烁 | 同上 | |
| bit 7-6 | Protect 闪烁 | 同上 |
DTC编码(4字节/条)
| 字节 | 位域 | 说明 | 示例(SPN=1083,FMI=22) |
|---|---|---|---|
| Byte 0 | bit 7-0 | SPN低8位 [7:0] | 0x3B (00111011₂) = 59 |
| Byte 1 | bit 7-0 | SPN中8位 [15:8] | 0x04 (00000100₂) = 4 |
| Byte 2 | bit 2-0 | SPN高3位 [18:16] | 000₂ = 0 (完整SPN = 59+4×256+0×65536 = 1083) |
| bit 7-3 | FMI (5位) | 10110₂ = 22 | |
| Byte 3 | bit 6-0 | OC 故障次数 (7位) | 0000001₂ = 1 |
| bit 7 | CM 转换方法 (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/灯)
每个灯占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)。
| # | SPN | FMI | OC | CM | Bytes | 自检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 帧。