CANopen基本概念学习笔记

2023-11-17

参考文献
《Kinco FD&CD3系列伺服驱动器使用手册20210125》
CANopen协议讲解课件
《信捷 CANopen 通讯用户手册》
《基于CANopen协议的网络主控制器的设计》

前置文章
CAN总线技术基本概念简述

0 CANopen简述

CAN协议基本概念简述

CAN现场总线本身仅仅实现了物理层和数据链路层,CANopen是CAN现场总线的应用层协议。

CANopen是应用层协议,未规定物理层和数据链路层的实现,故并非必须基于CAN总线实现,例如也可基于Ethercat总线实现,即CANopen Over EtherCAT(CoE)。

CANopen 通信网络一般由一个主节点(master)和数量不定(最大126)的从节点(slave)组成。
●主节点:负责整个网络的管理。
●从节点:主要负责底层的网络通讯和控制任务。
CANopen 主节点在功能上相当于具备网络管理功能的CANopen 从节点。

CANopen由非营利组织CiA(CAN in Automation)进行标准的起草及审核工作。
在这里插入图片描述

标准CANopen节点示意图见下:
在这里插入图片描述作为 CAN 总线的应用协议层,CANopen 协议主要对 CAN 报文中的仲裁域(11 位)和数据域(最多 8 字节)进行了定义。
在这里插入图片描述
CANopen 采用 CAN2.0A 规范的标准帧格式,数据部分传输多字节数据时采用小端模式。

CANopen协议是一个通用协议标准,从CiA 301 基础协议开始,对于不同类型的CANopen设备有不同的设备子协议(称之为行规),如CiA 402“伺服与运动控制”子协议面向运动设备(包括伺服驱动器、逆变器、步进电机驱动器等)。

1通讯对象标识符

CANOPEN协议的基本通信单元为通信对象(Communication Object)。常用的通信对象有NMT、SYNC、EMERGENCY、TIME STAMP、SDO、PDO六类。COB-ID ( Communication Object Identifier,通讯对象标识符) 即CAN 标识符,指定了在通讯过程中对象的优先级以及通讯对象的识别,CANopen 的各个通讯对象都有默认的 COB-ID。

COB-ID格式是基于 CANopen 2.0A 定义的 11 位 CAN-ID(CANopen 2.0B 协议 COB-ID 是 27位),包含一个 4 位的功能码(Function Code)部分和一个 7 位的节点 ID(Node-ID)部分:
在这里插入图片描述

  1. 节点ID ——即站号,由系统集成商定义,例如通过设备上的拨码开关设置,Node-ID 范围是 1~127(0 为主站号);
  2. 功能码 ——数据传输的功能码,定义所有报文的传输级别,功能码越小,优先级越高;

为了减少网络的组态工作量,CANopen预定义了强制性的缺省标识符分配表,见下:
在这里插入图片描述

2对象字典

2.1概述

每个CANopen 节点都具备一个对象字典(Object Dictionary,OD),用来设定设备组态及进行非即时的通讯。所谓的对象字典就是一个有序的对象组,描述了对应CANopen节点的所有参数,如通信参数、应用程序数据,以及 PDO 的映射数据等;具体以总线电机驱动器为例,对象字典中的对象(Object )可以是电流环、速度环、位置环的 PID 参数等。

CANopen字典的对象结构见下图:
在这里插入图片描述

  1. 索引(Index):每个对象采用一个16位的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据量大时无索引可分配,所以在某些索引下也定义了一个8 位的索引值,这个索引值通常被称为子索引(Sub),其范围是0x00到0xFF之间。每个索引内具体的参数,最大用32位的变量来表示,即Unsigned32,四个字节。
  2. 对象属性(Attrib):对象属性有RW(读写)、RO(只读)、WO(只写)、M(可映射)、S(可存储)

对象字典的结构参照下表:
在这里插入图片描述

轻松掌握CANOpen最难理解的对象字典

2.2 EDS文件

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

3 SDO

SDO(Service data object,服务数据对象)用于传输非周性数据,使用对象字典的索引和子索引访问CAN节点对象字典中的对象。

SDO 的基本结构如下:
在这里插入图片描述
SDO 命令字指明了该段 SDO 的传输类型和传输数据长度。

  1. SDO 报文发送时命今字均为 0x40;
  2. 如果接收数据为 1个字节,则接收命令字为 0x4F;
  3. 如果接收数据为 2 个字节,则接收命令字为 0x4B;
  4. 如果接收数据为 4 个字节,则接收命今字为 0x43;
  5. 如果接收数据存在错误,则接收命令字为 0x80;

SDO 传输方式遵循客户端/服务器模式,由 CAN 总线网络中的 SDO 客户端发起,SDO 服务器做出应答。因此只适合对参数的设置,不适合于对实时性要求较高的数据传输。

SDO 的通讯方式分为下载(Download)和上传(Upload):

  • 下载:对对象字典进行写操作;
  • 上传:对对象字典进行读操作;

4 PDO

4.1概述

PDO(Process data object,过程数据对象) 主要用来传输需要高频率交换的数据。与现有的数据问答式传输方式不同,进行PDO传输方式时,设备双方在传输前先在各个设备定义好对象字典中数据接收和发送区域,在数据交换时直接发送相关的数据到对方的数据接收区,减少了问答式的询问时间。

由于需要区分每个 CANopen 节点的输入和输出,所以将PDO 分为发送方 Transmit-PDO(TxPDO)接收方 Receive-PDO(RxPDO)

  1. TXPDO:从站通过 TXPDO 反锁自身的状态,相对于从站来说就是指从站发送出去的数据,这些数据由主站来接收;
  2. RXPDO:从站通过 RXPDO 接收主站的指令,相对于从站来说就是指从站接收的数据,这些数据由主站来发送;

PDO属于生产者-消费者模型(producer/consumer),即将生产者(主站)生产行为同消费者(从站)消费行为剥离,网络中的每个节点都能收到发送节点的报文,接收到报文后根据配置决定是否接受报文。

在这里插入图片描述
在生产者-消费者模型中,生产者负责生成数据(或任务),而消费者负责消费这些数据(或执行任务)。生产者和消费者在不同的时间段运行,并通过共享的缓冲区或队列进行通信和数据交换。生产者将数据放入缓冲区,而消费者从缓冲区中取出数据并处理。

PDO 的属性可以在对象字典中配置,每个PDO在对象字典中由PDO通讯参数和PDO映射参数组成:

  1. PDO 通讯参数
    描述了 PDO 的通信功能,定义了该设备所使用的 COB-ID、传输类型、禁止时间和事件时间等。
    ●传输类型:决定PDO遵循何种传输方式(同步/异步);
    ●禁止时间:禁止时间指两个连续 PDO 传输的最小间隔时间,避免由于高优先级信息的数据量太大,始终占据总线,而使其它优先级较低的数据无力竞争总线的问题。
    ●事件时间:异步传输模式中驱动器向控制器发送 PDO 报文的周期时间。注意使用事件时间时,禁止时间应设置为 0。
  2. PDO 映射参数
    PDO 映射用于建立对象字典与 PDO 的映射关系。PDO 映射参数包含了 PDO 传输内容信息(包括索引、子索引及位长),说明PDO中的对象在对象字典中的位置和长度。生产者和消费者必须知道这个映射,以解释 PDO 内容。

4.2 PDO传输类型

PDO 有两种传输方式:

同步(SYNC)
在 CANopen 中,同步传输是通过 SYNC(同步)消息来实现的。SYNC 消息是由主节点周期性地发送的,所有其他节点在接收到 Sync 消息后都会执行指定的操作。

  1. 同步非周期(传输类型:0)。控制器必须具有发送同步报文的能力(频率最高为 1KHZ 的周期发送的报文),伺服在接收到该同步报文后再发送。
  2. 同步周期(传输类型:1-240)。传送在每 1 到 240 个 SYNC 消息后触发。该方式下伺服驱动器每接收到 n 个同步报文后,PDO 里的数据发送一次。

异步(ASYNC)
(传输类型:254/255)
从站报文数据改变后即发送,不管主站是否询问,而且可以定义同一个报文两次发送之间的时间间隔,避免高优先级报文一直占据总线。
在这里插入图片描述

4.3 PDO通讯示意

主站向从站发送数据:
在这里插入图片描述
从站向主站发送数据:
在这里插入图片描述

4 NMT控制

CANopen 节点按照协议规定的状态机执行相应工作,状态机的状态决定了该节点当前支持的通讯方式及节点行为。

状态机有初始化(initialization)、预操作(pre-operational)、操作(operational)和停止(stopped) 四个状态,可以通过 NMT (Net Management,网络管理) 报文来实现在各种模式之间切换。只有主节点能够传送 NMT报文,所有从设备都必须支持 NMT 模块控制(Module Control)服务,同时 NMT模块控制服务消息不需要应答。

CANopen设备状态机制见下图。

  • 初始化时,节点自动设置自身参数和对象字典;
  • 当系统上电初始化完毕后,自动进入预操作状态中并发送 Boot-Up,该状态是主要的配置节点状态,可以接收和发送除PDO以外的所有报文;
  • 主节点发送启动节点报文启动远程节点,由预操作状态进入操作状态,操作状态是 CANopen 正常工作时的状态,各个模块都应正常工作;反之主节点发送另外的NMT 报文使节点进入预操作状态。
  • 当 NNT 主机发送停止节点报文时,设备进入停止状态,该状态是一种临时状态,只能接受主站的网络命令以恢复运行或重新启动。
    在这里插入图片描述

5同步对象

SYNC同步是控制多个节点发送与接收之间协调和同步的一种特殊机制,用于 PDO 的同步传输。
同步对象有 CANopen 主站周期性地广播 CAN 总线的报文,用来实现基本的网络时钟信号,每个设备可以根据自己的配置,决定是否使用该事件来跟其它网络设备进行同步通讯。

6应急报文

当设备内部出现致命错误将触发应急(Emergency)报文,由应用设备以最高优先级发送到其他设备。任何具备紧急事件监控与处理能力的从站会接收并处理紧急报文。

7监督类型

监督类型是指在运行过程中主站选择何种检查方式检查从站,判断从站是否出现故障,并根据这些故障做出相应的处理。
检查方式有心跳报文(Heartbeat)和节点保护(Node Guarding)。一个节点不能够同时支持节点保护和心跳报文,只能选其中一种作为保护。

7.1心跳报文

心跳模式采用生产者/消费者模型,心跳报文分为主站心跳报文和从站心跳报文。
主站心跳报文
从站以“监督时间”周期性的上传报文到主站,如果超过“心跳消费者时间”后主站还没有收到从站的下一个心跳报文,那么主站判断通讯出错,主站产生报警。
从站心跳报文
主站以“监督时间”周期性的发送报文到从站,如果超过“心跳生产者时间”从站还没有收到主站的下一个心跳报文,那么从站判断通讯出错。
在这里插入图片描述

7.2节点保护

节点保护遵循主从模型,主站以“监督时间”周期性的发送远程请求报文到从站,从站接收到后即回应,如果超过“监督时间×寿命因子”时间后,主站还没有收到从站回应的报文,主站判断从站出错。
同时,从站也可以监控主站的远程请求状态,从收到的第一条远程帧开始启动通讯保护,如果超过“节点保护时间×节点保护系数”时间没有收到主站远程帧,从站也会判断通讯出错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CANopen基本概念学习笔记 的相关文章

  • Ros_Canopen:ROS与底盘的can通讯使用

    ROS CANOPEN ROS与底盘的can通讯使用 这篇文章记录了ros canopen的安装和使用过程 xff0c 系统版本为ubuntu16 04 并且已经安装了ROS xff08 kienect 安装过程可能会出现错误 xff0c
  • 初识CANOpen

    什么是CANOpen CANOpen是位于CAN总线之上的一个应用层协议 CAN总线只规定了物理层和数据链路层 xff0c 有了这两层 xff0c 数据就可以在CAN总线上传输了 我们和哪个设备通信就和哪个设备约定好 xff0c 哪个ID代
  • 【CANopen】CANopen总线讲解

    CANopen总线 一 前言二 CANopen概述2 1 CANopen网络模型2 2 CANopen常见规范 三 CANopen对象字典四 CANopen通讯标识符五 CANopen协议概述5 1 CANOpen协议报文分类5 2 CAN
  • 学习CANopen --- [6] 自定义对象字典

    在前面几篇文章中 xff0c 我们运行例子时都需要一个eds文件 xff0c 比较麻烦 xff0c 本文讲述如何在代码中自定义对象字典 xff0c 只添加自己需要的OD项 如果是作为master来使用 xff0c 还是比较方便的 自定义对象
  • 学习CANopen --- [7] 使用块(Block)下载

    对于一次传输超过4字节的情形 xff0c SDO可以使用Segment传输或者Block传输 xff0c Segment传输在第6篇文章中已经介绍 xff0c 本文讲解Block传输中的下载情况 一 与Segment传输的比较 相比于Seg
  • 学习CANopen --- [10] 汽车外接OBD模块原理

    在某宝上搜索汽车OBD xff0c 可以发现很多卖OBD模块的 xff0c 通过接入OBD模块可以增加车子本身没有的功能 xff0c 如锁车升窗 xff0c 行车自动落锁和后视镜折叠等 xff0c 那么其实现原理是什么呢 xff1f 使用时
  • CANopen资料收集

    CANopen资料收集 文章目录 CANopen资料收集开源CANopen协议栈1 CanFestival2 CANopenNode 3 canopen stack CIA官网canopen说明 https www can cia org
  • ROS中CANopen的使用(1)

    ROS中CANopen的使用 xff08 1 xff09 今天终于实现了通过ros来控制无人车 xff0c 心情非常激动 xff0c 先简要记录 工作环境 工控机使用的Ubuntu18 02 xff0c can卡采用的innodisk的UC
  • ros_canopen使用心得

    近期开始准备上位机与机器人底盘进行CAN通讯 xff0c 花了很长时间在网上整理学习资料 xff0c 现将自己的心得和参考的链接整理如下 首先 xff0c 机器人操作系统中有ros canopen可以去调用 xff0c 其中socketca
  • ROS的ros_canopen调试(1)

    Ros canopen是ros支持can通信的package 链接 xff1a http wiki ros org ros canopen distro 61 indigo Ros canopen包结构如下 SocketCAN 是一组开源的
  • 单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真

    这篇博客是用MATLAB仿真观察二进制数字信号码元速率和它的带宽的关系 书上给了数字基带信号和频带信号的功率谱密度 但是我还没搞明白FFT与功率谱密度的关系 所以博客里图片的信号幅值就不要纠结啦 看包络形状和带宽就行 如果有明白FFT与功率
  • 利用FPGA的DDS直接数字合成产生SPWM正弦调制方波

    1 原理 利用FPGA的DDS产生调制信号 利用计数器产生高频载波三角波 将两路信号通过比较器进行比较 产生调制SPWM方波 1 1 DDS基本结构 三个寄存器 两个加法器 第二个加法器可以输出地址作为ROM数据表模块的输入 从而提取ROM
  • 5G 的三大应用场景——ITU-R原文

    每次写 5G 的材料时都会提及 5G 的三大应用场景 虽然这是一个众人皆知的常识 但是如果不引用一下的话有些不严谨 苦于一直没找到 ITU 的原文 之前引用的都是移动通信教材那本书 今天狠下心来花时间找了原文 功夫不负有心人 可算给我找到了
  • 基于相干解调法和基于相位比较法的2DPSK数字通信系统 MATLAB Simulink仿真

    1 课程设计目的 通过课程设计 巩固已经学过的通信原理课程中有关数字调制系统的知识 加深对相关知识的理解和应用 学会应用Matlab Simulink工具对通信系统进行仿真和调试 设计与实现的过程中充分利用图书馆和网络资源 提高发现问题和自
  • CANOPEN详解

    canopen简介 CAN 提供了所有的网络管理服务和报文传送协议 但并没有定义对象的内容或者正在通讯的对象的类 型 它只定义了 how 没有定义 what 而这正是 CANopen 切入点 CANopen 的核心概念是设备对象字典 OD
  • Nakagami-m 信道

    Nakagami m 分布是日本学者Nakagami 在1960年的一篇论文中提出的快衰落模型 Nakagami m 的表达式 我们遵照参考文献 1 的说法1 假设接收信号表示如下 r n g
  • 非中心卡方分布

    非中心卡方分布 非中心卡方分布是卡方分布的一般化形式 如果 是 个独立的正态分布的随机变量均值为 方差为 表示为 那么随机变量 为非中心卡方分布 非中心卡方分布涉及两个参数 表示自由度 即 的数目 是和随机变量 相关的参数 由以上参数所定义
  • CANopen基本概念学习笔记

    参考文献 Kinco FD CD3系列伺服驱动器使用手册20210125 CANopen协议讲解课件 信捷 CANopen 通讯用户手册 基于CANopen协议的网络主控制器的设计 前置文章 CAN总线技术基本概念简述 0 CANopen简
  • 【笔记整理】通信原理第四章复习——数字基带传输

    4 1 引言 数字基带信号 数字信号 补充 基带信号 指未经调制的信号 特征是其频谱从零频率或很低频率开始 占据较宽的频带 基带在传输前 必须经过一些处理或某些变换 比如码型变换 波形变换和频谱变换 才能送入信道中传输 处理或变换是为了使信
  • MIPI-DSI 协议深度解析-简单易懂协议详解

    1 MIPI MIPI 移动行业处理器接口 是 Mobile Industry Processor Interface 的缩写 MIPI 移动行 业处理器接口 是 MIPI 联盟发起的为移动应用处理器制定的开放标准 DCS DisplayC

随机推荐

  • epoll在多线程中的应用-EPOLLEXCLUSIVE和REUSEPORT(一)

    以下均为对epoll在多线程中的使用的一些笔记 如果有不对的地方 烦请指出 主要对于我所遇到的问题进行讨论 不会讨论代码如何改写 探讨如何解决这个问题 一 引言 这些问题均是我在编写我的Web服务器遇到的 我在编写多线程Web服务器的时候
  • Docker 镜像库国内加速的几种方法

    概述 在国内 拉取 Docker 镜像速度慢 时不时断线 无账号导致限流等 比较痛苦 这里提供加速 优化的几种方法 梳理一下 会碰到以下情况 国内下载速度慢 时不时断线 是因为网络被限制了 没有公共镜像库账号导致限流 是因为 Docker
  • 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的HelloWorld项目

    本文主要介绍如何用vue开发的标准化工具vue cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程 文章目录 一 准备工作 安装node js 二 项目搭建 创建项目目录 全局安
  • 谁来教我渗透测试——黑客应该掌握的Windows基础

    今天我们看看作为一个黑客对于Windows应该掌握哪些基础知识 主要内容包含以下四个方面 系统目录 服务 端口和注册表 黑客常用的DOS命令及批处理文件的编写 黑客常用的快捷键 以及如何优化系统 登录密码破解 手动清除木马病毒 系统目录 服
  • 2014年总结

    总结的意义在于认清未来的方向 2014年工作 1 ETL Data Warehouse Data Mining 数据挖掘内容很多 如何与企业需求相结合是重点 2 简单的工作流系统开发 3 体会ArgGIS在物流运输企业中的应用 无论云计算以
  • 色彩空间与像素格式

    转载来自 https www cnblogs com leisure chn p 10290575 html 1 色彩空间基础 颜色是不同波长的光对人眼刺激产生的色彩感觉 色彩空间 Color Space 是颜色的数学表示 根据不同的表示方
  • PSO优化LSTM

    有两个py文件 PSO 1和LSTM 1 在资源那里下载 有数据 环境 python TF2 优化的参数有 神隐藏神经元个数 dropout比率 batch size 这个可以根据自己的意愿改 规定上限和下限 UP 64 0 14 32 D
  • java跨时区问题【相差8小时】

    情况一 后端传递给前端 前端展示到页面中的时间与系统时间相差8小时 解决方法 在该类的日期属性字段上加上注解 JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 情况二 展示数据时间与
  • 解决Chrome, NET::ERR_CERT_AUTHORITY_INVALID

    文章目录 前言 解决方法一 解决方法二 总结 前言 解决方法一 首先清理一下缓存 三个点 gt 设置 gt 清除浏览数据 即可 如果还解决不了 因为Chrome是默认使用HSTS传输 严格的http传输方式 解决方法二 在Chrome浏览框
  • C++如何切割String对象

    C 如何切割String对象 C 相较于Java Python 并没有提供的字符串分割的函数split 因此需要自己进行编写 在实际的工作中这一功能会被经常使用 所以进行简单的记录一下 核心函数 代码实现的函数是调用String库中的fin
  • 数学:矩阵求导

    矩阵Y对标量x求导 Y y ij dY dx dy ji dx 求导后 Y变转置了 标量y对矩阵X求导 dy dX Dy Dx ij 求导后 不需要转置 重要结论 y U XV u i x ij v j 于是 dy dX u i v j U
  • ACM-子串(字符串处理)

    问题描述 有一些由英文字符组成的大小写敏感的字符串 请写一个程序 找到一个最长的字符串 x 使得 对于已经给出的字符串中的任意一个 y x 或者是 y 的子串 或者 x 中的字符反序之后得到的新字符串是 y 的子串 输入数据 输入 输入的第
  • vue使用高德地图导航路线失败,获取驾车数据失败:INVALID_USER_SCODE(解决方法)

    高德地图使用路线导航 最近做大屏项目 里面有地图定位 路线导航等方面的功能 在做路线定位是一直都是获取不到导航的路线 经过好长时间的百度看高德api文档终于找到解决方法 解决方法 添加高德地图安全密钥 添加高德安全密钥 安全密钥是和key一
  • 计算机毕业设计-基于SSM的网上书店管理系统

    项目背景 本网上系统是针对目前网上的实际需求 从实际工作出发 对过去的网上系统存在的问题进行分析 结合计算机系统的结构 概念 模型 原理 方法 在计算机各种优势的情况下 采用目前最流行的B S结构和java中流行的ssm框架和eclipse
  • jq ajax fail,javascript - jQuery.ajax fail handler not called - Stack Overflow

    Deprecation Notice The jqXHR success jqXHR error and jqXHR complete callbacks are removed as of jQuery 3 0 You can use j
  • 【Linux】-关于调试器gdb的介绍和使用

    作者 小树苗渴望变成参天大树 作者宣言 认真写好每一篇博客 作者gitee gitee 如 果 你 喜 欢 作 者 的 文 章 就 给 作 者 点 点 关 注 吧 文章目录 前言 一 Linux中的debug和release 二 gdb的使
  • Java作用域

    try catch里面的是局部变量 java变量的作用域分为四个级别 类级 对象实例级 方法级 块级 块级变量就是定义在一个块 内部的变量都是局部变量 try 中try后面的 就是一个块级作用域 所以内部定义的变量是局部变量 在Java中
  • Android自定义导览地图组件(一)

    丨版权说明 Android自定义导览地图组件 一 于当前CSDN博客和乘月网属同一原创 转载请说明出处 谢谢 鉴于Android关于自定义导览地图的相关资料以及开源项目贫乏 应Android同行几位小伙伴们的建议 决定写下这篇文章分享给大家
  • 团队管理的一些总结

    这将近三年 我在公司经历了很多事情 在学习中成长 很多时候我都在总结每个步骤和过程我取得的成绩和失败 如果说我们需要一个有效性高的团队 需要一个能够创造奇迹的团队 那么我觉得如下这些就是我经历了这么多得到的启示 1 必须明确目标 当然这个目
  • CANopen基本概念学习笔记

    参考文献 Kinco FD CD3系列伺服驱动器使用手册20210125 CANopen协议讲解课件 信捷 CANopen 通讯用户手册 基于CANopen协议的网络主控制器的设计 前置文章 CAN总线技术基本概念简述 0 CANopen简