CANOpen学习与整理总结

目录

一、简介

二、协议介绍       

三、NMT(net managerment)网络管理

四、CANOpen网络结构

五、从站配置

六、配置软件截图

七、canopen协议的使用流程

八、实际测试案例(心跳帧方式)


一、简介

CANopen是一种使用在CAN总线上了高层应用层的协议,其还包括LSS等子协议。

CANOpen遵循CAN2.0B的协议标准.数据帧组成如下:

帧起始 仲裁域 控制域 数据域 CRC域 应答域 帧结束

二、协议介绍
       

在CANOpen协议中不同的通信对象COB通过CAN_ID又称COB-ID由11位标识符:(10-7 位)功能码+ 节点的 ID 用节点 ID(6-0 位),进行识别。

通信对象COB分类和使用如下:

报文类型

功能码(B)

COB-ID范围(Hex)

通信参数(Hex)

NMT

0000

000h

-

SYNC

0001

080h

1005,1006,1007

EMERGENCY

0001

081h~0FFh

1014,1015

TIME

0010

100h

1012,1013

TPDO1

0011

181h~1FFh

1800

RPDO1

0100

201h~27Fh

1400

TPDO2

0101

281h~2FFh

1801

RPDO2

0110

301h~37Fh

1401

TPDO3

0111

381h~3FFh

1802

RPDO3

1000

401h~47Fh

1402

TPDO4

1001

481h~4FFh

1803

RPDO4

1010

501h~57Fh

1403

SDO发送

1011

581h~5FFh

1200

SDO接收

1100

601h~67Fh

1200

NMT Error Control

1110

701h~77Fh

1016,101

索引段和对应的数据类型

索引(Hex)

对象

0000

保留

0001~001F

基本数据类型

0020~003F

复杂数据类型

0040~005F

生产商相关数据类型

0060~007F

设备描述基本数据类型

0080~009F

设备描述复杂数据类型

00A0~0FFF

保留

1000~1FFF

通信参数

2000~5FFF

制造上的特色设备描述文件

6000~9FFF

标准设备描述文件

A000~BFFF

标准接口描述文件

C000~FFFF

保留

1、PDO(process data object)过程数据对象,主要用于主从节点数据交互,属于“生产-消费模型”,数据域8字节用来传输实时数据。

特点:使用PD0时接收报文的节点不需要应答,数据访问效率比SD0高,可同步或异步。


2、SDO(server data object)服务数据对象。

主要作用主节点与从节点数据交互,特点是接收报文节点需要应答报文,如果超时没有确认,则发送节点将会重新发送原报文,属于”服务器-客户端模型“:数据域8字节含有如下:

Byte0

Byte1~2

Byte3

Byte4~7

SD0命令字

对象索引

对象子索引

数据值

例子1:读SDO

假设我们要查询从机的电机速度

查询:

COB-ID

CMD命令

索引L

索引H

子索引

data0

data3

601h

40

42

60

00

00

00

00

00h

读取成功:

CMD可以理解数据长度,4B代表数据长度为2,00 C8(小端)

COB-ID(580+Node-Id)

CMD

Index_L

Index_H

Sub-Index

data0

data1

res

res

581h

4B

42

60

00

C8

00

00

00

读取失败也必须反馈:

COB-ID(580+Node-Id)

CMD

Index_L

Index_H

Sub-Index

error_code

error_code

error_code

error_code

581h

80

42

60

00

C8

00

00

00

例子2:写SDO

我们要设置电机速度

COB-ID(600+Node-Id)

CMD

Index_L

Index_H

Sub-Index

data0

data1

data2

data3

601h

2B

42

60

00

C8

00

00

00

设置成功应答:

COB-ID(600+Node-Id)

CMD

Index_L

Index_H

Sub-Index

data0

data1

data2

data3

601h

60

42

60

00

00

00

00

00

设置失败应答:

COB-ID(580+Node-Id)

CMD

Index_L

Index_H

Sub-Index

error_code

error_code

error_code

error_code

601h

80

42

60

00

xx

xx

xxx

xx

三、NMT(net managerment)网络管理

主要进行网络管理,作用控制从节点的启动停止运行的状态切换及侦测失效节点,从节点通过NMT报文(具体来说是心跳报文)来通知主节点自己上线或者下线

CANID为000h,最高优先级,数据2字节

第1字节,状态:

value 状态
01 启动命令,让节点进入操作状态
02 停止,让节点进入停止状态
80 让节点进入预操作状态
81 让节点应用恢复初始化状态
82 让节点通信重新初始化,总线干扰时用

第2字节,节点号。注意:若为0,则同时操作所有节点。

1)NMT对象如下:

标识符

Byte0

Byte1

0x000

命令字

从节点ID

2)心跳报文:

标识符

字节0

0x700+Node_ID

从节点状态

4、特殊功能报文:同步报文、紧急事件报文,时间邮戳报文等

5、节点守护

早期通过轮询模式监控从站节点与心跳模式二选一,因为网络开销逐渐淘汰

主轮询:0x700+Node_ID   数据长度0

从应答:0x700+Node_ID   数据长度1  data0

data0的bit7首次设置为0,后面0和1交替翻转,bit0~6的value为节点状态

value 状态
4 Stopped停止
5 Operational 操作
127 Pre-Operational 预操作

四、CANOpen网络结构

CANOpen网络中仅有一个主站,多个从站。主站负责网络管理、从站参数配置即从站数据处理,每个节点有独立的地址(NodeID),从站和从站也能建立通信,通信前需要进行配置,使各从站间建立独立的PDO通信。

复杂的网络结构还可以增加CANOpen网关设备,网关可CANOpen转DeviceNet、Profibus、Modbus,该网关可作为主或从设备。

五、从站配置

从站配置参数与地址绑定,常用配置有PDO的COB-ID、PDO映射参数、以及节点/寿命保护等参数,其配置通过SDO进行传输,所以主、从站必须支持SDO,配置前需要NMT进入预操作状态。

1)通信参数配置包括COB-ID、传输类型、禁止时间以及映射参数:

禁用PDO(COB-ID的最高位(31位)置1禁止)-->修改COB-ID->传输类型->映射参数数量改为0-->修改映射参数-->修改映射参数数量-->启用PDO

六、配置软件截图

例如:通信参数0x1400里面的1400.01若填0x1600该参数为映射参数

映射0x1600里的 1600.01~1600.xx对应的默认值选项填写的是对应RPDO1里不同的传输对象。如下0x62000108对应:0x6200主索引,01子索引  08对应数据长度8bit即1个字节,对应第0字节位置,

62000208对应:0x6200主索引,02子索引,数据长度8bit即1个字节对应第1个字节位置。以此类推,填满8个字节。

如下:

COB id

entry0

Entry1

Entry2

Entry3

Entry4

6092

0

1

2

3

4

索引

通道0

通道1

通道2

通道3

通道4

七、canopen协议的使用流程

八、实际测试案例(心跳帧方式)

1、从站节点状态表

状态:启动 状态:停止 状态:运行 状态:预操作
0x00 0x04 0x05 0x7f

2、Command specifier命令符:

3、上电后从站发出节点状态,数据如下:

0x00000600+node_id  数据帧  标准帧  数据长度0x01       00h

0x00000600+node_id  数据帧  标准帧  数据长度0x01       7fh

4、配置PDO的通信参数

主栈操作从节点为操作状态

0x00000000 数据帧  标准帧  数据长度0x01       node_id    01h

主栈向索引1800 子索引05  写SDO数据:

发送:0x600+node_id 数据帧 标准帧  数据长度0x08  2b 00 18 05 01 02 00 00

反馈:0x580+node_id 数据帧 标准帧  数据长度0x08  60 00 18 05 00 00 00 00

反馈字节0命令:0x60写成功,0x80异常

5、验证写SDO的效果,读SDO

发送:0x600+node_id 数据帧 标准帧  数据长度0x08  40 00 18 01 00 00 00 00

反馈:0x580+node_id 数据帧 标准帧  数据长度0x08  43 00 18 01 01 02 00 00

6、例子里是设置PDO的发送间隔时间,设置完毕,启用从节点,PDO发送的间隔时间改变为目标值。

Guess you like

Origin blog.csdn.net/m0_49047167/article/details/115211173