J1939协议应用设计编程说明 一、J1939协议简介 J1939协议是目前在大型汽车中应用最广泛的应用层协议,可达到250Kbit/s的通讯速率。J1939协议由美国SAE( Society of Automotive Engineer)组织维护和推广。 J1939协议具有如下特点: (1)以CAN2.0B协议为基础,物理层标准与ISO11898规范兼容并采用符合该规范的CAN控制器及收发器。通讯速率最高可达到250Kbit/s。 (2)采用PDU( Protocol Data Unit协议数据单元)传送信息,每个PDU相当于CAN协议中的一帧。由于每个CAN帧最多可传输8个字节数据,因此PDU的传输具有很高的实时性。 (3)利用CAN2.0B扩展帧格式的29位标志符定义每一个PDU的含义及该PDU的优先级。 (4)J1939协议主要作为汽车中应用的通讯协议,对汽车中应用到的各类参数都进行了规定。参数的规定符合ISO11992标准。 二、J1939协议通讯报文内容解析 J1939协议实质是将CAN扩展帧格式中未明确定义的11位ID,18位扩展ID进行了明确定义,紧随ID的是8个字节的数据。 为了实现J1939协议报文的正确接收,必须首先明确其仲裁场(如上所示)是如何确定的。下面将逐一介绍: 优先级:29位标志符的前3位用于在仲裁过程中决定报文的优先级P。值000是最高的优先级。高的优先级用于高速要求的报文。低的优先级用于时间要求不紧迫的数据。 标志符位(R):保留位。在传输报文时此位置为0。此位留作将来SAF委员会定义其它目的使用。 数据页( DP)位:DP位用于选择两页参数组中的其中一页。0页包含现在被定义的所有报文。1页预备将来额外的扩展能力。在0页用完后才被分配。 PDU格式(PF):PDU代表协议数据单元。PF场识别能被传送的两个PDU格式。 SRR和IDE位:在CAN 2. 0B己被详细定义。它们被置为隐性位。这使扩展帧的优先级低于标准格式数据帧的优先级。 PDU专用(PS):它们由PF的值决定。如果PF的值在0与239之间( PDU 1),PS场包含一个目的地址;如果PF的值在240与255之间(PDU 2),PS场包含一个对PF的组扩展。组扩展提供更大的一组值以标识网络中能被广播的所有ECU的报文。在J1939标准下,要被广播的大多数报文用PDU 2格式。用PDU 2格式在网络中传输的数据不能被直接到达一个明确目的地。当报文必须要直接传送到一个专用ECU,必须在PDU1格式数的范围分配一个PGN(参数组数),以至少在报文标志符内能包括一个专用的目的地址。 源地址(SA):标志符的最后8位包含ECU传送报文的地址。对于一个给定的网络,每一个地址必须是唯一的,两个不同的ECU不能同时用同一个地址。 三、29位ID生成说明 基于以上分析,只要将相关参数填入如下的表中,即可得到相应的29位ID。此类参数可以从SAE J1939-71文档中得到,该文档介绍了J1939应用层上,路面车辆的推荐操作规程。 下面以获取发动机为例说明。从SAE J1939-71(Jun 2006) 496页中,可以得到发动机转速的相关J1939协议参数,如下所示: 优先级(P):3 数据页面(DP):0 PDU格式(PF):240 PDU专用(PS):4 另外,以康明斯发动机为例,发动机源地址(SA)被定义为0值。 因此,可以得到PGN为61444的扩展ID信息为: 所以,其ID为0C F0 04 00。识别出该ID的报文后,可以在随后跟随的8个字节的数据域中的第4,5字节,得到发动机转速值。
|