CANopen知识整理

本文介绍了CANopen技术,它基于CAN协议,扩展了应用层,包括通讯子协议和设备子协议。重点讲解了数据帧、对象字典(OD)、SDO与PDO通信、NMT模块控制、心跳报文、启动报文、紧急报文以及同步报文等内容,展示了CANopen在工业自动化中的关键作用。
摘要由CSDN通过智能技术生成
        CANopen是在CAN的基础上发展而来,是CAN的一个继承,使用了CAN的物理层和数据链路层,同时又在这个基础上完善了应用层。

        应用层一般包含通讯子协议和设备子协议两部分,在通讯子协议中,定义了对象字典中对象的具体格式,另外还包含通讯协议的一些具体格式,比如说SDO通讯、PDO通讯管理、报文、节点保护、心跳报文等等,这些报文的一些具体结构和内容。

        标准CAN的标识符长度是11位,而扩展格式CAN的标识符长度可达29位。CAN协议的2.0A版本规定CAN控制器必须有一个11位的标识符,同时在2.0B版本中规定CAN控制器的标识符长度可以是11位或29位。本协议遵循2.0A版本

1、CANopen数据帧

        每个CANopen帧都以COB_ID开头,COB_ID是数据帧的唯一标识符。

表  CANopen数据帧

        COB_ID包括功能段(FUNCTION)和地址段(NODE-ID)Node-ID由系统集成商定义,例如通过拨码开关设置。Node-ID范围是1~127(0不允许被使用)。COB_ID越小报文优先级越高。CANopen的COB_ID范围从0-77F。

图   COB_ID结构

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

        CiA301协议中根据ID的不同,区分不同种类报文,主要划分了下面几类:

  1. SDO:服务器--客户端模式,用于通信,主要用于配制参数
  2. PDO:生产者--消费者模式用于通信
  3. NMT:网络管理.用于切换节点工作状态
  4. ... ...

        上面的报文就是通信的基础,通信是为了改变参数。 
        传输过程中的数据,总要有个地方进行保存,CANopen一般把传输中的数据存到“字典”(即 OD)里。字典是CANopen另一个重要的概念,字典里面存有参数和状态。 
        字典可以看成是一个储物柜,储物柜里面有很多小格子,每个格子上面都有编号 (编号就是索引)。
        (索引是索引,ID是ID,不能混淆)

2、Object Dictionary(OD 对象字典)

        CANopen对象字典
        
设备的数据和配置都保存在字典里面。字典是CiA301协议里规定的概念,是一个核心概念。
        字典类似于一个带有“管理员”的储物柜。这个储物柜有多个格子,每个格子都有一个编号(索引)。 如果想要取出格子里面的东西,需要知道格子的索引号。还需要与储物柜的管理员进行“通信”。
        “通信”规则有两套,一种是SDO,效率较低,但稳定,有回复。另一种是PDO,效率很高,没有回复。比如“你”要存一个帽子到储物柜里:

  1. SDO 需要“你”说出全面的信息,比如,第3行、第4列的黑色格子,放一个帽子(数据)。“管理员”收到“你”说的信息之后,接过帽子放入第3行,第4列的黑色格子,并回复“你”已放好
  2. PDO 就不需要那么全面的信息,有点类似暗号。“你”和“管理员”熟悉之后,之间的沟通就不需要那么繁琐了,
  3. “你”直接扔给“管理员”一个帽子,其就自动放入第3行,第4列的黑色格
  4. “你”直接扔给“管理员”一个鞋子,其就自动放入第8行,第8列的灰色格子
  5. ... ...

        为了避免忘记这么多的配置,“你”与“管理员”纪录了一个账册,这个账册里面写好了各个暗号(PDO配置)。并且账册也放入了“储物柜”的前面几个格子里,为了以后可以随时查看或更改(可读可写)。
        从此“储物柜”分为了两部分:

  1. 一部分是放置账册的,账册里面的内容可以进行更改(PDO的配置可以进行更改)
  2. 另一部分是放置物品的,这里基本是不变的。柜子的大小,数量和放置各个物品的专用格子是不能更改的(遵从CiA402协议)。放帽子的格子只能放帽子,放鞋的格子只能放鞋。(驱动器厂家A或这驱动器厂家B都会遵循这个规则,放置速度和放置位置的索引是不会改变的)

        “管理员”和“你”之所以有这么好的默契,是因为各自心里都有一个共同的储物柜(字典)。如果一个驱动器遵循CANopen协议,那么这个驱动器里面就有一个字典。这个字典里面存储着驱动器当前的配置(里面也包括 PDO 的配置)和参数。用PDO或者SDO进行通信,查看字典配置,读取或者写入驱动器里的速度,位置,电压,电流... ...

        CANopen对象字典的通用结构
        对设备的操作基于“Object Dictionary”,所有的参数、参数值和功能都是通过16位index和8位sub-index组成的地址来访问和存取。

表 电机控制CANopen常用对象字典举例

        CANopen网络中每个节点都有一个对象字典。对象字典包含了描述这个设备和它的网络行为的所有参数。一个节点的对象字典(包含通讯功能、通讯对象、与设备相关的对象以及对象的缺省值等)是在电子数据文档(EDS:Electronic Data Sheet)中描述或者记录在纸上。
        对象字典中描述通讯参数部分对所有CANopen设备(例如在OD中的对象是相同的,对象值不必一定相同)都是一样的。

图   CANopen对象字典的通用结构

        对象字典容量65536,通过16位索引寻址,每个对象可包含多至256个子项,通过8位子索引号寻址。16位的索引可寻址对象字典的所有对象,简单的变量可由索引直接引用,RECORD和ARRAY可由索引寻址其数据的整体结构。
        子索引00h值为索引支持最大子索引数,00h和FFh不计入。

3、CANopen状态机

图   CANopen状态机

        注意:

  •         图中括号内的字母表示处于不同状态时可以支持的报文服务:

        a.NMT,b.Node Guard,c.SDO,d.Emergency,e.PDO,f.Boot-up

  •         状态转移(1-5由NMT服务发起),NMT命令字(在括号中):

        1:Start_Remote_node(0x01)                          启动
        2:Stop_Remote_node(0x02)                          停止
        3:Enter_Per-Operational_State(0x80)            进入预操作模式
        4:Reset_Node(0x81)                                      复位节点(应用层)
        5:Reset_Communication(0x82)                      复位节点通信(用于防干扰)
        6:设备初始化结束,自动进入Pre_Operational状态,发送Boot-up报文

4、NMT模块控制报文

        只有NMT-Master节点能够传送NMT Module Control报文,所有从节点必须支持NMT模块控制服务。NMT Mouble Control报文不需要应答。NMT报文格式如下:

        当Node-ID=0,则所有的NMT从站设备被寻址。CS是命令字,取值及含义如下:

5、心跳报文

        一个节点还可被配置为产生周期性的被称为心跳报文(HeartBeat)的报文,从节点周期将该报文发送给消费者,消费者可以通过报文中的状态值得知从节点的状态。报文格式如下:

图  心跳报文

        心跳报文(HeartBeat)的消费者通常是NMT-Master主节点,它为每一个HeartBeat节点设置一个超时时间,当超时时采取相应的动作。一个节点不能同时使用NODE-Guarding(节点保护报文)和HeartBeat(心跳报文)。

6、NMT BOOT-UP启动报文

        NMT-slave节点发布Boot-UP报文通知NMT-Master节点它已经从initialising状态进入pre-operational状态,报文格式如下:

7、CANopen紧急报文

        紧急报文当设备内部出现的致命错误触发,以最高优先级发送到其他设备。适用于中断类型的错误报警信号。一个紧急报文包含8个字节,报文格式如下:

        16进制的应急错误代码表格说明此处不展示,详细请查阅《CiA 301 V4.2.0  CANopen application layer and communication profile》规范。应急错误代码中‘XX’部分由相应的设备子协议定义。
        错误寄存器(Error Register)在设备的对象字典(索引0x1001)中,下表说明了错误寄存器的位定义。设备可以将内部错误映射到这个状态字节中,并可以快速查看当前错误。

8、SDO通讯

        SDO(service data object,服务数据对象)主要用来在设备之间传输低优先级的对象,典型是用来对从设备进行配置、管理,比如用来修改速度环、位置环的PID参数,PDO配置参数等。通过使用索引和子索引SDO使客户机能够访问设备对象字典中的对象。通常情况下传输的数据长度不超过4个字节,当数据长度超过4个字节时分拆成几个报文。协议是确认服务类型:每个消息生成一个应答。SDO请求和应答报文总是包含8个字节。

8.1、SDO 的COB_ID

        通讯对象标识符,使用中具体定义规则如下:

8.2、SDO读报文

  • 发送报文

        命令字:0x40

  • 回应报文

        **最大四字节数据
        命令字:
                如果数据为1个字节,则接收命令字为0x4F
                如果数据为2个字节,则接收命令字为0x4B
                如果数据为3个字节,则接收命令字为0x47
                如果数据为4个字节,则接收命令字为0x43
                如果失败,则接收命令字为0x80

8.3、SDO读报文示例

表 电机控制CANopen常用对象字典举例

        举例:读取设备站号为1的伺服实际位置60630020,读到的数据是4个字节,CANopen数据低字节在前高字节在后(小端模式),所以数据为FFFFFD113HEX,转换成10进制为-12013。

  • 发送报文

  • 回应报文

8.4、SDO写报文

  • 发送报文

        命令字:
                如果数据为1个字节,则接收命令字为0x2F
                如果数据为2个字节,则接收命令字为0x2B
                如果数据为3个字节,则接收命令字为0x27
                如果数据为4个字节,则接收命令字为0x23

  • 回应报文


        命令字:
                如果成功,则接收命令字为0x60
                如果失败,则接收命令字为0x80

8.5、SDO写报文示例

        举例:写设备站号为1的伺服目标位置607A0020=100000inc=000186A0HEX
        注意:CANopen数据低字节在前高字节在后

  • 发送报文

  • 回应SDO报文


8.6、SDO通讯失败

  • 从站回复报文格式如下

  • 错误代码

        详细请查阅《CiA 301 V4.2.0  CANopen application layer and communication profile》规范。

中止代码

代码功能描述

05 03 00 00

触发位没有交替改变

05 04 00 00

SDO协议超时

05 04 00 01

非法或未知的Client/Server命令字

05 04 00 02

无效的块大小 (仅Block Transfer模式)

05 04 00 03

无效的序号 (仅Block Transfer模式)

05 03 00 04

CRC 错误 (仅Block Transfer模式)

05 03 00 05

内存溢出

06 01 00 00

对象不支持访问

06 01 00 01

试图读只写对象

06 01 00 02

试图写只读对象

06 02 00 00

对象字典中对象不存在

06 04 00 41

对象不能够映射到PDO

06 04 00 42

映射的对象的数目和长度超出PDO长度

06 04 00 43

一般性参数不兼容

06 04 00 47

一般性设备内部不兼容

06 06 00 00

硬件错误导致对象访问失败

06 06 00 10

数据类型不匹配,服务参数长度不匹配

06 06 00 12

数据类型不匹配,服务参数长度太大

06 06 00 13

数据类型不匹配,服务参数长度太短

06 09 00 11

子索引不存在

06 09 00 30

超出参数的值范围 (写访问时)

06 09 00 31

写入参数数值太大

06 09 00 32

写入参数值太小

06 09 00 36

最大值小于最小值

08 00 00 00

一般性错误

08 00 00 20

数据不能传送或保存到应用

08 00 00 21

由于本地控制导致数据不能传送或保存到应用

08 00 00 22

由于当前设备状态导致数据不能传送或保存到应用

08 00 00 23

对象字典动态产生错误或对象字典不存在

9、PDO通讯

        PDO(process data object,服务数据对象)用来传输实时数据,数据从一个生产者传到一个或多个消费者。1个PDO一次最多传输8个字节的数据。PDO通道理论上可以达到512个,PDO的发送方式是通信参数决定的,映射参数决定了发送的内容解析。
        每个PDO在对象字典中用2个对象描述:

  • PDO通讯参数,包含COB_ID,传输类型,禁止时间,定时器周期
  • PDO映射参数,包含对象字典中对象列表,这些对象映射到PDO里,包含数据长度,生产者和消费者根据映射的地址解释PDO内容

        报文内容是预定义的(或者在网络启动时由主站配置),由通讯的双方决定八个字节数据的具体含义。PDO通讯又分RX-PDO(接收PDO)和TX-PDO(发送PDO),接收和发送都是相对于从节点来说的。

        PDO通讯和SDO通讯的区别就是,它是一种不需要回应的通讯方式,从节点根据收到的报文的COB_ID来判断这条报文是不是属于自己的,如果是自己的则解析报文,但是不需要对报文做出回应。从节点发出的报文,主节点收到之后也是根据COB_ID来做判断,并不需要对报文做出回应。
 

9.1、PDO参数

        发送PDO通讯参数地址范围:1800h-19FFh
        接收PDO通讯参数地址范围:1400h-15FFh
        PDO通讯参数说明了PDO的基本特性,如COB_ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据。
        PDO禁止时间:两个连续PDO传输的最小间隔时间,避免由于高优先级信息的数据量太大,始终占据总线,而使其它优先级较低的数据无力竞争总线的问题。禁止时间由16位无符号整数定义。
        PDO定时周期:当超过定时时间后一个PDO可以被触发,周期由16位无符号定义,单位1ms。

图  PDO参数示例

9.2、PDO的COB_ID

表 第1到第4个PDO的COB_ID

9.3、PDO传输类型

  • 同步(通过接收SYNC对象实现同步)

        非周期:由远程帧预触发传送,或者由设备子协议规定中的对象特定事件预触发传送
        周期:传送在每1到240个SYNC消息后触发

  • 异步

        由设备协议中规定的对象特定事件触发传送

表  PDO传输类型

9.4、PDO映射

        PDO映射说明了PDO中所包含的通讯对象,决定了发送或接收的数据内容。
        发送映射地址范围:1A00h-1BFFh,多至512个TPDO映射
        接收映射地址范围:1600h-17FFh,多至512个RPDO映射

图  PDO映射示例

9.5、PDO报文

  • 发送报文

  • 接收报文

9.6、EDS(电子数据表格)

        EDS(电子数据表格)文件是PLC所连接从站的标识文件,通过该文件来辨认从站所属的类型。该文件包含了从站的所有信息,比如生产厂家、序列号、软件版本、支持波特率种类、可以映射的OD及各个OD的属性等等参数,类似于Profibus的GSD文件。因此在进行硬件配置前,首先需要把从站的EDS文件导入到上位组态软件中。

10、同步报文

10.1、同步报文数据帧

10.2、同步报文的作用

        同步报文用于控制TPDO的发送
        同步报文用于控制RPDO的激活
        同步报文用于同步各个节点的时钟

10.3、传输类型

        0,非循环
        1-240的传输类型就是指经过多少个同步报文后,发送TPDO

10.4、通讯参数

        通讯循环周期:索引1006h,规定了同步帧的循环周期

        同步窗口时间:索引1007h,约束了同步帧发送后从节点发送PDO的时效,即在这个时间内发送的PDO才有效,超过时间的PDO将被丢弃

  • 32
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值