首页 > 其他分享 >CANopen学习笔记(总)

CANopen学习笔记(总)

时间:2024-08-27 16:48:52浏览次数:5  
标签:PDO protocol CANopen 笔记 发送 学习 传输 模式 节点

CANOpen

定位:小网络,控制信号的实时通讯

确保实时性采取的措施

  • ID域:11bit(CAN标准帧格式)

  • 控制报文采用数据最小字节数

  • 采用生产消费模型(数据无需应答)

  • 需要应答时,采用快速单字传输(一个报文最多传输一个32字节参数变量)

一、协议分类

  • 主从协议
    • 一对多
    • 无应答模式和应答模式
  • 客户端/服务器协议(SDO)
    • 单对单
    • 有应答
  • 生产消费协议(PDO)
    • 一对多
    • 推拉模式

二、通讯对象

2.1 PDO

我的观点:一个 CANopen 设备可以拥有最多 512 个 RPDO 和 512 个 TPDO,总共最多 1024 个 PDO。(得到GPT4o的肯定)

CiA协议栈观点:一个只有一个逻辑设备的 CANopen 设备最多有 512 个 PDO。

PDO的两种用法:

  • TPDO:生产者PDO
  • RPDO:消费者PDO
2.1.1 特点

小而快

2.1.2 传输模式
  • 同步传输:通过(SYNC对象)来获取同步信号

    ​ 同步TPDO的传输倍率:n表示经过n个同步信号后发送下一个消息。(为0时,收到触发信号后的第一个同步信号后进行发送)

  • 事件驱动传输

2.1.3 触发模式

消息的触发模式

触发方式 解释 应用场景
事件驱动 特定的事件进行驱动 超限报警
定时器驱动 固定的时间间隔进行发送 周期性更新数据
远程请求 其它节点通过发送 RTR 帧来请求该设备发送相应的 PDO 允许节点灵活的请求数据
同步触发 由一定数量的Sync和内部事件触发 协调多个设备的同步操作
2.1.4 PDO读写
  • 写协议(推模式):生产者向0 ~ n个消费者写PDO数据(参考spi写数据)
  • 读协议(拉模式):消费者发送RTR请求向生产者请求数据(参考spi读数据)

PDO写

参数 请求/执行 响应/确认
PDO编号 强制
数据 强制

image-20240823090708657

PDO读

参数 请求/执行 响应/确认
PDO编号 强制
数据 强制

image-20240823090717664

2.1.5 对象描述
  • 通讯参数:定义了PDO的基本特性,如COB-ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据。

    • COB-ID:通过COB-ID可以唯一识别一个PDO消息

      • TPDO和RPDO的COB-ID是不同的
      • COB-ID的最高位设置为1时,表示该PDO被禁用
    • 传输类型(Transmission Type):PDO消息的传输方式

      • 同步传输
      • 异步传输

      image-20240823104525646

    • 抑制时间(Inhibit Time):两个PDO之间的最小时间间隔(以ms为单位)

    • 事件计时器(Event Timer):定了事件触发的周期时间,PDO在到期时发送(表示没有事件发生)

    • 同步计数器(Sync Counter):在同步传输类型下使用,规定了在接收多少次同步信号后发送

  • 映射参数:定义了哪些对象字典条目(变量)被包含在 PDO 消息中,以及这些变量在消息中的位置。

    • 映射条目数:定义了一个PDO在对象字典中的条目数量,每个条目代表一个数据段
    • 映射对象:每个映射对象由32位组成
      • 索引(Index,16位):对象字典中的索引
      • 子索引(Sub-Index, 8位):对象字典项的子索引
      • 位长度(Bit Length,8位):表示映射对象的数据位数(常为字节的整数倍)
2.1.6 PDO 传输实例

点我查看

2.2 Multiplex PDO(不懂且没看完,因资料少)

有两种MPDO的使用方法。第一是目的地址模式(DAM)PDO,第二是源地址模式(SAM)PDO

支持接收MPDO的ANope的设备为MPDO消费者,支持发送MPDO的C为MPDO生产者

发送MPDO由事件驱动,不支持定时、远程请求和同步触发模式

2.2.1 寻址模式
  • 目的地址模式(DAM):一个DAM-MPDO可以被所有该MPDO的消费者同时接收(类似于广播),且无 应答。如果对象不存在,则生成EMCY帧。
  • 源地址模式(SAM):
2.2.2 MPDO读写

MPDO写

参数 请求/执行 响应/确认
PDO编号 强制
地址类型 强制
Node-ID 强制
Multiplexer 强制
数据 强制

image-20240823091809355

2.3 SDO

2.3.1 特点

大而慢

2.3.2 传输模式
传输模式 概述 应答模式
快速传输 因数据小于等于4个字节,一帧足够发送完,无需分段 一帧一答
段传输 把数据分割成若干个段,每一段通过单独的帧发送 每帧每答
块传输 把多个段组合成一个子块,每一子块发送完才接受应答信号,所有子块组成块 每子块每答

快速传输模式:只需要一次数据的发送和应答就可以完成数据传输,效率高,但是传输的数据量少。

段传输:数据被分成多个段(segment)来传输,每个段最多可以包含7个字节的数据。这种模式的实现较为简单,适合中等长度的数据传输。

块传输:相比段传输模式,块传输模式能够处理更大的数据量并且提高了传输效率。数据被分为多个块(block),每个块可以包含多个段。块传输还具有校验机制,能够确保数据的完整性和可靠性。

协议详解见 Or CiA301中文手册43页

2.4 SYNC

  • 同步生产者定期广播同步对象(SYNC)。
  • SYNC提供基本的网络同步机制,遵循生产消费模型,该服务无应答。
  • 传输1个字节的计数器(可选)

2.5 TIME

  • TIME生产者定期广播时间戳对象(TIME)。
  • TIME提供了简单的网络时钟。CANopen设备通过时间戳对象来校准本地时间。
  • 传输6个字节的时间戳

2.6 EMCY

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

三、NMT

NMT主要用来管理和控制各个节点的状态,具体协议可以分为以下四类:

  1. NMT protocol
  2. Node guard protocol
  3. Heartbeat protocol
  4. Bootup protocol

3.1 NMT protocol

该协议是CANopen中网络管理的协议,控制和管理节点的状态,通过发送相关报文,可以让目标节点进入特定的工作状态。工作状态有以下几种

  • Initialization(初始化): 节点开始时进入初始化状态。
  • Pre-operational(预操作): 节点处于准备状态,但不参与正常的PDO(Process Data Object)通信。
  • Operational(操作): 节点完全进入操作模式,允许PDO通信。
  • Stopped(停止): 节点停止所有的通信。

NMT命令通常由网络管理器发送,命令包括:

命令 描述 cs值
Start Remote Node 将节点切换到Operational模式 0x01
Stop Remote Node 将节点切换到Stopped模式 0x02
Enter Pre-operational 将节点切换到Pre-operational模式 0x80
Reset Node 重置节点,重新启动节点 0x81
Reset Communication 重置节点的通信部分 0x82

其具体值为cs值(一字节)+nodeid(一字节)

Note : To command all the nodes, use nodeId = 00

Examples

  • To put the node 0x6 in operational mode : 000 01 06
  • To put all the nodes in pre-operational mode : 000 80 00

3.2 Node Guard protocol

节点监护协议(Node Guard protocol),用于主设备监控从设备的状态。由主设备定期发送,如从节点没在规定时间内回应,则主节点认为该节点出现了故障。(该报文中有翻转位)

3.3 Heartbeat protocol

心跳协议(Heartbeat protocol),是节点监护协议的简化版本,心跳协议不需要主设备定期发送消息来请求从设备回应,而是每个节点自主发布心跳报文。(该报文中没有翻转位)

3.4 Bootup protocol

Bootup协议是CANopen节点在启动时,通知主设备其状态的协议,在初始化进入预操作状态时,该节点会发送Bootup表示节点已经初始化完成,并且可以接收管理指令。

标签:PDO,protocol,CANopen,笔记,发送,学习,传输,模式,节点
From: https://www.cnblogs.com/xddisme/p/18383038

相关文章

  • Android Qcom USB Driver学习(十)
    本章主要是基于之前的学习,实现一个hidraw的驱动,发现有两种用于识别usb设备的方式,放别是usb_device_id和hid_device_idhid_probe(1)hid_device_idkernel/msm-4.19/drivers/hid/usbhid/hid-core.cbus=usbusb_register注册驱动->sys/bus/usb/driver↓↓↓↓↓↓......
  • C++学习笔记——范围基于 for 循环和for_each循环的区别
    范围基于for循环是C++11中引入的,简化了遍历数组或容器的代码点击查看代码#include<iostream>#include<vector>intmain(){std::vector<int>numbers={1,2,3,4,5};//使用范围基于for循环遍历for(intnum:numbers){std::cout<<num......
  • C++学习随笔——关联容器的迭代器失效问题
    常见关联容器的迭代器失效规则std::map和std::set:插入元素:插入新元素不会使任何已有的迭代器失效。你可以在插入新元素后继续使用所有现有的迭代器。删除元素:删除某个元素会导致指向该元素的迭代器失效。除此之外,所有指向其他元素的迭代器仍然有效。如果在遍历过程中删除......
  • Android Qcom USB Driver学习(九)
    本章主要是基于之前的学习,实现一个hidraw的驱动,发现有两种用于识别usb设备的方式,放别是usb_device_id和hid_device_idhid_probe(1)hid_device_idkernel/msm-4.19/drivers/hid/usbhid/hid-core.cbus=usbusb_register注册驱动->sys/bus/usb/driver↓↓↓↓↓↓......
  • [编程笔记] 较严重事故,产品安装后登录不上!
    周一打开工单列表,便看到这个问题了,“登录报验证码错误,刷新依旧”。由于周一太忙,拖到今天才有空远程核实,首先说下大致情况:1、安装后产生的问题,登录不了,客户自己重启过IIS和电脑2、产品验证码存在Redis里,一般是这里的服务器没启动或者异常停止会报这个错,......
  • Vue3的学习---9
    9.Vue-cli脚手架9.1搭建Vue-Cli脚手架Vue-cli是一个官方提供的脚手架工具,用于快速搭建Vue.js项目。它集成了项目初始化、开发服务器、构建工具、代码检查等功能,使得开发者可以更高效地进行Vue.js应用的开发。Vue-cli官网:https://cli.vuejs.org/zh/VueCLI的主要功能包括:项......
  • 立创泰山派学习08--SDK编译
    1、下载SDK2、更新repo,同步代码./repo/repo/reposync-lj123、配置编译环境 4、builde.sh脚本常用的指令参数build.sh脚本参数功能说明运行指令help查看脚本帮助说明./build.sh--helplunch选择板级配置文件./build.shlunchall编译整个SDK,包括......
  • 从零开始学习C++之递归
    递归注:此算法与函数有关,如不了解请移步。在wikipedia中,递归的解释是这样的:在C++中,递归就是指在函数中调用函数本身;递归的作用类似于分治,将一个大问题分解为很多小问题进行求解。但是递归的时间复杂度极高,因为要解决很多小问题,所以时间复杂度高达\(O(2^n)\)。使用递......
  • 计算机网络笔记分享(第一章 概述)
    计算机网络的定义:若干节点(结点)和连接这些节点(结点)的链路构成网络一些互相连接的自治的计算机的集合通用的、可编程的硬件互连而成网络的功能:连通性、共享(信息、硬件、软件)三个概念:网络:许多计算机连接在一起;互连网:许多网络通过路由器连接在一起;互联网(因特网):全球最大的......
  • prometheus学习笔记之PromQL
    一、PromQL语句简介官方文档:https://prometheus.io/docs/prometheus/latest/querying/basics/Prometheus提供⼀个函数式的表达式语⾔PromQL(PrometheusQueryLanguage),可以使⽤户实时地查找和聚合时间序列数据,表达式计算结果可以在图表中展示,也可以在Prometheus表达式浏览器中......