Canopen学习笔记——sync同步报文增加数据域(同步计数器)

1.Canfestival同步报文sync的设置

在OD表中的配置如下:

如果0x1006索引的同步报文循环周期时间设置为0则禁用同步报文,这里要注意的就是,上面第一张图也提到了,时间单位是us。第二张图,我的0x1006就设置为0xF4240,也就是1s发送一次同步报文。

关于同步桢(同步计数器)的问题可以参考这篇文章:

canfestival同步帧(同步计数器的问题) - 哔哩哔哩关于canopen的SYNC同步帧,有两种方式:一种是sync没有数据,只有id.另一种是sync带有一个数据,这个数据可以循环计数,类似与单片机的计时器.这个计数的周期就存储在字典的1019h里面. 如果1019h里面存入的是4,那么sync数据部分就会依次发送01,02,03,04,---01,02,03,04,---01,02,03,04.......1019h这个参数 与 TPDO的通讯参数06h子索引是有联动的.06h中的参数代表了何时响应这个计数值.如果06h中的参数是3,那么就icon-default.png?t=N7T8https://www.bilibili.com/read/cv12706894/

我这里是介绍的sync桢带数据(同步计数值)的情况:

2.同步报文的发送

在struct struct_CO_Data结构体中的同步报文变量定义区域增加下面的成员变量

随后在同一个头文件data.h的下半部分增加下图的初始化语句。

同步桢发送方法的设置:

这里的63为循环次数,可以根据自己的项目情况自行设置,设置好之后,同步桢发送的情况就是:

3.同步桢接收处理

3.1 TPDO 对象字典设置

将tpdo的SYNC_start_value改为非零值,意思是,接收到多少个同步信号后,上传该tpdo,也就是设置为同步触发模式。

 3.2 SYNC处理函数处理

更改_sendPDOevent()函数,将接收到的同步桢数据域传过来。

更改_sendPDOevent (CO_Data * d, UNS8 isSyncEvent)对数据部分(同步计数值)的处理

源码处理:

/* check if transmission type is SYNCRONOUS *//* message transmited every n SYNC with n=TransmissionType */if (isSyncEvent &&(*pTransmissionType >= TRANS_SYNC_MIN) &&(*pTransmissionType <= TRANS_SYNC_MAX) &&(++d->PDO_status[pdoNum].transmit_type_parameter ==*pTransmissionType)){/*Reset count of SYNC */d->PDO_status[pdoNum].transmit_type_parameter = 0;MSG_WAR (0x3964, "  PDO is on SYNCHRO. Trans type : ",*pTransmissionType);memset(&pdo, 0, sizeof(pdo));/*{Message msg_init = Message_Initializer;pdo = msg_init;}*/if (buildPDO (d, pdoNum, &pdo)){MSG_ERR (0x1906, " Couldn't build TPDO number : ",pdoNum);status = state11;break;}status = state5;/* If transmission RTR, with data sampled on SYNC */}

更改后为:

将接收到的同步计数值数据与tpdo的SYNC_start_value参数做比较,如何相同,则开启pdo传输

修改后,实现的效果展示:

如上图,每次发送到数据为0x0A的同步桢后,就会收到pdo为0x186的数据桢。

当然,这样也是可以的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试之虚拟机

1、前言 本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、什么是虚拟机&#xff1f; Java 虚拟机&#xff0c;是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 Java 被设计成允许应用程…

LeetCode讲解篇之90. 子集 II

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个变量start表示当前从哪里开始遍历nums 搜索过程的数字组合加入结果集 从start开始遍历nums 如果当前元素和前一个元素相等&#xff0c;前一个元素没被使用&#xff0c;则触发剪枝去重操作&#xff0c;跳过当…

华为机试真题实战应用【算法代码篇】-字符串比较(附C++和JAVA代码实现)

目录 题目描述 思路解析 思路1 思路2 代码实现 Java 代码2

58.leetcode 最后一个单词的长度

一、题目 二、解答 1. 思路 分2种情况 第一种情况只有一个单词&#xff0c;不包含空格&#xff1a;这种情况直接返回单词本身的长度。第二种情况包含空格&#xff1a;先去掉首尾的空格&#xff0c;根据空格切割字符串生成一个字符串列表&#xff0c;返回倒数第一个索引位置字…

Java8之Stream API

计算集合数据 一、Sream的四种实例化方式 1、通过集合&#xff0c;集合.stream() 2、通过数组工具类Arrays&#xff0c;Arrays.stream() 3、通过Stream.of() 4、创建无限流,主要用于创造数据 生成10个随机数 Stream.generate(Math::random).limit(10).forEach(System.ou…

QT周五作业

题目&#xff1a;实现简单水果的价格重量计算 点击一次水果重量1 自动计算总价 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QListWidgetItem> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAME…

PostgreSQL与Java JDBC数据类型对照

序号数据库类型Java类型JDBC索引JDBC类型1varcharjava.lang.String12VARCHAR2charjava.lang.String1CHAR3cidrjava.lang.Object1111OTHER4inetjava.lang.Object1111OTHER5macaddrjava.lang.Object1111OTHER6textjava.lang.String12VARCHAR7int8java.lang.Long-5BIGINT8byteabyt…

openssl3.2 - 官方demo学习 - cms - cms_sign2.c

文章目录 openssl3.2 - 官方demo学习 - cms - cms_sign2.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_sign2.c 概述 用多个证书进行CMS消息联合签名 笔记 /*! * \file cms_sign2.c * \note openssl3.2 - 官方demo学习 - cms - cms_sign2.c 用多个证书进行CMS消息联…

js unshift方法的使用

JavaScript的unshift()方法是数组对象的方法之一&#xff0c;用于在数组的开头插入一个或多个元素&#xff0c;并返回新数组的长度。它接受一个或多个参数&#xff0c;每个参数都将插入到数组的开头。 以下是unshift()方法的基本语法&#xff1a; var newLength array.unshi…

java的是堆内存、参数如何设置?

什么是堆内存&#xff1f;参数如何设置&#xff1f; 堆内存是指由程序代码自由分配的内存&#xff0c;与栈内存作区分。 在 Java 中&#xff0c;堆内存主要用于分配对象的存储空间&#xff0c;只要拿到对象引用&#xff0c;所有线程都可以访问堆内存。 &#xff08;1&#xff0…

HarmonyOS@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数…

每日算法打卡:蚂蚁感冒 day 13

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例1&#xff1a;输出样例1&#xff1a;输入样例2&#xff1a;输出样例2&#xff1a; 题目分析示例代码 原题链接 1211. 蚂蚁感冒 题目难度&#xff1a;简单 题目来源&#xff1a;第五届蓝桥杯省赛C A/B组 题目描述…

echarts 3D地图

vueecharts 3D地图,可自定义地图背景底图。鼠标放上显示弹窗&#xff0c;弹窗自动切换。 <template><div id"gbznt" class"gbznt" ref"gbznt"><img class"mapBg" src"../../../img/propertyTransaction/echart-bg…

Django教程第2章| Web开发实战 |用户管理模块

前言 从第2章开始&#xff0c;我们正式以实战为核心开发用户管理系统&#xff0c;计划实现效果图所有模块功能。 本章我们将开始实现我们第一个功能模块&#xff1a;用户管理。 技术栈 Boostrap、jQuery、​​​Django 功能模块 模块进度功能点部门管理完成增删改查&…

nodejs+vue+ElementUi音乐分享社交网站77l8j

本文介绍的系统主要分为两个部分&#xff1a;一是前台界面&#xff1a;用户通过注册登录可以实现音乐播放、新闻浏览、留言评论等功能&#xff1b;另一个是后台界面&#xff1a;音乐网站管理员对用户信息进行管理&#xff0c;上传更新音乐资源&#xff0c;发布最新音乐资讯等功…

NUS CS1101S:SICP JavaScript 描述:五、使用寄存器机进行计算

原文&#xff1a;5 Computing with Register Machines 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 我的目标是表明天堂机器不是一种神圣的生命体&#xff0c;而是一种钟表&#xff08;相信钟表有灵魂属性的人将制造者的荣耀归功于作品&#xff09;&#xff0c;因为…

debian12部署Gitea服务之二——部署git-lfs

Debian安装gitlfs: 先更新下软件包版本 sudo apt update 安装 sudo apt install git-lfs 验证是否安装成功 git lfs version cd到Gitea仓库目录下 cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git 执行lfs的初始化命令 git lfs install客户机Windows端在官网下载并安装Git-Lfs 再…

C++指针与引用的对比

交换a、b值 方法一 使用指针&#xff0c;需在传参时传递地址&#xff0c;并且需新定义两个指针变量分别指向a、b。 void Swap(int* p1, int* p2) {int t;t *p1;*p2 *p1;*p2 t; }//注意两处的*含义不同&#xff0c;第一处*是定义指针变量&#xff0c;*只是起到说明作用 /…

Origin中将 x、y 轴设置为等长度

---------------------------------------------------------------------- 记录一个画图小技巧&#xff1a; 如何在 Origin 中等轴画图 第一步&#xff1a;起初画出来的图如下&#xff0c;y 轴长于 x 轴 第二步&#xff1a;点击画板的空白处&#xff0c;任意一个地方即可 第…

第十六章 i18n国际化

第十六章 i18n国际化 1.什么是i18n国际化2.i18n国际化三要素介绍3.i18n国际化基础示例4.通过请求头实现国际化5.通过语言类型选择实现国际化6.通过JSTL标签库fmt实现国际化 1.什么是i18n国际化 2.i18n国际化三要素介绍 3.i18n国际化基础示例 如果我要准备一个国际化的信息&…