文章目录

  • CANopen协议
    • CAN总线
    • CAN报文
    • CANopen概述
  • 对象字典(Object Dictionary)
    • 概述
    • 通讯对象子协议区
    • 制造商特定子协议
  • CANopen报文
    • NMT网络管理
      • NMT命令报文
      • 节点上线报文
      • 节点监测
      • 同步报文
      • 时间戳报文
      • 紧急报文
    • PDO
      • 报文ID
      • 传输类型
      • 通信参数
      • 映射参数
    • SDO
      • 通讯原则
      • 快速SDO
      • 普通SDO
  • 通讯示例
  • 引用

CANopen协议

CAN总线

CAN 是Controller Area Network 的缩写,是ISO国际标准化的串行通信协议。1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化。
与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。CAN被公认为几种最有前途的现场总线之一。其典型的应用协议有:SAE J1939/ISO11783、CANOpen、CANaerospace、DeviceNet、NMEA 2000等。

CAN报文

在CAN2.0B的版本协议中有两种不同的帧格式,不同之处为标识符域的长度不同,含有11位标识符的帧称之为标准帧,而含有29位标识符的帧称为扩展帧。CANopen使用标准帧格式。
在报文传输时,不同的帧具有不同的传输结构,主要包括数据帧、远程帧、错误帧、过载帧等。

数据帧由七种不同的位域(Bit Field)组成:帧起始(Start of )、仲裁域(Arbitration Field)、控制域(Control Field)、数据域(DataField)、CRC域(CRC Field)、应答域(ACK Field)和帧结尾(End of )。数据域的长度可以为0~8个字节。在实际应用时,用户关注的是标识符和数据域。其他可参考相关文档介绍。

CANopen概述

从OSI的7层网络模型的角度来看,CAN现场总线紧紧定义了第1层(物理层)、第2层(数据链路层)。这些完全由硬件实现,设计人员无需开发相关软件或固件,即可完成对CAN的控制。CAN没有规定应用层,但在CAN总线的工业自动化应用中,设备互通互联的需求越来越多,所以需要一个开放的、标准化的高层协议。
CANopen协议是在20世纪90年代末,由总部位于德国纽伦堡的CiA组织(CAN-in-Automation,http://www.can-cia.org )在CAL(CAN Application Layer)的基础上发展而来。
CANopen包含一系列的协议,其中基础协议是CANopen应用层协议(CANopen Application Layer and Communication Profile)(DS 301),规定了CANopen协议层及通信结构描述。在基础协议之上,各个行业具备设备子协议。所谓子协议,就是针对不同行业的应用对象,对CANopen内部的数据含义进行重新定义或添加新的控制逻辑,如运动控制子协议CANopen Profile for Drives and Motion Control (DS 402)。
CANopen协议通常分为用户应用层、对象字典以及通信三个部分。其中最核心的是对象字典,描述了应用对象和CANopen报文之间的关系。CANopen通信定义了协议通信规则以及与CAN控制器驱动之间对应关系。
控制CANopen网络中的设备,是通过对写该设备的参数以及对该设备的状态信息实现的,而CANopen设备的读写通常都基于设备的对象字典。
对象字典是一个有序的对象组,描述了对应设备的所有参数。每个对象都采用一个16位的索引值寻址,这个索引值通常称为索引(index),范围在0x0000~0xFFFF之间。除了索引外,对象还可能包含一个8位的子索引(sub-index),用于描述对象的一组相关参数。

对象字典(Object Dictionary)

CANopen对象字典(OD: Object Dictionary)是CANopen协议最为核心的概念。所谓的对象字典就是一个有序的对象组,描述了对应CANopen节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递形式就叫做EDS文件(电子数据文档Electronic Data Sheet)。对象字典,就像体检表,具备这个人每个功能的参数,便于用人单位(主站)进行合理分配工作。

每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个8 位的索引值,这个索引值通常被称为子索引,其范围是0x00到0xFF之间。
每个索引内具体的参数,最大用32位的变量来表示,即Unsigned32,四个字节。
每个CANopen设备都有一个对象字典,使用电子数据文档(EDS文件)来记录这些参数,而不需要把这些参数记录在纸上。对于CANopen网络中的主节点来说,不需要对CANopen从节点的每个对象字典项都访问。
CANopen对象字典中的项由一系列子协议来描述。子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引、数据类型,以及这个对象是否必需、读写属性等等,这样可保证不同厂商的同类型设备兼容。
CANopen协议的核心描述子协议是DS301,其包括了CANopen协议应用层及通信结构描述,其它的协议子协议都是对DS301 协议描述文本的补充与扩展。在不同的应用行业都会起草一份CANopen设备子协议,子协议编号一般是DS4xx 。

概述

下表为对象字典索引区域定义,其中标绿色底纹的通讯对象子协议区和制造商特定子协议区是用户需要关注的区域。

通讯对象子协议区

通讯对象子协议区(Communication profile area)定义了所有和通信有关的对象参数,如下表,标绿色底纹的索引范围1000h to 1029h为通用通讯对象,所有CANopen节点都必须具备这些索引,否则将无法加入CANopen网络。其他索引根据实际情况进行分配与定义。

由于 通用讯对象十分重要, 通用讯对象十分重要, NMTNMT 主站( CANopenCANopenCANopenCANopen CANopen 主站) 在启动时, 通常都全部或者部分读取所有从站中通用讯对象中的索引,所以所有的通用讯对象都必须在CANopen从站中实现。

制造商特定子协议

对象字典索引2000h to 5FFFh为制造商特定子协议,通常是存放所应用子协议的应用数据。而上文所描述的通讯对象子协议区(Communication profile area)是存放这些应用数据的通信参数。比如广州致远电子的XGate-COP10从站模块规定了:

  • RPDO的通讯参数存放在 1400 h to 15FF,映射参数存放在1600 h to 17FF , 数据存放为 2000 h之后厂商自定义区
  • TPDO的通讯参数存放在1800 h to 19FFh ,映射参数存放在 1A00h to 1BFFh, 数据存放为 2000 h 之后厂商自定 义区。

CANopen报文

NMT网络管理

NMT命令报文

为保证网络可靠、可控,CANopen具备NMT服务,通常由主站实施。
CANopen网络中设备的状态可以用一个简单的状态机描述:
预操作状态(Pre-operational):此时节点不能进行PDO通信,可以进行SDO通信和NMT网络管理;
操作状态(operational):可以进行PDO通信,SDO通信,NMT网络管理;
停止状态(Stopped):PDO和SDO通信被停止,但允许NMT网络管理。

NMT报文的一个重要作用是控制网络中设备状态,通常称为NMT节点状态切换命令。NMT节点切换命令具备最高的CAN优先级,CANID均为000h,数据为2个字节:
第一个字节代表命令类型:
01h为启动命令(让节点进入操作状态);
02h为停止命令(让节点进入停止状态);
80h为进入预操作命令(让节点进入预操作状态);
81h为复位节点应用层(让节点的应用恢复初始状态);
82h为复位节点通讯((让节点通讯重新初始化)。
第二个字节代表被控制节点的Node-ID,如果取0,则对整个网络的所有节点同时进行控制。

节点上线报文

任何一个CANopen从站上线后,必须发出节点上线报文(boot-up)。节点上线报文的CANID为700h+Node-ID,数据为1个字节0。节点上线报文的生产者是CANopen从站。

节点监测

CANopen网络对节点监测有两种方式:节点心跳与节点守护。
节点心跳用于表征当前节点在线与操作状态,心跳报文的格式中,CANID与节点上线报文相同为700h+Node-ID,数据为1个字节,代表当前状态,04h为停止状态,05h为操作状态,7Fh为预操作状态。报文生产者为CANopen从站。

在CANopen应用中,还有一种可以通过轮询模式监视从站状态的节点守护模式,与心跳报文模式二者不能并存。首先由NMT-Master节点发送标准远程帧(无数据):CANID为700h+Node-ID,NMT-Slave节点应答发送数据帧,数据为1个字节:包含一个触发位(bit7),触发位必须在每次节点保护应答中交替置“0”或“1”。bits0~6表示节点状态,含义与节点心跳相同。

同步报文

同步报文实现整个网络的同步传输,具有较高的优先级以及最短的传输时间。通常同步报文的CAN-ID为80h,由一般主站发送,数据长度为0。

同步报文也可以由从站发送。

时间戳报文

时间戳报文,由CANopen网络中节点发送,用于整个网络中设备的对时。时间戳报文采用广播的方式,无需节点应答,CAN-ID为100h,数据长度为6,数据为当前时间与1984年1月1日0时的时间差。

紧急报文

当设备发生内部错误时,会触发紧急事件,发送设备内部错误代码,提示NMT主站。紧急报文属于诊断性报文,一般不影响CANopen通讯,其CAN-ID存储在1014h索引中,一般定义为080h+node-ID,数据长度为8,包括EEC:紧急事件错误代码,ER:错误寄存器,MEF:厂商自定义的错误代码。

PDO

PDO(Process data object),过程数据对象,用于传输节点的过程数据。PDO单向传输,无需接收节点应答。网络中的任意节点都可以发送PDO,其他一个或多个节点都可以接收该PDO报文。PDO使用“生产消费”或“peer-to-peer”模型。

PDO的数据长度被限制为1~8字节。只要1帧就可以把一条消息或一个变量传递结束。

报文ID

在PDO预定义中,人为规定了TPDO(发送)和RPDO(接收),通常每个节点设备均包含4个TPDO和4个RPDO。在预定义中,规定了CAN-ID包含了node-ID,方便PDO的解析。

CAN-ID与node-ID没有必然联系,在实际使用中,可以根据需要作修改。RPDO的CAN-ID保存在1400h-15FFh中,TPDO的CAN-ID保存在1800h~19FFh中。

传输类型

PDO有两种传输类型:同步传输和异步传输。
同步传输基于同步报文,让所有节点能在统一时刻进行上传数据或者下传数据,执行应用命令,可以有效避免异步传输导致的应用逻辑混乱和总线负载不平衡问题。
异步传输通常由设备子协议规定的对象特定事件触发,如定时传输、数据变化传输等。

通信参数

PDO通信参数,定义了该设备的PDO报文的COB-ID、传输类型等,分别保存在索引1400h ~ 15FFh和1800h ~19FFh中。

同步传输基于同步报文,让所有节点能在统一时刻进行上传数据或者下传数据,执行应用命令,可以有效避免异步传输导致的应用逻辑混乱和总线负载不平衡问题。
异步传输通常由设备子协议规定的对象特定事件触发,如定时传输、数据变化传输等。

映射参数

PDO 的映射参数保存在通讯参数之后1600h ~ 17FFh (RPDO)和1A00h ~1BFFh (TPDO)中,包含了读写对象的索引和子索引,数据长度(单位,位),以及访问的对象数量。
以下模拟从站02 的TPDO2,将参数、应用数据、CAN 报文数据联合起来展示。

则节点2 在受到内部特定事件触发后发送TPDO2:
CAN-ID:0x182,数据域(3 字节):0x375603

SDO

SDO(Service data object),服务数据对象,一般用于主站对从站的参数配置。与PDO 的单向传输不同,SDO 是应答式的通信。SDO 包含指定被接收节点的地址(node-ID),并且需要指定的接收节点回应确认。SDO 使用“服务器客户端”模型。

在CANopen 网络中,通常从站作为SDO 服务器,主站作为唯一的SDO 客户端。SDO客户端通过索引和子索引,能够访问SDO 服务器上的任意对象字典。SDO 可以传输任意长度的数据。

通讯原则

SDO 的通讯原则非常单一,发送方(客户端)发送CAN-ID 为600h+node-ID 的报文,数据长度为8 字节。接收方(服务器)成功接收后,回应CAN-ID 为580h+node-ID 的报文,数据长度为8 字节。这里node-ID 均为从站的地址。

根据需要传送的数据长度,SDO 可分为快速SDO 和普通SDO。

快速SDO

快速SDO 是最常见的一种SDO,所谓快速,就是客户端服务器间1 次问答完成。快速SDO 的前提条件是读取或写入的值不能大于32 位(4 字节)。SDO 报文中包含了访问对象的索引、子索引和数据长度。

通过快速SDO,可以直接对CANopen 节点的对象字典中的值进行读取和修改,所以在做参数配置之外,也经常作为关键性数据传输之用。比如CANopen 控制机器人的电机转动角度时,就使用SDO 来传输,保证可靠到达。

普通SDO

当需要传输的值超过32 位时,就不能使用快速SDO 了,必须使用普通SDO 进行分帧传输。普通SDO 在实际应用中较少使用。
普通 SDO的CAN帧ID与快速SDO相同,发送方(客户 端)发送的报文 CAN-ID 为 600 h +Node -ID,接收方(服务器 )成功接收 后,回应 CAN -ID 为 580h+Node -ID 的报文。普通 SDO协议难点在于分包逻辑与CS命令符的变化。
普通SDO下载协议:

普通SDO上传协议:

通讯示例

针对copley电机驱动器速度环控制的示例
设置驱动器的node ID为1(602中的2代表ID),数据均为16进制。

  • 切换到操作模式,NMT报文
    00 80 01 // 01是node ID号
    00 01 01 // 第二个01 也是node ID号
  • 设置速度环, SDO
    601 2f 60 60 00 03
    -控制器Disable, SDO
    601 2b 40 60 00 05 00
  • 设置速度
    601 23 ff 60 00 20 4e
  • 设置加速度为100000 counts/s² 如果编码器分辨率为500那么减速度为50rpm/s 601 23 00 21 00 a0 86 01 00
  • 设置减速度为100000 counts/s² 如果编码器分辨率为500那么减速度为50rpm/s
    601 23 00 21 00 a0 86 01 00
  • 驱动器运行速度环:
    601 2b 40 60 00 0f 00
  • 读取电机实际转速0x6069
    601 40 69 60 00 00 00
    实际使用时,可以使用PDO读取电机的实际转速。

引用

广州致远电子股份有限公司,CANopen 轻松入门
copley controls,CANopenProgrammersManual

CANopen协议及应用相关推荐

  1. canopen服务器协议,ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件

    ZOPC_Server(ZLG通用OPC服务器)CANopen协议插件是一款基于CAN的一种高层协议,是一种具有灵活配置功能的标准嵌入式网络.它的任务是控制和监测所有NMT从站的NMT状态.通常,CA ...

  2. 嵌入式CANopen协议从入门到落地产品(更新2021.9.8)

    一.前言 我写CANopen系列博文的初衷是分享如何使用STM32单片机开发一款CANopen产品,所谓实战为主,理论为辅.只看CANopen协议的理论是很枯燥,而且根本看不会.我认为掌握CANope ...

  3. CANopen | 移植01 - STM32H743 + Canfestival的移植并让FDCAN1运行CANopen协议

    文章目录 一.前言 二.移植前的准备 三.移植 3.0.移植的目的 3.1.工程的实际硬盘上添加文件夹 3.2.往bsp文件夹放入bsp代码 3.3.往canfestival里放入源代码 3.4.往o ...

  4. RTX5 | STM32H743+CubeMX+RTX5+两路FDCAN驱动+CANopen协议

    一.前言 百度网盘: 链接:https://pan.baidu.com/s/1NEccCy1S-Z5FhcInQOTzfA 提取码:fddg RTX5 | STM32H743+CubeMX+RTX5+ ...

  5. CANopen协议介绍

    1.CANopen协议简介 从OSI 网络模型的角度来看,CAN总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层),而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软 ...

  6. CANopen协议解读

    CANopen协议解读 一.协议标准 二.CANopen报文说明 三.CANopen协议内容 1. ID的理解 2. NMT (1) 节点状态 (2) 节点状态控制 (3) 节点心跳报文 一.协议标准 ...

  7. linux下canopen协议视频,CAN协议与CANOpen协议

    这里详细介绍了CAN协议中数据通信帧每位的含义,有图片,值得一看:https://www.cnblogs.com/pejoicen/p/3986587.html 这里介绍了CanOpen协议,http ...

  8. CANopen协议基础知识

    CANopen协议基础知识 资料: DS301协议中文文档:https://winshton.gitbooks.io/canopen-ds301-cn/content/chapter5.html 30 ...

  9. CANopen协议中文文档

    CANopen 协议下载(https://github.com/CANopenNode/CANopenNode) CANopenNode CANopenNode是免费和开源的CANopen协议栈. C ...

最新文章

  1. 天体运行轨迹_海王星轨道外发现139个新天体, 能揭开太阳系第九颗行星奥秘?...
  2. 逃亡的准备(大数据版)
  3. CentOS6中安装、配置、启动GitLab以及遇到的那些坑
  4. 年货节页面PSD分层模板,拿稳了!应急!
  5. 塞尔达传说gba_《塞尔达传说缩小帽》是系列一年级生?,回忆众多玩友的启蒙之作...
  6. CAJ如何转成PDF
  7. Transformer-XL、Vanilla Transformer
  8. android仿qq编辑图片,仿QQ图片编辑器 – ImageEditor
  9. 2021年中国图书出版行业经营现状及重点企业对比分析:凤凰传媒优势明显[图]
  10. mysql只读模式_mysql 只读模式详解
  11. PDF签名失败(深圳市市场监督管理局)
  12. C#三大迷宫生成算法
  13. Java程序员花十个月做私活,收入50w+,网友:老哥建个群搭个伙呗
  14. 携程CPS分佣怎么推广?
  15. 强势来袭!取代传统PC开辟新增长极,这款“云电脑”凭啥?
  16. Microsoft2010与WPS2010大比拼
  17. Linux学习——awk
  18. CNN已老,GNN来了!清华大学孙茂松组一文综述GNN
  19. 投稿HPCC-2022,edas投稿系统的坑点
  20. 记:四周实习项目--XX医院门诊系统

热门文章

  1. U3D里UI相关逻辑和文件的组织关系的各种形式的比较
  2. 网页显示不全的原因css,css 页面显示不全怎么办
  3. php大型博客,PHP大型Web应用入门(二)
  4. 后台录屏、应用外录屏、跨应用录屏、直播屏幕、录屏扩展(ios)
  5. IOS App的生命周期
  6. 如何给excel的单元格添加斜线并在对角线
  7. 一次算法作业hhhhhh
  8. 中国智能互动纺织品市场趋势报告、技术动态创新及市场预测
  9. ArcGIS打开影像图显示全黑色解决办法
  10. 【线性代数】1.2矩阵的行列式与克莱姆法则