CANopen——笔记

1. c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);

http://zhidao.baidu.com/link?url=_lDBGq_ukEjYngcgn4yVGnJum_wrrxfyUUTWRvFZ7WyXPm9Urm6shNAShHNByuYzCQT8C6Sq9hjHbgKoEqoSEK

2. 弄清楚为什么要用TIM_IT_CC1,而不是用TIM_IT_UPDATE?

http://www.dndev.com/cgi-bin/forum/topic.cgi?forum=2&topic=2263
这个是Canfestival移植到STM32平台上的例程,TIM5是利用了STM32的Timer5来实现定时中断的功能,相当于提供一个时钟节拍,

在中断服务程序中调用Canfestival协议栈的TimeDispatch()函数实现一些定时任务,STM32有很多定时器,这里只是用到Timer5而已。

其他的单片机也有自己的定时器,在定时中断或定时线程(针对多线程)中调用TimeDispatch()就可以了。

TimeDispatch()和CanDispatch()是Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

Ret = writeNetworkDictCallBackAI(d, /* CO_Data* d*/
nodeId, /* UNS8 nodeId*/
0x1010, /* UNS16 index*/
1, /* UNS8 subindex*/
4, /* UNS8 count*/
0, /* UNS8 dataType*/
(void *)&data,/* void *data*/
CheckSDOAndContinue,/* Callback*/
0, /* no endianize*/
0); /* no block mode */

check_and_start_node
start_node
masterSendNMTstateChange
canSend
writeNetworkDictCallBackAI
CheckSDOAndContinue
start_and_seek_node
start_node
masterSendNMTstateChange
canSend
setState
check_and_start_node
init_consise_dcf
read_consise_dcf_next_entry
readNetworkDictCallbackAI
CheckSDOAndContinue
SaveNode

write_consise_dcf_next_entry
writeNetworkDictCallBackAI
CheckSDOAndContinue
_writeNetworkDict
GetSDOClientFromNodeId

read_consise_dcf_next_entry
get_next_DCF_data
readNetworkDictCallbackAI
CheckSDOAndContinue

emergencyInit
RegisterSetODentryCallBack
scanIndexOD

switchCommunicationState
StartOrStop

sendEMCY
canSend

EMCY_setError
sendEMCY

EMCY_errorRecovered
sendEMCY

proceedEMCY

OnHeartbeatProducerUpdate
heartbeatStop
heartbeatInit
RegisterSetODentryCallBack
scanIndexOD

proceedNODE_GUARD
canSend

heartbeatInit

masterSendNMTstateChange
canSend

masterSendNMTnodeguard
canSend

masterRequestNodeState
masterSendNMTnodeguard
canSend

canDispatch
proceedNMTstateChange
setState
getNodeId

slaveSendBootUp //Transmit the boot-Up frame when the slave is moving from initialization state to pre_operational state.
canSend

NMT报文数据由2个字节组成,第0个字节是cs;第1个字节是节点ID;
cs可取值如下:
NMT_Start_Node
NMT_Stop_Node
NMT_Enter_PreOperational
NMT_Reset_Node
NMT_Reset_Comunication
节点ID取值0~127之一;
节点保护的ID是0x700;
m.cob_id = 0x0000; /*(NMT) << 7*/
m.rtr = NOT_A_REQUEST;
m.len = 2;
m.data[0] = cs;
m.data[1] = Node_ID;

TimeDispatch()和CanDispatch()函数。其中,Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。
这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

时间: 2024-10-20 10:10:18

CANopen——笔记的相关文章

CANopen笔记2

PDO 过程数据对象用于在节点之间传送过程数据,如I/O模块I/O状态读取和设定,模拟量采集和模拟量输出等等,协议考虑从机硬件限制最多支持4组PDO,每组包含一个RPDO和一个TPDO.The Gold drive supports 4 TPDO and 4 RPDO. Each PDO contains up to 8 bytes of data. 现在以I/O模块为例进行说明:设I/O模块有24路输入,24路输出.24输入通过TPDO传给监控终端或其他节点,24输出通过RPDO由控制节点对其

(笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32

转自http://bbs.21ic.com/icview-878522-1-1.html 前段时间学习了CanOpen协议,到网上下载的CanFestival3-10源码,移植到VC.QT.STM32等平台,由于网上的资源较少,走了不少弯路,移植好使用过程中才逐渐暴露出各种问题,比如OD字符串传输.心跳时间不准确等等,现在已经解决了遇到的所有问题,移植出来的工程能够完好支持CanOpen协议,花了点时间,整理出一个简单易用的移植方法说明,也写了一些比较实用的调试工具,本来还想整理SDO.PDO.

【转】(笔记)CanOpen协议【CanFestival】移植方法

一.背景 CAN组网就必须得要应用层协议,原因就在于 * 便于网络管理与控制 * 确认数据的收发 * 发送大于8个字节的数据块(CAN每帧数据传输大小为8字节) * 为不同节点分配不同的报文标识符 * 定义帧报文的内容及含义(这在我看来是最主要的原因) * 网络的监控,节点故障的诊断与标识 CAN上层协议有许多,用大家都公认的,便于产品的兼容,因此,CANOpen成为备选项. CANOpen有个开源协议栈[CANFestival],同时有一位大神已经做了移植并记录,在此就厚着脸皮转载过来以做备份

CANopen学习笔记

RTR-远程传输请求位 RTR=0 数据帧 RTR=1 远程帧 IDE-标识符扩展位 IDE=0:11bits 标准CAN IDE=1:29bits 扩展CAN SDO用来读写其他CANopen设备的对象字典 PDO用来快速传输实时数据 CANopen协议中定义了三种不同的通信关系:主机-从机模型(master-slave),仅用于网络管理(NMT),主机-从机模型不仅可以由确认的服务(握手)来实现,也可以由未确认的服务(广播)来实现. 客户端-服务器模型(client-server),描述的是

基于CANopen DSP402的运动控制笔记

常用的mode of operation 有以下几种: 控制字 control word: 6--------------7---------------15--------------------7 通信前的准备                    电机使能                电机去使能 Tips: 1 通信准备工作 control word=6; 2 在进行控制前,先设置操作模式 mode of operation 在使能电机; 3 模式切换,先去使能control word

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

51CTO持续更新《通哥的运维笔记》

<通哥的运维笔记>将持续在51CTO网站更新,希望大家多多关注.互相学习,后期,我将会退出<通哥的运维笔记>系列视频教程,希望带给大家最大的收获,帮助大家更好的学习.进步.<通哥的运维笔记>主要从linux系统管理.虚拟化.cloudstack云平台以及网络管理之CCNA.CCNP.CCIE,等等方面深入讲解.

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中