SAE J1939是基于CAN(Controller Area Network,控制器局域网)的通信协议,广泛用于各类商用车。该协议对车辆中连接CAN的电子组件及其附加设备之间的通信进行了标准化。
SAE(Society of Automotive Engineers,国际自动机工程师学会)J1939协议是基于CAN的高层协议,用于商用车和工程机械中电子控制单元的通信。SAE J1939制定于1980年代中期,旨在实现不同制造商的电子控制单元之间的标准化通信。SAE J1939主要用于柴油发动机以及与变速箱、制动器或减速器(发动机制动器)等的通信。
SAE J1939协议使用CAN(控制器局域网、ISO 11998-1和ISO 11998-2)作为物理层。CAN协议在车载网络中发挥着重要作用,是ECU之间实现位串行通信的一种常用方法。典型的ECU如下:发动机、变速器和制动器ECU,以及仪表盘和车门ECU。
J1939协议包括典型的CAN功能和一些全新属性:
SAE J1939衍生了大量规范。这些规范遵循J1939的基本描述,通常只在数据定义和物理层方面有所不同。
ISO 11783 - 农林拖拉机和机械 - 串行控制和通信
此协议定义了农用车辆中的通信。具体来说,指拖拉机与附加设备(即所谓的工具)之间的通信。ISO 11783标准规定了应用层的服务,例如,通过虚拟终端控制附加设备。附加设备本身会引入控制所需的所有图形元素,而虚拟终端可以显示这些图形元素。其他应用组件如下:拖拉机ECU、任务控制器、文件服务器和顺序控制。ISO 11783扩展了SAE J1939定义的多包协议。此外,还采用了工作集机制。
NMEA 2000® - 船用电子设备的串行数据网络
此协议定义了海上交通工具之间的ECU通信,并使用了多包协议的扩展协议-快速包(Fast Packet)协议。
ISO 11992 - 拖车和挂车之间的数字信息互换
此协议规定了拖车与挂车之间的报文交换。ISO 11992基于J1939的报文格式,但采用的是波特率仅为125 kbits/s的物理层配置。
FMS - 车队管理系统
FMS(Fleet Management System,车队管理系统)标准定义了J1939网络与FMS之间的网关。
J1939协议是高层通信协议。首先了解什么是层级。ISO建立了一种参考模型,用于描述七个抽象层上相同或不同技术系统的通信。物理层是最低层,应用层则是最高层。CAN协议涉及最低的两层,并由CAN控制器和收发器以硬件形式实现。
J1939在CAN的基础之上定义了一组以软件实现的规则。因此,如果CAN总线节点由收发器、控制器和主机构成,则J1939总线节点通过软件的形式实现附加协议的内容并由主机执行。
整个J1939规范分为多个文档和章节,可以从SAE网站单独下载或以压缩包形式下载所有文档。
下载J1939规范需收费。各部分的内容大致依据前面提到的ISO/OSI模型系统划分。也有例外,例如J1939-8中的内容在OSI模型中无对应描述。 Numbering scheme图中显示了各章节的编排方案。
除已编排的文档及其附录外,还有一个不带编号扩展的文档。该文档是J1939核心总览性文档,简要概述了协议的所有重要特征。该文档的附录相当重要,列出了所有参数组、信号、预留节点地址、制造商代码和工业组,供用户快速概览。
右表列出了现有的章节和文档。
主动参与J1939通信(例如:需发送报文)的每个ECU都需要具备一个全球唯一的64位长度名称(NAME)。根据标准定义,NAME描述了设备的标识、编号、来源(生产商)以及功能相关等信息。除了标识功能、产品序列号,在动态地址分配期间,可以使用设备名称确定ECU的优先级(请参阅网络管理章节)。
J1939 NAME的组成如图64-bit ECU Name Fields所示。
CAN协议只定义了报文寻址方式,不存在节点寻址信息。这意味着所有信息都由标识符标记,并基于此报文标识符进行数据场信号提取和解析。除报文寻址以外,J1939使用节点地址寻址,其报文标识符中包含有8位发送节点的有效地址,这使得点对点通信成为可能。因此J1939网段中的每个发送节点都必须具备一个有效的节点地址。
在J1939网络中发送数据的每个ECU都需要有效地址。节点地址由8个位的值构成,并且可以一次性永久分配到节点(静态网络),也可以在网络中由节点独立搜索分配(动态网络)。使用哪一种网络取决于各自的应用。
如果在卡车的传动系统中以经典方式应用J1939协议,通常会发现一个在车辆出厂时已指定了网络拓扑结构和地址的静态网络。在此类网络中,地址分配和拓扑结构在车辆的整个生命周期内保持不变。
在动态网络中,网络的拓扑结构可能会在运行期间发生更改,可能会添加已知和未知的网络节点。网络中甚至可能存在多个同一类型的ECU。动态网络的典型应用是在农业工程中使用的ISO 11783协议,该协议描述了拖拉机与其附加设备(工具)之间的通信。
参数组(PG)是具有彼此相关性且传输速率相同的一组信号。每个参数组都有唯一的编号,即PGN(Parameter Group Number,参数组编号)。参数组容易与CAN标识符混淆。本章节旨在说明J1939参数组与CAN报文标识符之间的区别。以下是两者的相同点和不同点:
相同点:
不同点:
如果为参数组定义的数据长度大于8个字节,则将其作为多个数据包报文发送。该规范规定了传输协议。
J1939-21文档定义了一种解析29位CAN ID的机制。在CAN报文的8字节数据场中,信号由起始位和长度定义。与此类似,CAN标识符细分为参数组的各个段。通过这种方式,标识符的一部分表示PGN本身,其余部分则解析为源地址、目标地址、优先级和数据页。From the 29-bit CAN Identifier to the Parameter Group图显示了J1939 CAN标识符的结构。
该图显示特定PDU段具有多种解析方式。此段的内容可用于扩展PDU 格式段、定义PGN,也可用于指定目标地址。规则如下:
特定PGN在表示时不需要地址信息,使用“00”代替目标地址作为扩展。
比如:PDU格式段数值为0XEE,则PGN 表示为0XEE00。
参考上述表达方式,PGN的表示范围如图“PGN Value Range”所示。
数据页位和扩展数据页位也是PGN的一部分,是两位最高有效位。因此,数值范围分布在4个PGN页中,但J1939仅采用其中3个页。
这将产生(240+(16*256))*3=13,008个可能的PGN。
可以使用以下数据页定义:
Extended Data Page Bit | Data Page Bit | Description |
---|---|---|
0 | 0 | SAE J1939 Page 0 PGNs |
0 | 1 | SAE J1939 Page 1 PGNs (preferred by the NMEA 2000®) |
1 | 0 | SAE J1939 – reserved – |
1 | 1 | Defined by ISO 15765-3 (Important: No J1939 layout!) |
全局PGN如下所示,这是J1939标准中参数组的典型表示形式。
全局PGN:
PGN 65262 | 发动机温度 | ET1
Transmission Rate: | 1s |
---|---|
Date Length: | 8 |
Data Page: | 0 |
Extended Data Page: | 0 |
PDU Format: | 254 |
PDU Specific: | 238 |
PGN Supporting Information: | |
Default Priority: | 6 |
Parameter Group Number: | 65262 (0x00FEEE) |
Start Position | Length | Parameter Name | SPN |
---|---|---|---|
1 | 1 byte | Engine Coolant Temperature | 110 |
2 | 1 byte | Engine Fuel Temperature 1 | 174 |
3-4 | 2 bytes | Engine Oil Temperature 1 | 175 |
5-6 | 2 bytes | Engine Turbocharger Oil Temperature | 176 |
7 | 1 byte | Engine Intercooler Temperature | 52 |
8 | 1 byte | Engine Intercooler Thermostat Opening | 1134 |
请注意,到目前为止,J1939-71文档中定义的所有参数组均已传送到电子表(J1939-DA)
特定PGN如下所示,这是J1939标准中参数组的典型表示形式。
特定PGN:
PGN 54528 | 时间/日期调整 | TDA
传输速率: | 视需要而定 |
---|---|
数据长度: | 8 |
数据页: | 0 |
扩展数据页: | 0 |
PDU 格式: | 213 |
PDU 细节: | DA |
PGN支持信息: | 参见附录D PGN 65254 |
默认优先级: | 6 |
参数组编号: | 54528 (0x00D500) |
起始位置 | 长度 | 参数名称 | SPN |
---|---|---|---|
1 | 1个字节 | 调整秒数 | 1603 |
2 | 1个字节 | 调整分钟 | 1604 |
3 | 1个字节 | 调整小时 | 1605 |
4 | 1个字节 | 调整月份 | 1606 |
5 | 1个字节 | 调整日期 | 1607 |
6 | 1个字节 | 调整年份 | 1608 |
7 | 1个字节 | 调整本地分钟偏移 | 1609 |
8 | 1个字节 | 调整本地小时偏移 | 1610 |
请注意,到目前为止,J1939-71文档中定义的所有参数组均已传送到电子表(J1939-DA)。
下表是部分典型参数组,这些参数组不用于交换过程信息,而是用于管理和控制协议本身。
参数组 | PGN(十六进制) | 文档 | 说明 |
---|---|---|---|
声明地址 | 0x00EE00 | J1939-81 | 用于标识ECU和检测地址冲突。 |
命令地址 | 0x00FED8 | J1939-81 | 用于将设备地址分配到ECU的网络服务。 |
名称管理 | 0x009300 | J1939-81 | 用于分配和修改ECU的设备名称(NAME)的网络服务。 |
应答 | 0x00E800 | J1939-21 | 用于应答各种网络服务,可以是肯定应答或否定应答。应用层控制该应答的行为。 |
传输协 议命令 | 0x00EC00 | J1939-21 | 提供传输协议的控制数据(字节数、数据包等)。 |
传输协 议数据 | 0x00EB00 | J1939-21 | 传送传输协议的有效数据。 |
请求 | 0x00EA00 | J1939-21 | 类似于CAN远程帧,可以使用此PGN请求其他PGN。 注意:J1939不支持远程帧。请求PGN是CAN数据帧。 |
专有A | 0x00EF00 | J1939-21 | 制造商可自定义的PGN 。 |
专有A1 | 0x01EF00 | J1939-21 | 制造商可自定义的附加PGN 。 |
专有B | 0x00FF00 - 0x00FFFF | J1939-21 | 制造商可自定义的全局PGN,共有256个。 |
J1939不仅定义PGN,还定义其内容。所谓内容就是一般情况下用户自定义私有协议中所说的信号。J1939规范为PGN内容定义了术语:SPN(Suspect Parameter Number,可疑参数编号),SPN就是一种信号ID,可以是物理值、状态或命令。此外,SPN也可以表示内部协议信息。目前,J1939-DA以表格形式列出了所有指定的SPN。SPN是由SAE 指定的数字。PGN的描述中指定了SPN在PGN内的起始位置(参见章节全局参数组示例)。SPN的解析顺序为从LSB(右)到MSB(左),字母数字数据除外。一个SPN可以存在于多个PGN中。
协议中采用相同的描述方式定义SPN,并且具备以下属性:所有SPN在定义中的描述均相同,且具有以下属性:
SPN的通用说明和功能
SPN | 可疑参数编号和名称 |
---|---|
说明 | SPN功能的通用说明 |
数据长度 | 数据长度(以位或字节为单位) |
分辨率 | 分辨率,或原始值到物理值的转换公式 |
数据范围 | 物理值的有效范围 |
类型 | 信号类型,例如测量、状态或应用相关信号 |
支持信息 | <可选> |
PGN参考 | 参考SPN所在的PGN |
J1939标准将SPN描述定义为 SLOT (Scaling, Limit, Offset and Transfer Function, 比例、界限、偏移和转换函数)。
在SLOT 定义中,通常不使用SPN的整个值范围作为有效数据。例如,如果8个位的值 (28 = 256) 表示 0…255, 则仅将 0…250 定义为有效数据。251…255, 描述SPN的属性或状态。
在限位开关的定义中,一个位(bit)即可表示门状态(打开/关闭)。采用SLOT的定义方式,则如下:
通过这种方式可以检测传感器故障或电路断路,并降低解析错误的风险。例如,如果相应类型的设备不支持该信号,则使用信号状态SNA。右表列出了标准的节选。表1列出了部分物理和ASCII值。表2列出了测得的离散值。表3描述了离散命令。
基本规则:如果SPN的所有位均为1,则SPN的状态为SNA。
J1939 的网络管理禁止与普通汽车环境中的网络管理相混淆。汽车中的网络管理用于将网络(子网)中的ECU设置为 “约定”的空闲状态,同时不丢失总线中的任何信息。
J1939将该术语定义为动态网络中的通信(进入网络)和设备地址管理的访问控制。其中,设备地址和NAME发挥着关键作用(参见名称和地址章节)。
J1939网络管理的最简单形式如下:在启动之后和开始通信之前,每个ECU发送“地址声明”,借助“地址声明”参数组(PGN 0x00EE00)公开设备名称和预定义的设备地址。在静态网络中,此操作主要用于确定网络拓扑结构。例如,可以使用诊断工具快速确定车辆中是否存在减速器。
“地址声明”也适用于动态网络。此外,网络管理还可用于解决地址冲突。例如,后加入的ECU使用网络中某节点已在使用的地址,网络管理即可发挥该作用。“地址冲突“确保网络中的所有节点地址都是唯一的,绝不能重复。
NAME用于解决冲突,以及确定地址的优先级。如果通过“地址声明”检测到地址冲突,则所涉及的设备必须比较其NAME。从 MSB (Most Significant Bit, 最高有效位)). 开始,逐位比较。在比较时,CAN仲裁的规则同样适用:0会覆盖1。数值越小的NAME优先级越高,优先级较高的ECU可以使用该地址。在这种情况下,具有较低优先级NAME的ECU的行为取决于其配置,如下为ECU的四种基本配置:
可能在网络中多次出现的ECU必须支持上一章解决方案和配置中的“自行配置” 。该配置行为由NAME中的最高有效位(MSB)“仲裁地址(AAC)” 决定。此位用于ECU地址冲突失败后独立搜索新设备地址。如果ECU仅在网络中出现一次,则可以使用固定的设备地址,不必设置“AAC”位。这样操作的结果是,自配置ECU的NAME优先级低于未设置该位的ECU。
J1939网络管理中的一个重要机制是使用“请求”PGN,用于请求网络中ECU的PGN。”地址声明“PGN也体现了该机制的应用。例如,ECU必须通过“地址声明”PGN来回答“地址声明请求”PGN。
注意: 如果发出请求的ECU具有有效地址,则该ECU还必须回答自己的请求!
请求机制常应用于动态网络,并在通信开始时使用。因此,要参与通信的ECU可以在“地址声明”之前请求地址情况。注意:“地址声明请求”PGN是J1939中的例外情况。换言之,该PGN是唯一无需有效地址即可发送的参数组,因此可以从空地址(254)发送。
参数组的基本信息章节中介绍了参数组的属性及其与“纯”CAN报文的区别,其中提到PGN的数据长度不限于8个字节。但由于使用CAN作为物理传输层,因此发送方必须将长度超过8个字节的数据包分为多个数据包,然后通过CAN报文单独发送。接收方必须按其初始顺序进行重组。J1939标准对此定义了一组规则,即传输协议。
依据通信类型,定义了两种传输协议。
点对点
特定通信 - 连接模式数据传输:
发送方通过此协议与接收方建立连接。接收方可以选择控制和影响各个数据包的流控制。接收方和发送方均可中止连接(例如在发生错误时)。
连接模式数据传输协议不受任何时间限制。所有节点均可以最大允许速度彼此交换数据。
广播
全局通信 – BAM(Broadcast Announce Message,广播通知消息):
发送方独自管理流控制。报文发送到所有节点,接收方无法干预通信。即使接收方缺少一条报文,也无法传达此情况。如有必要,接收方必须等待新的报文。
由于接收方无法影响BAM协议中的流控制,因此发送方必须在各个数据包之间保持最小时间间隔,即50-200毫秒。这样,慢速的网络节点就可以跟上通信的节奏。
标准中的其他两个PGN已保留用于处理传输协议。右表对这两个PGN进行了说明。
通过将TP_DT报文数据包的第一个字节定义为序列计算器,计数最高可至255,可得出以下最大传输容量:
255*7(剩余字节)=1785个字节。
通过控制字节(多路复用器)可交换各种元信息。例如,要传输的数据字节数、数据包计数、传输类型(全局或点对点)。下表列出了5类传输协议指令。
J1939传输协议命令:
RTS: | 请求发送 宣布为CMDT协议。 |
---|---|
CTS: | 允许发送 对RTS命令的回答(肯定应答),请求接收方指定数目的数据包(流控)。 |
EomACK: | 报文结束应答 对收到全部多包报文的应答。 |
Abort: | 终止CMDT协议。 |
BAM: | 广播通知消息 宣布为BAM协议。 |
J1939诊断接口定义了标准诊断连接器,以及一组用于处理各种诊断服务的PGN。诊断报文(DM)中所包含的PGN基本涵盖统一诊断通信服务(UDS)协议中定义的诊断功能,还符合欧盟法规和适用于车载诊断(OBD II)的“加利福尼亚州法规规范”,以及重型车辆 OBD(Heavy Duty OBD)和全球统一OBD(WWH OBD,ISO 27145)。
与必须通过软件工具主动启动服务的UDS诊断相反,J1939 ECU在正常工作期间也可以独立发送诊断报文。如有必要,还可以直接在网络中评估发生的错误并直观显示。同时,可以使用工具通过诊断连接器读出错误。统一错误代码(亦称诊断故障代码,Diagnostic Trouble Codes)包含故障SPN、错误模式和错误发生频率。
DTC表示系统中的故障属性,主要代表当前状态异常的SPN。导致当前状态异常的原因有多种。可解释该状态的指示器用于尽可能精确地说明错误的实际原因。DTC具有统一的结构,并且由以下元素构成:
SPN
表示错误的SPN。所有的已定义SPN均可在DTC中使用。
FMI(Failure Mode Identifier,故障模式标识符)
表示已发生错误的性质和类型,例如超出值范围(过高或过低)、传感器短路、更新速率错误、标定错误。
OC(Occurrence Counter,发生计数器)
该计数器计算每个SPN发生错误的次数并存储该数值(即使错误失效)。
CM(SPN Conversion Method,SPN转化方法)
定义DTC对齐方式。值为“0”表示“Structure of a DTC”图中所示的对齐方式;如果值为“1”,则必须区分是标准曾经定义过的3种方式之中的哪一种。系统必须了解这一点。
DM1 PGN传输系统中的当前错误代码,并且不受诊断工具初始化诊断服务的影响。所有支持J1939诊断的ECU均可发送PGN。借助相应的源地址,可以明确地将错误代码追溯到网络节点。
可视化诊断支持
错误代码通过驾驶座的指示灯指示或表示。标准定义了四种不同的灯,分别是:
MIL(Malfunction Indicator Lamp,故障指示灯))
该灯由OBD指南规定,用于指示与尾气有关的故障。
RSL(Red Stop Lamp,红色刹车灯))
指示需立即停车的严重错误。
AWL(Amber Warning Lamp,琥珀色警示灯))
指示无需停车的一般错误。
PL(Protection Lamp,保护灯))
该灯用于指示非电子设备引起的错误,例如,清洗液水位过低或发动机冷却温度过高。
所有灯都定义了四种状态:
本文从VECTOR官网J1939协议介绍整理而来,原文链接如下:
J1939_C: J1939学习模块 (vector.com)
RSL(Red Stop Lamp,红色刹车灯)**)
指示需立即停车的严重错误。
AWL(Amber Warning Lamp,琥珀色警示灯))
指示无需停车的一般错误。
PL(Protection Lamp,保护灯))
该灯用于指示非电子设备引起的错误,例如,清洗液水位过低或发动机冷却温度过高。
所有灯都定义了四种状态:
本文从VECTOR官网J1939协议介绍整理而来,原文链接如下:
J1939_C: J1939学习模块 (vector.com)