当前位置: 首页 > article >正文

嵌入式_串口助手__可以显示图表、进行FFT

一、简介

        缘于博客_FYAW智能显示控制仪表的简单使用_串口通信-CSDN博客,出于需要查看串口数据变化情况的需求,又没有找到合适的串口助手,于是临时使用WPF搭建一个串口助手。也因此界面简单,由于使用WPF,相比Qt性能上确实有些堪忧。虽然界面和功能远远不及其它串口助手,不过由于项目比较简单,可以更加定制化地开发,也能满足一些特殊需求,适合练手。

        本项目工程已经上传到github和gitcode了,功能和界面比较简单,可以当成一个小框架自己继续开发,或者练手。代码里面有不少注释,命名也还比较规范,采用MVVM模式,对初学者应该也比较友好。由于本人不一定有时间更新或者修复(Readme还没怎么写),所以Issue或者私信什么的不一定能及时处理,还请见谅。当然,Fork或者Clone再自行解决也是不错的(MIT)

github:ichliebedich-DaCapo/ZQcom (github.com)

gitcode:ZQcom - GitCode

        为了能直接使用,打算发布一个beta版意思意思,真正算得上特色的或许只有图表这个功能了。原本打算做一个显示变量的IDE插件,但串口调试的方法显然更加通用。

二、基本使用

1,说明

        还没有做工具栏什么的,基础功能就这些。编码方案、CRC计算、更复杂的数据处理或者运行某些脚本等功能后续可能会考虑做。

        目前进行小段时间小频次的收发数据和图像显示是没有问题的,但由于我的需求源自于智能仪表显示仪的通信(10Hz一次收发),所以对大量数据接收与显示还有些不足甚至闪退,体验可能欠佳,后面会尝试慢慢解决。

2,处理数据框和图表的使用

        第一步自然是选择串口,如果在打开程序后才插上线,那么可以点击一下刷新。然后就是选择波特率、数据位等,选择完成后就可以打开串口了,这个不要忘。

        成功打开串口后就可以收发数据了,可以开启16进制发送或显示,也可以选择定时发送,右边是定时发送周期(单位是ms)。

        下面共有三个窗口,我分为上下两大部分,上面是日志框,下面两个小框是数据处理框。其中左半边是截取框,用于截取收到的数据,当截取长度设为-1时,表示不截取(此时起始位置失效)。右半部分是转换框,把截取的数据进行某种转换,这里出于我个人的需求,仅仅是把左边接收到的8位16进制字符串(需要开启16进制显示)或普通字符串转为浮点表达。

        当然,只有勾选了【处理数据】,才能使用数据处理框。至于时间戳,我只添加了日志框的,数据处理框我个人觉得没必要所以就没添加。日志保存和打开日志目录是可以正常使用的,【保存日志】时,如果勾选了处理数据复选框,那么就会连同下面的数据处理框的内容也一并保存。

        由于转换过的数据是可以打印在右边的图表框上的,所以进行了一些数据检查,如果数据不合法,那么就会弹出警告。但有时由于发送数据过快,容易出现一些黏连现象,所以添加了【强制处理】,其实就是忽略没有不合法的数据,只打印“无法转换”在框中,并不会把数据传到右侧框(或许只传入0更能体现出这个数据是不合法的)

        如果只是想接收单片机发来的浮点数据或者整型数据打印在图表上,那么就不要开启16进制显示和发送,这样进行处理时只是将普通字符串转为浮点数(相当于什么都没做),记得在长度框输入-1(没有做保存上次记录的持久化存储功能)。然后勾选图表框上的【开启图表】,默认起始索引是0,与数组对应。旁边的测试按钮其实啥用也没有

        

        下面是接收单片机发送的正弦波数据,由于数据处理框和图表框我是放在处理数据这一个函数的,所以它俩是同步的,图表框会阻塞数据处理框。由于还能达到我个人的需求也就没有把它俩进行异步处理。但数据接收框和它俩是异步的,确保接收数据不会被延误。

        所以发送大量数据后,你会看到日志框已经停下来了,但图表框和数据处理框可能还在工作。

        点击FFT后可以进行FFT处理,再点击一次就会取消FFT。禁用动画这个功能,从观感上有时候会更流畅,有时候会更卡。

3,工程下载

        可以从github的发行地方下载

        如果打不开,可以到gitcode(镜像)上下载

可能需要安装.Net8.0运行时环境,如果你没有安装的话。

下载 .NET 8.0 Desktop Runtime (v8.0.11) - Windows x64 Installer

三、工程框架

        这个工程采用的是MVVM模式,可以看到相应目录结构。由于实际开发上我觉得麻烦,虽然视图和数据分离得很好,但我并不怎么把ViewModel和Model分离,我一般直接把变量都一股脑放在ViewModel里。

窗口的启动从App.xaml转移到了App.xaml.cs里

Views

        界面完全使用数据绑定、绑定事件什么的,不会直接在ViewModel里调用组件

ViewModels 

MainViewModel里没有写任何逻辑,仅仅是添加串口和图表的视图模型

        在SerialPortViewModel里,我实现了与串口相关的绝大部分逻辑,另一小部分在Services里的SerialPortService里。而把数据显示在图表上,使用的是事件聚合器,为的是解耦

        在ChartViewModel里,Model与ViewModel分离做得比上面好,管理图表框相关的所有逻辑

Models 

        主要是ChartModel,为了能显示多条曲线,用的是Series,不过性能上怎么样不好说(嵌入式后遗症)


http://www.kler.cn/a/408568.html

相关文章:

  • #Uniapp篇:变量v-if 和 v-show 区别.sync 修饰符宽屏适配指南Pinia内置了
  • 机器学习之量子机器学习(Quantum Machine Learning, QML)
  • RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机
  • 《生成式 AI》课程 作业6 大语言模型(LLM)的训练微调 Fine Tuning -- part1
  • CSS中flex:1是什么属性
  • 【C++】继承(inheritance)
  • 《Linux服务与安全管理》| 用户与用户组管理操作
  • L1G6000 OpenCompass 评测
  • 视频 wmv 转MP4
  • 企业OA管理系统:Spring Boot技术实现与案例研究
  • # 16_ Python基础到实战一飞冲天(二)-python基础(十六)--模块
  • LeetCode155. 最小栈(2024冬季每日一题 12)
  • mybatis学习(三)
  • AWS codebuild + jenkins + github 实践CI/CD
  • C++从零到满绩——类和对象(中)
  • Tkinter置顶弹窗提示操作成功
  • rabbitmq结合springboot配置发送消息和消费消息
  • 监控报警系统的指标、规则与执行闭环
  • `--version` 选项在 Java 8 中是不被支持的。Java 8 使用的是 `-version` 选项而不是 `--version`
  • Go语言获取客户端真实IP
  • PowerMILL 客制化宏 - 概念
  • 功能强大的stringstream类
  • Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE
  • STM32定时器原理及应用
  • Spring 框架环境搭建
  • 改错题总结