CAN现场总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层) ,而这两层一般已被CAN硬件完全实现了。由于没有规定应用层,本身并不完整,需要一个高层协议来定义CAN报文中的11/29位标识符和8字节数据的使用。而且,随着CAN总线的广泛应用,国内外很多公司都开发出使用CAN总线的控制设备,为了使各种CAN设备可以互相兼容,需要一个开放的、标准化的高层协议来实现各种CAN设备进行标准的、统一的通讯。

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

  • CANopen和CAN报文关系

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

  • 术语

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

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

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

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

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

  OD  —— 对象字典。对象字典是所有数据结构的集合,这些数据涉及设备的应用程序、通信以及状态机,对象字典利用对象来描述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 的发送/接受是由( slave)CAN节点方观察的。即要发送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 PDO;An SDO session is not complete until it is confirmed.

  SDO的通讯原则很简单,发送方(客户端)发送CAN-ID为600h+Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度均为8字节;接收方(服务器)成功接收后,回应CAN-ID为580h+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),发送的数据格式如下:

  返回数据格式如下:

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

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

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

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

参考:

http://www.zlg.cn/can/article/detail/id/753.html

http://www.cnblogs.com/winshton/p/4897163.html

CANopen笔记1相关推荐

  1. CANopen笔记2

    PDO 过程数据对象用于在节点之间传送过程数据,如I/O模块I/O状态读取和设定,模拟量采集和模拟量输出等等,协议考虑从机硬件限制最多支持4组PDO,每组包含一个RPDO和一个TPDO.The Gol ...

  2. CAN笔记(16) CANOpen简介

    CAN笔记(16) CANOpen简介 1. CAN 在 ISO 层级中的位置 2. 通信协议需求 3. CANopen 协议诞生 4. 设备子协议 5. CANOpen设备结构 1. CAN 在 I ...

  3. CanOpen协议栈学习笔记1-帧格式,SYNC和NMT报文介绍

    前面已经记录过can协议,后面开始CanOpen协议栈学习.其实协议栈代码已经看过了,而且已经在开发板上跑过了.这里回过头来,重新看下之前遇到的坑,记录下学习笔记.下面均以标准帧为例 文章目录 1.C ...

  4. 周立功阅读笔记-CANopen轻松入门基于DS301(一)

    周立功阅读笔记-CANopen轻松入门基于DS301(一) CANopen阅读笔记 4.CANopen的预定义报文和ID分类 5.对象字典OD(Object dictionary) 6.网络管理NMT ...

  5. linux系统学习笔记9——CANOpen状态转换

    CANopen CANopen状态转换 CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boo ...

  6. 《CANOpen》 学习笔记5

    <CANOpen> 学习笔记5 CANOpen 学习笔记5 驱动器 CANopen 调试笔记 驱动器 CANopen 调试笔记 驱动器 Copley 公司提供的 <CANopenPr ...

  7. CANopen学习笔记

    CANopen学习笔记 文章目录 CANopen学习笔记 1.NMT 1.1.NMT的Boot_up (节点上线报文) 1.2.NMT 节点状态与心跳报文 1.3.NMT节点守护 1.4 .NMT节点 ...

  8. linux canopen软件,CANopen学习笔记

    1. TPDO和RPDO都是针对从站来说的,协议上没有有讲任何一个关于主站的概念,协议就只是定义从站,没有定义主站任何东西. TPDO:从站->主站 RPDO:主站->从站 2. PDO的 ...

  9. CANopen协议 学习笔记

    大纲 前沿:以问题为导向学习是最高效的,本文主要讲述在学习Canopen协议中的一些疑惑点, 分享一些学习心得,不讲协议本身的内容. 1.主机和从机的概念? 2.PDO和SDO的区别是什么? 3.OD ...

最新文章

  1. Windows Phone应用程序政策性约束
  2. 在Java中,采用类的默认构造函数构造对象的方法!
  3. 有關window.showModalDialog的應用11/30
  4. java虚拟机内存告警_Java虚拟机总结
  5. (七)整合spring cloud云服务架构 - common-service 项目构建过程
  6. 制作双足机器人用易拉罐_小学生手工小制作用易拉罐做飞机模型的方法
  7. QueryWrapper查询
  8. Android代码删除通知,Android:从通知中删除通知b
  9. 信息学奥赛一本通(1091:求阶乘的和)
  10. ubuntu查看pip安装的软件路径
  11. Linux 内核 cgroups 新漏洞可导致攻击者逃逸容器
  12. 2022春季“金三银四”跳槽必备:软件测试面试题(附带答案)
  13. win64位下安装python的image支持
  14. 前后端分离,nginx解决跨域问题
  15. 固高运动控制卡学习8 --高速硬件捕获
  16. 坐拥百度/阿里/腾讯,这家车载导航上市公司的营收却一路下挫?
  17. 计算机错误代码0x 00000006,什么原因造成了蓝屏 电脑蓝屏错误代码介绍
  18. Silverlig1.Silverlight读取外部XML加载配置-(使用WebClient读取XAP包同目录下的XML文件)...
  19. 软件测试工程师绩效考核细则,软件测试工程师绩效考核方案
  20. UVA 12307 Smallest Enclosing Rectangle(旋转卡壳)

热门文章

  1. R语言——双样本独立检验的快速分析立检验的快速分析
  2. Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案
  3. C++ | 蓝桥杯2021年第十二届卡片问题(源代码:C语言/C++/Python)
  4. 关于char[]转换成LPCWSTR的有关问题
  5. 详解数据挖掘与机器学习的区别与联系
  6. CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换【转】
  7. java基本数据类型_Java 中有几种基本数据类型是什么?
  8. rust(31)-枚举体
  9. go语言基础到提高(12)-函数类型与函数变量
  10. tensorflow随笔-constant