CANopen学习笔记

1.CANopen的预定义报文ID分类

CANopen在设计时,对其定义为小网络、控制信号实时通讯

  • 报文传输采用CAN标准帧格式。即11bit的ID域,以尽量减小传输时间。
  • 网络控制报均采用数据最小字节数。比如心跳报文,只有1个字节数据。
  • 实时更新的过程数据无需接收方报文应答。即采用生产消费模型,降低总线负载。
  • 需要接收方确认的配置参数一般都时采用快速单字传输。即1个报文最多传达1个32bit的参数变量,避免了分帧引起的实时性降低。  

        以上这些定义都是为了节约时间开销,最大限度的保证实时性。同时为了减小简单网络的组态工作量,CANopen定义了强制性的缺省标识符(CAN帧ID)分配表,以减小使用者和维护者的学习时间,快速上手。

1.1 网络管理(NMT)与特殊协议(Special protocols)报文ID分类

        为了CANopen网络的稳定可靠,都需要设置一个网络管理主机NMT-Master(Network Management-Master),就像是交响乐团的指挥家,指挥所有节点的启动、停止等。

        NMT主机也被成为CANopen主站,相对应的其他CANopen节点就是NMT从机(NMT-slaves)。

        NMT主机和NMT从机之间通讯的报文就称为NMT网络管理报文。网络管理报文负责层管理、网络管理和ID分配服务。例如,初始化、配置和网络管理(其中包括节点保护)。网络管理中,同一个网络中只允许有一个主节点、一个或多个从节点,并遵循主从模式。

        另外,为了协调各个节点的同步、心跳、时间、错误提示等通讯控制,CANopen还定义了一系列特殊协议报文。

1.2 过程数据对象(PDO)和服务数据对象(SDO)的报文ID分类

        使用CANopen时,需要传递的配置信息和应用信息都是放在过程数据对象PDO(Process data object)服务数据对象SDO(Service data object)里面。

        PDO和SDO的通讯区别在于,PDO属于过程数据,即单向传输,无需接收节点回应CAN报文来确认,从通讯术语上来说是属于“生产消费”模型

        而SDO属于服务数据,有指定被接收节点的地址(Node-ID),并且需要指定的接收节点回应CAN报文来确认已经接收,如果超时没有确认,则发送节点将会重新发送原报文。这种通讯方式属于常见的“服务器客户端”的通讯模型,即我们常说的轮询式。

        强制性的缺省标识符(CAN-ID)分配表,将其划分为4bit的功能码(Function-ID)和7bit的节点号(Node-ID)。

        在CANopen中通常把CAN-ID称为COB-ID(通讯对象编号)。

  • COB-ID:Communication Object Identifier,即CANopen中对某种通讯对象的报文帧ID,即CAN报文的11bitID。代表了一种通讯含义。
  • Node-ID:节点ID号,即CANopen网络中的节点地址,CANopen规定了逻辑上最大128个节点,所有Node-ID最大为128。

        由于要区分每个CANopen节点的输入和输出,所以PDO分为TPDO(发送PDO)和RPDO(接收PDO)。TPDO和RPDO分别有4个数据对象,每种数据对象就是1条CAN报文封装

        SDO就相对而言比较简单固定,发起通讯的“问”SDO的CAN帧ID就是0x600+Node-ID,而被问的节点应“答”SDO的CAN帧ID就是0x580+Node-ID。一般在CANopen网络中,只有NMT主机能发起SDO通讯,进行节点参数配置或关键性参数传递。当然从节点也可以对其他从节点发起SDO通讯。

2.对象字典OD(Object dictionary)

        CANopen对象字典(OD:Object Dictionary)是CANopen协议最核心的概念。所谓对象字典就是一个有序的对象组,描述了CANopen节点的所有参数,包括通讯数据的存放位置也列入其索引,这个表变成可以传递的形式就是EDS文件(电子数据文档 Electronic Data Sheet)

        每个词典对象采用一个16bit的索引值来寻址,这个索引值通常被称为索引,其范围在0x0000到0xFFFF之间。为了避免数据大量时无索引可分配,所以在某些索引下也定义了一个8位的索引值,这个索引值通常被成为字索引,其范围0x00到0xFF之间。

        每个索引内具体的参数,最大用32bit的变量来表示

        每个CANopen设备都有一个对象字典。对于CANopen网络中的主节点来说,不需要对CANopen从节点的每个对象字典项都访问。

        CANopen对象字典中的项由一系列子协议来描述子协议为对象字典中的每个对象都描述了它的功能、名字、索引、子索引,数据类型,以及这个对象是否必须,读写属性等等,以保证不同厂商的同类型设备兼容。

        CANopen核心子协议描述时DS301。其它的协议都是不同应用行业对DS301的补充和拓展。

2.1 对象字典概述        

对象字典概述
Index range 索引范围Description 描述
0x0000Resorved 保留
0x0001-0x025FData types 数据类型
0x0260-0x0FFFReserved 保留
0x1000-0x1FFFCommunication profile area 通讯对象子协议区
0x2000-0x5FFFManufacturer-specific profile area 制造商特定子协议区
0x6000-0x9FFFStandardized profile area 标准化设备子协议区
0xA000-0xAFFFNetwork variables 网络变量
0xB000-0xBFFFSystem variables 用于路由网关的系统变量
0xC000-0xFFFFReserved 保留

        绿色的通讯对象子协议区和制造商通讯子协议区是需要关注的区域。

2.2 通讯对象子协议区(Communication profile area)

Index range 索引范围Description 描述
0x1000-0x1029General communication objects 通用通讯对象
......

        绿色的索引范围0x1000-0x1029为通用通讯对象,所有CAN节点必须具备这些索引,否则将无法加入CANopen网络

2.3 通用通讯对象(General communicator objects)

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

2.4 制造商特定子协议

        对象字典索引0x2000-0x5FFF为制造商特定子协议,通常是存放所应用子协议的应用数据。而通讯对象子协议区是存放这些应用数据的通信参数。

2.5 标准化设备子协议

        标准化设备子协议,为各种行业不同类型的标准设备定义对象字典中的对象。如DS401、DS402等等。

3 网络管理 NMT(Network management)与CANopen主站

        每个CANopen从节点的CANopen协议栈中,必须具备NMT管理的响应代码,这是节点具备CANopen协议的最基本要素。

3.1 NMT节点状态

        CANopen节点从上电开始的6种状态,包括:

  • 初始化(Initalizing):节点上电后对功能部件包括CAN控制器进行初始化;
  • 应用层复位(Application Reset):节点中的CANopen通讯复位(开始),从这个时刻起,此节点就可以进行CANopen通讯了。
  • 预操作状态(Pre-operational):节点中的CANopen通讯处于操作就绪状态,此时此节点不能进行PDO通信,而可以进行SDO进行参数配置和NMT网络管理的操作。
  • 操作状态(operational):节点收到NMT主机发来的启动命令后,CANopen通讯被激活,PDO通信启动后,按照对象字典里面规定的规则进行传输,同样SDO也可以对节点进行数据传输和参数修改。
  • 停止状态(Stopped):节点收到NMT主机发来的停止命令后,节点的PDO通信被停止,但SDO和NMT网络管理依然可以对节点进行操作。

        除了初始化状态,NMT主机通过NMT命令可以让网络中任意一个的CANopen节点进行其他5种状态的切换CANopen节点也可以程序自动完成这些状态的切换

3.2 NMT节点上线报文

        CANopen从站上线时,为了通知主站它已经加入网络,或者避免与其他从站Node-ID冲突。这个从站必须发出节点上线报文(boot-up)。

        节点上线报文的ID为0x700+Node-ID,数据为1个字节0。生产者为CANopen从站

3.3 NMT节点状态与心跳报文

        主站为了监控CANopen节点是否在线与目前的节点状态。CANopen应用中通常都要求上电的从站定时发送状态报文(心跳报文)。

        节点心跳包文与上线报文相同为0x700+Node-ID,数据为1个字节,代表节点目前的状态:

数据(1个字节)状态
0x04停止状态
0x05操作状态
0x7F预操作状态

3.4 NMT节点守护

        已经过时了,不做介绍。它与心跳报文模式不能并存。

3.5 NMT节点状态切换命令

        NMT网络管理中,最核心的就是NMT节点状态切换命令,这是NMT主站进行网络管理的命令报文。

        CANID均为0x000,具备最高的CAN优先级。数据为2个字节

第1个字节代表命令类型

  • 0x01:启动命令(让节点进入操作状态);
  • 0x02:停止命令(让节点进入停止状态);
  • 0x80:进入预操作状态(让节点进入预操作状态);
  • 0x81:复位节点应用层(让节点的应用恢复初始状态,比如列车门都恢复打开状态);
  • 0x82:复位节点通讯(让节点的CAN和CANopen通讯重新初始化,一般用于总线收到干扰,导致节点总线错误被动,或者总线关闭时。

第二个节点代表被控制的节点Node-ID。

        如果要对整个网络所有节点同时进行控制,则这个数值为0即可。

3.6 CANopen主站设备

        CANopen主站需要具备以下功能:

  • 支持PDO、SDO发送和接收;
  • 支持NMT网络管理;
  • 支持PDO通信类型并能够支持监控每一个PDO目标;
  • LSS层设置功能:从站波特率设置、从站节点编号设置;
  • 支持从站管理功能:类型与名称读取、对象字典读写;
  • 紧急报文发送功能;
  • 拓展CANopen标准指示灯功能。

4. 过程数据对象PDO(Process data object)

        PDO属于过程数据用来传输实时数据,即单向传输无需接收节点回应CAN报文来确认,从通讯术语上来说是属于“生产消费”模型PDO。

4.1 PDO的CAN-ID定义

        PDO通信比较灵活,广义上只要符合PDO范围内的所有CAN-ID(COB-ID)都可以作为节点自身的TPDO或RPDO使用,不受功能码和Node-ID的限制。分为预定义和自定义

        在PDO预定义中,人为规定了TPDO和RPDO,规定了Node-ID在PDO中的位置,规定了PDO的编号。

PDO的预定义
Object对象Specification 规范CAN-ID(COB-ID)
TPDO1发送过程数据对象1CiA3010x181-0x1FF(0x180+node-ID)
RPDO1接收过程数据对象1CiA3010x201-0x27F(0x200+node-ID)
TPDO2发送过程数据对象2CiA3010x281-0x2FF(0x280+node-ID)
RPDO2接收过程数据对象2CiA3010x301-0x37F(0x300+node-ID)
TPDO3发送过程数据对象3CiA3010x381-0x3FF(0x380+node-ID)
RPDO3接收过程数据对象3CiA3010x401-0x47F(0x400+node-ID)
TPDO4发送过程数据对象4CiA3010x481-0x4FF(0x480+node-ID)
RPDO4接收过程数据对象4CiA3010x501-0x57F(0x500+node-ID)

        发送(TPDO)和接收(RTPO)是以CANopen节点自身为参考(如果CAN主站或其他从站就相反)。TPDO和RPDO分别有4个数据对象,每种数据对象就是1条CAN报文封装

        如果某个节点需要传递的资源特别多,则有出现例如TPDO5之类的数据对象,而他们的CAN-ID定义就需要打破预定义的规则。

4.2 PDO的传输形式

        4.2.1 同步传输

                同步传输就是通过同步报文让所有节点能在同一时刻进行上传数据或者下达命令的应用指令,可以有效避免异步传输导致的应用逻辑混乱和总线负载不平衡的问题。一般发送同步报文的是NMT主机。

                同步传输又可分为周期传输(循环)和非周期传输(无循环)。周期传输则是通过接收同步对象(SYNC)来实现,可以设置1-240个同步对象触发。非周期性传输是由远程帧预触发或者由设备子协议中规定的对象特定事件预触发传送。

        4.2.2 异步传输

                其触发方式有两种,第一种是由设备子协议规定的对象特定事件来触发(例如,定时传输,数据变化传输等)。第二种是通过发送与PDO的COB-ID相同的远程帧来触发PDO的发送。目前应用中的异步传输基本都采用第一种

4.3 PDO的通信参数

        PDO通信参数,定义了该设备所使用的COB-ID、传输类型、定时周期等。RPDO通讯参数位于对象字典索引的0x1400-0x15FF,TPDO通讯参数位于对象字典索引的0x1800-0x19FF。每条索引代表一个PDO的通讯参数集,其中的子索引分别指向具体的各种参数。

  • Number of entries参数条目数量:即本索引中有几条参数;
  • COB-ID:发送/接收这个PDO的帧ID;
  • 发送类型:即这个PDO发送或者接收的传输形式,通常使用循环同步和异步制造商特定事件较多;
  • Inhibit time 生产禁止约束事件(1/10ms):约束PDO发送的最小时间间隔,避免导致总线负载剧烈增加,比如数字量输入过快,导致状态改变发送的TPDO频繁发送,总线负载加大,所以需要一个约束时间来进行“滤波”,这个时间单位是0.1ms;
  • Event timer 事件定时器触发的时间(单位ms):定时器发送的PDO,它的定时时间,如果这个时间为0,则这个PDO为事件改变发送。
  • SYNC start value 同步起始值:同步传输的PDO,收到若干个同步包后,才进行发送,这个同步起始值就是同步包数量。比如设置为2,即收到2个同步包后再进行发送。

4.4 PDO的映射参数

        PDO映射参数,就是将通信参数、应用数据和具体的CAN报文中数据联系起来

5. 服务数据对象 SDO(Service data object)

        SDO主要用于CANopen主节点对从节点的参数配置。服务确认是SDO的最大特点,为每个消息都生成一个应答,确保数据传输的准确性

        通常CANopen从节点作为SDO服务器,CANopen主节点作为客户端。SDO客户端通过索引和子索引,能够访问SDO服务器上的对象字典。并且SDO也可以传输任何长度的数据(当数据长度超过4个字节就拆分成多个报文来传输。

5.1 通讯原则(communication principle)

        SDO的通讯原则非常单一,发送方(客户端)发送CAN-ID为0x600+Node-ID的报文,其中Node-ID为接收方(服务器)的节点地址,数据长度为8字节(DLC=8数据长度均为,不存在的补0)。

        接收方(服务器)成功接收后,回应CAN-ID为0x580+Node-ID的报文。这里的Node-ID依然是接收方(服务器)的节点地址,数据长度均为8字节(DLC=8数据长度均为,不存在的补0)。

5.2 快速SDO协议(Expedited SDO protocol)

        最常见最常用的SDO协议是快速SDO,所谓快速,就是1次来回就搞定。前提是读取和写入的值都不大于32bit命令中直接包含了要读写的索引、子索引、数据。可谓直接命中!

5.3 普通SDO协议(Normal SDO protocol)

        当要传输的值超过32bit时,就不能使用快速SDO传输。必须使用普通SDO进行分帧传输。在实际应用中很少用到,一般用于CANopen节点的程序固件省级,或者做网关转换MVB总线之类的数据最大可达256位的应用。

6 特殊协议(Special protocols)

         为了方便CANopen主站对从站的管理。在CANopen协议中,已经为特殊的功能预定义了COB-ID。

6.1 同步协议(Sync protocol)

        同步(SYNC),该报文对象主要实现整个网络的同步传输

        每个节点都以该同步报文作为PDO触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。一般选用0x80作为同步报文的CAN-ID

6.2 时间戳协议(Time-stamp protocol)

        时间戳协议采用广播方式,无需节点应答,CAN-ID为0x100,数据长度为6,数据为当前时刻与1984年1月1日0时的时间差。

6.3 紧急报文协议

        设备内部发生错误,触发该对象,发送设备内部错误代码,提示NMT主站。其CAN-ID存储在0x1014的索引中,数据包含8个字节。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/582436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Socket套接字(UDP数据报)篇

Socket 概念数据报套接字DatagramSocketDatagramPacketInetSocketAddress 小结 概念 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元. 基于Socket套接字的网络程序开发就是网络编程. 数据报套接字 使用的是UDP(User Datagram Protocol…

IGM焊接机器人RTE 495伺服电机维修详情一览

在当今科技迅速发展的时代,机器人已成为各行各业不可或缺的重要工具。IGM机器人便是其中之一,其工业机械手伺服马达作为机器人的关键部件,确保机器人能够高效、稳定地运行。当出现IGM焊接机器人RTE 495伺服电机故障问题时,及时进行…

【推荐】2024年必备的技术学习网站

在学习 Java 的过程中,你都在用哪些网站查找资料和学习呢?以下是 V 哥在日常工作和学习中,经常会使用到的网站,有哪些是与 V 哥不约而同都在用的呢,下面来一一介绍一下: 1、百度开发者搜索 你是不是日常在…

[Algorithm][分治 - 归并排序][排序数组][交易逆序对的总数][计算右侧小于当前元素的个数][翻转对]详细讲解

目录 0.原理讲解1.排序数组1.题目链接2.代码实现 2.交易逆序对的总数1.题目链接2.算法原理详解3.代码实现 3.计算右侧小于当前元素的个数1.题目链接2.算法原理详解3.代码实现 4.翻转对1.题目链接2.算法原理详解3.代码实现 0.原理讲解 归并排序的流程充分的体现了**「分⽽治之」…

使用CSgetshell到3389端口远程桌面

中间使用了这个Akagi64.exe提权,网上可以找到,高版本的cs网上也可以找到。

Linux系统编程---线程池并发服务器

模型原理分析: 线程池的关键优势在于它减少了每次任务执行时创建和销毁线程的开销 线程池的组成主要分为 3 个部分,这三部分配合工作就可以得到一个完整的线程池: 1. 任务队列,存储需要处理的任务,由工作的线程来处理…

Linux网络服务-DHCP

一、DHCP工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议):用于自动获取IP地址 1.客户端会发送一个广播DHCP Discover报文去寻找DHCP服务器 2.客户端只会接收第一个回复的DHCP服务器的报文 3.服务器会发…

MATLAB非均匀网格梯度计算

在matlab中,gradient函数可以很方便的对均匀网格进行梯度计算,但是对于非均匀网格,但是gradient却无法求解非均匀网格的梯度,这一点我之前犯过错误。我之前以为在gradient函数中指定x,y等坐标,其求解的就是…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端,然后主要讲解设计一个支持各种缓存代理(本地内存、Redis等)的缓存装饰器,用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

Ubuntu TeamViewer安装与使用

TeamViewer是一款跨平台的专有应用程序,允许用户通过互联网连接从全球任何地方远程连接到工作站、传输文件以及召开在线会议。它适用于多种设备,例如个人电脑、智能手机和平板电脑。 TeamViewer可以派上用场,尤其是在排除交通不便或偏远地区…

Open SUSE 安装MySQL

前言 看了一圈网上关于SUSE的教程实在是太少了,毕竟太小众了。这两天在安装MySQL的时候老是出问题,踩了一晚上的坑,发现其实很简单,网上看了方法大概有这几种 通过Yast software management安装,但是我尝试了&#x…

Linux下的基本指令(1)

嗨喽大家好呀!今天阿鑫给大家带来Linux下的基本指令(1),下面让我们一起进入Linux的学习吧! Linux下的基本指令 ls 指令pwd命令cd 指令touch指令mkdir指令(重要)rmdir指令 && rm 指令(重要)man指令(重要)cp指…

海外三大AI图片生成器对比(Stable Diffusion、Midjourney、DALL·E 3)

Stable Diffusion DreamStudio 是Stable Diffusion 的官方网页,价格便宜,对图片的操作性强,但同时编辑页面不太直观,对使用者的要求较高。 与 DALLE 和 Midjourney 不同,Stable Diffusion 是开源的。这也意味着&…

[图解]领域驱动设计伪创新-为什么互联网是重灾区-02

0 00:00:00,000 --> 00:00:04,737 我们并没有说,微信或者是美团用了领域驱动设计 1 00:00:04,737 --> 00:00:06,632 没有做这个暗示 2 00:00:06,632 --> 00:00:08,290 我只是说什么 3 00:00:09,350 --> 00:00:12,700 针对用户量很大的系统 4 00:00:…

CANoe如何实现TLS协议

TLS,Transport Layer Security,传输层安全协议。是在传输层和应用层之间,为了保证应用层数据能够安全可靠地通过传输层传输且不会泄露的安全防护。 TLS安全协议的实现逻辑,在作者本人看来,大致分为三个部分&#xff1…

minio主从同步和双机热备

文章目录 1. 安装2. 测试3. 双机热备 环境说明 服务器IPminio-slb10.10.xxx.251minio-01/02/03/0410.10.xxx.25/206/207/208minio-backup10.10.xxx.204 1. 安装 下载地址: http://dl.minio.org.cn/client/mc/release/linux-amd64/mc 安装 只有一个二进制文件&…

Spring Security OAuth2 统一登录

介绍 Spring Security OAuth2 是一个在 Spring Security 框架基础上构建的 OAuth2 授权服务器和资源服务器的扩展库。它提供了一套功能强大的工具和组件,用于实现 OAuth2 协议中的授权流程、令牌管理和访问控制。 Git地址:yunfeng-boot3-sercurity: Sp…

贴片OB2500POPA OB2500POP SOP-8 电源开关控制器IC芯片

OB2500POPA电源管理芯片被广泛应用于各种低功耗AC-DC充电器和适配器中。以下是该芯片的一些典型应用案例: 手机充电器:OB2500POPA可以用于设计高效、小巧的手机充电器,提供稳定的输出电压和电流。 USB充电器:在USB充电器中&…

第5篇:创建Nios II工程之Hello_World<四>

Q:最后我们在DE2-115开发板上演示运行Hello_World程序。 A:先烧录编译Quartus硬件工程时生成的.sof文件,在FPGA上成功配置Nios II系统;然后在Nios II Eclipse窗口右键点击工程名hello_world,选择Run As-->Nios II …

Node.js 版本升级方法

在构建vue项目时,依赖npm(Node Package Manager)工具,类似于Java项目需要maven管理。而npm是node.js的管理工具,npm依赖node.js环境才能执行。 有时候使用voscode或者其他工具安装vue项目依赖,显示一直处于…
最新文章