CANopen学习笔记

2023-05-16

CANopen学习笔记


1. TPDO和RPDO都是针对从站来说的,协议上没有有讲任何一个关于主站的概念,协议就只是定义从站,没有定义主站任何东西。
TPDO:从站-<主站
RPDO:主站-<从站

2. PDO的COB-ID是用来唯一标识一个PDO报文的,不同的PDO设置不同的COB-ID。

3. 主站和从站的通信过程基本是这样的:
    a.主站检测从站是否在线;
    b.在线的话开始通过SDO配置从站;
    c.配置成功,则发送一个NMT start remote node指令让从站进入Operation状态,开始PDO的通信。

4. CANopen所定义的所有Object都是要在从站上实现的,只是数值是由主站在开始PDO传输前通过SDO写入的。

5.  标识符正如其名,是CAN帧的一个标识,CANopen使用了这个标识符,并且把它定义为COB-ID,规定了高四位为功能码,低7位为节点ID,但是,CANopen并没有规定每个节点发出的所有帧都必须带上自己的ID,也没有规定接收的帧都必须跟自己的ID匹配,所以从根上说,COB-ID还是标识符的作用,它只是被规划了一下含义,举两个例子:PDO,COB-ID的组成即可以是发送方ID也可以是接收方ID,看你方便和具体使用规律;SDO,规定了使用server的ID来沟通。CANopen的预定义连接集是比较纠结,描述的不够清晰。

6. Heartbeat并不分主站和从站,仅是一种断线检测机制,主站可以发给从站,从站也可以发给主站,看用户的需求,一般的主站配置软件都可以设置主站或从站是否要监控对方的在线状态。

    支持heartbeat的从站,都有1016和1017两个参数,1017的数值表示从站送出heartbeat报文的间隔时间,1016表示从站监控主站或其它从站的超时时间(如果从站支持,可以同时监控主站或其它从站的在线状态,根据应用需求而定),所以1016是一个数组型的参数。

    当主站在consumer的时间内没有收到从站的Heartbeat(producer时间间隔发送),那么认为从站掉线。

7. 实现CANOPEN的步骤:

    ① CANopen 协议体系的实现;
    ② CANopen 相应开发和配置工具的实现。

    第2 阶段主要完成CANopen 标准开发工具的开发,开发过程可以分为 2 个步骤:第1 个步骤是EDS 和DCF 配置工具的开发;第2 个步骤是开发实现对象字典的工具。

    实现对象字典的过程是:将EDS和DCF用“文件转化工具”转化为“内部实现描述(XML)”,再用“目标配置代码工具”从而实现对象字典。

    EDS就是提供从站的一些默认的参数值给主站的组态软件,供用户配置从站的时候使用,EDS不是必须的,但大多数的主站配置软件都需要,有些主站软件也不需要EDS文件,比如Bechkoff的主站就不需要从站提供EDS文件。

8. 一般每个节点既可以作为server又可以作为client,server向client开放自己的OD供访问,两者的parameter都存放在设备唯一的OD中。

9. 不同的传输类型支持几种不同的数据传输方式:

    ① 同步触发,由同步帧触发,以同步整个网络数据,不同的数据频率通过设置不同的同步数实现。
    ② 事件触发。
    ③ 内部定时触发(也可以归到事件触发) 。

10. 同步PDO的实际意义与应用场合

     应用程序刷进对象字典时间和频率都是由编程人员自行确定的,你可以根据PDO的类型自行确定,比如每隔5个sync的时间刷新一次对象内容,这样数据的新鲜程度是5个sync,如果要求更进一步的新鲜程度,你可以在刷新对象内容后直接触发一帧PDO。

     同步PDO在实际应用中的优势:很多,提供一致的系统节拍,使得总线的数据尽量保证新鲜程度的同时,能够减少通讯量,合理的规划总线占用率。比如总线分布式的控制回路,怎样保证控制周期的准确性和数据的有效性呢? 

    同步传输的最重要应用是多轴同步控制,沒有这种同步机制,多轴传动功能是沒有办法实现的。

    PDO只是个载体,或者说它好比一辆货车,车厢里装什么货,是可以配置的,这些由PDO映射来完成,PDO映射用来指定把对象字典的那些对象装进PDO,或者从接收的PDO中将数据放到那些对象中。

    SYNC周期是恒定的,它基本上就是系统通信部分的节拍了,节拍乱了,一切都是浮云了。

11. http://blog.ednchina.com/whicun/99861/message.aspxCAN 及CANOPEN通讯协议大全

12. 移植canfestival到ARM上的步骤:

    1)在学习移植CANopen之前要先熟悉CAN,能够使用CAN进行节点间的通信设计。
    2)熟悉CAnopen协议,通读一遍301协议,并且结合国内的一些介绍性资料了解一下CAnopen的结构、定位和工作方式。
    3)结合一些较简单的协议栈代码,比如置顶的两套小代码,能够读懂一个,明白运行过程,最好能移植到你的硬件上试一下,毕竟它的代码量较之CANFestival要小的多。
    4)准备移植CANFestival,先在你熟悉和有条件实验的平台下,比如x86的windows下试着编译运行CANFestival(我记得有window的vc工程可以编译的)。熟悉和理解CANFestival,最后再把CANFestival移植到你的目标平台,可能会需要编写硬件接口驱动的。

13.  心跳报文是单向的,一般的主站都可以提供配置的方法,你可以让主站监控从站是否断线,也可以让从站监控主站是否断线,或者两个一起互相监控。

14. 一般的主站都需要一个配套的配置软件,我们习惯叫网络组态软件(Configuration tool software),让用户可以根据自己的需求来对网络进行配置。

15. 同步和异步,是针对不同的应用需求定义的方式,如果你的控制在各个从站间不需要配合,其实异步是比较科学的方式,一般同步都是运动控制中使用。

16. EDS文件只是一个具有可读性的设备对象字典的描述,设备实际的对象字典,是对它的软件实现,即设备实现了这个EDS所描述的对象字典,如果从站资料里面EDS文件支持读写,而实际访问却不可写,要么是从站没按照这个对象字典实现,要么是有其它的条件开启写入功能,比如物理开关或者参数开关。最好还是详细阅读一下从站的资料,也可以咨询该设备的供应商。

17.  dummy在CANOPEN里原本的意思是空的,没有意义的对象,用来占用PDO的数据,以达到调整PDO数据结构的目的。你基本上可以理解它的作用是会占用PDO的数据区,但不起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CANopen学习笔记 的相关文章

  • 位域的定义和使用

    位域 xff1a 有些信息在存储时 xff0c 并不需要占用一个完整的字节 xff0c 而只需占几个或一个二进制位 例如在存放一个开关量时 xff0c 只有0和1 两种状态 xff0c 用一位二进位即可 为了节省存储空间 xff0c 并使处
  • Makefile 的运行(六)

    一般来说 xff0c 最简单的就是直接在命令行下输入make命令 xff0c make命令会找当前目录的makefile来执行 xff0c 一切都是自动的 但也有时你也许只想让make重编译某些文件 xff0c 而不是整个工程 xff0c
  • FreeRTOS 任务优先级说明

    freeRTOS任务优先级与Unix进程优先级不同 FreeRTOS 任务优先 xff1a 任务优先级数值越小 xff0c 任务优先级越低 Unix 任务优先 xff1a 进程优先级数值越小 xff0c 进程优先级越高 下面对 FreeRT
  • QT子线程读取串口数据并传到主线程

    转载 读取串口部分借鉴于Quartz010的文章 如何在QT中读取串口数据 http blog csdn net zz709196484 article details 66474917 这是博客网址 大致思路就是子线程去读取串口数据并传送
  • 最常用的Java库一览

    一个典型的Java项目依赖于第三方库 本文总结的Java库适用于各种应用 xff0c 比较流行并且广泛使用 其中一些还提供简单的示例 xff08 来自ProgramCreek xff09 Java SDK 肯定是使用最广的库 xff0c 所
  • C#Socket编程详解(一)TCP与UDP简介

    一 TCP与UDP 1 TCP 1 1 定义 TCP xff08 TransmissionControl Protocol xff09 传输控制协议 是一种可靠的 面向连接的协议 xff08 eg 打电话 xff09 传输效率低全双工通信
  • AD19导出bom表的方法(按照元件不同数值分类,重点信息突出)

    我画电路图用的是AD19的软件 xff0c 最后板子画好了要进行元器件采购要生成bom表 xff0c 查了一下相关的资料 xff0c 总结整理一下 xff1a 1 在报告 xff08 report xff09 打开Bill of Mater
  • 为什么c++要“在头文件中声明,在源文件中定义”?

    gt gt gt 搬运一个知乎问答 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 下面是回答 61 61 61 61 61 61 61 61 61 61 61 61 61
  • HTTP header 参数丢失情况分析以及解决防范

    HTTP header 参数丢失情况分析以及解决防范 1 问题 当项目有Nginx做了代理的时候 xff0c 请求头中传参 34 user ip 34 xff0c 接口接收不到 2 问题分析 默认nginx是不能转发带 的header信息的
  • Keil 调试局部变量查看显示not in scope

    调整优化级别 不同的优化级别允许您在编译代码中可用的调试信息级别与代码性能之间进行权衡 可以使用以下优化级别 xff1a o O0应用最小优化 大多数优化都被关闭 xff0c 生成的代码具有最佳的调试视图 o O1应用受限优化 例如 xff
  • 【32单片机学习】(6)STM32串口+DMA收发不定长数据

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 1 DMA介绍 2 串口接收数据 3 实验现象 1 实验电路图 2 串口收发不定长数据视频演示 3 OLED 显示接收数据 4
  • www-authenticate认证过程浅析

    文档 xff1a www authenticate认证过程简单研究 创建 xff1a http hi baidu com netee 日期 xff1a 2009 10 07 版权 xff1a 原创内容 xff0c 转载请注明出处 xff0c
  • STM32F407ZG 串口通信+固定帧头帧尾传输数据帧

    STM32F407ZG开发板学习 xff08 4 xff09 串口简介通信接口USART接线电平标准数据帧 实验 xff1a 固定帧头帧尾数据传输需求最终思路以及思考过程思路中断函数程序段长度的问题缓冲区数据结构的决定 初始化配置中断服务函
  • 基于杰理RTOS平台的433射频无线数传通信

    在杰理的AC7916N实现了433射频的数据发送 xff0c 在杰理的AD15系列实现433射频接收 xff0c 本代码用于门铃项目收发 xff0c 下面请看代码 首先是AC7916N的433数据发送代码 xff0c 发送部分的程序放在一个
  • boost简介

    我认为做为一名c 43 43 编程人员 xff0c 对boost库必须要有一定的了解与使用 这对于代码的整洁和效率有很大的帮助 借着这个机会整理一下使用boost库的经验 xff0c 顺便再学习一下 首先 xff0c 什么是boost库 b
  • Android上增加对M3U8文件下载的功能

    最近给一个客户提了一个需求 xff0c 想对他们网站的视频做一个下载的功能 xff0c 希望他的App能够缓存视频功能 xff0c 然后用户可以在下次快速播放视频 一开始接到这个需求 xff0c 自然是去搜罗一遍 xff0c 有没有可靠稳定
  • VLC自定义m3u8协议片段加密方式

    hls xff08 m3u8 xff09 本身有一套自己的加密方式 xff0c 可以保证片段是安全的 但是本身在传输的过程中加密key请求容易被截获 xff0c 这样存在一点片段key被截取的风险 xff0c 截取者就可以根据片段和key重
  • Fragment里使用CordovaWebView

    因为CordovaWebView 默认的初始化里判断了Content是不是继承CordovaInterface xff0c 如果直接使用Fragment继承CordovaInterface xff0c CordovaInterface有个抽
  • CMake教程(二)- 添加静态库文件和动态库文件

    CMake教程 xff08 二 xff09 添加静态库文件和动态库文件 什么是库文件静态链接库动态链接库静态库和动态库的区别 如何在CMake中添加库文件CMake 中 target link libraries 的 PRIVATE xff
  • jtextpane的使用方法

    jtextpane是java swing中的一个组件 xff0c 是一个可以编辑和显示html xff0c rtf和普通文本的富文本组件 xff0c jtextpane是根据使用EditorKit来显示内容的 xff0c 目前jtextpa

随机推荐

  • win32sdk学习 richedit实现的一个简单记事本

    记录的源文件 xff0c 篇幅有点长 工具栏资源图片 bmp格式 notepad h文件 NOTEPAD H INCLUDED Copyright C name xff1a notepad author xff1a suju 日期 xff1
  • jquery的date input日期组件使用

    jquery的date input日期选择控件 xff0c 在一些日期表单上使用 xff0c 效果还是比较好的 官方介绍和下载地址 http jonathanleighton com projects date input 使用前需要导入j
  • ProgressBar的简单使用

    ProgressBar滚动体在安卓程序中使用也计较多 ProgressBar的几个常用属性和方法 android max 61 34 200 34 滚动条最大值 android progress 61 34 0 34 滚动条当前值 andr
  • 简单的使用jni调用java方法

    jni中调用java方法分几步 先使用FindClass方法获取指定类class xff0c 在使用GetStaticMethodID方法或者GetMethodID获取静态和非静态的方法id 在使用CallObjectMethod或者Cal
  • 安卓使用http下载文件

    在安卓中 xff0c 可以直接用java的java net URL包访问网络下载数据 不同的是 xff0c 安卓程序需要权限 xff0c 需要在AndroidManifest xml文件中声明权限 lt 网络权限 gt lt uses pe
  • 又要整黑科技了,一个失误引发的故事

    每天三分钟 xff0c 看一篇小文章 xff0c 学一个小技能 故事发生在某个下午 xff0c 小S半瞌睡状态坐在电脑前 xff0c 这个时候 xff0c 弹出一个微信消息 这次发布的活动 xff0c 好像不能在他们的小程序上搜索到 xff
  • c tcp网络编程

    include lt stdio h gt include lt string h gt include lt pthread h gt include lt unistd h gt include lt sys socket h gt i
  • vue自定义响应式进度条组件,包含线形和圆形进度条

    由于项目需要刚接触vue不久 xff0c 发现vue是真的好用 xff0c 性能又好 xff0c 做了一个小的demo 详细记录一下 xff1a 这是个进度条组件 线形进度条和圆形进度条 xff0c 进度成功显示100 并且颜色会成为绿色
  • [C++] 十进制转十六进制

    循环 整除 求余 判断 问题描述 十六进制数是在程序设计时经常要使用到的一种整数的表示方式 它有0 1 2 3 4 5 6 7 8 9 A B C D E F共16个符号 xff0c 分别表示十进制数的0至15 十六进制的计数方法是满16进
  • 基于Simulink的FIR滤波器设计与仿真--初识matlab

    一直对信号分析与处理有着比较浓厚的兴趣 xff0c 只可惜数学水平挺一般 xff0c 难以将兴趣发展为job xff0c 因此就蜻蜓点水了 公司里的几乎人人都会simulink xff0c 而我是十足的门外汉 看别人用得行云流水总是挺眼馋的
  • 头文件定义并初始化变量的问题

    一个经典错误 在a h头文件中定义变量temp并初始化 xff0c 即显式初始化 int temp 61 0 xff1b a c b c文件中都包含了a h头文件 xff0c 则在编译时会出现 xff1a multiple definiti
  • 串口调试小节之二 串口通讯原理

    我们以接收方为例 xff0c 详细讲解串口通讯的简单原理 xff0c 一个串口数据的接收情况基本如下 xff1a 主要分了三层 xff1a 1 硬件层 xff1a 负责将比特位转换成字节型数据 xff0c 并且将数据传输的通讯状态记录下来
  • 串口调试小节之三 Linux串口应用层编程注意

    这里不打算很详细的介绍该如何编写Linux 代码 xff0c 这种代码在百度或者开源项目一找一大堆 xff0c 这里只对常用会出错的地方做一些介绍 xff0c 防止掉入这些陷阱 1 关于波特率设置 xff1a 关于波特率设置的部分看起来简单
  • <ROS> 机器人描述--URDF和XACRO

    1 关于URDF的一些杂谈 URDF Unified Robot Description Format 是一种特殊的xml文件格式 作为机器人的一种描述文件 在ROS里面大量使用 接触ROS比较久的同学 应该会经常见到一种类似命名的包 pa
  • 网络基础知识之报文格式介绍

    1 以太网数据帧头部 DMAC xff1a 目的MAC地址 xff0c 长度6个字节 SMAC xff1a 源MAC地址 xff0c 长度6个字节 TYPE xff1a 类型字段 xff0c 表明上层是哪种协议 xff0c IP协议是0x8
  • C# 摘要认证(digest authentication) IETF RFC 2617

    背景 xff1a 最近在对接一个公安局数据接口相关的这块业务 xff0c 基于HTTP RESTFUL的接口API xff0c 请求时需要做用户认证 厂家只给提供了JAVA的demo 由于业务比较分散需要用C 来进行业务交互 解决过程 首先
  • 字节序(大小端)理解

    一 概念 字节序 xff0c 就是 大于一个字节类型的数据在内存中的存放顺序 是在跨平台和网络编程中 xff0c 时常要考虑的问题 二 分类 字节序经常被分为两类 xff1a 1 Big Endian xff08 大端 xff09 xff1
  • HTTP请求报文

    HTTP请求报文 xff1a HTTP请求报文由3部分组成 xff08 请求行 43 请求头 43 请求体 xff09 请求行 xff1a 是请求方法 xff0c GET和POST是最常见的HTTP方法 xff0c 除此以外还包括DELET
  • Python requests HTTP验证登录(解决401错误)

    1 场景 1 xff09 用户输入完网址后 xff0c 浏览器直接弹出需要输入用户名 密码 PS xff1a 此时输入用户名密码即可登录 xff0c 或者直接带着用户名密码访问网站 假设url为 http xxx yyy zzz 用户名为a
  • CANopen学习笔记

    CANopen学习笔记 1 TPDO和RPDO都是针对从站来说的 xff0c 协议上没有有讲任何一个关于主站的概念 xff0c 协议就只是定义从站 xff0c 没有定义主站任何东西 TPDO xff1a 从站 lt 主站 RPDO xff1