J1939应用层协议详细描述了用于J1939网络的每个参数,包括其数据长度、数据类型、分辨率、范围及参考标签,并为每个参数分配了一个编号(SPN)。由于J1939协议是以协议数据单元(PDU)的形式进行传输,而一个PDU包含8个字节数据,因此,需要对这些参数进行组合。在J1939应用层协议中还详细定义了参数组,包括每组参数的更新率、有效数据长度、数据页、PDU格式、PDU细节、默认优先权及参数组的内容,并为每个参数组分配一个参数组编号(PGN)。
PGN(parameter group number)是一个24位的值,包括保留位、数据页位、PF(PDU 格式场)和PS(群扩展场)等要素。
SPN(SPN: Suspect Parameter Number)是PG(参数组)下面的具体参数的一个编号,而PGN是参数组编号,可以理解为一个PGN包含了按一定方法分类的一组参数,而每个具体参数又有它自己的编号(就是SPN)。
SAE J1939的应用层以PGN和SPN的方式具体规定了车辆使用的每个参数的数据长度,数据类型,分辨率和数据范围等。
18 EB 00 F9 是一个报文的29位标示符,70 E3 FF FF FF FF FF FF是后面的数据域。
18EB00F9化成2进制就是 110 00 1110 1011 0000 0000 1111 1001
把这个按照PDU的格式代进去就知道这条报文的意思了。
后面的数据域含义可以通过前面得到的PFPS知道PGN,然后查看J1939应用层关于该PGN的数据位就能知道这个数据的含义。
在各个位转化到PGN的过程中,如果PF的值小于240(十进制)时,PGN的低字节置零(个人理解当PF的值小于240时,PS的置0)。
举一个例子:请求PGN的数据页位(DP)=0;PF=234(#EA)那么她的参数群编号PGN=#00EA00。因为PF=234<240,所以PS=#00
注:PF(PDU格式场)和PS(群扩展场)都是八位
CAN通讯协议中PGN的计算
数据链路层通过协议数据单元(PDU)组织数据帧中的协议相关信息。PDU由CAN 扩展数据帧中29位ID和O~8字节数据场组成。
CAN通讯协议中PGN的计算
J1939协议
// 18DB33F1
// 110 0 0 11011011 00110011 11110001 // P3~1 R1 DP PF8~1 PS8~1 SA8~1 // PGN = R1 | DP | PF | PS = 56115
P Priority
R Reserved
PS PDU Specific
SA Source Address
PF PDU Format
DLC Data Length Code
DTC (4字节)有四个部分组成:
1、可以参数码:SPN19位;
2、失效模式标识符:FMI 5位;
3、故障发生次数:OC 7位;
4、SPN转换方式:CM 1位;
CAN扩展数据帧:
PDU = ID+数据场;
PGN:
例子2:
;---------------------------------------------------------------------- (特定目标地址通讯)
PDU1
P R DP PF PS(DA) SA Data Field
3 1 1 8 8
8 0-64
;---------------------------------------------------------------------- (广播)
PDU2
P R DP PF PS(GE) SA Data Field
3 1 1 8 8
8 0-64
;---------------------------------------------------------------------
18FEDF00
110| 0 0 | 11111110 11011111 | 00000000
优| | |
先| | PGN | 源地址
级| | |
优先级:110 ro 6
参数组:FEDF or 65247DEC 源地址:00H