《CANOpen》 学习笔记2
来源:互联网 发布:软件分类号 编辑:程序博客网 时间:2024/05/17 00:17
《CANOpen》 学习笔记2
《CANOpen 协议 —— PDO 介绍》
注:这里的 PDO 模式有点类似于 TCP/IP 中的 UDP 模式。即『生产者-消费者』模式
本文主要以一个实例进行讲解。
1. 实验目的:
- 实例的目的如图所示,实现节点 1 的数据(A,B)传送到节点2,节点3,同时实现节点2传输数据(C,D)至节点3。
2. 手段:
- 使用 PDO 进行数据传输
3. 分析:
- PDO 通信是基于生产者/消费者模型,主要用于传输实时数据。产生数据的节点将带有自己节点号的数据放到总线上,需要该数据的节点可以配置为接收该节点发送的数据。
4. 过程:
4.1 对象字典的编写:
- 对象字典的结构和条目对于所有设备是共同的,本例中采用索引定位,子索引确定对象的思想构建对象字典,方法是使用结构体定义子索引,子索引结构体的成员变量包含对象的属性(读写权限,数据类型,数据长度等)和指向对象的指针,定义索引时包含指向子索引的指针和子索引数目,对象字典各项在代码中采取如图所示的方法来组织结构构建,这样可以方便地通过索引和子索引找到对应的项。对象定义为指针的形式可以通过主站的 SDO 报文进行读写,实现对对象字典的灵活配置,同时这种方式实现通讯层与应用层共享数据比变量的特点。
4.1.1 各节点ID分配表定义
4.1.2 对节点1进行对象字典编写
- 节点1发送数据至节点2,节点3,故需要定义 TPDO,我们在此处定义为 TPDO1。节点1的应用数据区,TPDO1 的通讯参数和映射参数在对象字典中的定义分别如表。
- 应用数据区:
- 通讯参数:
- 映射参数:
- 应用数据区:
4.1.3 对节点2进行对象字典编写
节点2接收来自节点1的数据(A,B),故需要定义 RPDO1;此外节点2数据(C,D)传输至节点3,故需要定义 TPDO2。
节点2的应用数据表:
此时的索引为 7200h,子索引为 01h,02h 条目中并没有初始值,这两个条目分别用来接收节点1的数据A,B。接收数据后,子索引为01h的条目的值为 2DFFh,子索引为 02h的条目为 C3h。用于存储发送给节点3的数据。
- 通讯参数(RPDO1,RPDO2,TPDO2,TPDO1)
4.1.4 对节点3进行对象字典编写
- 节点3分别接收节点1和节点2的数据,需要在节点3的对象字典中定义RPDO1,RPDO2,其中 RPDO1 的 COB-ID 需要与节点1的 TPDO1 的 COB-ID 相同。RPDO2 的 COB-ID 要与节点2的 TPDO2 的 COB-ID 一致。
- 通讯参数定义(RPDO1, RPDO2):
4.2 节点1发送数据至节点2,节点3
4.2.1 节点1的 TPDO1 报文组装如图所示:
4.2.2 节点2,节点3从总线接收数据:
- 由于节点2的RPDO,节点3中的RPDO1的 COB-ID 与节点1的 TPDO 的 COB-ID 一致,故而节点2,节点3可以顺序通过报文过滤从总线中提取数据。
- 由于 PDO 的发送方式为广播方式,当节点1的报文发送到总线上时,理论上所有的节点都能接收到该报文,实际上只有与节点1有一致的 COB-ID 的 RPDO 才能接收该报文。
- PDO 可以高速传输数据就在于,其实际传输过程只传输实际数据,无需定义传输数据的来源,接受数据后该存放的地址。因为数据的来源,存放地址等信息已在事先由工程师定义完成(即对对象字典的编写)。
1 0
- 《CANOpen》 学习笔记2
- CANopen学习笔记
- CANopen学习笔记
- 《CANOpen》 学习笔记4
- 《CANOpen》 学习笔记5
- 《CANOpen》 学习笔记3
- CANopen协议学习笔记一
- CANopen协议学习笔记二
- CANopen协议学习笔记一
- CANopen协议学习笔记二
- CANopen协议学习笔记一
- CANopen协议学习笔记二
- CANopen协议学习笔记一
- 现场总线CANopen学习总结笔记五---网络管理系统与节点ID分配
- CAN 学习笔记一_【基于STM32的CANopen通讯协议的实现】
- CANopen系列文章【1】--SYNC【2】
- 周立功阅读笔记-CANopen轻松入门基于DS301(一)
- CANOpen学习指南
- 单源最短路径 :Dijkstra算法
- Android Studio SDK更新解决办法
- 如何去掉图片上的logo
- 28. Implement strStr()
- Android自定义状态栏颜色
- 《CANOpen》 学习笔记2
- Vivado Hardware Manager的使用
- 管道的相关知识
- 计算机网络——概述
- Java运算符
- angularjs学习笔记(四) jsonp跨域
- Alluxio架构图-总
- macos 使用技巧
- linux服务器实例MYSQL每日备份脚本