CANopen学习笔记(二)通讯对象PDO和SDO等
通讯对象
PDO
我的观点:一个 CANopen 设备可以拥有最多 512 个 RPDO 和 512 个 TPDO,总共最多 1024 个 PDO。(得到GPT4o的肯定)
CiA协议栈观点:一个只有一个逻辑设备的 CANopen 设备最多有 512 个 PDO。
PDO的两种用法:
- TPDO:生产者PDO
- RPDO:消费者PDO
特点
小而快
传输模式
同步传输:通过(SYNC对象)来获取同步信号
同步TPDO的传输倍率:n表示经过n个同步信号后发送下一个消息。(为0时,收到触发信号后的第一个同步信号后进行发送)
事件驱动传输
触发模式
消息的触发模式
| 触发方式 | 解释 | 应用场景 |
|---|---|---|
| 事件驱动 | 特定的事件进行驱动 | 超限报警 |
| 定时器驱动 | 固定的时间间隔进行发送 | 周期性更新数据 |
| 远程请求 | 其它节点通过发送 RTR 帧来请求该设备发送相应的 PDO | 允许节点灵活的请求数据 |
| 同步触发 | 由一定数量的Sync和内部事件触发 | 协调多个设备的同步操作 |
PDO读写
- 写协议(推模式):生产者向0 ~ n个消费者写PDO数据(参考spi写数据)
- 读协议(拉模式):消费者发送RTR请求向生产者请求数据(参考spi读数据)
PDO写
| 参数 | 请求/执行 | 响应/确认 |
|---|---|---|
| PDO编号 | 强制 | |
| 数据 | 强制 |

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

对象描述
通讯参数:定义了PDO的基本特性,如COB-ID、传输类型、禁止时间和事件定时器等,它决定了PDO是以何种方式发送和接收数据。
COB-ID:通过COB-ID可以唯一识别一个PDO消息
- TPDO和RPDO的COB-ID是不同的
- COB-ID的最高位设置为1时,表示该PDO被禁用
传输类型(Transmission Type):PDO消息的传输方式
- 同步传输
- 异步传输

抑制时间(Inhibit Time):两个PDO之间的最小时间间隔(以ms为单位)
事件计时器(Event Timer):定了事件触发的周期时间,PDO在到期时发送(表示没有事件发生)
同步计数器(Sync Counter):在同步传输类型下使用,规定了在接收多少次同步信号后发送
映射参数:定义了哪些对象字典条目(变量)被包含在 PDO 消息中,以及这些变量在消息中的位置。
- 映射条目数:定义了一个PDO在对象字典中的条目数量,每个条目代表一个数据段
- 映射对象:每个映射对象由32位组成
- 索引(Index,16位):对象字典中的索引
- 子索引(Sub-Index, 8位):对象字典项的子索引
- 位长度(Bit Length,8位):表示映射对象的数据位数(常为字节的整数倍)
PDO 传输实例
Multiplex PDO(不懂且没看完,因资料少)
有两种MPDO的使用方法。第一是目的地址模式(DAM)PDO,第二是源地址模式(SAM)PDO
支持接收MPDO的ANope的设备为MPDO消费者,支持发送MPDO的C为MPDO生产者
发送MPDO由事件驱动,不支持定时、远程请求和同步触发模式
寻址模式
- 目的地址模式(DAM):一个DAM-MPDO可以被所有该MPDO的消费者同时接收(类似于广播),且无 应答。如果对象不存在,则生成EMCY帧。
- 源地址模式(SAM):
MPDO读写
MPDO写
| 参数 | 请求/执行 | 响应/确认 |
|---|---|---|
| PDO编号 | 强制 | |
| 地址类型 | 强制 | |
| Node-ID | 强制 | |
| Multiplexer | 强制 | |
| 数据 | 强制 |

SDO
特点
大而慢
传输模式
| 传输模式 | 概述 | 应答模式 |
|---|---|---|
| 快速传输 | 因数据小于等于4个字节,一帧足够发送完,无需分段 | 一帧一答 |
| 段传输 | 把数据分割成若干个段,每一段通过单独的帧发送 | 每帧每答 |
| 块传输 | 把多个段组合成一个子块,每一子块发送完才接受应答信号,所有子块组成块 | 每子块每答 |
快速传输模式:只需要一次数据的发送和应答就可以完成数据传输,效率高,但是传输的数据量少。
段传输:数据被分成多个段(segment)来传输,每个段最多可以包含7个字节的数据。这种模式的实现较为简单,适合中等长度的数据传输。
块传输:相比段传输模式,块传输模式能够处理更大的数据量并且提高了传输效率。数据被分为多个块(block),每个块可以包含多个段。块传输还具有校验机制,能够确保数据的完整性和可靠性。
协议详解见 Or CiA301中文手册43页
SYNC
- 同步生产者定期广播同步对象(SYNC)。
- SYNC提供基本的网络同步机制,遵循生产消费模型,该服务无应答。
- 传输1个字节的计数器(可选)
TIME
- TIME生产者定期广播时间戳对象(TIME)。
- TIME提供了简单的网络时钟。CANopen设备通过时间戳对象来校准本地时间。
- 传输6个字节的时间戳
EMCY
- 当设备内部出现致命错误将触发应急(EMCY)报文
- 由应用设备以最高优先级发送到其他设备。任何具备紧急事件监控与处理能力的从站会接收并处理紧急报文。
CANopen学习笔记(二)通讯对象PDO和SDO等的更多相关文章
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Redis学习笔记二 (BitMap算法分析与BitCount语法)
Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- Linux内核学习笔记二——进程
Linux内核学习笔记二——进程 一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
随机推荐
- todo高通Android UEFI中的LCD分析(1):启动流程分析
# 高通Android UEFI中的LCD分析(1):启动流程 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进 ...
- Linux系统用户组管理
用户管理 和Windows一样在Linux中也存在许多用户,可以登陆Linux,和Windows不同的是,在Windows中同一时刻只可以存在一个用户登录系统,而在Linux中是允许多个用户同时登 ...
- K210开发板学习笔记-点亮LED灯
1. 介绍 和 51 单片机非常像,实验的2个LED灯都是一头接了 +3.3v 电源,控制 LED灯亮的话需要 K210芯片 对应的管脚提供一个低电平. 管脚: 低电平-LED亮 高电平-LED灭 G ...
- SpringBoot如何解决跨域问题
什么是跨域 跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据. 跨域三种情况 在发起请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求: ...
- PHP函数http_build_query使用详解
什么是http_build_query? 使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串.参数 formdata 可以是数组或包含属性的对象.一个 formdata 数组 ...
- 可视化—gojs 超多超实用经验分享(二)
想了想序号还是接上一篇分享的的序号接着写,如果在本文中没有获取需要的答案,可以移步去看看上一篇的分享.gojs 超多超实用经验分享(一) 目录 22. 指定线段连接到节点的某一个特定的接口上 23. ...
- python global变量作用域
python变量作用域 var1 = 123 def func(): var1 = 456 print(var1) func() #456 print(var1) #123 ============= ...
- 【Java,IDEA】创建自己的代码模版快速生成
写原生JavaWeb发现一个问题就是声明方法的时候没有字符关联提示, 只能一个保留字,一个保留字这样单个的敲出来方法,写多了就会发现特别费劲 当遇上一个字特别多且经常需要声明的方法可以使用IDEA的生 ...
- 从.net开发做到云原生运维(四)——.net core的微服务开发
1. .net 6.0项目模板变更 在.net 5和.net 3.1的时候,asp.net core项目模板里有个Program类和Startup类,在.net 6中引入了一个最小api的项目模板,在 ...
- 【转载】 PID原理与参数调试
原文地址: http://m.elecfans.com/article/1153309.html --------------------------------------------------- ...