CANOpen学习笔记(二)

4 篇文章 0 订阅
2 篇文章 0 订阅

官方资源

CanFestival 使用手册3.0
CanFestival官网

第一步:下载资源

进入官网下载源码
下载future
下载python
下载wxpython
下载future
下载mavlink代码生成工具包
推荐–>教程配套资源汇总

第一步:安装

注意所有安装包的安装都选择32位的

python:

下载好之后,打开管理员CMD(注意管理员CMD和CMD的区别),进入安装包路径,输入python-2.7.15.msi
一直next直到看到一个add python×,选择 entire feature

Future:

下载好之后,打开CMD进入安装包路劲,输入python setup.py install,回车

wxPython:

下载好之后直接双击

第二步:配置

进入Mongo-canfestival-3-asc-1a25f5151a8d\objdictgen,在此处打开git bash,输入 python objdictedit.py会出来一窗口如下图在这里插入图片描述
点击文件->新建会出现下图
在这里插入图片描述
可以选择主从节点类型,网络管理方式灯选项,选好之后确认会出现下图

在这里插入图片描述
点击想对应的对象字典既可配置,可对照手册来进行添加删除修改。配置好后点击文件->保存,保存工程文件。
再点击文件->建立词典,选项保存路径。就会保存生成的C文件和头文件
也可导出EDS文件。

第三步:移植源码

  • 移植所需文件
  1. 源码/include/cm4里的所有文件
  2. 源码/include/下的所有头文件,子文件夹里的不算
  3. 源码/src下除了symbols.c 之外的所有c文件
  4. 对象字典编辑器生成的c文件和头文件
  5. 源码/examples/AVR/Slave里的config.h文件
  6. 自行建立canopen_app,canopen_drvt源文件和头文件
  7. 自行建立timer,can相关的底层源文件与头文件
  • 文件的修改
  1. 删去dcf.c中start_node函数和start_and_seek_node函数前面的inline关键字
  2. 在canfestival.h文件中添加防止递归包含的宏#ifndef CANFESTIVAL_H
  3. 将config.h文件中#ifdef IAR_SYSTEMS_ICC …#else后包含的6个头文件全部删去
  4. 在config.h文件中添加宏定义#define SDO_BLOCK_SIZE 16
  5. 在config.h文件中将 REPEAT_SDO_MAX_SIMULTANEOUS_TRANSFERTS_TIMES改为 REPEAT_SDO_MAX_SIMULTANEOUS_TRANSFERS_TIMES
    以下为config.h示例:
    在这里插入图片描述
  • 工程所需文件
    dcf.c
    emcy.c
    lifegrd.c
    lss.c
    timer.c
    nmtMaster.c
    nmtSlave.c
    objacces.c
    pdo.c
    sdo.c
    states.c
    sync.c
    对象字典文件

  • 自定义代码部分
    1.can初始化函数
    2.timer初始化函数
    3.canSend函数,因为canSend函数在源码中有调用所有必须按照这个格式定义
    unsigned char canSend(CAN_PORT CANx, Message *m)
    4.setTimer函数,按照void setTimer(TIMEVAL value);格式定义
    5.getElapsedTime函数,按照TIMEVAL getElapsedTime(void);格式定义
    6.定时中断函数
    4~6中函数以及很多相关函数的定义可以参考源码/drivers/cm4.c 如果是stm32F1就选cm3
    7.之前对象字典生成的c文件会定义一个结构体变量ObjDict_Data,在文件最后一行,找到这个结构体的定义可以看到一些关于canopen节点所有比要数据的定义,其中的canHandle需要在初始化时配置,既:
    ObjDict_Data.canHandle = CAN1;或者can2
    8.ObjDict_Data中还有一个本机地址需要设置,如下
    //设置本机ID为0x01
    setNodeId (&ObjDict_Data, 0x01);
    9.在canopen中节点有很多种状态,在我们使用之前can初始化后需要对节点的状态设置,如下:
    setState(&ObjDict_Data,Initialisation);//设置为初始化状态
    setState(&ObjDict_Data,Operational);//设置为操作状态


相关接口

  • SDO常用接口

writeNetworkDict函数
写入节点数据,发生错误返回0xff

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
nodeIdUNS8节点ID
indexUNS16索引
subIndexUNS8子索引
countUNS32写入的字节数
dataTypeUNS8写入的数据类型
datavoid *写入的数据地址
useBlockModeUNS8是否使用块写入

readNetworkDict函数
发送一个读对象字典数据的请求帧,发生错误返回0xff

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
nodeIdUNS8节点ID
indexUNS16索引
subIndexUNS8子索引
dataTypeUNS8写入的数据类型
useBlockModeUNS8是否使用块写入,一般不用

getWriteResultNetworkDict函数
获取写对象字典的结果,返回数据传输状况

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
nodeIdUNS8节点ID
abortCodeUNS32 *中止代码的指针,可函数内定义一个局部变量然后将地址传给他

***返回类型:***

SDO_RESETSDO_FINISHEDSDO_ABORTED_RCVSDO_ABORTED_INTERNALSDO_DOWNLOAD_IN_PROGRESSSDO_UPLOAD_IN_PROGRESSSDO_BLOCK_DOWNLOAD_IN_PROGRESSSDO_BLOCK_UPLOAD_IN_PROGRESS
传输未开始传输完成数据接受中止数据传输内部中止数据下载中数据上传中数据块下载中数据块上传中

getReadResultNetworkDict函数
和getWriteResultNetworkDict类似

closeSDOtransfer函数
关闭传输,

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
CliServNbrUNS8客户端或服务器的nodeID
whoamiUNS8服务器或客户端
  • PDO常用接口

sendPdo函数
//存储最后一个发送的PDO信息
d->PDO_status[pdoNum].last_message = *pdo;
//通过can接口发送PDO报文
canSend (d->canHandle, pdo);

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
pdoNumUNS32PDO编号
pdoMessage *要传输的PDO

CopyBits函数

参数类型注释
NbBitsCO_Data*对象字典c文件定义的ObjDict_Data变量
SrcByteIndexUNS8PDO编号
SrcBitIndexUNS8*要传输的PDO
SrcBigEndianUNS8要传输的PDO
DestByteIndexUNS8要传输的PDO
DestBitIndexUNS8要传输的PDO
DestBigEndianUNS8要传输的PDO

proceedPDO函数

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
mMessage *can报文数据结构体

buildPDO函数

参数类型注释
dCO_Data*对象字典c文件定义的ObjDict_Data变量
mMessage *can报文数据结构体

未完待续

骗阅览量链接:

快速学习can总线(一)

快速学习can总线(二)

CANOpen学习笔记(一)

CANOpen学习笔记(二)

CANOpen源码剖析

  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值