CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
SAE J1939
一.网络拓扑结构
二.物理层简介
三.数据链路层
-3.1.消息帧格式
-3.2.参数群编号PGN与SPN
-3.3.协议数据单元PDU
-3.4.协议数据单元格式
-3.5.消息类型
-3.6.源地址和PGN的分配过程
-3.7.传输协议功能
四.应用层
-4.1.通信参数定义
-4.2.多帧发送
-4.3.应用开发基本流程
-4.4.应用示例
五.故障诊断
-5.1.诊断故障代码定义
-5.2.故障诊断状态灯
-5.3.故障模式标志FM
-5.4.诊断故障代码简介
-5.5.故障诊断示例
六.网络管理
回到顶部
SAE J1939
一.网络拓扑结构
二.物理层简介
三.数据链路层
-3.1.消息帧格式
-3.2.参数群编号PGN与SPN
-3.3.协议数据单元PDU
-3.4.协议数据单元格式
-3.5.消息类型
-3.6.源地址和PGN的分配过程
-3.7.传输协议功能
四.应用层
-4.1.通信参数定义
-4.2.多帧发送
-4.3.应用开发基本流程
-4.4.应用示例
五.故障诊断
-5.1.诊断故障代码定义
-5.2.故障诊断状态灯
-5.3.故障模式标志FM
-5.4.诊断故障代码简介
-5.5.故障诊断示例
六.网络管理
回到顶部
# SAE J1939 在SAE J1939还没问世的时候,在美国的商用车协议中,SAE J1587/J1708是动力系统电控单元之间最常用的的通信协议,而它的收发器与RS-485(串行通信标准)相同,波特率为9600b/s,数据传输速率较低,属于B类网络协议,大多数情况下用于简单的信息交换,传输速率远低于CAN总线。 在1994年,SAE J1939标准诞生,这是专门针对卡车、大客车、工程机械、农业机械等设备开发的CAN总线通信协议,传输速率可以达到250kb/s,属于C类网络,能够实现SAE J1708/J1587所有的网络功能,各电控单元之间的信息交互量与交互速度都得到了大幅提升。 SAE J1939的物理层和数据链路层基于CAN 2.0B协议,任何节点在总线空闲时都可以向总线发送报文,每条报文中包含一个ID,用于非破坏性按位仲裁,解决总线冲突问题。 SAE J1939的分层结构如图1所示。 ![](images/2022-11-23-15-48-31.png)
图1 与OSI模型对应的SAE J939分层结构
从上图可以看到SAE J1939在CAN2.0B的基础上还定义了网络层和应用层,同时为传输层、会话层和表示层预留了位置,以便后续进行扩展。 SAE J1939在不同层面分别定义了相应标准,文件架构如表1所示,随着SAE J1939的应用范围扩张,其内容标准也会进一步扩充,仅供参考。 | SAE J1939协议 | 内容 | |:------------:| -------------------------------------- | | SAE J1939 | SAE J1939概要 | | SAE J1939/0X | 针对特定应用的说明文档,X指特定的网络应用版本 | | SAE J1939/01 | 网络管理协议,卡车、大客车控制和通信网络应用文档 | | SAE J1939/11 | 物理层,带屏蔽双绞线和接地,250kb/s | | SAE J1939/12 | 物理层,具有四线制传输线和活跃的总线终端 | | SAE J1939/13 | 物理层,定义了诊断接口 | | SAE J1939/14 | 物理层,双倍加速了数据传输速率,从250 kbit/s到500 kbit/s | | SAE J1939/15 | 允许使用非屏蔽双绞线,在此情况下允许每个网络不能超过10 ECU | | SAE J1939/21 | 数据链路层,定义消息帧的数据结构、编码规则 | | SAE J1939/31 | 网络层,定义网络层的通信。 | | SAE J1939/4X | 传输层,未定义,保留 | | SAE J1939/5X | 会话层,未定义,保留 | | SAE J1939/6X | 表示层,未定义,保留 | | SAE J1939/71 | 应用层,描述了实际数据,每个报文都具有独特的编码(参数群编号:PGN)。 | | SAE J1939/73 | 应用层,用于故障诊断 | | SAE J1939/74 | 应用层,用于配置消息 | | SAE J1939/75 | 应用层,定义发电机组和工业设备 | | SAE J1939/81 | 网络管理协议,设备名称,报文结构,地址声明 |
表1 SAE J1939标准文档
## 一.网络拓扑结构
SAE J1939支持多个子网之间的通信,桥接器用来将子网与主网或子网与子网连接在一起,如图1-1所示。子网的数量及每个连接设备的选择由车辆制造商决定,例如使用牵引车时,将拖车子网与主网进行电气分离,每个拖车或台车放置一个桥接器。在子网间的桥接器可以用来过滤它们之间的消息,除了被允许通过桥接器的消息外,子网将被有效地隔离,牵引车和拖车桥接器还拥有过滤任何一边消息的能力,该功能允许桥接器将不支持桥接器的网络信息过滤掉。 ![](images/2022-11-24-09-34-27.png)
图1-1 使用多重子网的车辆网络
## 二.物理层简介
SAE J1939的物理层定义内容包括: 1. 电气接口和物理介质; 2. 传输速率位250kb/s; 3. SAE J1939网络可以由多重子网构成; 4. 最大传输线长度为40m; 5. 物理层还定义了数据的物理特征及总线的电器连接特性。 物理层实现了位表示、位定时、同步、总线故障检测、物理媒介及其附属装置之间的机械和电气接口,这些都是由CAN硬件来实现的。 (1)通信介质及其特征 考虑到商用车实际的网络通信距离较长,一般使用的物理介质为带屏蔽层的双绞线,SAE J1939中规定CAN线由CAN_L、CAN_H和CAN_SHLD组成。 (2)通信介质及其特征 SAE J1939提供用于CAN通信的参考电路,如图2-1所示。以CAN收发器TJA1050为例, 电容C7是供电去偶电容,电容值一般在0.01~0.1uF之间。CAN收发器的引脚5输出电压大约位VCC/2,部分CAN控制器协议中需要Vref信号来执行正确的操作。 L1为共模滤波器,能够屏蔽部分由模块控制器耦合到总线上的高频开关噪声。 ![](images/2022-12-01-14-19-46.png)
图2-1 CAN通信参考电路
(3)连接器 SAE J1939规定了两类连接器用于连接CAN网络中的通信线缆,一类是三芯连接器,另一类是九芯连接器,主要用于连接网络中的各个电控单元的CAN通信。 三芯连接器如图2-2所示,管脚定义如表2-1所示。 ![](images/2022-07-19-10-06-45-image.png)
图2-2 SAE J1939 三芯连接器
| 引脚 | A | B | C | |:----:|:-----:| ------- | ----- | | 信号定义 | CAN_L | CAN_GND | CAN_H | 表2-1 三芯连接器管脚定义 九芯连接器如图2-3所示,管脚定义如表2-2所示。 ![](images/2022-07-19-10-20-06-image.png)
图2-3 SAE J1939 九芯连接器
| 引脚 | 信号定义 | | --- | --------------------------------------- | | A | 电池负极 | | B | 电池正极,不可关断,使用无限制10A保险丝 | | C | CAN_H | | D | CAN_L | | E | CAN_SHLD,SAE J1939中定义或无连接(ISO 11783-2中) | | F | SAE J1708(+) | | G | SAE J1708(-) | | H | OEM使用或仪器总线CAN_H | | J | OEM使用或仪器总线CAN_L |
表2-2 九芯连接器管脚定义
但是在实际装车中,16PIN标准的OBD接头最为常见,通常安装在驾驶室内易于进行连接操作的位置。 ## 三.数据链路层
SAE J1939是以CAN2.0B为基础,通过CAN总线进行数据通信。在数据链路层中定义了消息帧的数据结构、编码规则,包括优先级、传输方式、通信要求、总线仲裁、错误检测及处理。将CAN扩展帧的29位标识符重新分组定义,使报文的标识符能够描述报文的特征,包括目标地址、源地址等。 ### 3.1.消息帧格式
在CAN规范中,不会为节点定义节点地址,但是在SAE J1939网络中,ID中包含了规定的节点地址,即源地址与目标地址,为了防止多节点使用同样的CAN网络标识符字段,属于SAE J1939在CAN规范的基础上额外增加的要求。 CAN2.0B包括两种消息帧格式:标准帧和扩展帧。不同的是,基于SAE J1939的网络能够自适应两种CAN数据帧格式,也就是在同一网络中可以同时出现标准帧和扩展帧。但是,SAE J1939只适用于扩展帧格式,全面定义了标准化通信,所有标准帧格式消息都按照规则作为专用消息使用,因此SAE J1939设备必须使用扩展帧格式,标准帧格式消息可以在网络中存在,但只能以规定的方式运行。标准帧设备不影响网络管理消息,不支持标准化通信。 **SAE J1939消息帧格式** CAN扩展帧的格式包含一个单一的协议数据单元(PDU),PDU包含7个预定义的场。这些场由应用层提供的信息决定,包括优先级P、扩展数据页EDP/保留位R、数据页DP、PDU格式PF、特定PDU(目标地址、群扩展或者专用)PS、源地址SA和数据场,如图3.1-1所示。 ![](images/2022-11-23-16-34-59.png)
图3.1-1 协议数据单元(PDU)
PDU将分组封装在一个或多个CAN数据帧中,通过物理介质传输到其他网络设备。其中的某些参数定义可能要求使用一个以上的CAN数据帧来发送消息,如图3.1-2所示。 ![](images/2022-07-19-10-29-07-image.png)
图3.1-2 OSI在SAE J1939中的应用
在SAE J1939中,CAN标准帧和CAN扩展帧格式消息对于仲裁场和控制场中位的编号和功能定义有所不同。 SAE J1939更进一步地定义了CAN数据帧格式中的标识符,如表3.1-1,3.1-2所示,分别描述了CAN网络和J1939网络中标准帧与扩展帧ID号的定义。 | 29位标识符(CAN网络) | 29位标识符(SAE J1939) | 帧位位置 | 11位标识符(CAN网络) | 标识符11位(SAE J1939) | |:-------------:|:-----------------:|:----:|:-------------:|:-----------------:| | SOF | SOF | 1 | SOF | SOF | | ID28 | P3 | 2 | ID10 | P3 | | ID27 | P2 | 3 | ID9 | P2 | | ID26 | P1 | 4 | ID8 | P1 | | ID25 | R1 | 5 | ID7 | SA8 | | ID24 | D9 | 6 | ID6 | SA7 | | ID23 | PF8 | 7 | ID5 | SA6 | | ID22 | PF7 | 8 | ID4 | SA5 | | ID21 | PF6 | 9 | ID3 | SA4 | | ID20 | PF5 | 10 | ID2 | SA3 | | ID19 | PF4 | 11 | ID1 | SA2 | | ID18 | PF3 | 12 | ID0 | SA1 | | SRR(r) | SRR | 13 | RTR(x) | RTR(d) | | IDE(r) | IDE | 14 | IDE(d) | IDE | | ID17 | PF2 | 15 | r0 | r0 | | ID16 | PF1 | 16 | DLC4 | DLC4 | | ID15 | PS8 | 17 | DLC3 | DLC3 | | ID14 | PS7 | 18 | DLC2 | DLC2 | | ID13 | PS6 | 19 | DLC1 | DLC1 | | ID12 | PS5 | 20 | | | | ID11 | PS4 | 21 | | | | ID10 | PS3 | 22 | | | | ID9 | PS2 | 23 | | | | ID8 | PS1 | 24 | | | | ID7 | SA8 | 25 | | | | ID6 | SA7 | 26 | | | | ID5 | SA6 | 27 | | | | ID4 | SA5 | 28 | | | | ID3 | SA4 | 29 | | | | ID2 | SA3 | 30 | | | | ID1 | SA2 | 31 | | | | ID0 | SA1 | 32 | | | | RTR(x) | RTR(d) | 33 | | | | r1 | r1 | 34 | | | | r0 | r0 | 35 | | | | DLC4 | DLC4 | 36 | | | | DLC3 | DLC3 | 37 | | | | DLC2 | DLC2 | 38 | | | | DLC1 | DLC1 | 39 | | |
表3.1-1 SAE J1939和CAN的仲裁场与控制场对照
| SOF | 帧起始位 | P# | SAE J1939 优先级# | | ---- | ------- | --- | ----------------- | | ID## | 标识符# | R# | SAE J1939 保留位# | | SRR | 代用远程请求 | SA# | SAE J1939 目标地址# | | RTR | 远程帧请求位 | DP | SAE J1939 数据页 | | IDE | 标识符扩展位 | PF# | SAE J1939 PDU格式位# | | r# | CAN保留位 | PS# | SAE J1939 特定PDU位# | | DLC# | 数据长度码位# | (r) | 隐性位 | | (d) | 显性位 | (x) | 消息状态位 | 表3.1-2 各个位的作用 从表中也可以看到某些场与CAN规范中定义的相同,因为这些场完全由CAN规范决定,对OSI数据链路层以上的层不可见,SAE J1939不能修改。如表中的SOF、RTR、SRR、IDE、R(r0,r1),还包括CRC场、ACK场和EOF场,J1939只是重新定义了29位ID号的作用。 **SAE J1939标准帧格式** SAE J1939网络中的控制器支持CAN标准帧,但是需要使用专用要求格式。虽然与SAE J1939消息结构不兼容,但为了协调两种格式的共存,在最低层做了定义。允许使用此格式的设备与其他设备不发生干扰。CAN标准帧格式消息属于专用消息,11位标识符中高3位用作优先级,低8位定义PDU的源地址。 SAE J1939只用扩展帧格式全面定义了标准化通信。遵循CAN2.0A规范硬件不能使用扩展帧通信,因此不能适用于此网络。 ### 3.2.参数群编号PGN与SPN
**参数群编号PGN** 在CAN数据帧的数据场中需要指明参数群时所使用的编号,PGN是一个24位的值,包括以下要素:数据扩展页/保留位、数据页位、 PDU格式场( 8位)和群扩展场( 8位),如图3.1-3所示。 PGN用于确定或标识命令、数据、部分请求、确认和否定,参数群编号可以对应一个或多个参数,推荐多对参数群,合理利用数据场的全部8字节,在SAE J1939-71中定义了部分标准电控单元的PGN。 ![](images/2022-11-23-16-49-43.png)
图3.2-3 参数群编号PGN
**可疑参数编号(SPN)** PGN是数个SPN的编组号,数据场中的每一个参数(数据)都拥有一个编号SPN,在SAE J1939-71中通过PGN可以查到数据场中每一个参数的SPN,通过SPN,可以找到该参数的数据类型、分辨率、偏移量、数据范围等信息。 ### 3.3.协议数据单元PDU
应用层、网络层规定了一系列以协议数据(PDU)形式存在的消息。协议数据单元定义了一个框架,用来发送CAN数据帧。SAE J1939协议数据单元由七部分组成,分别是优先级P、扩展数据页EDP/保留位R、数据页DP、PDU格式、特殊PDU(可作为目标地址/组扩展或专用)PS、源地址SA和数据场。如图3.2-1所示。 ![](images/2022-11-23-16-34-59.png)
图3.3-1 协议数据单元(PDU)
1. 优先级(P) 长度3位,仅在总线传输中用来优化消息延迟,消息优先级可从最高0(0b 000)设置到最低7(0b 111)。 所有控制消息的默认优先级是3(0b 011),其他所有信息、专用、请求和ACK消息的默认优先级为6(0b 110)可以根据实际情况升高或降低。 2. 扩展数据页EDP/保留位(R) 长度1位,最初是为了将来新的定义而保留的,为了以后增加扩展PDU格式场、定义新的PDU格式、扩展优先级段或增长地址空间等功能。 在2006年6月修订的J1939-21中将该位定义为扩展数据页,当EDP和DP设置位“0b 11”时,这表示一个ISO 15765-3报文,意味着CAN标识符剩余的部分定义与SAE J1939不同,该格式在SAE J1939规范中没有描写。 3. 数据页(DP) 长度1位,数据页位选择参数群描述的辅助页。先分配完数据页0的可用PGN,再分配数据页1的PGN,如表3.2-1所示。 ![](images/2022-11-24-10-10-39.png)
表3.3-1 数据页及参数群编号
4. PDU格式(PF) 长度8位,PF用于确定PDU格式,PF值为0-239(0x00-0xEF)时,确定为PDU1格式;PF值为240-255(0xF0-0xFF)时,确定为PDU2格式。 5. 特定PDU(PS) 长度8位,特定PDU是一个8位的场,它的定义取决于PDU格式,根据PDU格式它可能表达目标地址或者群扩展。若PDU格式(PF)段的值小于240,特定PDU段PS为目标地址(DA);若PF段的值在240~255之间,特定PDU段PS为群扩展(GE),如表3.2-2。 | -------PDU格式----- | -------PDU格式PF------ | ------------特定PDU(PS)段----------- | | ----------------- | -------------------- | --------------------------------- | | PDU1格式 | 0~239 | 目标地址(DA) | | PDU2格式 | 240~255 | 群扩展(GE) |
表3.3-2 特定PDU
目标地址(DA),定义了消息发送的特定目标地址。需要指出的是,任何其他设备应忽略此消息。全局目标地址(255)要求所有设备作为消息响应者做出监听和响应。 群扩展(GE),定义了群扩展字段,用于扩展PGN的个数,面向全局地址。 6. 源地址(SA) 长度8位,网络中一个特定源地址只能匹配一个设备,因此源地址场确保CAN标识符符合CAN协议中的唯一性要求。地址管理和分配详见J1939-81,SA的分配请参照J1939附录B中的表B2~表B9,本站提供参考表格。 7. 数据场 长度0~8个字节,当一个参数群长度≤8个字节时,最多使用一帧报文便可完成数据发送。 倘若一个特定参数群的长度>8个字节,数据将通过多个CAN数据帧来实现,每一帧报文的第1个字节用来表示序列编号,后7个字节用来传输数据,最大可传输255*7=1785个字节。 ### 3.4.协议数据单元格式
**PDU1格式** 当PDU格式场PF的值在0~239之间时,消息为PDU1格式,允许使用的参数群被发送到特定目的地或全局目的地。特定PDU(PS)场包含目标地址(DA)。PDU1格式消息能被请求,或以主动提供的方式发送。 PDU1格式下PGN的计算方式:PGN=PF×256。 如图3.4-1所示,可用的PGN数量为2×240=480。 ![](images/2022-11-24-10-27-57.png)
图3.4-1 PDU1格式可用PGN数
**PDU2格式** 当PDU格式场PF的值在240~255之间时,消息为PDU2格式,该格式只能用在作为全局消息的参数群通信中。PDU2格式消息能被请求或以主动提供的形式发送。选择PDU2格式(同时分配PGN)可以避免PGN被定向到特定目的地。 PDU2格式下PGN的计算方式:PGN=PF×256+GE。 如图3.4-2所示,可用的PGN数量为2×16×256=8192。 ![](images/2022-11-24-10-35-53.png)
图3.4-2 PDU2格式可用PGN数
使用两种不同的PDU格式,可以在通信中提供更多参数群编号的组合,综上所述,对于目前使用两种数据页来说,可用参数群的总数目为:[240+(16*256)]*2=8672。 对于专用参数群定义已给出,使两种PDU格式都可以在专用通信中使用,专有信息的解释因制造商而异,为了防止使用标识符时发生冲突,在专用通信中建立一个标准化方法。 ### 3.5.消息类型
J1939目前支持五种类型的消息,分别为命令、请求、广播/响应、确认和群功能。特定消息类型由其分配的参数群编号识别(参数SAE J1939附录A中PGN分配的例子)。在SAE J1939中不适用远程传输请求(即远程帧),RTR位固定为0。 对于出现在CAN数据帧中数据场的多字节参数,默认为Intel格式,针对特例会做出特别的说明(如ASCⅡ码)。因此,如果将一个16位的数据存放在数据场中的字节1和字节2,字节1存放低8位,字节2存放高8位。 **命令** 此类消息包括某些从某个源地址命令特定目的地或全局目的地的参数群,目的地接收到命令类型的消息后应该采取特定的动作。PDU1格式(PS为目标地址)和PDU2格式(PS为群扩展)都能用作命令。命令类型的消息可能包括传动控制、地址请求、扭矩/转速控制等。 **请求** 此类型消息规定了从全局范围或从特定目的地请求信息的功能。对于某目的地址的请求称为目的地指定请求。在SAE J1939-21中定义了请求的参数群编号,如表3.5-1所示,此信息与在SAE J1939/71中规定的参数群格式相同。 | **-------参数群名称-------** | **--------------------------------------请求--------------------------------------** | | --------------------------- | ----------------------------------------------------------------------------------- | | 定义 | 向网络设备请求一个参数群 | | 更新速度 | 根据用户需求,一般推荐请求每秒不超过2~3次 | | 数据长度 | 3字节(DLC应设置位为3) | | DP | 0 | | PF | 234 | | PS | DA(全局或特定) | | 默认优先级 | 6 | | 参数群编号 PGN | 59904(0x00EA00) | | **----------数据场----------** | **--------------------------------------定义---------------------------------------** | | 字节0~2 | 被请求参数群的PGN |
表3.5-1 参数群-请求
如表3.5-2所示,PDU1和PDU2格式PGN的请求/响应能力,必须阐明消息传送者决定目的地是特定的还是面向全局的,这取决于请求是指向特定目标地还是指向全局目标地址。对于主动提供的消息,传送者能通过使用长度大于8字节的PDU1 PGN和PDU2 PGN消息选择将其发送至特定目标地址还是全局目标地址。对于PDU2 PGN长度小于或等于8字节,传送者只能在全局范围内发送数据。 | ---PDU格式--- | ---数据长度--- | --请求PGN 59904-- | ----响应---- | --使用传输协议-- | | ----------- | ---------- | --------------- | ---------- | ---------- | | 1 | ≤8字节 | 特定DA | 特定DA | NA | | 1 | ≤8字节 | 全局DA | 全局DA | NA | | 1 | ≤8字节 | 无 | 全局DA | NA | | | | | 特定DA | NA | | 1 | >8字节 | 特定DA | 特定DA | RTS/CTS | | 1 | >8字节 | 全局DA | 全局DA | BAM | | 1 | >8字节 | 无 | 全局DA | BAM | | | | | 特定DA | RTS/CTS | | 2 | ≤8字节 | 特定DA | 全局DA | NA | | 2 | ≤8字节 | 全局DA | 全局DA | NA | | 2 | ≤8字节 | 无 | 全局DA | NA | | 2 | >8字节 | 特定DA | 特定DA | RTS/CTS | | 2 | >8字节 | 全局DA | 全局DA | BAM | | 2 | >8字节 | 无 | 全局DA | BAM | | | | | 特定DA | RTS |
表3.5-2 PDU1和PDU2传输、请求响应要求
决定发送PGN到全局或特定地址的一般规则如下所述。 1. 若发送请求到全局地址,则响应全局地址。注意NACK禁止作为全局请求的响应。 2. 若发送请求到特定地址,则发送响应到特定地址。若不支持请求的PGN,需要做出NACK响应,若数据长度大于等于8个字节,必须用传输协议RTS/CTS对特定地址做出响应。 例外情况: - ≤8字节的PDU2格式PGN只能发送到全局目的地,因为在PDU2格式中没有目标地址段。 - 即使对目标地址的请求可能被发到特定地址,地址请求PGN还是被发送到全局目标地址。 - 确认PGN响应将使用全局目标地址,虽然是该响应产生的PGN是指向特定地址的。 3. 对于周期性广播或主动提供的消息PDU1格式PGN或PDU2格式PGN能被发送到全局或特定目标地址。 例外情况:不大于8字节的PDU2格式PGN只能发送到全局目的地,因为在PDU2格式中没有目标地址段。 4. 以上规则的特例确实存在,并都作出了说明。这些异常在定义PGN的应用文档中有提及,有以下两种类型的异常: - 当作出响应的目标地址不指明对应请求的源地址时,例如地址请求PGN和确认PGN。 - 当PGN不支持所有可用地址格式时,也就是说,某些PGN可能不能设计为支持对于PDU1和PDU2格式的消息适用的地址。 **广播/响应** 此消息类型可能是某设备主动提供的消息广播,也可能是命令或请求的响应,也是车辆总线网络中最为常用的消息类型。 **确认** 只有两种可能的确认形式。第一种是CAN协议规定的,它由确认消息已被至少一个节点接收,在应答间隙(ACK)时返回一个显性位0。 第二种形式的确认由应用层规定,是对于特定命令、请求的普通广播或ACK或NACK响应。 对于群功能参数群,群功能值参数允许某设备指明一个确认的特定群功能。每个群功能参数群对应一个唯一的群功能值,群功能值只在0~250之间。 在SAE J1939-21中定义了应答报文,如下表3.5-3所示。 | --------------参数群名称---------- | -----------------------------确认----------------------------- | | ------------------------------------ | ------------------------------------------------------------------------------- | | 定义 | 用来提供发送方和接收方之间握手机制 | | 重复传输速率 | 收到需要此类型的确认的PGN时 | | 数据长度 | 8字节 | | 数据页DP | 0 | | PDU格式PF | 232 | | 特定PDU | 255 | | 默认优先级P | 6 | | 参数群编号 PGN | 59392(0x00E800) | | **---------------数据场--------------** | **-----------------------------定义-----------------------------** | | 字节0 | 控制字节:
0:肯定应答(ACK);
1:否定应答(NACK)
2:拒绝应答;
3:无法应答;
4~255:SAE保留 | | 字节1 | 组功能值:
0-250:由PGN确定
251-255:J1939-71定义 | | 字节2~3 | SAE保留(填充0xFF) | | 字节4 | 做出回应的节点地址 | | 字节5~7 | 被请求的PGN |
表3.5-3 参数群-确认
**群功能** 此类型消息用于一组特殊功能,如专用功能、网络管理功能、多组传输功能等。每个群功能由其PGN识别,功能本身是在数据结构中定义的,一般是在群数据场的第一个字节。 专用群功能规定了一个在传输专用消息过程中消除不同制造商之间CAN标识符冲突的方法,同时也规定了接收和识别专用消息的方法,例如在J1939-21中定义的消息不够用,群功能可能要自行规定请求ACK和NACK的组成机制。 使用PGN 59904(0x00EA00)请求能够检查目的地地址是否支持某特定参数群的消息类型或群功能,若支持,则响应设备发送确认PGN,其中控制字节为肯定确认(0)或拒绝访问(2);若不支持,则响应设备发送确认PGN,其中控制字节值为否定确认(1)。 在SAE J1939-21中定义了专用群功能,如表3.5-4、3.5-5所示。 | ---参数群名称--- | ------------------------------------------专用 A------------------------------------------ | | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | 定义 | 这个专用 PG 使用目标地址特定的 PDU(PDU1)格式,
允许制造商将他们的专用信息定向到特定目标节点。
各制造商决定如何使用消息的数据域。
使用专用信息由制造商决定,
但应该遵循避免专用信息超过整个网络信息的 2%的约束。 | | 重复传输速率 | 用户自定义 | | 数据长度 | 0 至 1785 字节(支持多包) | | 数据页DP | 0 | | PDU格式PF | 239 | | 特定PDU | DA(目标地址) | | 默认优先级P | 6 | | 参数群编号 PGN | 61184(0x00EF00) | | **------数据场------** | **-------------------------------------------定义-------------------------------------------** | | 字节0~7 | 制造商专用 |
表3.5-4 参数群-专用A
| -参数群名称- | --------------------------------------------专用 B------------------------------------------- | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 定义 | 这个专用 PG 使用 PDU2 格式消息,
允许制造商按需定义 PS(GE)域内容。
但应该遵循避免使专用信息超过整个网络信息的 2%的约 束。
制造商决定消息数据域和 PS(GE)域的用法、消息数据长度。
因此,在传输时,两制造商可能使用相同的 GE 值而数据长度码不同。信息响应者要区别此二者的不同。 | | 重复传输速率 | 用户自定义 | | 数据长度 | 0 至 1785 字节(支持多包) | | 数据页DP | 0 | | PDU格式PF | 255 | | 特定PDU | 组扩展(制造商分配) | | 默认优先级P | 6 | | 参数群编号 PGN | 65280 至 65535(0x00FF00 至 0x00FFFF) | | **----数据场----** | **---------------------------------------------定义---------------------------------------------** | | 字节0~7 | 制造商专用 |
表3.5-5 参数群-专用B
### 3.6.源地址和参数群编号PGN的分配过程
协议中对使用的数据单元规定PDU1和PDU2两种格式。参数群仅可分配给其中一种格式,当需要发送一个参数群到某个指定的目标地址时,必须使用PDU1格式。 分配参数群时需要包含以下的特性:优先级、更新速度、数据包、参数群的数据长度,可以查找SAE J1939-71中已经预定义的参数群(PG)以及参数群编号(PGN)。 若有需要,厂商可自定义PGN,分配PGN请参考”3.2协议数据单元中 表3.2-1 数据页及参数群编号“与SAE J1939-71标准,自定义PGN理论上不允许与J1939预定义的PGN重复。 J1939中规定了除控制消息外,默认优先级位6,厂商可以为每个参数群设计不同的优先级以完成网络调整,其余特性按照需求分配。 J1939推荐控制某个特定设备的消息使用PDU1格式,分配特定目标地址,其余消息应该选择不带目标地址的参数群编号,使任何一个设备都能获取消息中的参数。 源地址可以通过依次排列编号来分配,SAE J1939预定义了部分标准电控单元的源地址,若为自定义ECU分配地址请参考《[J1939源地址与SLOT定义](./j1939slot.html)》,自定义地址理论上不允许与J1939预定义地址重复,源地址与消息的优先级、更新速度或者重要性无关。 若PGN特性中的重复传输速率≥10次/秒,则不允许使用多组消息。 若由同一制造商构造的节点之间,大部分通信并不需要标准通信,这些通信信息对于网络上其他设备来说一般是无用的,在这种情况下,可以使用专用参数群编号。 在准备参数群的时候,应当依次考虑使用专用通信方法和PDU2格式。 - 如果是进行专用信息的通信,则应当用专用通信方法。 - 如果信息有广泛影响,而且不需要指定消息发送到某个特定节点,那么应该考虑采用PDU2格式。 - 如果信息有广泛影响,但要求指定发送到众多设备中的某一个,那么需要用指定的目标地址和PDU1格式来对参数群进行分配。 关于存放参数群数据的数据场,基于CAN的系统中,最短的消息也需要使用全部的数据场,8个字节来传输。参数都应该组合起来占用8个字节的数据场,一般不允许定义未充分使用数据场长度的参数群,除非是对传输时间要求非常急迫的消息,才允许不占满8个字节。 ### 3.7.传输协议功能
传输协议功能可再细分为两个主要功能: 1.连接管理,如表3.7-1,3.7-2所示; 2.消息的拆装和重组,如表3.7-3所示。 | -----参数群名称----- | --------------------TP.CM(连接管理)-------------------- | | ------------------------ | ---------------------------------------------------------------- | | 定义 | 用于传输≥9个字节的数据 | | 重复传输速度 | 每次传送一个参数群编号 | | 数据长度 | 8个字节 | | 数据页(DP) | 0 | | PDU格式(PF) | 236 | | 特定PDU(PS) | 目标地址 | | P | 7 | | PGN | 60416(0x00EC00) | | **---------参数---------** | **-----------------------------定义-----------------------------** | | 控制字节 | 16、17、19、32 | | 报文的总大小 | 9-1785 | | 包的总数 | 2到255(不允许为0) | | 序列编号 | 1到255(不允许为0) |
表3.7-1 传输协议-连接管理
| ------模式------- | --------------广播公告消息(TP.CM_BAM)-------------- | | --------------- | --------------------------------------------- | | 字节0 | 控制字节设定32,广播公告消息(BAM) | | 字节1~2 | 字节数目 | | 字节3 | 数据包的数目 | | 字节4 | 保留位,设置为0xFF | | 字节5~7 | 参数群编号(PGN) |
表3.7-2 连接管理-广播公告
| ----参数组名称---- | ---------------TP.DT(传输协议-数据传输)--------------- | | ------------- | ---------------------------------------------- | | 定义 | 用于同一个参数群相关的8字节以上的数据传送 | | 重复传输速度 | 每次传送一个参数群编号 | | 数据长度 | 8个字节 | | 数据页(DP) | 0 | | PDU格式(PF) | 235 | | 特定PDU(PS) | 目标地址 | | P | 7 | | PGN | 60160(0x00EB00) |
表3.7-3 传输协议-数据传输
## 四.应用层
SAE J1939协议应用层详细规定了车辆控制与通信所用到的各种参数,包括SPN(可疑参数编号)和PGN(参数群编号)。在应用层技术要求中,对报文格式、ISO拉丁字符集、参数范围、传输重复率、发动机参数的命名规则等方面都有具体的规定和描述。 SAE J1939的消息格式使用参数群编号作为一组参数的标号。这些参数可以是数值,也可以是ASCⅡ码表达式,通常情况下数据格式为Intel,先发送低字节再发送高字节;若是ASCⅡ码表达式,数据格式则为Motorola,先发送高字节,再发送低字节。 每个参数都应该确定它的数据类型,可以是状态或者是测量值。状态类型表示一个多状态参数的目前状态,或者传输节点在执行操作后所产生的结果。例如,刹车状态、电机转矩模式、故障代码等。 测量值类型数据表示了传输节点对某个参数测量后得到的当前值,这样可以确定己定义参数的状态。例如,电机转速、电机温度、电池电压等。 ### 4.1.通信参数定义
SAE J1939定义了各类信号与状态的数值范围,制作通信协议时可供参考,如表4.1-1~4.1-3所示。 | 范围名称 | 1字节 | 2字节 | 4字节 | ASCⅡ | | ------------------- | ------- | ----------- | --------------------- | ----- | | 有效信号 | 0~250 | 0~6425 | 0~421081215 | 1~254 | | 特定参数指示 | 251 | 64256~64511 | 4211081216~4227858431 | 无 | | 保留 | 252~253 | 64512~65023 | 4227858432~4261412863 | 无 | | 错误指示 | 254 | 65024~65279 | 4261412864~4278190079 | 0 | | 不可用
或
不可被请求 | 255 | 65280~65535 | 4278190080~4294967294 | 255 |
表4.1-1 传输信号范围
| ----------------------------------范围名称-------------------------------- | ------------传输数值------------- | | ---------------------------------------------------------------------- |:-----------------------------:| | 禁止(关闭,非运行等) | 0b 00 | | 启动(打开,正在运行等) | 0b 01 | | 错误指示 | 0b 10 | | 不可用或不能被安装 | 0b 11 |
表4.1-2 表示离散参数的传输数值(测量值)
| ---------------------------------范围名称--------------------------------- | -------------传输数值------------ | | ---------------------------------------------------------------------- |:-----------------------------:| | 用于停止功能的命令(关闭等) | 0b 00 | | 用于启动功能的命令(打开等) | 0b 01 | | 保留 | 0b 10 | | 无关紧要/无动作(由功能决定) | 0b 11 |
表4.1-3 表示控制命令的传输数值(状态)
当需要在SAE J1939中增加新参数时,需要为参数分配比例因子、限值、偏移量、参数长度,这样可以在给定的数据类型中尽量保持数据的一致性,表《[J1939源地址与SLOT定义](./j1939slot.html)》中提供了适合给定类型中的大部分参数的数值范围和分辨率,可供参考。 在SAE J1939中,通常由多个参数组成一个参数群,建议一个参数群合理应用8字节的数据场。一个参数群的定义应包括以下的属性:更新周期、数据长度、数据页PG、PDU格式PF、特定PDU PS、默认优先级、参数群编号PGN和参数列表。如果一个参数组的数据长度大于8字节,就必须按照SAE J1939分帧传输协议进行通信。 如果SAE J1939预定义的参数群无法满足要求,需要增加新的参数,则需要定义一个新的参数群,建议参考以下情况: - 建议一个参数群按照电控单元功能进行划分而不是按照类型划分,例如:电机驱动器相电压、电机温度、电机控制器温度、电机相电流、电机控制器状态信息、电机驱动系统故障代码。注意不要划分成:助力泵温度、电机控制器温度、电机温度、水泵冷却液温度。 - 各个参数使用的是相同的更新周期。 - 参数存在于同一子系统内。 ### 4.2.多帧发送
通过传输协议功能的TP.CM(连接管理)宣布将进行广播公告消息(TP.CM_BAM),再使用TP.DT(传输协议-数据传输)进行多帧发送,通信过程如下所示: 1. 消息的拆装和重组 长度大于8字节的消息无法用一个单独的CAN数据帧完成发送。因此,它们必须被拆分为若干个数据包,然后逐一发送,接收方需要接收并解析数据包,重组原始信息。 2. 数据包 CAN数据帧包含一个8字节的数据场。为了正确重组数据,每个数据包都会被分配到一个从1~255的序列编号,存放在第1个字节,后7个字节用于存放数据,因此最大可发送1785字节(255包×7字节/包)。 3. 序列编号 序列编号在数据拆装时分配给每个数据包,然后通过网络传送给接收方。接收方接收后,利用这些编号把数据包重组回原始信息。 序列编号将从1开始依次分配给每个数据包,直到整个数据都被拆装和传送完毕。这些数据包将从编号1开始顺序递增。 4. 数据拆装 发送方按照数据长度分出数个数据包,广播发送至总线,要求多组广播信息的数据包发送间隔时间为50~200ms。对于发送到某个指定目标地址的多组消息,发送者将维持数据包(在CTS允许多于一个数据包时)发送间隔的最长时间不多于200ms。 接收方必须知道这些数据包都是具有相同的标识符,每个数据传送包都应当装载一个字节序列编号和7个字节原始数据,若最后一个数据包为使用全部的8个字节,未使用的字节使用0xFF填充。 5. 数据重组 数据包被陆续地接收后,多组消息的数据包将会按照序列编号的顺序重新组合成一长串字节。这一长串字节将被传送给负责处理长数据的应用程序模块。 ### 4.3.应用开发基本流程
J1939应用层最典型的用途是收发各种物理信号,基于J1939的应用开发基本流程为: 1. 确定需要收发的信号,在J1939-71中查询该信号的可疑参数编号SPN。 2. 在SPN信息中查询到该信号所处的参数群编号PGN。 3. 查询PGN信息,根据PGN与源地址计算出CAN报文的ID。 4. 制作包含上述ID报文信息的DBC文件,报文数据场按照PGN信息填充。 5. 发送端ECU导入上述DBC文件发送信号与报文,接收端ECU导入上述DBC文件接收报文并解析信号。 ### 4.4.应用示例
按照应用开发基本流程,可以开发各种基于J1939的应用。例如,需要发动机向仪表盘发送发动机转速信息,根据J1939物理层规定,通信速率为250kb/s,在J1939-71中搜索发动机转速,得到可疑参数编号SPN 190,如下图4.3-1所示。 参数信息: - 数据长度:2字节; - 分辨率:0.125 转/位; - 偏移量:0; - 数据范围:0~8031.875转; - 工作范围:与数据范围相同; - 类型:测量; - 参数群编号:61444(0xF004)。 ![](images/2022-12-01-16-59-30-image.png)
图 4.3-1 SPN 190 发动机转速
查询SPN 190所在参数群标号PGN 61444(0x00F004)电子发动机控制器 1,简称EEC1,如图4.3-2所示,参数群参数信息: - 重复传输速率:取决于发动机转速(以20ms为例) - 数据长度:8字节 - 扩展数据页:0 - 数据页:0 - PDU格式:240 - 特殊PDU:4 - 优先级:3 - 参数群编号:61444(0x00F004) - 发动机转速的数据场位置:字节4~5(以字节1~字节8为参照) ![](images/2022-12-01-17-02-02-image.png)
图 4.3-2 PGN 61444 EEC1
根据表《[J1939源地址与SLOT定义](./j1939slot.html)》查出,发动机控制器--主机源地址为0x00,仪表盘源地址为0x17,因为该参数群的PDU格式为240,即PDU格式2,面向全局,不需要使用到仪表盘源地址,计算ID=0x0CF00400,如图4.3-3。 ![](images/2022-12-07-11-09-21.png)
图 4.3-3 EEC1 ID
根据上述参数,使用CANdb++制作DBC文件,默认使用Intel格式,实际应用中请按需求设定,将该参数群命名为P_F004_EleEngineController1,示例中制作了完整的参数群,如图4.3-4所示。 ![](images/2022-12-08-15-11-36-image.png)
图 4.3-4 制作EEC1的DBC文件
在Simulink/ECUCoder中使用CAN Pack模块加载该文件,选择P_F004_EleEngineController1,使用对应的CAN发送模块完成发送报文的功能,该模型用于检测DBC文件是否正确,如图4.3-5所示。 ![](images/2022-12-08-15-59-35-image.png)
图 4.3-5 搭建EEC1的CAN发送模型
将模型写入RapidECU-U34控制器(其它型号控制器类似),使用CANtest(也可以使用ZCANPRO),加载DBC文件,查看ECU发送的报文,如图4.3-6所示。 ![](images/2022-12-08-16-39-12-image.png)
图 4.3-6 发送EEC1报文
## 五.故障诊断
SAE J1939诊断应用层定义了用于诊断服务的报文帧,诊断报文(DM)提供了用于车辆进行诊断和维修的功能。SAE J1939-73提供了诊断参数群的定义,基本满足可能使用SAE J1939网络用户的需要,主要面向以下几个方面: - 安全性:定义了一个使用在一系列数据链接中的安全方案,包括读写诊断信息、获取车辆节点配置信息、标定控制模块; - 连接器:可用于车辆SAE J1993网络的连接器,诊断接口必须符合应用物理层(即SAEJ1939/1X)中的定义; - 诊断状态通信支持:提供一系列的数据格式,包括读取故障信息、清除故障信息、监视车辆参数、获取节点配置等; - 诊断测试:支持使用开发工具把各种控制节点放到具体的测试模式中,通过诊断工具获取各节点的诊断信息,包括出错的参数编号,故障标志,错误次数等主要信息 ### 5.1.诊断故障代码定义
SAE J1939在应用层中定义了13种诊断报文(Diagnostic Message,DM)、诊断故障代码(Diagnostic Trouble Code,DTC)。 诊断故障代码由四部分组成:可疑参数号(Suspect Parameter Number,SPN)、故障模式标志(Failure Mode Identifier,FMI)、SPN转换方式(CM)及故障发生次数(Occurrence Count,OC)。一个故障代码由4字节构成,如表5.1-1~5.1-2所示。 | 名称 | SPN | FMI | CM | OC | | ---- | ------------- | ---------- | ------- | --------- | | 作用 | 用来分辨哪个子系统产生故障 | 用来确定发生何种故障 | SPN转换方式 | 某类故障发生的次数 | | 数字位 | 19bit | 5bit | 1bit | 7bit | | 数据范围 | 0~524 287 | 0~31 | 0~1 | 0~126 |
表5.1-1 SAE J1939的DTC构成
![](images/J1939_DTC.png)
表5.1-2 DTC的表示法
各部分作用如下所示: 1. 可疑参数编号SPN 长度19位,用于识别特定的电控单元参数。在诊断中可以定位发生故障的部件,它允许已经检测到某个部件出现故障情况的ECU向总线发送一帧故障报文。 在SAE J1939-71中预定义了部分标准电控单元的SPN,初始的511个SPN是从SAE J1587发展而来的,为了沿袭原来的故障定义方式,SAE J1939将SAE J1587的PID(Parameter Identifier Data)数映射为SPN。当SPN≤511时,为原SAE J1587的参数定义;SPN>511时,为SAE J1939的参数定义。所有其他的SPN将从512开始继续编号,生产厂商可自定义SPN,编号自520192~524287,多达4096个,具体请查找SAE J1939-71,请勿使用已定义的SPN。 2. 故障模式标志FMI 长度5位,定义了子系统中发现的故障类型,还包括一部分尚未出现故障,但是在运行过程中出现了超出阈值范围的事件或状态。 3. SPN的转化方式CM 长度1位,用于确定SPN的转化方式,说明在SPN(19位)在DTC中的位和字节的顺序,推荐设置为0,SPN对所有的19位均采用Intel格式。 以SPN 1208(0x4B8)为例: 对应二进制:0b 000 0000 0100 1011 1000 经过转换后:0b 1011 1000 0000 0100 000 4. 故障发生次数OC 长度7位的数域,它包括了一个故障从先前激活状态到激活态的变化次数,最大值为126。计数向上溢出时,该计数器值保留为126。假如发生次数未知,则该域所有位的数值均设为1,即127。 ### 5.2.故障诊断状态灯
故障诊断状态指示灯包括故障指示灯、红色停止灯、琥珀色警告灯以及保护灯,它们分别对应不同等级的故障警示,具有不同的定义和使用目的。 - 故障指示灯是一种只用于传达发送相关故障代码信息的灯。该灯仅当有一个发送的相关故障代码处于激活状态时才点亮,SPN=1213。 - 红色停止灯用于一种处于将使车辆停止的严峻形式下的故障代码信息,SPN=623。 - 琥珀色警示灯用于表示一种被告知车辆系统出现问题,但不必立即停止的故障代码信息,SPN=624。 - 保护灯用于提示被告知车辆系统出现问题且极可能不是相关电路子系统引起的故障。例如,电机控制器温度超过规定范围等,SPN=987。 灯的状态控制均为0开,1关。 ### 5.3.故障模式标志FMI
当使用故障模式标志时,定义如表5.3-1所示: | ---故障标志FMI--- | -----------------------------------------定义----------------------------------------- | |:-------------:| ------------------------------------------------------------------------------------ | | 00 | 数据有效但超出了正常操作的范围(最严重水平) | | 01 | 数据有效但低于正常操作的范围(最严重水平) | | 02 | 数据不稳定,断断续续的,或者不正确 | | 03 | 电压高于正常值,或者与高端短路 | | 04 | 电压低于正常值,或者与低端短路 | | 05 | 电流低于正常值或断路 | | 06 | 电流高于正常值或电路接地 | | 07 | 机械系统不响应或者无法调节 | | 08 | 非正常的频率、脉冲宽度或周期 | | 09 | 非正常的更新速度 | | 10 | 非正常的速度或变化 | | 11 | 引起故障的原因未知 | | 12 | 坏的智能装置或部件 | | 13 | 超出标定范围 | | 14 | 特殊指令 | | 15 | 数据有效但高于正常操作范围(最不严重水平) | | 16 | 数据有效但高于正常操作范围(中等严重水平) | | 17 | 有效数据但低于正常操作范围(最不严重水平) | | 18 | 有效数据但低于正常操作范围(中等严重水平) | | 19 | 错误地接收到的网络数据 | | 20~30 | 预留由SAE赋值 | | 31 | 未知或条件存在 |
表5.3-1 故障标志FM
### 5.4.诊断故障代码简介
SAE J1939提供了周期性发送的激活的诊断故障代码、确定控制器诊断灯状态、读取或清除诊断故障代码等诊断功能,由DM1~DM19实现,如表5.4-1所示。 其中DM1报文是诊断报文中最基本、最常用,也是最重要的报文。它周期性地向SAE J1939网络广播当前故障信息。如果有新的故障发生或当前的某个故障消失,它会即时向网络广播故障变化情况,一般情况下DM1报文是不做高频率广播,如果出现高频率的间断故障,会占用大量的总线资源,J1939中建议每个DTC每秒发送一次状态改变的数据。 | 代号 | 参数群编号(PGN) | 描述 | | ---- | --------------- | ------------------- | | DM1 | 65226(0x00FECA) | 传送当前的故障诊断代码 | | DM2 | 65227(0x00FECB) | 传送历史故障诊断代码 | | DM3 | 65228(0x00FECC) | 清除历史故障诊断代码 | | DM4 | 65229(0x00FECD) | 传送故磷发生时锁定的帧的参数 | | DM5 | 65230(0x00FECE) | 传送与诊断是否就绪有关的信息 | | DM6 | 65231(0x00FECF) | 传送连续监控系统的测试结果 | | DM7 | 58112(0x00E300) | 要求对非连续监控系统进行测试 | | DM8 | 65232(00FED0) | 传送非连续监控系统的测试结果 | | DM9 | 未定义 | 传送氧传感器的测试结果 | | DM10 | 65234(0x00FED2) | 以测试标志传送非连续监控系统的测试结果 | | DM11 | 65235(0x00FED3) | 清除当前的故障诊新代码 | | DM12 | 65236(0x00FED4) | 排放相关的历史故障码 | | DM13 | 57088(0x00DF00) | 停止/开始广播 | | DM14 | 55552(0x00D900) | 内存存取请求 | | DM15 | 55296(0x00D800) | 内存存取响应 | | DM16 | 55040(0X00D700) | 二进制数据转换 | | DM17 | 54784(0x00D600) | 引导载入数据 | | DM18 | 54272(0x00D500) | 数据安全性 | | DM19 | 54016(0x00D300) | 标定信息 |
表5.4-1 诊断故障代码
**激活状态的诊断故障代码(DM1)** 本指令包含的诊断信息仅限于当前正处于激活状态的可改变指示灯状态的故障码。故障码和指示灯都是电子控制单元用来通知网络上其他成员该模块自身的诊断状态的。该数据信息包括:指示灯状态、诊断代码以及当前激活状态诊断代码的发生次数,还包括排放相关的诊断故障代码。 当前已定义的指示灯(故障指示灯、红色停止灯、琥珀色警告灯和保护灯)都与诊断故障代码有关。若电子控制单元未检测到当前故障码,那么它发出的指示灯的状态息提示可以关闭指示灯,但直接控制指示灯的部件必须权衡影响该指示灯的所有在线制模块的诊断信息后才能决定是否改变指示灯的状态。 一旦有DTC成为激活的故障,就有DM1消息会被传输,并在之后处于正常的仅1次/秒的更新速度。如果故障激活的时间是1s或更长,然后变为不激活的状态,则应传输DM1消息以反映这种状态的改变。如果在1s的更新期间有不同的DTC改变状态,则要传输新的DM1消息反映这个DTC。 为了避免因高频率的间断故障而引起的高消息传输率,建议每个DTC每秒只有一个状态改变被传输。这样,如果故障码在1s期间发生两次状态改变,激活/不激活状态,会有一个用于确认DTC成为激活状态的消息,和在下一个传输期间确认它为不激活状态的消息。该消息仅当有一个激活的DTC存在或处于响应一个请求时才被发送。 参数群如表5.4-2所示。 | -------参数群名称------- | ---------------------------------------DM1--------------------------------------- | | ------------------- | ----------------------------------------------------------------------------------------------- | | 数据长度 | 可变 | | 扩展数据页 | 0 | | 数据页面 | 0 | | PDU格式 | 254 | | 特定PDU | 202 | | 默认优先级 | 6 | | PGN | 65226(0x00FECA) | | 字节0 | 7-6位:故障指示灯状态
5-4位:红色停止灯状态
3-2位:琥珀色警告灯状态
1-0位:保护灯状态 | | 字节1 | 7-6位:预留,用来表示SAE任务灯状态
5-4位:预留,用来表示SAE任务灯状态
3-2位:预留,用来表示SAE任务灯状态
1-0位:预留,用来表示SAE任务灯状态 | | 字节2 | 7-0位:对应SPN第7-0位 | | 字节3 | 7-0位:对应SPN第15-8位 | | 字节4 | 7-5位:对应SPN第18-16位
4-0位:FMI | | 字节5 | 7位:可疑参数编号的转化方式
6-0位:发生次数 |
表5.4-2 DM1 参数群
可能有些应用要求附加指示灯定义,用来实现它们的功能,可以使用字节2中预留的任务灯。 当某个电控单元出现不止一个故障时,会出现多个激活的 DTC 存在,这个参数组将会要求使用多包传输,发送方法请参考3.6传输协议功能与4.2多帧发送,多组信息格式如下所示: a=灯状态 b=SPN c=FMI d=CM 和 OC 信息格式如下:a,b,c,d,b,c,d,b,c,d,b,c,d…… 实际项目中诊断报文多以DM1报文的方式进行,较少使用其它报文。对于单帧DM1报文,使用起来比较简单(见如下《故障诊断示例》)。对于多帧DM1报文,因为需要传输协议,因此需要使用专门的J1939传输协议栈。在实际项目中,由于UDS的广泛流行,往往使用UDS来处理复杂的故障诊断信息而很少使用J1939故障诊断。 ### 5.5.故障诊断示例
基于J1939发送故障诊断DM1报文(单帧)的基本流程为: 1. 根据DM1的PGN与故障信号的源地址计算出CAN报文的ID。 2. 制作包含上述ID报文信息的DBC文件,报文数据场按照DM1报文要求填充,通常包含故障信号SPN,故障模式FMI,SPN转换方式CM,故障发生次数OC等信息。 3. 发送端ECU导入上述DBC文件发送故障诊断信号与报文,接收端PC或者诊断仪导入上述DBC文件接收故障诊断报文并解析信号,根据报文ID可以解析得到故障信号的源地址,根据SPN可以解析得到具体的故障信号名称,根据FMI可以解析得到故障模式,根据OC可以解析得到故障发生的次数。 例如,假设当前发动机ECU发现发动机水温严重过热,进入过温故障,ECU以1s为周期,循环发送DM1报文报告过温故障。 查询《[J1939源地址与SLOT定义](./j1939slot.html)》,发动机ECU源地址SA=0x00。 根据“表5.4-2 DM1 参数群”得出:EDP=0;DP=0;PF=254;PS=202;P=6。 计算ID=0x18FECA00,如图5.5-1。 ![](images/2022-12-19-15-41-00.png)
图 5.5-1 DM1 ID
查找发动机水温的SPN,如图5.5-2所示,得到参数信息: - 可疑参数编号(SPN):110 - 数据长度:1字节 - 分辨率:1℃/位 - 偏移量:-40 - 数据范围:-40~120℃ - 工作范围:与数据范围相同 - 类型:测量 - 参数群编号(PGN):65262(0x00FEEE) ![](images/2022-12-09-09-16-45-image.png)
图 5.5-2 SPN 110 发动机冷却液温度
根据“表5.4-2 DM1 参数群”得出对应参数: - 开启报警指示灯和红色停止灯,0b 1100 0000 - 预留SAE任务灯,填充0b 1111 1111 - SPN:0b 000 0000 0000 0110 1110 - 根据“5.3.故障模式标志FMI”得出,水温严重过热故障标志FMI:0b 0 0000。 - 可疑参数编号的转化方式CM:0b 0 - 发生次数OC:0b 000 0001 - 未使用的字节填充0xFF 数据场=0xC0 FF 6E 00 00 01 FF FF 使用CANdb++制作DBC文件,命名为P_FECA_DM1_byte8,如图5.5-3所示。 ![](images/J1939_DM1_DBC.png)
图 5.5-3 制作DM1参数群的DBC文件
在Simulink/ECUCoder中使用CAN Pack模块加载该文件,选择P_FECA_DM1_byte8,使用对应的CAN发送模块完成发送报文的功能,如图5.5-4所示。 ![](images/J1939_DM1.png)
图 5.5-4 搭建DM1参数群的CAN发送模型
将模型写入RapidECU-U34(其它控制器类似),模拟发动机水温严重过热,ECU以1s为周期循环发送DM1报文,如图5.5-5所示。 ![](images/J1939_DM1_test.png)
图 5.5-5 ECU循环发送DM1报文
## 六.网络管理
网络管理是指消息传递过程管理和电控单元网络管理,网络管理协议的基本功能是地址管理和网络出错管理。网络管理消息具有同其他SAE J1939消息(除空地址外)相同的特性和要求。 网络管理功能包括:请求地址和ECU名字、地址声明、发出无法分配地址通知、为其他ECU制定一个新地址等。 J1939网络管理功能在车载网络中并不常用,因此不再赘述。