CANopen之SDO,PDO

news2024/11/27 10:31:13

一、简述

  CAN 总线是一种串行通信协议,具有较高的通信速率的和较强的抗干扰能力,可以作为现场总线应用于电磁噪声较大的场合。由于

CAN 总线本身只定义ISO/OSI 模型中的第一层(物理层)和第二层(数据链路层),通常情况下 CAN 总线网络都是独立的网络,所以

没有网络层。在实际使用中,用户还需要自己定义应用层的协议,因此在 CAN总线的发展过程中出现了各种版本的CAN应用层协议,

现阶段最流行的CAN应用层协议CANopen协议。

二、服务数据对象(SDO)

  SDO提供了直接访问CANopen设备对象字典的入口,入口条件包括数据类型及大小;任何类型的SDO传输都由客户端发起,数据

字典持有者是服务器,客户端和服务器都可以主动中止传输。

  请求读或写的节点是客户端节点;读取或写入数据的节点是服务器节点;

  读或写一个4字节或少于的数据,最简单的方法是使用SDO upload/download expedited protocol 。

1、SDO Upload expedited protocol 

  在服务器节点对象字典去读数据0xd0d1d2d3 。

  客户端请求:

 

 

 

 例1:数据 0xFE ,对象字典节点5 ,  索引 index 0x1400, 子索引 subindex 2 

客户端请求   : 605 40 00 14 02 00 00 00 00 

若成功,应答: 585 4F 00 14 02 FE 00 00 00

例2:数据 0x60120208 ,对象字典节点5 ,  索引 index 0x1802, 子索引 subindex 1

客户端请求   :605 40 02 18 01 00 00 00 00 

若成功,应答:585 60 02 18 01 08 02 12 60

2、SDO Download expedited protocol

  在服务器节点对象字典去写数据0xd0d1d2d3,(注意数据是最低有效位先写)。

  客户端发送:

 

 

 例1:数据 0xFE ,对象字典节点5 ,  索引 index 0x1400, 子索引 subindex 2 

客户端请求   : 605 2F 00 14 02 FE 00 00 00

若成功,应答: 585 60 00 14 02 00 00 00 00

 例2:数据 0x60120208 ,对象字典节点5 ,  索引 index 0x1802, 子索引 subindex 1

客户端请求   :605 23 02 18 01 08 02 12 60

若成功,应答:585 60 02 18 01 00 00 00 00

3、SDO 中止信息(SDO abort protocol )

  SDO 中止信息是主机在从机进行 SDO 通讯时,从机收到 SDO 后, 如果判断为 SDO 需要中止,就会返回中止信息给主机。

三、过程数据对象(PDO) 

  由对象字典提供PDO数据和配置的接口,数据字典中对应的映射结构决定了一个PDO的数据类型和映射关系。如果CANopen设备

支持可变映射PDO,可通过SDO实现对PDO在数据字典中对应的配置进行修改。  

1、Transmit - PDO (TPDO)

 i :Index 1800 + n,subindex 01 ,COB_ID(通讯对象的标识符):包含CAN-ID和附加控制位的标识符

对于TPDO来说,其通信参数中的COB-ID是自身的COB-ID,当发送TPDO时用来表明这个TPDO是谁发出的。

ii :Index 1800 + n,subindex 02, 写传输类型 t,

               t = 1 -- 0xF0:同步,时间触发模式 ,每 t 一周期

               t = FD    :收到PDO请求后

               t = FE    :事件驱动(制造商指定)

               t = FF    :事件传输,节点自发传输PDO

iii:Index 1800 + n, subindex 03,抑制时间。

  如果传输类型设置为FE和FF,它是最小的PDO传输间隔,单位100us,值为0禁用抑制时间。PDO 报文需要延时 t × 100us的

时间才发出,以此避免在多PDO 报文同时发出时,引起的时间冲突 。

iiii:Index 1800 + n, subindex 05,时间定时器。

  如果传输类型设置为FE和FF,它是PDO传输间隔,单位ms,值为0禁用。t =0xCB,200ms。

iiiii:Index 1A00 + n,定义映射

  subindex 0 :定义映射数量(1 byte)。值 0,映射禁用;值 01,子索引01有效;值 02,子索引01--02有效......

  subindex 1 :映射第一个参数。格式,index (2 bytes) – subindex (1 byte) – size (1 byte)

  subindex 2 :映射第二个参数。格式,index (2 bytes) – subindex (1 byte) – size (1 byte) 

一个例子:

605 2F 00 18 02 FF 00 00 00   --设置索引Index 1800,事件传输

605 2F 00 18 05 CB 00 00 00  --设置索引Index 1800,时间间隔200ms

605 2F 00 1A 00 00 00 00 00  --设置子索引禁用

605 23 00 1A 01 10 00 30 40  --0x40300010,设置映射索引0x4030,子索引00,大小0x10(16位)

605 23 00 1A 02 20 00 10 20  --0x20100020,设置映射索引0x2010,子索引00,大小0x20(32位)

605 2F 00 1A 00 02 00 00 00  --设置映射数量,用多少设多少,这里用了01--02

注意:定义映射时,先设置子索引禁用;再设置相应映射;然后设置映射数量

2、Receive - PDO (RPDO)

 i :Index 1400 + n, subindex 01 ,COB_ID(通讯对象的标识符)

对于RPDO来说,其通信参数的COB-ID是发送方的COB-ID,用来表示自己只接受某个CAN节点发过来的TPDO。

 ii :Index 1400 + n, subindex 02,写传输类型 t,              

               t = 1 -- 0xF0:同步,时间触发模式 ,每 t 一周期

               t = FD    :收到PDO请求后

               t = FE    :事件驱动(制造商指定)

               t = FF    :事件传输,节点自发传输PDO

iii:Index 1600 + n,定义映射

  subindex 0 :定义映射数量(1 byte)。值 0,映射禁用;值 01,子索引01有效;值 02,子索引01--02有效......

  subindex 1 :映射第一个参数。格式,index (2 bytes) – subindex (1 byte) – size (1 byte)

  subindex 2 :映射第二个参数。格式,index (2 bytes) – subindex (1 byte) – size (1 byte) 

一个例子:

605 2F 00 14 02 FF 00 00 00    --设置索引Index 1400,事件传输

605 2F 00 16 00 00 00 00 00  --设置子索引禁用

605 23 00 16 01 10 00 30 40  --设置映射索引0x4030,子索引00,大小0x10(16位)

605 2F 00 16 00 01 00 00 00  --设置映射数量,用多少设多少,这里用了01

注意:定义映射时,先设置子索引禁用;再设置相应映射;然后设置映射数量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs+mysql网上书店图书销售购物商城系统vue

系统功能 此系统的功能分为用户模块和管理员模块: 1、用户后台功能模块包括:首页、个人中心、订单评价管理、我的收藏管理、订单管理模块。 2、前台首页功能模块包括:首页、图书信息、图书资讯、个人中心、后台管理、购物车、在线聊天模块。 …

SAP MDG —— 更好地理解你的数据变更

概念 在SAP MDG on SAP S/4HANA 2021中,SAP发布了一种全新的数据分析框架:变更请求中的主数据变更分析。依赖该框架,你可以为你的最终用户提供强大的数据分析功能,以深度洞悉变更请求中到底变化了哪些数据。 使用这些分析功能&a…

Thinkphp6 分布式事务异常处理 1440 XAER_DUPID: The XID already exists

Mysql分布式事务,前提条件 MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。 执行两个命令确认环境 show variables like innodb_support_xa;show variables like %tx_iso%;异常信息 根据官方分布式示例 public function test(){Db::transa…

input空格回车输入标签

分析 我们自己封装input输入标签需要注意一下几点: 样式实现,span实现标签效果、input隐藏边框(Element-UI可以直接使用tag)。事件监听,确定生成标签的操作,可以是回车,并且需要监听离开焦点的情况。标签限制,最多几个,以及输入验证 html:&…

使用CDC模式改造遗留系统

项目改造背景及挑战 在我们经历的各种遗留系统改造之旅中,使用**绞杀者模式**来改造一个巨大的单体服务,是一种被广泛采用且验证行之有效的手段,在应用传统的绞杀者模式时,通常采用逐步替换的方式,将遗留系统中某一独…

b站pink老师JavaScript的ES6面向对象课程中:正则表达式案例代码——表单验证

目标效果: 1.当输入的手机号,QQ号,昵称,短信验证码,登录密码,确认密码:如果符合标准,就提示正确的文字;如不符合标准,则提示不正确。 2.判断确认密码是否与登录密码相等…

落实交通强国,鄂州临空区联手蘑菇车联打造新时代内陆开放高地

临空经济与智能网联、自动驾驶能擦出什么样的火花?今年7月,鄂州花湖机场投运,标志着这个湖北省“一号工程”正式蝶变为亚洲规模最大、自动化程度行业领先的航空货运枢纽。鄂州花湖机场项目也是湖北加快建设交通强国示范区、打造新时代“祖国立…

Spring Boot配置多个日志文件记录不同类日志示例

了解如何使用多个文件追加器在Spring 引导应用程序中创建多个日志文件。了解如何使用翻转策略、归档等配置所有文件追加器,wiihlog4j2和日志配置。 1. 带登录的多个日志文件 以下文件包含 5 个记录器。我们可以根据需要创建更多的记录器。logback.xml console– …

NeRF源码运行与学习(pytorch)

神经辐射场(NeRF)是一个简单的全连接网络(权重约为5MB),经过训练,可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向(5D输入)映射到颜色和不透明度&#xff08…

翻译文本的软件有哪些?这几个翻译工具你可以试试看

文本翻译,是我们在生活中或工作中比较常见的一个需求。例如有时收到一份英文资料,没时间逐字翻译成中文,那就需要借助翻译工具来帮忙了;或者是有时需要将一些内容翻译成英文,而碰巧遇到句子不知道如何翻译,…

DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述

引言 扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现&#…

[附源码]java毕业设计校园闲置物品交易

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MCE | 动物实验溶剂大讨论

在动物实验中,药物通常会以溶液 (Solution) 或混悬液 (Suspension) 的形式给药。我们需选择合适的溶剂,可以辅助超声加热措施,得到澄清的溶液或适合给药的混悬液。■ 人见人爱的生理盐水/PBS 对于水溶性很好的产品,用生理盐水 (Sa…

中学数学课程标准(教学大纲)的传承与变迁

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3研究内容 3 第二章 1990以来我国中学数学课程标准(教学大纲)改革回顾 4 2.1改革回顾 4 2.1.1 1990年数学教学改革的内容 4 2.1.2 2001年数学教学改革的内容 5 2.1.3 2011…

XSS(Cross-site Script,跨站脚本)漏洞笔记

起源 最早的 XSS 漏洞可追溯到 1999 年末,微软安全工程师发现一些网站遭到攻击,网站被插入了一些恶意脚本和图像标签。随后,微软对此类漏洞进行研究分析,并在 2000 年 1 月,正式使用“cross-site scripting”这个名称…

C语言-指针初阶(6)

目录 思维导图: 1. 指针是什么? 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针-整数 4.2 指针-指针 4.3 指针的关系运算 5. 指针和数组 6. 二级指针 7. 指针数组…

50行Python代码实现自动下载小说,并打包exe直接

前言 室友喊着没有小说看,让我给他推荐几本,这能难倒我? 分分钟就用python给他把整个网站的小说都给下载下来了,不愧是我啊! 话不多说,我们直接开整! (文末送读者福利&#xff09…

python之爬虫的学习

python爬虫入门-1为什么要学习爬虫浏览器背后的秘密常用网络请求URL解析HTTP常见响应状态码相关库及其简单使用相关引用综合栗子为什么要学习爬虫 现如今,浏览器可以更方便的进行网页交互以人们适合阅读的方式展示数据;但爬虫或者网页抓取对数据的收集和…

第5章 输入/输出(I/O)管理

5.1 I/O管理概述 5.1.1 I/O设备 I/O设备的分类(按使用特性分类)I/O设备的分类(按传输速率分类)I/O设备的分类(按信息交换的单位分类) 5.1.2 I/O控制方式 有4种: 1. 程序直接控制方式2. 中…

都是同样条件的mysql select语句,为什么读到的内容却不一样?

假设当前数据库里有下面这张表。 老规矩,以下内容还是默认发生在innodb引擎的可重复读隔离级别下。 大家可以看到,线程1,同样都是读 age > 3 的数据。第一次读到1条数据,这个是原始状态。这之后线程2将id2的age字段也改成了3。…