CAN与CANOpen(五)

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

4.3通讯对象

CANOpen协议共有6种通讯对象,分别是:PDOSDOSYNCTIMEEMCYNMT。这6种通讯对象完成了CANOpen协议的所有通讯功能。其中我们只介绍使用较多的PDOSDONMT4.4)。

4.3.1通信对象IDCOB-ID

CANOpen协议的通讯对象主要利用了CAN协议中的数据帧和远程帧。为了区分不同的通讯对象,CANOpen协议利用数据帧/远程帧中的ID。其中第7位到第10位为功能代码。第0位到第6位为节点ID,用以区分不同节点的相同功能。这样就允许最多127个从节点与主节点通讯。


28 COB-ID的结构

下面是预定义的各通讯对象的COB-ID


3各通讯对象对应的COB-ID

其中绿色部分为广播的通讯对象,蓝色部分为点对点的通讯对象。

COB-ID的大小也决定了通讯对象的优先级,其中NMT的优先级最高,PDO的优先级高于SDO

4.3.2Process Data Object

CANOpen中的实时数据传输是由PDO来完成的。PDO的传输采用了生产者消费者模式。共有两种PDOTPDORPDOTPDO用来传输数据,支持TPDO的节点都是PDO数据的生产者。RPDO用来接收PDO数据,支持RPDO的节点是PDO数据的消费者。从表3可以看出,一个节点最多支持4TPDO(分别是180h+NodeID280h +NodeID380h +NodeID480h +NodeID)和4RPDO(分别是200h +NodeID300h +NodeID400h +NodeID500h +NodeID)。每一个PDO都对应一些参数,包括通讯参数和映射参数。

 4.3.2.1PDO的参数

PDO的参数包括两部分,通讯参数和映射参数.他们占据了对象字典中从14001BFF之间的位置.


4 PDO参数在对象字典中的位置

PDO的通讯参数定义了COB-ID,传输类型(同步,异步,循环,时间出发),inhibit time(两个PDO的最小间隔),5.

6给出了PDO的映射参数.一个PDO最多可以映射到64个对象。每一项的含义见图29。最高16位是对象字典的索引,后面8位是子索引。最低8位是数据长度。关于PDO映射的详细介绍见4.3.2.2


5 PDO通讯参数


6 PDO映射参数


29 PDO映射参数解释

4.3.2.2PDO映射

PDO的内容没有固定的形式,它的数据段可以是18个字节长。使用PDO的一个基本的出发点是发射端和接收端都知道PDO中的数据的含义。图30说明了具体的工作原理。PDO采用了生产者和消费者模式。生产者按照TPDO的映射参数从对象字典中抽取数据形成PDO的数据。当消费者接收到PDO的数据后,就会按照RPDO的映射关系,将PDO中的数据解析出来,填入对应的数据字典中。

31给出了生产者生成PDO0数据的具体过程。首先生产者从[1800,01]中得到COB-ID。然后从[1A00,01]中获取第一个对象。[1A00,01]中的值为0x20000108h,那么第一个对象为[2000,01],对应值为A,PDO中占0x8位。接着是第二个对象[2003,03],对应值为G,在PDO中占0x10位。最后是对象[2003,01],对应值F,在PDO中占0x8位。这样一个有数据AGF组成的,32位的PDO就形成了。


30 TPDORPDO[2]


31 PDO数据的形成

 4.3.3SDO

SDO(Service Data Object)使用Client-Server模式建立起点到点的通讯并实现了对对象字典中条目的读写。其中被访问的对象字典的所在设备作为Server,访问对象字典的设备作为client。参考下图。SDO采用的请求应答模式,每次SDO访问都会有2CAN的数据帧对应。一条是请求,一条是应答。


32 client-server模式

SDO主要提供3种服务:段传输,块传输,中止传输。下面分别来介绍这三种服务是如何实现的。

4.3.3.1段传输

下面是SDO段传输Download过程中的示意图。首先由client端发起,然后Server端应答。这样一来一回。知道把数据传输完毕。当传输的数据长度小于4时,一次应答就可把数据传输完毕。


33SDO段下载时的clientserver端数据应答


34初始化SDO下载的命令字


35SDO段下载的命令字

3435标出了在SDO段下载的初始化和数据传输阶段的命令字。其中:

  • ccs: client 命令标识符
    • 0: 段下载请求
    • 1: 初始化下载请求
    • 2: 初始化上传请求
    • 3: 段上传请求
  • scs: server 命令表示符
    • 0: 段上传响应
    • 1: 段下载相应
    • 2: 初始化上传响应
    • 3 初始化下载响应
  • n: 指示不含数据的字节数 .
  • e: 传输类型
    • 0: 普通传输
    • 1: 快速传输 ( 输出长度 <=4)
  • s: 大小指示器
  • m: 指示数据的索引和子索引 .
  • d: 数据
  • X: 总是 0
  • reserved: 预留,总是 0
  • c: 指示是否还有数据需要下载 / 上传
  • t: 触发位。这个位没发送一次数据会反转一下。

SDO段上传的过程与段下载的过程类似,只是命令字不同。可参考图3637


36初始化SDO上传命令字


37SDO段上传命令字

4.3.3.2块传输

块传输的主要目的是为了提高传输效率。它与段传输的主要区别在于:块传输时,可以传输多次数据之后,才会有一次应答,如图38CANOpen将数据分为多个block,每个block又由1-127segment组成。在传输完一个block的数据之后,才会有一次的应答。



38块传输时的client,server数据应答

4.3.3.3中止传输

无论CAN设备处于段传输还是块传输中,都可以使用中止传输协议(图39)来中止传输。


39中止SDO传输命令字

协议的命令字解释如下:

  • cs:命令标识符
    • 4:中止传输请求
  • X:总是0
  • m:标识索引和子索引.
  • d: 中止码( 7 中止码表 .

下表是对各中止码的解释


7中止码表

猜你喜欢

转载自blog.csdn.net/liukais/article/details/80249801
今日推荐