文档章节

CanOpen学习笔记5-- CanFestival使用提示

b
 bo_zhang
发布于 2017/08/01 21:43
字数 1319
阅读 81
收藏 0
点赞 0
评论 0

1,PDO Parameter Callbacks设置调用:PDO初始化程序中,会设置其三个参数Transmission type、Inhibit time、Event timer对应的回调函数,当这三个值改变时会发送一个PDO帧(帧内容与上一次一致则不发送)。

2,PDO Mapping Callbacks设置调用:

1)此处的回调函数在其对应的参数变量发生改变时调用:在收到处理合法的PDO帧时,在setODentry()(即_setODnetry())函数中,将对应的参数变量赋值后,调用相应变量的回调函数。

2)本地调用writeLocalDict()(即_setODentry())设置变量值后会调用其回调函数

3,SDO_BLOCK_SIZE is the number of segment per block. The value must be between 1 and 127.

4,readNetworkDict and getReadResultNetworkDict are to be used exactly the same way for block or segmented transfer. You just put the last argument to 1 in readNetworkDict when you want to use block mode.

5,尽量不要是使用SDO Block传输数据,因为可能会由于USB2CAN设备等原因,使得原本按顺序发送的数据,传输到PC端却顺序发生变化,传输失败(CanFestival不能重新排序)。

6,The node life time is given by the guard time multiplied by the life time factor.

7,The synchronous mechanism is intended for transferring commanded values and actual values on a fixed timely base.

8,在setNodeId函数中,会将对象字典中的与COB_ID相关的参数利用给定的NodeIDea值进行初始化。包括SDO Server(仅有一个),PDO Receive(仅初始化0x1400~0x1403四个索引),PDO Transmit(仅初始化0x1800~0x1803四个索引),以及EMCY COB_ID。

9,只能是SDO Client向SDO Server发出请求进行读或者写操作,同时发出请求的一方(即Client)需要将自己的Client SDO Parameter中的COB ID值设置成与Server端的Server SDO Parameter值一致才行(注:初始化过程中调用setNodeId会改变其参数值)。

10,对于s_state_communication newCommunicationState = {0, 1, 1, 1, 1, 0, 1}其相应的状态次序为csBoot_Up,csSDO,csEmergency,csSYNC,csLifeGuard,csPDO,csLSS,对应值为1而若当前状态为0的,再调用switchCommunicationState(d, &newCommunicationState)会初始化相应的部分功能(FuncStart)。若对应值为0而当前状态为1的则会停止该功能(FuncStop)。

11,为了更好更高效使用SDO传输,对SDO部分做出修改如下: SDO传输线回调函数参数修改。将typedef void (*SDOCallback_t)(CO_Data* d, UNS8 nodeId)修改为typedef void (*SDOCallback_t)(CO_Data* d, UNS8 nodeId, UNS8 line),同时修改此回调函数调用时的实参。这样在需要传输线相关状态参数时就不需要查找传输线号,直接使用,因为此传输线必定存在,否则不会调用此回调函数。

最后提供部分CanFestival中变量命名含义,仅供参考:

SDO所包含的各个部分
1 、Initiate SDO Download Request         初始化SDO 下载请求报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Object Index        对象索引值 
(3 )、Object  Sub -index       对象子索引值 
(4 )、Transfer Type        指示传输类型为快速传输还是一般的分段传输 
(5 )、Size Indicator         指示报文是否标识了传输量 
(6 )、Bytes Not Data        数据域中无效的字节数,只有快速传输才有效
(7 )、Bytes Downloaded      下载的数据字节数,只有分段传输才有效 
(8 )、SDO Data          SDO 数据域,只有快速传输才有效 
2 、Initiate SDO Download Re sponse     初始化SDO 下载响应报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Object Index        对象索引值 
(3 )、Object  Sub -index       对象子索引值 
3 、Download SDO Segment Request      SDO 分段下载请求报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Toggle Bit          触发位 
(3 )、Whether More Segments     标识是否最后一个分段 
(4 )、Bytes Not Data        数据域中无效的字节数 
(5 )、SDO Data          SDO 数据域 
4 、Download SDO Segment Response    SDO 分段下载响应报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Toggle Bit          触发位 
5 、Initiate SDO Upload   Request      初始化SDO 上传请求报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Object Index        对象索引值 
(3 )、Object  Sub -index       对象子索引值 
6 、Initiate   SDO Upload   Response     初始化SDO 上传响应报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Object Index        对象索引值 
(3 )、Object  Sub -index       对象子索引值 
(4 )、Transfer Type        指示传输类型为快速传输还是一般的分段传输 
(5 )、Size Indicator         指示报文是否标识了传输量 
(6 )、Bytes Not Data        数据域中无效的字节数,只有快速传输才有效
(7 )、Bytes Downloaded       上传的数据字节数,只有分段传输才有效 
(8 )、SDO Data          SDO 数据域,只有快速传输才有效 
7 、Upload  SDO Segment Request      SDO 分段上传请求报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Toggle Bit          触发位 
8 、Upload   SDO Segment  Response     SDO 分段上传响应报文 
(1 )、Node  ID          从节点的ID标识 
(2 )、Toggle Bit          触发位 
(3 )、Whether More Segments     标识是否最后一个分段 
(4 )、Bytes Not Data        数据域中无效的字节数 
(5 )、SDO Data          SDO 数据域 
9 、Abort SDO Transfer      SDO 传输中止报文 
(1 )、SDO Object         SDO 通讯对象(是Serv er 还是Client)  
(2 )、Node  ID          从节点的ID标识 
(3 )、Object Index        对象索引值 
(4 )、Object  Sub -index       对象子索引值 
(5 )、Abort Code         中止代码,表示传输中止的原因

© 著作权归作者所有

共有 人打赏支持
b
粉丝 0
博文 7
码字总数 6636
作品 0
苏州
Easy Code (笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32

转载自:http://www.cnblogs.com/tdyizhen1314/p/4348725.html 前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC、QT、STM32等平台,由于网上的资源较少,走了不少弯路...

weixin_28900531 ⋅ 04/11 ⋅ 0

CANopen协议介绍

1.CANopen协议简介 从OSI 网络模型的角度来看,CAN总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层),而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关...

炉yu ⋅ 2017/06/14 ⋅ 0

RT-Thread 软件包介绍

1、软件包的目的 软件包在高级语言中非常常见,很多高级语言都有对应的软件包平台,比如 Python 的 PyPi,Ruby 的 Gems 等等。软件包生态对于一门语言的选择至关重要,因为这些软件包具有很强...

RTThread物联网操作系统 ⋅ 05/17 ⋅ 0

Django 实战1:搭建属于自己社工查询系统(下)

上篇文章已经完成框架搭建,本文接着上篇的内容继续讲解。本片主要的说三点内容,分别是:根据条件查询数据、根据查询结果显示不同内容、将查询数据填充到页面上。 1 逻辑优化 在上篇文章,我...

猴哥Yuri ⋅ 04/15 ⋅ 0

Rails学习小结

学习rails也有一个多月了吧,断断续续地把《Agile web Development with Rails》看完了,看得不是很仔细,有些章节的内容看不懂,也就看得越发的粗糙了。在这个过程里中,简单的写了一些学习...

StevenMeng ⋅ 2013/02/14 ⋅ 0

十分钟读懂python的“数据库”语言

JOIN可以用或执行。默认情况下, 将在其索引中加入DataFrame。每个方法都有参数,允许您指定要执行的联接类型(LEFT,RIGHT,INNER,FULL)或要联接的列(列名称或索引)。 假设我们有两个与...

frbevrqbn4l ⋅ 2017/11/09 ⋅ 0

Django 实战1:搭建属于自己社工查询系统(上)

前面的文章已经把模板、模型、视图、表单等知识点逐一讲解,大家已经熟悉它们具体用法。但如何将其串联起来还一筹莫展。本篇文章分享我之前做过的一个小项目,帮助大家抹开这一层迷雾。 1 想...

猴哥Yuri ⋅ 04/09 ⋅ 0

读《PHP和MySQL Web开发》

【第一部分】PHP基础与入门 1、PHP学习笔记1:基础知识快速浏览 http://my.oschina.net/bluefly/blog/472673 2、PHP学习笔记2:文件 http://my.oschina.net/bluefly/blog/477601 3、PHP学习笔...

slyso ⋅ 2015/07/14 ⋅ 0

ActiveMQ 学习笔记系列

ActiveMQ学习笔记(1)——JMS的概念 ActiveMQ学习笔记(2)——JMS消息模型 ActiveMQ学习笔记(3)——ActiveMQ的安装 ActiveMQ学习笔记(4)——通过ActiveMQ收发消息 ActiveMQ学习笔记(5)——使用...

foxeye ⋅ 2016/03/07 ⋅ 0

如何在MyBatis-3.2.7中使用Log4j2 rc2——MyBatis学习笔记之十九

前天我上传了我的MyBatis系列课程(http://edu.51cto.com/course/course_id-1110.html)的第六讲,主要内容是如何使用Log4j2(具体版本为v2.0-rc1)为MyBatis 3.2.7配置日志。实际上目前最新...

NashMaster2011 ⋅ 2014/07/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 36分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 37分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 48分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 50分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 51分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 51分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 55分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部