如何在匿名上位机中显示自定义数据波形

news2024/11/15 5:46:48

匿名上位机相信很多人都用过,以前在调飞控的时候使用过,可以很直观的显示数据的波形,比如飞机姿态等。
最近在调试foc。很多数据在调试过程中,仅仅使用串口打印出来显示是很不直观的,比如正弦波,经典的马鞍波等。今天研究了一下将数据通过串口发送给匿名上位机,然后在上位机中显示自定义数据波形。
首先看下马鞍波的波形
在这里插入图片描述
是不是特别直观,这个马鞍波也是foc在运行过程中,三相驱动定时器的CCR值。
环境:
匿名上位机使用版本:V4.34 提货窗口 提货码:6ezj
单片机串口:STM32的VCP,即USB虚拟串口

数据传输

  • 协议的认识
  • 代码实现协议
  • 上位机配置
  • 数据波形显示
  • 串口设置

协议的认识

首先需要了解的是,所使用的匿名上位机版本对应的通信协议。不同版本的协议有差别,有的还挺大。例如我使用的这个版本,找到通信协议说明部分,具体打开如下图
在这里插入图片描述
点开后是一个excel表格,里面写了各种协议,包括官方定义好的标准协议,以及自定义的协议。如下
在这里插入图片描述
图中将官方定义的功能协议略去,仅显示了用户传输自定义数据部分的协议。可见,用户自定义的数据格式应该是
帧头(AAAA) 功能码(Fx) 传输数据长度(这个数据长度有说明,仅仅是用户数据部分,不包含帧头功能码这些) 用户数据(即用户自定义的数据部分) 校验(校验和,这个是将前面从帧头开始所有的数据累加,然后取低8位)。
举例说明:
我要传输的是三相的驱动定时器的CCR值,那么发送一帧数据的就应该是
0xAA 0xAA 0xF1 0x06 0xCCR1_H 0xCCR1_L 0xCCR2_H 0xCCR2_L 0xCCR3_H 0xCCR3_L 0xSUM
知道了上位机解析的协议,然后就是在代码中将发送数据按照这个格式发送就可以了。参考如下

代码实现协议

#include "send.h"
#include "usbd_cdc_if.h"
#include "sys.h"

//数据拆分宏定义,在发送大于1字节的数据类型时,比如int16、float等,需要把数据拆分成单独字节进行发送
#define BYTE0(dwTemp)     (*(char*)(&dwTemp))
#define BYTE1(dwTemp)     (*((char*)(&dwTemp) + 1))
#define BYTE2(dwTemp)     (*((char*)(&dwTemp) + 2))
#define BYTE3(dwTemp)     (*((char*)(&dwTemp) + 3))

extern uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];

void SendWave(int16_t a, int16_t b, int16_t c)
{
    uint8_t cnt = 0;
    
    UserTxBufferFS[cnt++] = 0xAA;
    UserTxBufferFS[cnt++] = 0xAA;
    UserTxBufferFS[cnt++] = 0xF1;
    UserTxBufferFS[cnt++] = 6;
    
    
    UserTxBufferFS[cnt++] = BYTE1(a);
    UserTxBufferFS[cnt++] = BYTE0(a);    
    UserTxBufferFS[cnt++] = BYTE1(b);
    UserTxBufferFS[cnt++] = BYTE0(b);
    UserTxBufferFS[cnt++] = BYTE1(c);
    UserTxBufferFS[cnt++] = BYTE0(c);
    
	unsigned char sum = 0;
	unsigned char i = 0;
		for(i=0;i<cnt;i++)
			sum += UserTxBufferFS[i];
		UserTxBufferFS[cnt++] = sum;  
    CDC_Transmit_FS(UserTxBufferFS, cnt);
}

如上代码所示,这里就可以将需要上传的数据发送到匿名上位机中了。需要关注的是,代码中是用虚拟串口实现的,以后有机会再说吧。

上位机配置

在这里插入图片描述
选中高级收码,然后在帧格式设置这里,勾选使能该帧,同时我们可以看到这里的帧头就是AAAA,功能码就是F1,这里就对应上了。这里设置的意思就是将接收帧设置到和我们发送帧格式对应,这里主要是对应的功能码。
如果帧格式设置这里选择2,那么你会看到这里的功能码是F2,那么这个就是另一个数据帧了。
在这里插入图片描述
然后是数据容器设置这里
在这里插入图片描述
下面的数据来源表示帧1中的数据,是用来保存数据帧1中传过来的数据,也就是上面配置的帧格式设置那里功能码为F1的数据帧里面包含的数据;
数据容器设置和数据位置是对应着设置的。比如说现在已经选中了数据来源是帧1,然后数据容器设置选中1,这个数据容器就是说用户自定义的数据要存放的地方,但是一个容器只能存一个用户数据,我们传过来的数据一共有三个,即上面的CCR1,CCR2,CCR3。具体存哪个呢?这个就是由下面的数据位置决定的,比如勾选1,那么就表示将CCR1保存在数据容器1中,如果勾选2,那么就表示将CCR2保存在数据容器1中;因为一共有三个数据要保存,所以我们要选择3个数据容器。即最终对应的应该是:数据容器设置1,数据位置对应1;数据容器设置2,数据位置对应2;数据容器设置3,数据位置对应3;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里高级收码部分设置就完成了,别忘了保存设置。

数据波形显示

在这里插入图片描述

按照图中的四步设置这里的数据波形,因为原来的软件默认显示都是飞控的数据,这里需要切换到自定义数据波形。如果你事先已经设置好了串口,并且已经连接,那么这里将会正常显示波形了。

串口设置

在这里插入图片描述
使用USB虚拟串口是不需要设置这里的波特率的,这个传输速度可比普通串口快多了。

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

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

相关文章

Python冷知识-优雅的文档属性

Python是一门学习成本低但是使用场景广泛的语言&#xff0c;0基础2周左右就可以进行简单的脚本编写&#xff0c;但也正是因为这个原因&#xff0c;导致很多小伙伴的Python代码比较粗糙&#xff0c;那么我们来聊聊使用文档属性让Python代码更加的优雅。 设置文档属性 作为一名…

JUC并发编程学习笔记(二)Lock接口及线程间通信

2 Lock 接口 2.1 Synchronized 2.1.1 Synchronized 关键字回顾 synchronized 是 Java 中的关键字&#xff0c;是一种同步锁。它修饰的对象有以下几种&#xff1a; 修饰一个代码块&#xff0c;被修饰的代码块称为同步语句块&#xff0c;其作用的范围是大括号{}括起来的代码&…

软件测试中白盒测试的优缺点是什么?

白盒测试的优缺点白盒测试在计算机领域行业用以检查程序的状态&#xff0c;确定实际运行状态与预期状态是否一致&#xff0c;来看看白盒测试的优点和缺点是什么吧。 白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符…

Android学习进阶——Dagger 2 使用及原理

概述 Dagger 2 是 Google 开源的一款依赖注入框架&#xff0c;它的前身是 square 的 Dagger 1&#xff0c;Dagger 2 在 Android 中有着较为广泛的应用。 Dagger 2 基于 Java 注解&#xff0c;采用 annotationProcessor&#xff08;注解处理器&#xff09; 在项目编译时动态生…

AS-REPRoasting

讲在前面&#xff1a; 最近笔者发布的几篇文章&#xff0c;大家不难发现&#xff0c;都是和kerberos协议相关的。国内外各类的研究员对于该协议的研究愈发的深入&#xff0c;从该协议产生的漏洞就会越来越多甚至越来越严重。当然这只是笔者的一点拙见。 在介绍了Kerberoastin…

21天Java开发速成篇-Java从入门到大师01快速入门

Java 简介 win10安装 JDK 下载和安装 访问 oracle 官网https://www.oracle.com/ 建议下载解压版,下载完毕后&#xff0c;解压到一个没有中文和空格的目录即可 配置 Path 你可以选择一个喜欢的目录&#xff0c;我的解压目录是 d 盘根目录下&#xff0c;如图所示 其中 b…

创邻Galaxybase入选 2022 爱分析《中国数据智能最佳实践案例》

随着2022年进入收官时间&#xff0c;创邻科技喜报频传。近日&#xff0c;“2022爱分析中国数据智能最佳实践案例”评选结果出炉&#xff0c;经过申报、初评、调研、终评等多轮角逐&#xff0c;创邻科技凭借“中国民生银行万象知识图谱应用平台”成功获评2022中国数据智能最佳实…

FPGA知识汇集-FPGA时序基础理论

对于系统设计工程师来说&#xff0c;时序问题在设计中是至关重要的&#xff0c;尤其是随着时钟频率的提高&#xff0c;留给数据传输的有效读写窗口越来越小&#xff0c;要想在很短的时间限制里&#xff0c;让数据信号从驱动端完整地传送到接收端&#xff0c;就必须进行精确的时…

Kubernetes:minikube操作总结

Kubernetes&#xff1a;minikube操作总结minikube statusminikube nodeminikube status 查询集群状态 $ minikube statusminikube node 新增节点 注意&#xff1a;minikube 仅仅是基于本地 standalone 部署一款简易 k8s 集群&#xff0c;因此添加节点&#xff0c;也仅仅是本…

【多尺度条形池化与通道注意力的图像语义分割】论文精讲

论文&#xff1a;论文链接 出处&#xff1a;中国图象图形学报 目录 1.摘要 2.网络结构 2. 1 改进的条形池化技术 2.2 二阶通道注意力机制 3.结果 1.摘要 目的 针对自然场景下图像语义分割易受物体自身形状多样性、距离和光照等因素影响的问题,本文提出 一种新的基于条形池…

windows搭建gitblit服务器

使用Gitblit搭建属于局域网的Git服务器&#xff0c;方便程序代码的联合开发及程序代码版本管理。 环境&#xff1a;1、Windows 64位操作系统。 2、jdk1.8.0&#xff08;需要java环境&#xff0c;已安装请忽略&#xff09; 3、Git-2.24.1.2-64-bit&#xff08;git工具&#x…

linux系统编程:暂停函数pause

pause函数 该函数功能主要是暂停进程&#xff0c;它的返回值总是-1。 使用方式&#xff1a; &#xff08;1&#xff09;首先使用signal函数提前注册一个中断函数&#xff0c;该函数用于将函数指针和信号做一个绑定; &#xff08;2&#xff09;当程序进行执行pause&#xff0…

【Bp2Lua】深入理解蓝图

【Bp2Lua】深入理解蓝图 做 Bp2Lua 过程中的副产物&#xff0c;蓝图在连连看背后隐含的操作 有几点想说明的 蓝图会隐含一些操作&#xff0c;前端节点图是看不出来的&#xff0c;但是后端字节码会一览无余Bp2Lua 本质是 字节码 ToLua&#xff0c;其实 Bp2Lua 根本不关心也不…

策略模式(strategy pattern)

背景 一、一个具体实现范例的逐步重构 补血道具(药品)&#xff1a;a) 补血丹&#xff1a;补充200点生命值&#xff1b;b) 大还丹&#xff1a;补充300点生命值&#xff1b;c) 守护丹&#xff1a;补充500点生命值将Fighter,F_Warrior,F_Mage 单独写在一个文件中。 Fighter.h …

一步一步学爬虫(4)数据存储之文本存储

一步一步学爬虫&#xff08;4&#xff09;数据存储之文本存储4.1 TXT纯文本文件存储4.1.1 本节目标4.1.2 基本实例4.1.3 打开方式4.1.4 简化写法4.1 TXT纯文本文件存储 将数据保存到 TXT 文本的操作非常简单&#xff0c;而且 TXT 文本几乎兼容任何平台&#xff0c;但是这有个缺…

Spark环境搭建(Hadoop YARN模式)

前言 按照前面环境部署中所学习的&#xff0c;如果我们想要一个稳定的生产Spark环境&#xff0c;那么最优的选择就是构建&#xff1a;HA StandAlone集 群。 不过在企业中&#xff0c; 服务器的资源总是紧张的&#xff0c;许多企业不管做什么业务&#xff0c;都基本上会有Hadoo…

AD软件绘制不规则焊盘的器件封装

网上有很多关于AD软件绘制不规则焊盘的帖子&#xff0c;搜了一些帖子看了一下&#xff0c;感觉不太对。严格意义上AD软件是不能绘制不规则的焊盘的&#xff0c;至少目前用的AD软件不支持。为什么这么说呢&#xff1f; 我提一个需求&#xff1a;假如我在PCB文件中需要随意的添加…

企业选择SOP作业指导书系统的目的和意义

SOP是将作业指导流程予以说明规范&#xff0c;让作业人员有一个标准的作业准则&#xff0c;以达到作业的标准一致性。也是一种管理模式&#xff0c;通过对过程的标准化操作&#xff0c;减少和预防差错和不良后果的发生。通过动作的解析、比较、分析&#xff0c;循环作业分析等输…

MIT6.830-2022-lab4实验思路详细讲解

目录前言一、实验概览Exercise 1:Granting LocksExercise 2:Lock LifetimeExercise 3:Implementing NO STEALExercise 4:TransactionsExercise 5&#xff1a;Deadlocks and Aborts总结 && Debug记录前言 到lab4事务&#xff0c;这一块应该是数据库中概念比较多&#x…

2022/12/30总结

今日学习了二叉树有关知识。 二叉树 二叉树通俗来讲就是一个有俩个指针的链表。他们大多长这个样子&#xff1a; 这里还有俩个概念了&#xff0c;二叉树分为完全二叉树和满二叉树 上面所说的是满二叉树&#xff0c;顾名思义就是每个父节点都相应的有俩个指针&#xff0c;通常…