分享一款开源的QT的串口示波器

分享一款开源的QT的串口示波器,完全开源,支持串口、TCP、波形显示、通信协议。

Sailor Project功能说明

图片

串口调试助手功能

  • 支持传统的串口调试助手的基本收发功能,同时可以刷新大量的数据而不卡顿

  • 支持保存接收的数据

  • 支持最大200条可编辑指令的设置,并用于多条发送

  • 支持定时器发送

  • 支持换行符替换时间戳功能

  • 支持较多的中文编码格式

  • 值得注意的是支持Linux简单的串口调试

  • 支持加载csv表格数据到200条可编辑指令

  • 支持部分窗口配置的保存和重启恢复(前提是你不会删除配置文件)

操作说明

注意由于QT自带文本显示窗口加载大量数据后会造成软件卡顿,现解决方案为设定一个显示缓冲区,在有刷新数据阶段(即串口接收数据阶段),如果需要保持刷新状态(即实时显示接收的数据),则仅显示显示缓冲区的内容,你可以使用鼠标移动向上滚动条,停止数据刷新,同时当你向上移动滚动条到一定程度,便会开始加载所有数据,如果你想再次触发实时刷新数据状态,只需要将滚动条移动到最低端,并确保有数据接收。

由于保存数据为显示界面的数据,如果处于刷新状态,则无法保存所有数据,正确的做法是关闭串口后,将滚动条移动到最顶端,加载全部数据,然后保存窗口数据。

TCPServer界面

图片

图片

图片

图片

图片

SEASKY串口通信协议

通信方式是串口,配置为波特率115200, 8位数据位, 1位停止位, 无硬件流控, 无校验位。

1、通信协议格式

帧头设备类型设备ID数据ID帧尾
protocol_header(4-byte)equipment_type(2-byte)equipment_id (2-byte)data_id(2-byte)frame_tail(2-byte,CRC16,整包校验)

2、帧头详细定义

图片

3、串口通信协议

int parse_protocol(protocol_struct* pProtocol,uint16_t parseDataLen)
{//解析数据,使用前需提前缓冲 pProtocol->message_st.pDataint ret = -1;uint16_t pos_offset;frame_struct* pFrameStruct = &pProtocol->frame_st;message_struct* pMessageStruct = &pProtocol->message_st;if (check_protocol_heade(pMessageStruct->pData) == PROTOCOL_RESULT_OK){//更新帧头数据pFrameStruct->header.sof            = pMessageStruct->pData[0];//获取data段的数据长度pFrameStruct->header.data_length    = (pMessageStruct->pData[2] << 8) | (pMessageStruct->pData[1]);pFrameStruct->header.crc_check      = pMessageStruct->pData[3];//获取此次数据包长度pMessageStruct->data_len = pFrameStruct->header.data_length + PROTOCOL_DATA_OFFSET + 2;//计算解析后得到的 data_union 数据长度pFrameStruct->frame_user.cmd_data.data_len = (pFrameStruct->header.data_length) / sizeof(data_union);if(pMessageStruct->data_len<=parseDataLen){if (pMessageStruct->data_len <= pMessageStruct->max_data_len){if(CRC16_Check_Sum(&pMessageStruct->pData[0], pMessageStruct->data_len) != 0){pFrameStruct->frame_user.equipment_type = (pMessageStruct->pData[5]<<8) | (pMessageStruct->pData[4]);pFrameStruct->frame_user.equipment_id   = (pMessageStruct->pData[7] << 8) | (pMessageStruct->pData[6]);pFrameStruct->frame_user.data_id        = (pMessageStruct->pData[9] << 8) | (pMessageStruct->pData[8]);//拷贝 data段 指定长度数据ret = (int)memcpy(&pFrameStruct->frame_user.cmd_data.pData[0], &pMessageStruct->pData[PROTOCOL_DATA_OFFSET], pFrameStruct->header.data_length);pos_offset = pFrameStruct->header.data_length + PROTOCOL_DATA_OFFSET;pFrameStruct->frame_tail = (pMessageStruct->pData[pos_offset+1] << 8) | (pMessageStruct->pData[pos_offset]);return PROTOCOL_RESULT_OK;}else{//待解析BUFF超过预定解析数据容量,避免内存越界PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sum err!\n");return PROTOCOL_RESULT_CHECK_FRAME_ERR;}}else{//待解析BUFF超过预定解析数据容量,避免内存越界PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d] > max_data_len[%d]!\n",pMessageStruct->data_len,pMessageStruct->max_data_len);return PROTOCOL_RESULT_OUT_OF_LEN;}}else{//通过包头计算,还未收到完整的数据包
//            PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d] > max_data_len[%d]!\n",
//                pMessageStruct->data_len,
//                pMessageStruct->max_data_len);return PROTOCOL_RESULT_OUT_OF_LEN;}}else{//待解析BUFF超过预定解析数据容量,避免内存越界PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_heade err!\n");return PROTOCOL_RESULT_CHECK_HEAD_ERR;}PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_heade ok!\n");return PROTOCOL_RESULT_ERR;
}

软件截图

图片

图片

图片

图片

项目开源地址:

https://github.com/SEASKY-Master/vSailorProject

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

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

相关文章

Docker Tutorial

什么是Docker 为每个应用提供完全隔离的运行环境 Dockerfile&#xff0c; Image&#xff0c;Container Image&#xff1a; 相当于虚拟机的快照&#xff08;snapshot&#xff09;里面包含了我们需要部署的应用程序以及替它所关联的所有库。通过image&#xff0c;我们可以创建很…

SD卡格式化怎么恢复?

随着智能手机、平板电脑、数码相机和行车记录仪等各种移动电子设备走入千家万户&#xff0c;SD卡作为与这些设备相配套的存储介质&#xff0c;也随之获得了广泛的市场认可。SD卡因其体积小巧、容量庞大、读写速度高及与多种设备兼容的优点&#xff0c;逐渐成为日常工作和生活中…

linux 笔记:远程服务器登录jupyter notebook

1 生成jupyter notebook 配置文件&#xff08;服务器端&#xff09; jupyter notebook --generate-config #Writing default config to: /home/shuailiu/.jupyter/jupyter_notebook_config.py2 Ipython中设置密码&#xff08;服务器端&#xff09; 3 修改jupyter 配置文件&…

如何使用百度“云一朵”来分析PDF文件

PDF 文件是一种常见的文件格式&#xff0c;用于存储文档、图像和其他内容。在许多情况下&#xff0c;我们需要对 PDF 文件进行分析&#xff0c;以提取其中的信息。百度“云一朵”提供了一个 PDF 分析 API&#xff0c;可以帮助我们轻松地对 PDF 文件进行分析。 在本博客文章中&…

车牌文本检测与识别:License Plate Recognition Based On Multi-Angle View Model

论文作者&#xff1a;Dat Tran-Anh,Khanh Linh Tran,Hoai-Nam Vu 作者单位&#xff1a;Thuyloi University;Posts and Telecommunications Institute of Technology 论文链接&#xff1a;http://arxiv.org/abs/2309.12972v1 内容简介&#xff1a; 1&#xff09;方向&#x…

基于spring boot的医疗管理系统 /基于java的医疗系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…

概率密度函数,概率分布函数

概率密度函数&#xff1a;描述信号的取值在某个确定的取值点附近的概率的函数&#xff1b;概率分布函数的导数。 以幅值大小为横坐标&#xff0c;以每个幅值间隔内出现的概率为纵坐标进行统计分析。反映了信号落在不同幅值强度区域内的概率情况。 直方图&#xff1a;对每个幅…

解决nvm切换node版本失败的终极办法-秒杀网上99%的水文

nvm是一款强大的node多版本管理器&#xff0c;可以轻易选择你需要的node版本&#xff0c;这对win7平台简直就是超好的福音&#xff1a;可以突破node 14.15以上的安装限制。 但是nvm安装有一个巨大的坑点&#xff1a;nvm use 版本号以后&#xff0c;并没有生效&#xff0c;nvm …

【时区】Flink JDBC 和CDC时间字段时区 测试及时间基准

关联文章: 各种时间类型和timezone关系浅析 一、测试目的和值 1. 测试一般的数据库不含time zone的类型的时区。 mysql timestamp(3) 类型postgres timestamp(3) 类型sqlserver datetime2(3) 类型oracle类型 TIMESTAMP(3) 类型 在以下测试之中均为ts字段 2.测试CDC中元数据…

【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--作业

0. 内容 T1. 参考SLAM14讲P247直接可写&#xff0c;注意 ξ 1 , ξ 2 \xi_1,\xi_2 ξ1​,ξ2​之间有约束&#xff08;关系&#xff09;。 套用舒尔补公式&#xff1a; marg掉 ξ 1 \xi_1 ξ1​之后&#xff0c;信息被传递到 L 1 和 L 2 L_1和L_2 L1​和L2​之间了。 T2. …

IDM(Internet Download Manager)2024中文版下载工具软件

IDM&#xff08;Internet Download Manager&#xff09;&#xff1a;功能强大&#xff0c;下载速度快&#xff0c;支持多线程下载&#xff0c;下载过程中遇到突然断电等情况&#xff0c;可以进行断点续传&#xff0c;很多人因此而首选IDM。 优点&#xff1a; &#xff08;1&a…

抖音聊天对话模板,制作一条一条冒出来的聊天对话短视频

聊天对话模板是一种非常有趣且实用的工具&#xff0c;它主要用于制作抖音聊天记录一条一条冒出来的视频。有了聊天对话模板&#xff0c;你再也不需要费心去写剧本&#xff0c;只需输入一些简单的文案&#xff0c;就能自动生成搞笑对话视频。 聊天对话工具下载&#xff1a; htt…

AI配套的技术: 矢量数据库的概念

一、说明 随着人工智能的快速采用和围绕大型语言模型发生的创新&#xff0c;我们需要在所有这些的中心&#xff0c;能够获取大量数据&#xff0c;将其上下文化&#xff0c;处理它&#xff0c;并使其能够有意义地搜索。 为原生整合生成式 AI 功能而构建的生成式 AI 流程和应用程…

前端——html面试题(一)

文章目录 前言一、说说你对 html 语义化的理解。二、html的标签有哪些三、标签类型1、问题&#xff1a;请说说你对块级元素、行内元素、空元素的理解&#xff0c;它们分别都有哪些常见的标签&#xff1f; 总结 前言 说说对html语义化的理解html的标签标签类型 一、说说你对 ht…

【C语言】汉诺塔 —— 详解

一、介绍 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大焚天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大焚天命令婆罗门把圆盘从下面开始按…

2023蓝帽杯半决赛电子取证+CTF部分题解

文章目录 电子取证123456789101112131415 CTFWeb | MyLinuxBotWeb | AirticleShareCrypto | ezrsaPwn | AdminPwn | uafmisc|排排坐吃吃果果 电子取证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CTF Web | MyLinuxBot Web | AirticleShare import requests import times reques…

lv7 嵌入式开发-网络编程开发 05 字节序及IP地址转换

目录 1 主机字节序和网络字节序 1.1 什么是字节序&#xff1f; 1.2 查看主机字节序 2 字节序转换函数 3 IP地址字节序转换函数 4 练习 1 主机字节序和网络字节序 1.1 什么是字节序&#xff1f; 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序&a…

不做静态化,当部署到服务器上的项目刷新出现404【已解决】

当线上项目刷新出现404页面解决方法&#xff1a; 在nginx配置里加入这样一段代码 try_files $uri $uri/ /index.html; 它的作用是尝试按照给定的顺序访问文件 变量解释 try_files 固定语法 $uri 指代home文件(ip地址后面的路径&#xff0c;假如是127.0.0.1/index/a.png&…

【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究

前言 随着金秋时节的来临&#xff0c;国庆和中秋的双重喜庆汇聚成一片温暖的节日氛围。在这个美好的时刻&#xff0c;我们有幸共同迎来一次长达8天的假期&#xff0c;为心灵充电&#xff0c;为身体放松&#xff0c;为未来充实自己。今年的国庆不仅仅是家国团聚的时刻&#xff…

信息安全:网络安全审计技术原理与应用.

信息安全&#xff1a;网络安全审计技术原理与应用. 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后“安全保障措施&#xff0c;保存网络安全事件及行为信息&#xff0c;为网络安全事件分析提供线…