基于STM32的CANopen快速SDO通信

  • 前言
  • 1 快速sdo介绍
  • 2 工程配置
    • 2.1 主站词典配置
    • 2.2节点词典配置
  • 3 快速SDO调用代码
  • 4 末尾

本专题相关教程:

基于STM32F4的CANOpen移植教程

基于STM32F4的CANopen快速SDO通信

linux下CANopen for python的使用

基于Linux C的CANopen移植

CANopen补充–时间计算出错

CANopen补充–主站检测节点是否在线

前言

这篇教程是上一篇博客的后续 基于STM32F4的CANOpen移植教程(超级详细)
本文配套资料下载地址:https://pan.baidu.com/s/1FMp7xuJ1r3gJTPB0wf3Yrw?pwd=osxs
提取码:osxs

1 快速sdo介绍

首先,我们要了解快速SDO的过程。普通SDO比较麻烦,也不常用,这里不做介绍。只要一次传输32位(4字节)以下,都用快速SDO即可。

就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。

我们这里要用主机访问节点服务器2000位置的数据(上传)。假设这个数据是short int类型(2字节16位),内容为0x0003。

因此发送指令为: 40 00 20 00 00 00 00 00 。返回的信息不出意外应该是:4B 00 20 00 03 00 00 00 (读响应2字节,因为我们的变量test就是16位的,03是读取内容)。

发送帧(client->server,主机->节点) 内容
40 读取指令
00 20 读取0x2000位置的数据
00 子索引,这里无
00 00 00 00 未用,补零
接收帧(server->client,节点->主机) 内容
4B 读响应两个字节
00 20 表明该数据位置为0x2000
00 子索引,这里无
03 00 00 00 高位在后,即0x000003=3

2 工程配置

主站配置:一个SDO client (终端) 节点配置: 一个SDO server (服务器)。 这里,我们假设主站的id=0x00,节点ID=0x02

我们先将上个教程移植成功的工程复制一份作为节点的工程。

2.1 主站词典配置

为了方便观察,我们把心跳关了(心跳间隔设置为0);

添加一个client

设置client->server 和server->client 的cob id。规则如下

client->server的cob id server->client 的cob id
0x600+目标id 0x580+目标id

假设需要对接的服务器id为0x02,则

client->server 的cob id:0x600+0x02,

server->client 的cob id :0x580+0x02。

主站的词典配置就成功了。点击保存,与建立词典即可。

2.2节点词典配置

为节点新建一个词典,起名Slaver。

添加SDO服务器。如果已经有了就把多的删掉,保留一个即可。


cob id 不需要设置。它的规则如下:

接收cob id 反馈cob id
0x600+自身id 0x580+自身id

假设节点id为0x02,则如下:

接收cob id 反馈cob id
0x602 0x582

除此之外,我们需要给节点添加一个变量,方便接下来主机访问。

我们个人变量所在区域在0x2000-0x5FFF区间。我们在0x2000位置,建立一个变量test=3。


我们设置他为有符号短整形(16位)。内容为3。

保存与建立词典到节点工程/CANopen/dictionary。并把用不上的Master词典删了

打开节点工程。把Slaver.c加入CANopen_Driver

去到main.h, 把之前对Master.h的引用改成Slaver.h

去到main.c ,修改节点id为0x02,并把Master_Data 改成Slaver_Data

到这一步,节点工程就配置好啦。

3 快速SDO调用代码

​ 我们打开主站工程,需要添加访问字节SDO的代码。

​ 发送代码为

unsigned char get_test_datasend[8]={0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00};
sendSDO(&Master_Data,SDO_CLIENT,0,get_test_datasend);

我们在main.c里添加

每一秒发送一个SDO命令,用于获取0x2000地址的变量内容。

我们在CAN1.c中断里添加数据获取程序。

canDispatch为CANopen的接收处理函数,我们在它之前截取属于我们的信息。

然后我们就可以在上位机和串口调试助手观察效果啦。

我们先看时间,发送到接收的间隔快接近100ms了,这是因为开了串口调试。正常使用之后,记得把调试宏定义注释掉。

针对前三帧做一个说明:

串口效果如下:


效果与预期一样。GOOD!

4 末尾

​ 到这里移植教程就结束了,为了移植CANopen,我花了两周时间,踩了很多的坑。因此出这个教程,希望后来者能少走点弯路。爱你们
下一篇:Linux下CANopen for python的使用

基于STM32F4的CANopen快速SDO通信(超级详细)相关推荐

  1. 基于STM32F4的CANOpen移植教程(超级详细)

    CANopen移植到STM32F4平台 前言 1 物品准备 2 相关软件安装 2.1 CAN上位机 2.2 对象字典生成工具objdictedit环境配置 3 将CANopen移植到STM32F407 ...

  2. JQuery基础快速入门(超级详细)

    JQuery基础学习 JQuery概念 快速入门 JQuery对象和JS对象区别与转换 选择器 1.基本操作的学习 2.分类 2.1基本选择器 2.2 层级选择器 2.3属性选择器 2.4过滤选择器 ...

  3. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  4. 基于STM32F4:多通道ADC采集,采用DMA的形式,亲测有效

    基于STM32F4的多通道ADC采集 单片机源程序如下: #include "sys.h" #include "delay.h" #include " ...

  5. 基于STM32F4的智能门锁系统

    基于STM32F4的智能门锁系统 前言 一.项目背景 二.项目所预想功能 三.外置硬件准备 四.项目开发 简介及涉及协议 蓝牙模块 1.蓝牙接线图 2.使用说明: 3.蓝牙代码 USART3.C 蓝牙 ...

  6. 基于STM32F4单片机对步进电机的控制(有代码)

    步进电机简介 步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机.在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲 ...

  7. STM32应用开发实践教程:基于 CAN 总线的多机通信应用开发

    5.2.1 任务分析 本任务要求设计一个基于 CAN 总线的多机通信系统,该系统须具备交互多种类型数据(如 环境温度.环境湿度和光照强度等)的能力. 发送单元对待发数据进行编码,组建 CAN 数据帧, ...

  8. 一种基于中继模式的跨链通信方案

    一.X链 Cannal起源 开源生态模式.去中心化的服务.以及各种加密货币,这一系列技术的出现,使人们得到启发和思考,去中心的的区块链是网络是能变我们生活的很多方面.比如比特币.以太坊.Zcash.超 ...

  9. html5快速开发模板生成器,推荐一个基于Vue 的 H5 快速开发模板

    本项目以基于 vue-cli4 和 Vant-ui 搭建的,进行移动端开发中的一些最佳实践方案 模板地址 动动你的小手点颗star 样式适配 在移动端网页开发时,样式适配始终是一个绕不开的问题.对此目 ...

最新文章

  1. ASP网络编程从入门到精通 下载
  2. 在 iOS 11 中使用 Core Bluetooth
  3. java事务不生效场景_springboot中使用@Transactional注解事物不生效的坑
  4. 【自用】 sklearn 用 train_test_split 简单划分训练和测试集
  5. c++学习笔记之运算符的重载
  6. 阿里云容器Kubernetes监控(七) - Prometheus监控方案部署
  7. python循环结束执行后面代码_计算机程序中某种代码的反复执行,称为________。Python中的循环有重复一定次数的________,也有重复到某种情况结束的________。...
  8. delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
  9. Linux学习资源汇总
  10. 如何才能通过设置将excel单元格内的14位数字转换为日期格式
  11. 开课吧课堂之未被捕获的异常
  12. 十次方项目开发系列【1】:项目介绍和工程搭建
  13. ADS2015 for linux 安装教程
  14. laravel下载安装
  15. 2016,云计算行业走向何方?
  16. cadence SPB17.4 - 更换已有原理图的标题栏
  17. 守望先锋战网服务器维护多长时间,守望先锋国服压力测试多长时间 压力测试删档吗等问题解答...
  18. Automatic Panoramic Image Stitching using Invariant Features 【笔记】
  19. Qt 之进程间通信(IPC)
  20. 透析《长安十二时辰》里的望楼,人类在唐朝就有5G愿望了?

热门文章

  1. python 汉字 和 urlEncode 编码 互转
  2. Fabric 1.0源代码分析(6)configtx(配置交易) #ChannelConfig(通道配置)
  3. 计算机课作文200字,玩电脑日记200字
  4. 气传导耳机是什么意思?气传导耳机原理是什么?
  5. 取消亚马逊EC2虚拟机自动续费
  6. ubuntu proxy(代理)设置全局
  7. Marklogic学习 —— XQuery语法
  8. Endnote中的参考文献是网页,应该如何设置呢?
  9. renpy 战斗框架转载
  10. 学成在线项目-轮播图banner