CAN ID 中的J1939-PGN

Leo-Lian發表於2018-04-14

PGN是引數組編號,對於制定CAN協議來說十分重要,很多ECU在接受報文時識別的就是PGN而不是報文的ID,

報文ID作為報文的名字,是沒一條報文專有的名字,而一個PGN不僅僅對應一條報文。CAN的擴充套件幀使用29位識別符號,報文ID共有四個位元組32位,PGN共有3個位元組24位,兩者有重合但是PGN並不是ID的一部分。

PGN的24位分別是:6個bits的0,一個擴充套件資料頁(EDP)、資料頁(DP)、PF、GE。當PF<240的時候,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




例如: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)

應答訊息 0x18E8FF00  PGN = E800(16)  59392(10)          (PF<240)




相關文章