0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CANOpen系列教程13_协议源码移植 (一)

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 15:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1写在前面

基于Canfestival框架的CANOpen协议栈移植教程网上流传着许多,而且有一份不知道被复制、粘贴了多少遍的“CANOpen移植教程”相信许多朋友都知道。

同时,百度、谷歌还能搜出许多所谓“移植代码”。其实,这许多内容,对初学者并没有多大帮助。相反,我觉得还有误导的作用。

基于Canfestival框架的CANOpen协议栈移植需要做的工作并不多,但许多初学者无从下手,究其原因还是有许多内容没有理解到位。

本教程站在初学者角度,尽量将重要内容讲述到位,后面提供移植好的Demo供大家参考学习。

2

移植准备

移植前,先让大家认识一下移植的一些准备条件。

2.1 硬件

两块带有MCU、CAN控制器收发器的板卡。

该移植教程以STM32F1(自带CAN控制器),带有CAN收发器的开发板为例来讲述。

条件允许的情况下,可以购买一个CAN总线分析仪。没有分析仪的朋友,可以用我《CANOpen系列教程06》提供的一个例程来抓取CAN总线数据。

因例程在中断里用串口打印传输数据。所以,用例程抓取的CAN总线传输速率不能太快(建议低于20帧/秒)。

2.2 MCU资源

1.CAN:CAN总线通信(必备);

2.TIM:CANOpen协议调度(必备);

3.UART:调试信息(选配);

4.GPIO:板卡状态指示灯(选配);

2.3 STM32标准外设库+FreeRTOS工程

本教程基于STM32标准外设库和FreeRTOS系统搭建的工程为例(很早之前我分享过),这里不讲述。

运行RTOS主要是牵涉到CAN总线数据的发送和接收需要两个线程来处理,以及增加一个CANOpen应用程序线程。

基于其他MCU以及RTOS原理类似,也可参考本文。

2.4 下载Canfestival源码并搭建好环境

这里的内容,如果你不明白,请务必先阅读该教程前几篇相关文章。

3

生成对象字典

本移植教程重点是将CANOpen协议源码移植到MCU中,使其成功运行。因此,对象字典只配置最基础的“心跳”。

下面教大家在对象字典编辑器中生成带“心跳”的对象字典。

1.打开编辑器,文件 -> 新建

2.新建“主站”节点

3.配置心跳信息

4.保存对象字典:文件 -> 保存 -> 保存在一个指定位置

5.建立对象字典

到这里就生成了三个文件:TestMaster.od、 TestMaster.c 和 TestMaster.h需保存好,在后面需要使用这个对象字典源码。

提示:

A.上面牵涉到三个地方保存名字:节点名字、对象字典工程名字、对象字典源文件名字,建议都一样。

B.主站和从站的生成原理一样,上面是生成主站TestMaster对象字典,从站TestSlave对象字典请按照同样方式生成即可。

4

提取CANOpen源码

本节内容主要针对初学者使其更加理解移植的代码工程,将CanFestival中源代码提取做一定说明,并且尽量将源码文件对应到自己工程下。

当然,本文按照常规方式提取,你也可以按照自己方式提取。同时,整个工程下其它,如STM32标准外设库、FreeRTOS这些文件在这里不作说明。

1.提取头、源文件(如下图)

CANOpeninc目录下19个.h头文件,来自Canfestival->include下目录19个头文件;

CANOpenincstm32目录下3个.h头文件来自Canfestival->includecm4;

其中canfestival.h文件是函数接口定义(声明),函数内容需要自己实现(位于:Appcanopen目录下canopen_drv.c);

CANOpensrc目录下12个.c源文件,来自Canfestival->src目录下的12个源文件;

其中需要删除dcf.c文件下第59、98行前面的“inline”关键字;

2.头文件说明

要修改一下其中的canfestival.h文件:

3.建立canopen文件夹并提取文件

在工程下建立canopen文件夹,提取相应的文件,同时建立自己的文件:canopen_app和canopen_drv.

还需要修改一下congfig.h文件,如下图:

4.建立CAN和TIM底层驱动文件

在上面canfestival.h文件提供了CAN和TIM的驱动接口,但我们这里不用它那一套接口,自己定义在bsp_can和bsp_timer源代码下。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    61

    文章

    3115

    浏览量

    474091
  • 协议
    +关注

    关注

    2

    文章

    620

    浏览量

    41324
  • 源码
    +关注

    关注

    8

    文章

    689

    浏览量

    31597
  • CANopen
    +关注

    关注

    8

    文章

    530

    浏览量

    50039
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工业通信设备上面 CANopen 和 Modbus tcp 协议不匹配如何解决?

    解决工业通信设备协议不匹配的问题,我们可以使用三格电子 Modbus tcp 转 CANopen 网关作为协议转换的桥梁。   1. 理解问题本质 MODBUS TCP :基于以太网,常用于 PLC
    的头像 发表于 06-02 10:08 115次阅读

    工业通信中,协议不匹配是常见问题,今天讲 Profinet 和 CANopen 或 CAN 进行通讯。

    工业通信中,协议不匹配是常见问题,尤其是当不同厂商的设备采用不同的通信协议(如 Profinet 与 CANopen 或 CAN 自由口)时。以下是针对协议不匹配问题的系统化解决  方
    的头像 发表于 05-26 14:18 116次阅读

    跨越协议壁垒CCLinkIE与CANopen网关在风电步科伺服控制中的实战

    跨越协议壁垒:CC-Link IE与CANopen网关在风电步科伺服控制中的实战 某海上风电场变桨系统升级时,遇到了棘手问题:主控采用三菱L系列PLC,只支持CC-Link IE协议
    的头像 发表于 04-27 15:27 269次阅读
    跨越<b class='flag-5'>协议</b>壁垒CCLinkIE与<b class='flag-5'>CANopen</b>网关在风电步科伺服控制中的实战

    破解协议壁垒,驱动精密注塑—Ethernet/IP转CANopen伺服的黄金纽带

    采用CANopen协议时,疆鸿智能JH-EIP-COP网关化身“通信枢纽”,让异构协议设备实现毫秒级协同,驱动精密制造。 伺服(以IS620PT系列为例)技术参数: 定位精度:≤±0.
    的头像 发表于 04-09 15:43 265次阅读
    破解<b class='flag-5'>协议</b>壁垒,驱动精密注塑—Ethernet/IP转<b class='flag-5'>CANopen</b>伺服的黄金纽带

    CANopen协议核心秘籍:NMT、SDO、PDO、心跳报文网打尽

    工程师必备:从状态切换、参数配置到实时数据传输,篇搞定CANopen通信难题CANopen协议在工业自动化中无处不在,但复杂的对象字典、多样的报文类型常让开发者头疼。本文将NMT网络
    的头像 发表于 03-05 19:34 763次阅读
    <b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>核心秘籍:NMT、SDO、PDO、心跳报文<b class='flag-5'>一</b>网打尽

    协议破壁者:疆鸿智能PROFINET转CANopen网关赋能“白库存”柔性嬗变

     协议破壁者:疆鸿智能PROFINET转CANopen网关赋能“白库存”柔性嬗变 在工业自动化的交响乐章中,不同的设备往往使用着各自的语言协议。我们近期部署的套高度柔性“白库存”后道
    的头像 发表于 02-03 15:20 285次阅读
    <b class='flag-5'>协议</b>破壁者:疆鸿智能PROFINET转<b class='flag-5'>CANopen</b>网关赋能“白库存”柔性嬗变

    协议转换“黑科技”:耐达讯自动化CANopen转Profibus 网关破解电机控制通信难题

    协议解析:CANopen 与 Profibus 的核心特性 CANopen:基于 CAN 总线,采用分布式控制架构,适用于中小型设备网络。其开放式对象字典(OD)支持灵活配置
    的头像 发表于 01-12 14:05 649次阅读
    <b class='flag-5'>协议</b>转换“黑科技”:耐达讯自动化<b class='flag-5'>CANopen</b>转Profibus 网关破解电机控制通信难题

    ProfiNet转CANopen协议转换网关实现西门子1200 PLC与多个CANopen水下仪表通讯的配置案例

    CANopen 协议,且数量超过 9 台。传统方案是在 PLC 机架内加装 CM CANopen 模块,但受限于海底长距离总线拓扑与防爆分区,旦超过 8 个节点即出现报文碰撞、丢包
    的头像 发表于 11-14 10:32 941次阅读
    ProfiNet转<b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>转换网关实现西门子1200 PLC与多个<b class='flag-5'>CANopen</b>水下仪表通讯的配置案例

    协议桥接新范式:稳联技术打通EtherCAT与CANopen,赋能施耐德变频器

    协议桥接新范式:稳联技术打通EtherCAT与CANopen,赋能施耐德变频器 本方案实现欧姆龙控制器(EtherCAT主站)通过EtherCAT-CANopen协议转换网关控制施耐德
    的头像 发表于 11-07 15:20 1622次阅读
    <b class='flag-5'>协议</b>桥接新范式:稳联技术打通EtherCAT与<b class='flag-5'>CANopen</b>,赋能施耐德变频器

    CANopen转Profinet是种构建于控制局域网设备之上的协议网关

    CANopen作为构建于控制局域网(Controller Area Network, CAN)之上的高层通信协议,其体系架构包含通信子协议与设备子协议。此
    的头像 发表于 11-05 14:05 648次阅读
    <b class='flag-5'>CANopen</b>转Profinet是<b class='flag-5'>一</b>种构建于控制局域网设备之上的<b class='flag-5'>协议</b>网关

    CANopen转Profient网关协议介绍

    CANopen介绍: CANopen种基于控制器局域网(CAN)的高层工业通信协议,由国际用户和制造商协会CiA于1995年发布,基础规范为CiA 301标准。该
    的头像 发表于 09-25 17:31 1018次阅读
    <b class='flag-5'>CANopen</b>转Profient网关<b class='flag-5'>协议</b>介绍

    移植CANfestival,发现can无法接收数据,为什么?

    最近在研究Canopen协议,在f407的板子上移植了canfestival协议移植成功后遇到
    发表于 09-11 07:46

    通信协议高材生,PROFINET to CANopen网关连接西门子PLC与汇川变频器

    S7-1500系列PLC支持PROFINET协议协议上不致无法直接通讯实现数据交互。需要通过第三方的协议转换模
    的头像 发表于 08-12 10:49 1384次阅读
    通信<b class='flag-5'>协议</b>高材生,PROFINET to <b class='flag-5'>CANopen</b>网关连接西门子PLC与汇川变频器

    承担CANOPEN转PROFINET协议转换功能的网关与台达伺服器的连接

    ,则必须进行通讯协议转换。PROFINET转CANOPEN系列网关为此提供了种高效可行的解决方案。 首先,自西门子组态处开展GSD文件的安装工作。具体操作如下:选定GSD文件所在的文
    的头像 发表于 07-24 18:01 764次阅读
    承担<b class='flag-5'>CANOPEN</b>转PROFINET<b class='flag-5'>协议</b>转换功能的网关与台达伺服器的连接

    CANopen转EtherCAT协议转换案例解析

    在工业自动化领域,运动控制器与传感器之间的协议兼容性是系统集成中的关键挑战。某智能装备制造企业采用EtherCAT协议的运动控制器作为主站,需驱动基于CANopen协议的分布式传感器网
    的头像 发表于 06-17 19:22 705次阅读
    <b class='flag-5'>CANopen</b>转EtherCAT<b class='flag-5'>协议</b>转换案例解析