CANOpen

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/csdn_zhang99/article/details/81251969

                                            CANOpen

CAN现场总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层) ,而这两层一般已被CAN硬件完全实现了。由于没有规定应用层,本身并不完整CANOpen属于应用层协议来定义CAN报文中的11/29位标识符和8字节数据的使用

CANopen协议的子协议——实时伺服驱动和运动控制协议(CiA DSP402)是专门针对驱动装置和运动控制装置等运动控制系统的协议规范,该协议定义了伺服驱动器、变频器和步进式电机控制器的功能特性,它还指定了多种操作模式和相应的组态参数。CANopen协议的特点尤其是 DSP402 子协议的针对性决定了其适用于分布式运动控制系统。CANopen协议目前还没有开放的协议源代码,用户使用该协议时可以选择购买或者根据自己的需求进行编程实现。

CAN 报文由7个不同的位域组成,而CANopen就是规定其中的仲裁域(11 位标识符) 和数据域(8 字节数据) 的使用情况

  • 术语

COB —— Can Object通讯对象,在 CAN 网络上的一个传输单元。Communication object; a CAN message

COB-ID  CAN Object identifier.

  SDO —— Service data object服务数据对象,一种COB。主要用来在设备之间传输大的低优先级数据,典型的是用来配置CANopen网络上的设备。 

  PDO —— process data object进程数据对象,一种COB。用来传输实时数据,比如控制命令、给定值和实际值。

  EDS —— 电子数据表。 EDS 文件包含关于节点及其对象字典的信息。

  NMT —— network management网络管理。它负责CAN 网络上的初始化、配置和故障处理。

  OD  —— 对象字典。对象字典是所有数据结构的集合,这些数据涉及设备的应用程序、通信以及状态机,对象字典利用对象来描述CANopen设备的全部功能。对象字典位于通信层和用户层之间,它的作用主要是为用户提供服务接口。

 

2.CANopen设备结构

       CANopen是一个基于CAN串行总线系统和CALCAN应用层)的高层协议。 CANopen的核心概念是设备对象字典(OD ObjectDictionary),CANopen通讯通过对象字典(OD)能够访问驱动器的所有参数。CANopen设备结构如图 2‑1所示。

2‑1  CANopen设备结构

2.1  CANopen对象字典

索引

对象

0000

Not used

0001 - 001F

静态数据类型(标准数据类型,如Boolean,Integer 16)

0020 - 003F

复杂数据类型(预定义由简单类型组合成的结构如PDOCommPar,SDOParameter)

0040 - 005F

制造商规定的复杂数据类型

0060 - 007F

设备子协议规定的静态数据类型

0080 - 009F

设备子协议规定的复杂数据类型

00A0 - 0FFF

Reserved

1000 - 1FFF

通讯子协议区域(如设备类型,错误寄存器,支持的PDO数量)

2000 - 5FFF

制造商特定子协议区域

6000 - 9FFF

标准的设备子协议区域(例如“DSP-401 I/O 模块设备子协议”:Read State 8 Input Lines等)

A000 - FFFF

Reserved

       CANopen对象字典(Object DictionaryOD)是CANopen协议最为核心的概念。所谓的对象字典,就是一个有序的对象组;每个对象采用一个16位的索引值来寻址。为了访问数据结构中的元素,同时定义了一个8位的子索引,对象字典的结构如表 2‑1所示。

2‑1  对象字典结构

        CANopen网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。

       CANopen对象字典中的项由一系列子协议来描述。子协议描述对象字典中每个对象的功能、名字、索引、子索引、数据类型、读/写属性,以及这个对象是否必需等,从而保证不同厂商的同类型设备兼容。

       CANopen协议的核心描述子协议是DS301,包括CANopen协议应用层及通信结构描述,其他子协议都是对DS301协议描述文本的补充与扩展。

       CANopen协议包含许多子协议,其主要划分为以下3类:

       1  通信子协议

              通信子协议(Communication Profile)描述对象字典的主要形式,以及对象字典中的通信对象和参数。这个子协议适用于所有的CANopen设备,其索引值范围为0x1000~0x1FFF

       2  制造商自定义子协议

              对于在设备子协议中未定义的特殊功能,制造商可以在制造商自定义子协议(Manufacturer-specific Profile)中根据需求定义对象字典项。因此,这个区域对不同厂商来说,相同的对象字典项的定义不一定相同,其索引值范围为0x2000~0x5FFF

       3  设备子协议

              设备子协议(Device Profile)为各种不同类型设备定义对象字典中的对象,其索引值范围为0x6000~0x9FFF

2.2  CANopen通信

       CANopen协议中主要定义网络管理对象(NMT)、服务数据对象(SDO)、过程数据对象(PDO)、预定义报文或特殊功能对象4种对象。

2.2.1  网络管理对象
 

       网络管理对象负责层管理、网络管理和ID分配服务,例如,初始化、配置和网络管理。网络管理中,同一个网络中只允许有一个主节点、一个或多个从节点,并遵循主/从模式。

2.2.2  服务数据对象
 

       服务数据对象主要用于主节点对从节点的参数配置。服务确认是SDO最大的特点,为每个消息都生成一个应答,以确保数据传输的准确性。在一个CANopen系统中,通常CANopen从节点作为SDO服务器,CANopen主节点作为客户端。客户端通过索引和子索引能够访问数据服务器上的对象字典,所以CANopen主节点可以访问从节点的任意对象字典项的参数,并且SDO可以传输任何长度的数据(当数据长度超过4字节时,拆分成多个报文来传输)。

2.2.3  过程数据对象

       过程数据对象用来传输实时数据,其传输模型为生产者-消费者模型,数据长度被限制为1~8字节。

       PDO通信对象具有如下特点:

       1.     PDO通信没有协议规定,PDO数据内容由它的COB-ID定义。

       2.     每个PDO在对象字典中用2个对象描述,分别是PDO通信参数和映射参数。

              1  PDO通信参数:定义该设备所使用的COB-ID、传输类型、定时周期。

              2  PDO映射参数:包含一个对象字典中的对象列表,这些对象映射到相应的PDO,其中包括数据的长度。对于生产者和消费者,只有知道这个映射参数,才能够正确地解释PDO的内容。PDO内容是预定义的,如果PDO支持可变PDO映射,那么可以通过SDO进行配置。

       3.     PDO具有2种传输方式:同步传输和异步传输。

              1  同步传输:通过接收同步对象实现同步,按触发方式又可分为非周期传输和周期传输。非周期传输由远程帧预触发,或者由设备子协议中规定的对象特定事件预触发。周期传输则通过接收同步对象来实现,可以设置1~240个同步对象触发。

              2  异步传输:由特定事件触发。按触发方式又可分为2种:一种通过发送与PDOCOB-ID相同的远程帧来触发;另一种由设备子协议中规定的对象特定事件来触发(如定时传输、数据变化传输等)。

2.2.4    预定义报文或特殊功能对象

       预定义报文或特殊功能对象为CANopen设备提供特定的功能,以方便CANopen主站对从站的管理。在CANopen协议中,已经为特殊的功能预定义了COB-ID。主要有以下几种特殊报文:
 

       1.     同步报文(Sync

              主要实现整个网络的同步传输,每个节点都以该同步报文作为PDO触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。

       2.     时间标识报文(Time Stamp

              为每个节点提供公共的时间参考。

       3.     紧急事件报文(Emergency

              当设备内部发生错误时触发该对象,即发送设备内部错误码。

       4.     节点/寿命保护报文(Node/Life Guarding

              主节点可通过节点保护方式获取从节点的状态,从节点可通过寿命保护方式获取主节点的状态。

       5.     启动报文(Boot up

              从节点初始化完成后向网络中发送该对象,并进入预操作状态。

2.3  CANopen预定义连接集

       为了减小简单网络的组态工作量,CANopen定义了强制性的缺省标识符(CAN-ID)分配表。这些标识符在预操作状态下可用,通过动态分配可以修改它们。CANopen设备必须向它所支持的通讯对象提供相应的标识符。

       CAN-ID分配表是基于11CAN-ID的标准帧格式,划分为4位功能码和7位节点号,如图 2‑2所示。

2‑2  预定义连接集ID

       Node-ID由系统集成商定义,每个CANopen设备都需要分配一个节点号,节点号的范围是1~1270不允许被使用)。

       预定义连接集定义了4个接收PDO4个发送PDO1SDO(占用2CAN-ID),1个紧急对象和1个节点错误控制。支持无需确认的NMT模块控制服务、同步和时间标识对象报文。缺省ID分配表如表 2‑2所示。

2‑2 CANopen预定义主/从连接集CAN标识符分配表

 

举个例子:

8. SDO

  这个很简单,就是类似串口的一发一回模式,主站发送请求帧,从站回复应答帧。

  大家看几个例子就明白了。

 

To write the 1 byte data : 0xFD in the object dictionary of node 5, at index 0x1400, subindex 2, sends :

605 2F 00 14 02 FD 00 00 00

If success, the node 5 responds :

585 60 00 14 02 00 00 00 00

To write the 4 bytes data : 0x60120208 in the object dictionary of node 5, at index 0x1603, subindex 1, sends :

605 23 03 16 01 08 02 12 60

If success, the node 5 responds :

585 60 03 16 01 00 00 00 00

 

9. PDO

分为TX-PDORX-PDO

 

上图,这就是PDO的配置过程,0x1402(接收PDO通讯参数),PDO使用的cob-id,传输类型,Inhibit timeEventTimer

0x1602(映射对象),上例中映射为ControlwordTarget position

这里着重讲一下Transmission Type,上述是codesys中支持的集中方式:

acyclic sync(数值为0):同步PDO,同步方式由具体设备协议定义

Cyclic sync(数值为1-240):同步PDO,每个NSYNC周期后,发送PDO

Sync rtr(数值253):同步PDO,收到远程帧请求后发送PDO

Async(数值253):异步PDO,收到远程帧后发送PDO

最后两个Async254,255),都是设备厂家定义的,也是大家最常用的,当事件发生时发送。各个厂家在这里基本都是使用数据变化时发送方式,FDJD伺服两种方法是一样的,都是数据变化发送。要注意设置禁止时间,降低CANOPEN通讯带宽。

--------------------------------------------------------------------------------------------

  • COB-ID

  CANopen 是一个基于 CAN (控制局域网)串行总线系统和 CAL CAN 应用层)的高层协议。 CANopen 的核心概念是设备对象字典( OD Object Dictionary),CANopen 通讯通过对象字典( OD)能够访问驱动器的所有参数。

  COB-ID(通讯对象标识符)分配:

  The type of COB transmitted is indicated in the arbitration field of the message, and thereby determines its priority. 注意:PDO/SDO 的发送/接受是由( slaveCAN节点方观察的即要发送SDO数据帧给设备(如驱动器),COB应为SDO-Receive类型。

  • SDO

  SDO 用来访问一个设备的对象字典。访问者被称作客户 (client),对象字典被访问且提供所请求服务的 CANopen 设备别称作服务器(server)。客户端的 CAN 报文和服务器的应答CAN 报文长度为8个字节(注意不是所有的数据字节都包含有效信息,不够8字节的要补0)。SDO主要用于CANopen主站对从节点的参数配置。服务确认是SDO的最大的特点,为每个消息都生成一个应答,确保数据传输的准确性。When using SDOs, it is important to remember that: An SDO has a lower priority than a PDOAn SDO session is not complete until it is confirmed.

  SDO的通讯原则很简单,发送方(客户端)发送CAN-ID600h+Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度均为8字节;接收方(服务器)成功接收后,回应CAN-ID580h+Node-ID的报文。这里的Node-ID依然是接收方(服务器)的节点地址,数据长度均为8字节。如下图所示。

 

  SDO 2 种传送机制:

­ 1. 快速传送(Expedited transfer   最多传输 4 字节数据
­ 2. 分段传送(Segmented transfer): 传输数据长度大于 4 字节

  最常用最常见的SDO协议是快速SDO,所谓快速,就是1次来回就搞定。前提是读取和写入的值不能大于32位。通过快速SDO,可以直接对CANopen节点的对象字典中的值进行读取和修改,所以在做参数配置之外,也经常作为关键性数据传输之用。比如CANopen控制机器人的电机转动角度时,就使用SDO来传输,保证可靠到达。当需要传输的值超过32位时,就不能使用快速SDO传输。必须使用普通SDO进行分帧传输。在应用中较少用到,一般用于CANopen节点的程序固件升级,或者做网关转换MVB总线之类数据最大可达256位的应用。

  读指令的详细信息参考DS-301协议中的Chapter4.3 Initiate SDO Upload Protocol;写指令参考Initiate SDO Download Protocol.

  比如读取设备对象字典0x1000处的内容(假设为32位数据0x00020192),发送的数据格式如下:

  返回数据格式如下:

  下面是写指令的例子(假设设备节点地址为1COB-ID = 功能码 + 节点地址),在对象字典0x607F处写入数据0x500000x22SDO命令,具体代表的意思要参考DS301手册

====================================================================================================================

注意:CANopen使用的是小端模式,即低位字节在前,高位字节在后!

错误报文代码参考Abort SDO Transfer Protocol章节

 

展开阅读全文

没有更多推荐了,返回首页