CAN与CANOpen(二)

CAN与CANOpen(一)基本概念 
CAN与CANOpen(二)报文格式 
CAN与CANOpen(三)错误处理
CAN与CANOpen(四)CANOpen对象字典 
CAN与CANOpen(五)PDO和SDO
CAN与CANOpen(六)网络管理和CAN FD

3.3帧

CAN协议的报文传输主要由下面的4种帧来实现:

  • 数据帧:从发射端携带数据到接收端。
  • 远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
  • 错误帧:任何单元检测到一总线错误就发出错误帧。
  • 过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。

同时帧间空间用来间隔数据帧/远程帧与其他帧。

3.3.1数据帧

CAN与CANOpen(二)_第1张图片

6数据帧

CAN与CANOpen(二)_第2张图片

7图例

6是一个数据帧的示意图。其中绿色标识隐性,黑色表示显性,黄色标识显性或隐性(图7),以下相同。

一个完整的数据帧有7部分组成,依次为帧起始(SOF)、仲裁场(Arbitration Field)、控制场(Control Field)、数据场(Data Field)CRC场、应答场(ACK Field)、帧结尾(EOF)

帧起始是数据帧和远程帧开始的标志,它是一个显性位。一个CAN节点只有在总线处于空闲状态时才可以发送帧起始。

CAN与CANOpen(二)_第3张图片

8仲裁场

仲裁场在帧起始之后,控制场之前,共12位(注:协议的讲解以CAN2.0A为基础[3]CAN2.0B版本的仲裁场为32[4])分为两部分11位的标识符和1位的远程发送请求位(RTR)。在数据帧中RTR为显性,在远程帧中RTR为隐性。所以如果相同标识符的数据帧与远程帧发生冲突,数据帧优先。

CAN与CANOpen(二)_第4张图片

9控制场与数据场

仲裁场之后便是控制场。控制场的头两位为保留位,为隐性。后面是数据长度代码(DataLengthCode)。数据长度代码指示了数据场中字节的个数。图10说明了数据长度的大小在DLC的表示。

CAN与CANOpen(二)_第5张图片

10数据长度代码

DLC最大为8

对于超出8的情况,各厂家有不同的实现。有的实现忽略越界”DLC,传输8 bytes的数据和错误DLC。有的传输8 bytes的数据并改DLC8。有的直接不传输任何东西。

数据场在控制场之后,传输数据的长度由DLC决定。如果DLC0,则没有数据场。数据场中高位先传输。

CAN与CANOpen(二)_第6张图片

11 CRC

CRC场在控制场和数据场之后,由CRC序列和界定符组成。CRC序列是帧起始,仲裁场,控制场和数据场组成的位流的CRC校验值。其中CRC校验的生成多项式为X15+ X 14+ X10+ X8+ X7+ X4+ X3+ 1CRC序列之后是一个隐性”CRC结束符。

CAN与CANOpen(二)_第7张图片

12应答场与帧结尾

CRC场之后便是应答场。应答场由2个位组成,应答位和应答结束符。发射单元会发送隐性的应答位和应答结束符至总线上。而接收单元如果接收到的数据都是有效的,会在发射单元发送应答位的同时发送一个显性位至总线上,所以一个有效的数据帧,应答位在总线上应该表现为显性

数据帧的最后为帧结尾,有7个连续的隐性位组成。

3.3.2远程帧



13远程帧

远程帧的主要作用是向其他的CAN节点发送数据请求,发送相同标识符的数据帧。与数据帧相比,远程帧的RTR位是隐性的,而且没有数据场。DLC中的值是数据帧的数据长度。

3.3.3错误帧


CAN与CANOpen(二)_第8张图片

14错误帧

错误帧由错误标志的叠加和结束符组成。

错误标志有主动错误标志与被动错误标志。主动错误标志为6个显性位,被动错误标志为6个隐性位。

错误主动节点与错误被动节点(参考“CAN节点的错误状态)对错误的反应是不一样的。

当错误主动节点检测到错误时,会发送主动错误标志。而主动错误标志又会影响总线上原有传输内容的结构,从而让其他未检测到错误的节点发现错误。一种情况是错误帧破坏了应答场和帧结尾的固有形式;另一种情况是错误帧破坏了位填充规则。当其他节点发现错误后,也会发送错误帧。这样就会造成一个错误标志的叠加会有6-12bits大小。

CAN与CANOpen(二)_第9张图片

15本地错误的全局化


15就演示了第二种情况时的各个节点发送错误帧的情况。节点1首先检测到错误,发送错误帧,在连续发送了6个显性位之后,节点23检测到位填充错误,也发送错误帧。这样总线上错误帧的叠加就达到了12位。

所有节点发送完错误标志之后就会发送一个隐性位,并监控总线,直到总线上出现一个隐性位。然后在发送7个隐性位。这样一个错误帧就发送完毕了。

3.3.4过载帧

CAN与CANOpen(二)_第10张图片

16过载帧

过载帧与主动错误帧非常类似,特别是位的组成和全局化的过程。主要的差别在于错误帧发生着数据帧,远程帧期间。而过载帧发生于间歇字段期间。

过载帧是由过载标志的叠加和过载结束符组成。有两种情况可以触发过载帧:

  1. CAN 节点的内部需求,例如需要时间准备数据帧的数据。这种情况下过载帧只允许起始于帧间隔的第一个位。
  2. 在帧间隔内侦测到显性位。这种情况下,过载帧起始于检测到显性位的后一位。

过载标志由6个显性位组成,过载帧破坏了间歇字段的结构从而导致了过载帧的全局化。发完过载标志后,CAN节点会往总线发送隐性位,并监控总线直至出现隐性位。然后再发送7个隐性位。

3.3.5帧间空间


CAN与CANOpen(二)_第11张图片

17 主动错误节点的帧间空间结构

CAN与CANOpen(二)_第12张图片

18被动错误节点的帧间空间结构

数据帧与远程帧的前面必然有帧间空间。对于主动错误节点和被动错误节点,帧间空间的结构稍有不同。对于主动错误节点,帧间空间由3个显性位的间歇字段和总线空闲组成。在间歇字段不允许发送数据帧与远程帧。总线空闲的长度任意,当有显性位时就被认为是帧起始。

被动错误标志除了上边两部分外,在间歇字段之后还有8个显性位的挂起传输。在挂起传输阶段被动错误节点不可以发送数据帧与远程帧。



你可能感兴趣的:(硬件,现场总线)