PGN是参数组编号,对于制定Can协议来说非常重要,很多ECU在接收报文时识别的就是PGN而不是Can Id。
Can Id 作为报文的名字,是每一条报文专有的名字,而一个PGN不仅仅对应一条报文,Can的扩展帧使用29位标识符,Can Id共有4个字节32位,PGN共有3个字节24位,两者有重合但PGN并不是Can Id的一部分。
PGN的24位分别是:6bits的0,一个扩展数据页(EDP)、数据页(DP)、PF、GE。当PF<240(0xF0)时,GE=0,否则GE取正常值。
例如:
报文ID:18FECA17
第一个字节是18,转换为二进制是0001 1000 ,可以看到优先级是110(十进制的6),DP=0,R=0
第二个字节是PF=FE(十进制是254>240),
第三个字节是GE,
第四个字节是17
这里因为PF>240,所以GE=CA,所以PGN=FECA
报文ID:0CDAEE17
第一个字节是0C,转换为二进制为 0000 1100,优先级011(十进制的3),DP=0,R=0
第二个字节是PF=DA(十进制是218<240)
第三个字节是GE
第四个字节是17
这里因为PF<240,所以GE=0,所以PGN=DA00
参数组编号(PGN)
在识别Can数据帧的数据域属于哪个参数组时,需要一个24位的值,这个24位的值首先发送最低字节(最低字节先发送,其次是中间字节,最后是最高字节)。PGN是一个24位的值,包括以下部分:保留位、数据页位、PDU格式域(8位)和组扩展域(8位)。这些位域转换到PGN的过程如下:若PF值小于240(F016),PGN的低字节置0;否则,将其值设为组扩展域的值。
例如:0x18 FE DF 00 = 110 | 0 0 | 11111110 | 11011111 | 00000000
P R DP PF PS SA
具体参数即为数据段(0-64).
优先级为 P = 110(2)或6(10)
PF>240则参数组(PGN)编号为 FEDF(16)或65247(10)
注意:PF<240 , PGN低字节置零。
EEC1 0x0CF00400 PGN = F004(16) 61444(10)
EEC2 0x0CF00300 PGN = F003(16) 61443(10)
EEC3 0x18FEDF00 PGN = FEDF(16) 65247(10)
LFE 0x18FEF200 PGN = FEF2(16) 65266(10)