SAEJ1939-21数据链路层部分解读(第二部分)

传输协议连接管理消息:
这类消息用于建立和管理连接,以及控制数据流。
传输协议提供了6种传输协议连接管理消息:连接模式下的请求发送,连接模式下的准备发送,消息结束应答,放弃连接,以及广播公告消息。
1、连接模式下的请求发送(TP.CM_RTS):指定目标地址
字节: 1 控制字节=16,指定目标地址请求发送(RTS)
2,3 整个消息大小,字节数目
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 FF16
6-8 所装载数据的参数群编号

2、连接模式下的准备发送(TP.CM_CTS):指定目标地址
字节: 1 控制字节=17,指定目标地址准备发送(CTS)
2 可发送的数据包数目
3 下一个将要发送的数据包编号
4,5 保留给 SAE 设定使用,该字节应设为 FF16
6-8 所装载数据的参数群编号

3、消息结束应答(TP.CM_EndofMsgAck):指定目标地址
字节: 1 控制字节=19,消息结束应答
28
2,3 整个消息大小,字节数目
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 FF16
6-8 所装载数据的参数群编号

4、放弃连接(TP.CM_Abort):指定目标地址
字节: 1 控制字节=255,放弃连接
2-5 保留给 SAE 设定使用,该字节应设为 FF16
6-8 所装载数据的参数群编号

5、广播公告消息(TP.CM_BAM):全局目标地址
字节: 1 控制字节=32,广播公告消息(BAM)
2,3 整个消息大小,字节数目
4 全部数据包的数目
5 保留给 SAE 设定使用,该字节应设为 FF16
6-8 所装载数据的参数群编号

连接模式下的请求发送(TP.CM_RTS)
此消息用于通知一个节点,在网络上有另一节点希望与它建立一个虚拟连接。在此消息中,原地址域设置发送节点的地址,目标地址段设置期望的接收节点的地址,余下的字段根据要发送的参数群编号进行色当的设置。

连接模式下的准备发送(TP.CMCTS)
此消息用于回答请求发送消息。它通知对方节点,已经准备好接收一定量的长消息数据。
日过在一个连接建立后还接收到多组CTS消息,则连接被关闭。如果发送者放弃连接,他会发送放弃连接消息。
响应者只有等到他已经接收到来自前一个CTS消息的数据包,或者工作超时,他才会发送下一条CTS消息。
如果在连接尚未建立是接收到CTS消息,那么该消息将被忽略。

放弃连接:此消息用于让虚拟连接中的任一节点在没有完成整个消息的传输时关闭连接。
当一个节点接收到连接模式下的请求发送消息时,它必须确定是否具有充足的可用资源来处理这个连接将要传输的消息。比如一个设备由于过度消耗处理器的工作循环做其他的事,以至于无法处理长消息的传输。在这种情况下,即使连接尚未建立,也可以发送放弃连接消息。
这样做,可以使发送者无需等到超时产生才尝试别的虚拟连接。

广播公告消息:用于通知网络上所有节点将要广播一条长消息。它定义了将要发送消息的参数群和字节数。此消息被发送后,数据传输送消息将会被发送,它包含了拆装好的广播数据。它只能由发送者发送。

传输协议——数据传送消息(TP.DT)
此消息用于与同一个参数群相关的数据通讯。它是指多组消息传送中一个单独的数据包,比不,一条长消息为了铜须被分割成5个数据包,将有5条数据传送消息。

连接的限制:
如果一个节点不能再处理增加的会话通讯,那么它应该拒绝其他接单的建立连接要求。同样的,如果此时出现一条RTS消息,它的源地址和目的地址都与已存在的会话通讯相同但参数群不同,他也会被拒绝。这些情况下,新的会话请求都会通过放弃连接消息被拒绝。

节点必须支持的连接数目和类型:
网络上每个节点每次可以产生一个带有指定目标地址的指定目标地址连接传送。这是因
为 TP.DT 消息只包৿要传送数据的源地址和目标地址,而非 PGN 值。
在一个指定时刻,一个发送者只能发送一个多组 BAM 消息。这是因为 TP.DT 消息不包
৿目前的 PGN 值或者连接标识符。但是,响应者(例如,这个特殊例子中的接收设备)必
须注意使来自多个不同发送者的各个多组消息报都能接收到并且不被打乱。

参数群标称符: 传输协议——数据传送(TP.DT)
定义: 用于与同一个参数群相关的 8 字节以上的数据传送。
重复传输速度: 每次传送一个参数群
数据长度: 8 字节
数据页位: 0
PDU 格式: 235
特定 PDU 段: 目标地址(对于 TP.CM_BAM 数据传送使用全局地址(DA=255))
(对于 RTS/CTS 数据传送不允许用全局地址)
默认优先级: 7
参数群编号: 60160(00EB0016)

一个节点必须能够支持与同一个源地址同时进行一个RTS/CTS会话和一个BAM会话。因此,响应者必须用这两种传输协议消息的目标地址来正确区分它们。其中一种传输协议使用全局目标地址,另一种消息使用指定目标地址。因此西湖局传送消息不包含目前的PGN值和连接标识符,只能通过目的地址来区分这两种消息。

不管一个节点能不能够支持多个同时发生的传输协议会话(RTS/CTS 与/或 BAM),它
都必须确保来自同一源地址但带有不同目标地址的 TP.DT 消息能够被区别开来。

传输协议的预期使用:
传输协议是对带有9字节或者以上的数据PGN进行传送而提供一种机制而制定出来的。

并发PGN接收:
一些特定的PG可能当他们少于或等于8字节时,会使用费传输协议的形式来发送,大于8字节时,则使用传输协议形式来发送。也有可能同一PG的两种形式同时发送。

PDU处理所需的条件:
当数据链路使用达到 100%的时候,设备必须有足够快的速度来处理数据链路的消息,
以避免数据丢失。这也就是说,如果在低使用率的情况下存在背对背消息传送,那么每个设
备都必须在这种背对背消息传送的环境下,有足够快的速度处理消息,以免丢失数据。这里
所指的有足够快的速度处理消息,并不意味着需要对消息马上做出响应,而是指新消息的处
理不能超前于前一条消息的处理。

请求调度:
如果准备请求发送的信息在请求之前已经被接收到了,那么这个请求调度应该被取消。换言之,如果请求调度前的50ms信息已经被接收了,那么就不再发出请求。

设备响应时间和默认超时:
所有的设备在被要求作出响应时,必须在0.2秒内作出响应。所有等待响应的设备必须在放弃或重试前,至少等待1.25秒。这些时间确保了所有由于总线访问或消息传送经过桥接器的等待时间不会导致不必要的超时。
需要时,可以为特定的应用使用不同的时间值。
发至指定目标地址的多组消息中,数据包的时间间隔是0到200ms。意味着当标识符相同时可能产生背对背消息。使用CTS机制可可以确保数据包之间有指定的时间间隔。多组广播消息中,数据包之间需要的时间间隔是50到200ms。50ms的最短时间可以保证响应者有时间从CAN硬件中收取数据。

必需的响应:
全局地址的发送请求需要全部由请求PG的设备作出响应,包括请求者自己。但不允许对全局的请求作确认应答。

SAE J1939 PDU 处理过程——典型的接收流程
接收中断:
当微处理器通过 CAN 芯片接收到消息的时候,为了要解析消息并决定是否保存消息和
保存在哪里,需要完成若干个测试。表示优先级的三位只能用于总线仲裁,因此,他们不能
被接收设备使用。还需要注意的是,如果指定设备可以完成多种功能,那么它可能有多于一
个的地址(见图 A1)。
IF PGN=请求 PGN AND 目标地址是指定的 ;指定目标的请求
THEN
IF DA=被分配的地址(目的地)
THEN
把 4 字节的 ID 和 3 字节的数据包存在请求队列中
IF PGN=请求 PGN AND 目标地址是全局的 ;全局目标的请求
THEN
把 4 字节的 ID 和 3 字节的数据包存在请求消息队列中
IF PF<240
THEN
IF DA=全局地址
THEN ;PDU1 格式(DA=全局地址)
用跳转表查询需要的 PGN 值 AND
IF SA=指定需要的 ID
THEN
把 8 字节的数据保存到专用的缓冲区
ELSE
把 12 字节的消息(ID 和数据)保存到循环队列中
ELSE(DA=指定地址) ;PDU1 格式(DA=指定地址)
用跳转表查询需要的 PGN 值 AND
IF SA=指定需要的 ID
THEN
把 8 字节的数据保存到专用的缓冲区
ELSE
把 12 字节的消息(ID 和数据)保存到循环队列中
IF PF>=240
THEN ;PDU2 格式
用跳转表查询需要的 PGN 值 AND
IF SA=指定需要的 ID
THEN
把 8 字节的数据保存到专用的缓冲区
ELSE
把 12 字节的消息(ID 和数据)保存到循环队列中

通讯消息类型:
这个例子表示了一个发动机是怎样运行的:

  1. 广播/响应/应答
    发送发动机的序列号(部件 ID 的参数群编号=65259(00FEEB16))。
  2. 指定目标地址的发送请求(PGN 59904)
    接收一个对于发动机序列号的指定请求。回复的消息或者是一个带有数据的响应,
    或者是一条 NACK 消息。见本例子的第 4 项。
    2A) 全局目标地址的发送请求
    接收一个对于发动机序列号的全局请求。回复的消息是一个具备该数据的特定设备
    发出的响应。在全局请求的情况下不能使用应答消息。
  3. 命令
    对于一些命令,需要有一个特定的应答消息来确认任务已经被完成。这时,回复消
    息是 ACK=COMMAND COMPLETE 消息,或者 NACK=COMMAND NOT ABLE
    TO BE COMPLETED 消息。图 B1 的例子中可用 ACK 或者 NACK 消息来确认“CF”
    命令。
  4. 应答
    发送拒绝应答(NACK)消息来表示命令或请求不能执行(请求无效)。NACK 消
    息在数据域中包৿不合的参数群编号(PGN)。如果目标设备(目标地址所指的设
    备)无法识别命令或请求消息中的参数群编号,那么同样是发送 NACK 消息。如
    果参数群编号能够被识别,但参数不可用,那么会发送一个数据值为 255 的正常的
    响应。
    PF PS(GE, DA) SA DATA
    1)广播 254 235(GE) 000 236912
    2)指定目标请求 234 000(DA) 003 PGN 65259
    1)响应 254 235(GE) 000 236912
    或者
    4)拒绝应答 232 255(DA) 000 01,255,255,255,PGN 65259
    2A)全局请求 234 255(DA) 003 PGN 65259
    1)响应 254 235(GE) 000 236192
    3)命令 CF 000(DA) 240
    1)应答 232 255(DA) 000 00,255,255,255,PGN 或 CF
    或者
    4)拒绝应答 232 255(DA) 000 01,255,255,255,PGN 或 CF
    或者其他(1)
    1.命令(COMMANDS)总是必须要由一个机制来确认是否被成功执行。如果有别的可用方法,可以不需
    要确认消息。这样有助于减少总线传输。例如,发动机的转矩命令可以通过观察转矩状态位来确认命令的
    执行,这与从发动机返回转矩数值有同样的效果
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值