tp.cm和tp.dt报文说明,为什么计算的pgn不对,1939里的GPN如何计算,什么时候的报文没有目标地址。

ISO 11989只规定了CAN总线的物理层和链路层协议,在实际应用中,为保障不同厂家设备的兼容性,需要统一CAN总线的应用层协议。常见的应用层协议有:SAE J1939、CANOpen和DeviceNet。

  1. SAE J1939
    SAE J1939基于CAN2.0B,通信速率250kbit/s,最多可带30个设备,最大总线长度可达40 m,节点线最长1米。SAE J1939定义了29位Indentifier和数据域的使用方法。定义协议数据单元(PDU = Indentifier+数据域),PDU格式:
    tp.cm和tp.dt报文说明,为什么计算的pgn不对,1939里的GPN如何计算,什么时候的报文没有目标地址。
    优先权P:值越小,报文的优先权越高。

参数组编号PGN:参数组编号唯一标识一个参数组,表征报文的内容和用途,确定报文的类型和传播数据需要的帧数目。

扩展数据页EDP与数据页DP:没啥特别解释的,分类用的。

PDU格式PF:PDU有两种类型PDU1和PDU2,PDU1向特定地址发送报文,PDU2向全局地址发送报文。当PF为0239时,表征报文为PDU1;当PF为240255时,表征报文为PDU2。

特定域PS:功能由PF决定,当PF为PDU1时,PS表示目标地址;当PF为PDU2时,与PF的4个最低有效位能够共同确定4096个PDU2格式参数组。

源地址SA:发送消息的电控单元(ECU)地址。

数据域:CAN2.0的数据域最多支持8字节的数据,如果PDU的数据小于等于8字节,1个PDU用1个CAN2.0帧传输即可;如果PDU的数据大于8字节,就需要在发送时进行拆包,在接收时进行重组。接收端如何识别是否需要重组以及怎么重组呢?J1939的做法是在拆包的情况下,将8字节的数据区的第一个字节用于表示拆包后的序号(1-255);因此,最长的PDU为255×7字节。
例子:

;----------------------------------------------------------------------  (特定目标地址通讯)
                                 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

及就是PF>240,则没有目标地址,只有源地址00XXBB
PF<240,则有目标地址,有源地址,PGN既就是00XX00

TP.CM报文的PF=EC,EC<F0,所以TP.CM的CANID是包含目标地址的,但是目标地址是FF,是广播地址,而PGN则应该是00EC00,而不是00ECFF。

上一篇:树链剖分解析


下一篇:[CTSC2018]暴力写挂