【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放

2023-11-02

 

之前写了一款串口调试上位机,有很大的功能欠缺,整体感觉十分不爽。这次在原有基础上进行了优化,并且增加了协议帧捕获功能,使用QCustomPlot进行波形绘图的功能,可应用于实时动态绘图。(直男审美,实在不懂UI设计,望吐槽时嘴下留情)

GitHub源码仓库:源码下载

 

波形界面展示:

左侧是绘图区,右侧为控制区。最大可以显示20条曲线,可对波形、散点、背景、坐标进行设置。

 

 

绘图散点功能展示:

右侧 曲线/散点设置 的功能,依次为:隐藏/显示、颜色选择、加粗显示、值显示、线连接方式、散点形状。

每条曲线的颜色、线连接方式、散点形状均可调。线连接方式包括:点、线左对齐、右对齐、居中对齐、平行y轴的高线。

 

 

自发自收,波形绘图测试:

 

 

百万字节绘图测试:

百万字节接收绘图测试:CPU占用率保持在20%左右(7代i5四核四线程),内存占用随历史接收的增加而增加。

 

 

协议帧格式介绍:

协议帧兼容匿名四轴调试上位机,在mainwindow.h中修改宏定义可自定义帧头、功能字。

每帧数据包含 N条绘图波形的一个点,类型为int16,每输入一帧便会在波形界面中绘制出N个点,并且X轴显示坐标加1。连续不断发送便可实时动态绘图。

 

固定帧头 3A 3B,用于帧起始位置的识别。(默认3A 3B,可在代码中修改)

功能字 01,意义为波形绘图,暂时只定义了这一个有效功能字。

有效字的总字节长度范围为 2~40,只能为偶数,对应着 1~20条曲线。

单个有效字的字节长度为 2Byte,int16类型,由于计算机存储数据时使用补码,手动计算需要转换为补码。

校验和为此帧前面所有数据的累加,取末位的1字节,做校验和。校验比对正确则进行绘图,不正确则误码数量加1。

 

例1,包含2条波形:

3A 3B 01 04 FF 38 13 14 D8(16进制显示)
3A 3B 01 04 FF 38 13 14 D8
固定帧头 功能字 有效字的总长度,4 第1有效字,-200的补码 第2有效字,4884的补码 校验和

例2,包含20条波形:

3A 3B 01 28 00 C8 01 90 02 58 03 20 03 E8 04 B0 05 78 06 40 07 08 07 D0 FF 38 FE 70 FD A8 FC E0 FC 18 FB 50 FA 88 F9 C0 F8 F8 F8 30 94(16进制显示)
3A 3B 01 28 00 C8 01 90 02 58 03 20 03 E8 04 B0 05 78 06 40 07 08 07 D0 FF 38 FE 70 FD A8 FC E0 FC 18 FB 50 FA 88 F9 C0 F8 F8 F8 30 94
固定帧头 功能字 有效字的总长度,40 200的补码 400 600 800 1000 1200 1400 1600 1800 2000 -200 -400 -600 -800 -1000 -1200 -1400 -1600 -1800 -2000 校验和

 

补码计算器:补码在线计算

 

 

详细功能介绍:

自动扫描可用串口端口,同时显示端口硬件信息(无须再查看设备管理器,方便选择),波特率可手动输入。

发送/接收字节、速率统计、帧统计、误码统计。

接收区每2000字节强制换行,避免一行的内容太多,导致CPU占用过高从而卡顿,已测试过累计千万字节不卡顿。(仅仅是在接收显示里加换行,实际的真实数据不受影响)

支持中文收发,默认GB2312编码,如需Unicode/UTF8/UTF16需要更改代码。(单片机中文编码大多使用GB2312,占用空间小)

收/发区,无缝16进制转换,GB2312中文不乱码。输入框可作为转换框,无须在计算后重复输入。

 

增加帧捕获功能,用户可自定义修改两字节的帧头,帧协议兼容匿名四轴调试上位机。

增加捕获帧调试界面,方便调试。

 

波形绘图最多可显示20条曲线。曲线连接方式,颜色、散点形状可任意设置。可隐藏,可加粗显示。

曲线连接方式支持:点、线连接、左台阶、右台阶、居中台阶、纵值绘图。

波形散点形状支持:x形、+形、空心圆、实心圆、矩形、菱形、星形、正三角、倒三角、x框、+框、x圆、+圆、和平。

动态绘图支持: X轴自动跟随、Y轴范围自适应。

图页显示范围可在右下角手动输入调整。

支持滚轮Y轴缩放、左键拖拽、单击曲线加粗显示,不支持拖拽缩放。

 

 

未完善功能:

(对体验影响不大,更新要等到猴年马月了)

曲线值显示。跟随鼠标显示,波形名称显示。

QSetting记录用户设置。

波形名称可点击修改。

保存数据为txt/excel。

 

GitHub源码仓库:源码下载

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放 的相关文章

  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 如何通过 Qt 创建网络服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 QT 安装程序框架中区分每用户安装与系统范围安装?

    我正在使用一些名为 pgModeler 的应用程序 它的当前版本提供了一个基于 QT 安装程序框架的安装程序 Windows 上该安装程序的问题是它安装每个用户的开始菜单条目 https github com pgmodeler pgmod
  • 无法在 QGLWidget 中设置所需的 OpenGL 版本

    我正在尝试在 Qt 4 8 2 中使用 QGLWidget 我注意到 QGLWidget 创建的默认上下文不显示 OpenGL 3 1 以上的任何输出 Qt wiki 有一个教程 http qt project org wiki How t
  • SWI-Prolog 与 C++ 接口的问题

    我试图让 SWI Prolog 与 C 很好地配合 现在束手无策 现在 在我开始准确解释我的问题是什么之前 我想首先说明我的项目是关于什么的以及我选择了哪些工具来开发解决方案 我的教授分配给我的任务是开发一个 GUI 程序 作为 SWI p
  • 如何为 qmlRegisterSingletonType 实现单例提供程序?

    我想在 QML 中使用 C 类作为 Singleton 实例 并认为我必须使用 qmlRegisterSingletonType 注册它们 此函数需要一个提供已注册 C 类的实例的函数 我在 Windows 上使用最新的 Qt 5 3 1
  • 使用 QTextCursor 选择一段文本

    使用 Qt 框架选择文本片段时遇到问题 例如 如果我有这个文件 没有时间休息 我想选择 ime for r 并从文档中删除这段文本 我应该如何使用 QTextCursor 来做到这一点 这是我的代码 QTextCursor cursor n
  • 无法将 QList 分配给 QString

    我遇到这个错误 Unable to assign QList
  • QML:无法读取未定义的属性“xxx”

    ApplicationWindow id root property string rootName rootName visible true width 800 height 400 title qsTr WatchFace Maker
  • 用 C++/Qt 编写的程序中的 RTF / doc / docx 文本提取

    我正在写一些程序Qt https en wikipedia org wiki Qt 28software 29 C 我需要从中读取文本微软Word https en wikipedia org wiki Microsoft Word RTF
  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • 针对初学者的 QT 商业许可证与非商业许可证 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 QT 许可似乎非常反学习 因为据我所知 用它开发的任何东西都只能是商业的当且仅当 its entire开发是在使用商业许可证的情况下完成的
  • Qt 5.1.1 与 Visual Studio 2012 - 这些 QT 版本无法访问

    打开 Visual Studio 时出现此错误 我安装自http qt project org downloads http qt project org downloads 适用于 Windows 64 位的 Qt 5 1 1 VS 20
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某

随机推荐

  • 作为网络工程师,你知道私有IP地址范围吗?

    RFC 1918定义了私有IP的范围私有 内网 IP地址范围 A类 10 0 0 0 10 255 255 255B类 172 16 0 0 172 31 255 255C类 192 168 0 0192 168 255 255 提高 RF
  • C++ string的用法和例子

    https blog csdn net tengfei461807914 article details 52203202 string是C 标准库的一个重要的部分 主要用于字符串处理 可以使用输入输出流方式直接进行操作 也可以通过文件等手
  • LinearAlgebraMIT_6_ColumnSpaceAndNullSpace

    这节课的两个重点是column space列空间和null space零空间 x 1 pre multiply left multiply and post multiply right multiply 对于pre multiply le
  • 了解MQ和安装使用RabbitMQ

    什么是消息队列 本质是一个队列 队列中出存放的是跨进程的通信机制 用于上下游传递消息 MQ是常见的上下游 逻辑解耦 物理解耦 的消息通信服务 在使用MQ之后 消息发送上只需要依赖MQ 不用依赖其他服务 功能 1 流量削峰 举个例子 系统最多
  • 最新抖音快手小红书西瓜全平台解析接口api开发文档

    简介 从短视频平台APP中复制出来的分享链接 通过接口获取或通过主页在线一键解析获取短视频中的 视频标题 视频封面 无水印视频地址 图集列表等参数信息 接口地址 https eeapi cn 返回格式 JSON 请求方式 GET 客户UId
  • 常见的Java框架有哪些?

    作为一名合格的Java开发工程师 不仅需要了解开发技术 还需要了解清楚Java主流框架信息 那么常见的Java框架有哪些 常见的Java框架有哪些 1 Spring框架 Spring框架是现在Java后端框架家族里面最强大的一个 拥有IOC
  • 【PTA】约瑟夫环问题

    n个小孩围成一圈 从第一个小孩开始从1到m报数 报到m的小孩出列 下一个小孩继续从1开始报数 出列的小孩不参与报数 问小孩的出列顺序 import java util public class Main public static void
  • 【Proteus仿真】【51单片机】简易信号发生器设计

    文章目录 一 主要功能 二 使用方法 三 硬件资源 四 软件设计 1 主要代码 五 实验现象 联系作者 一 主要功能 1 可生成常用波形 方波 锯齿波 三角波 阶梯波 正玄波 2 可通过按键切换不同波形输出 二 使用方法 系统运行后 按下K
  • 如何在git中修改用户名和密码

    随着开源软件的不断发展 git已成为了极其流行的版本控制系统 git是一个非常强大的工具 引入了一系列的概念和机制 便于软件工程师跟踪他们的代码变化 这篇文章将会谈论如何在git中修改用户名和密码 git是什么 Git是一个由Linus T
  • 分治法-Strassen-矩阵乘法详细代码

    public class Matrix 初始化一个随机nxn阶矩阵 public static int initializationMatrix int n int result new int n n for int i 0 i lt n
  • 全网最全Android Framework框架总结,Android如何入门Framework层

    每一个Android开发 基本都了解或者学习过系统的知识 一是因为国内软件行业内卷 找工作时 面试造火箭 工作拧螺丝 的局面导致的 另一方面 从客观角度来讲 学习Android系统 Framework 等源代码或者其工作方式也可以提升我们
  • Nginx系列教程(五)

    冷备份是定期复制 不能保证数据可用性 热备份又分为异步热备和同步热备 异步热备是指 多份数据副本的写入操作异步完成 同步热备是指 多份数据副本的写入操作同时完成 服务层面 失效转移 如某块磁盘损坏 将从备份的磁盘读取数据 首先是已经提前做好
  • 九问国产操作系统,九大掌门人万字回应!

    整理 屠敏 责编 唐小引 出品 CSDN ID CSDNnews 在国产基础软件发展的多年间 众多摸着石头过河的先行者无数次感叹 蜀道之难 难于上青天 不仅包含数据库 中间件 芯片 操作系统等核心软硬件研发 也覆盖了每种技术领域的生态建设
  • 【反序列化漏洞-01】序列化与反序列化概述

    为什么要序列化 百度百科上关于序列化的定义是 将对象的状态信息转换为可以存储或传输的形式 字符串 的过程 在序列化期间 对象将其当前状态写入到临时或持久性存储区 非关系型键值对形式的数据库Redis 与数组类似 以后 可以通过从存储区中读取
  • VMWARE虚拟机网络环境配置

    VMWARE虚拟机网络环境配置 1 查看物理机ip信息 命令 ipconfig 2 配置网络适配器环境 点击 控制面板 选择 网络和Internet 点击 查看网络状态和任务 点击 更改适配器设置 选择VMnet8那个适配器 邮件选择 属性
  • 如何设计好API

    语言首先是写给人看的 只是恰巧 incidentally 能够运行 计算机程序的构造和解释 好的API应对客户端友好 换言之就是能够直接通过其方法签名而理解它做的事情 而不用深入去阅读方法的实现 甚至深入阅读API所在的整个类 单纯的介绍如
  • LeetCode 263. 丑数

    题目链接 https leetcode cn problems ugly number C 代码如下 class Solution public bool isUgly int n if n lt 1 return false while
  • C/C++ rand()产生随机数 模拟 掷骰子 小游戏代码

    1 源代码如下 file 模块名 文件名 tossGame cpp 相关文件 文件实现功能 模拟掷骰子的随即过程 同时掷出2个骰子 如果结果和为7或者11则玩家获胜 如果结果为2则玩家失败 其他结果可以按回车继续 或者输入q结束程序 作者
  • XML格式Word文档表格常用标签

    常用标签 名称 描述 w p 文本段落 w pPr 段落设置 w ind 缩进 w jc 文本位置 left center right w r 文字块 w rPr 文本设置 w rFonts 字体设置 w color 文字颜色 w sz 文
  • 【Qt串口波形绘图】基于QCustomPlot的串口波形绘图上位机,源码开放

    之前写了一款串口调试上位机 有很大的功能欠缺 整体感觉十分不爽 这次在原有基础上进行了优化 并且增加了协议帧捕获功能 使用QCustomPlot进行波形绘图的功能 可应用于实时动态绘图 直男审美 实在不懂UI设计 望吐槽时嘴下留情 GitH