0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

strongerHuang 来源:果果小师弟 作者:果果小师弟 2022-11-25 10:28 次阅读

逛github时看到这个QT的串口示波器,完全开源,支持串口、TCP、波形显示、通信协议。感觉很不错,跟以前分享的那个vofa+有点像。

Sailor Project功能说明

8a09edd0-6c57-11ed-8abf-dac502259ad0.png

串口调试助手功能

  • 支持传统的串口调试助手的基本收发功能,同时可以刷新大量的数据而不卡顿
  • 支持保存接收的数据
  • 支持最大200条可编辑指令的设置,并用于多条发送
  • 支持定时器发送
  • 支持换行符替换时间戳功能
  • 支持较多的中文编码格式
  • 值得注意的是支持Linux简单的串口调试
  • 支持加载csv表格数据到200条可编辑指令
  • 支持部分窗口配置的保存和重启恢复(前提是你不会删除配置文件)

操作说明

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

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

TCPServer界面

8a14e078-6c57-11ed-8abf-dac502259ad0.png8a1f5558-6c57-11ed-8abf-dac502259ad0.png8a2a8ad6-6c57-11ed-8abf-dac502259ad0.png8a3909b2-6c57-11ed-8abf-dac502259ad0.png8a5d4d04-6c57-11ed-8abf-dac502259ad0.png

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、帧头详细定义

8a6b92a6-6c57-11ed-8abf-dac502259ad0.png

3、串口通信协议

intparse_protocol(protocol_struct*pProtocol,uint16_tparseDataLen)
{
//解析数据,使用前需提前缓冲pProtocol->message_st.pData
intret=-1;
uint16_tpos_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]);
returnPROTOCOL_RESULT_OK;
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>CRC16_Check_Sumerr!
");
returnPROTOCOL_RESULT_CHECK_FRAME_ERR;
}
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
pMessageStruct->data_len,
pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//通过包头计算,还未收到完整的数据包
//PROTOCOL_ERROR_PRINTF("parse_protocol->>data_len[%d]>max_data_len[%d]!
",
//pMessageStruct->data_len,
//pMessageStruct->max_data_len);
returnPROTOCOL_RESULT_OUT_OF_LEN;
}
}
else
{
//待解析BUFF超过预定解析数据容量,避免内存越界
PROTOCOL_ERROR_PRINTF("parse_protocol->>check_protocol_headeerr!
");
returnPROTOCOL_RESULT_CHECK_HEAD_ERR;
}
PROTOCOL_DEBUG_PRINTF("parse_protocol->>check_protocol_headeok!
");
returnPROTOCOL_RESULT_ERR;
}

软件截图

8a7296c8-6c57-11ed-8abf-dac502259ad0.png8a8152ee-6c57-11ed-8abf-dac502259ad0.png8a905078-6c57-11ed-8abf-dac502259ad0.png8aa36d02-6c57-11ed-8abf-dac502259ad0.png

项目开源地址:

https://github.com/SEASKY-Master/vSailorProject
审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    6159

    浏览量

    184253
  • 定时器
    +关注

    关注

    23

    文章

    3229

    浏览量

    114297

原文标题:分享一个开源的QT的串口示波器

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    示波器如何测试特定的脉冲信号?还在一个个数?

    客户在使用示波器时遇到了这样问题,他测试的信号每间隔段时间就会发出40-70脉冲,但
    的头像 发表于 09-26 08:09 381次阅读
    <b class='flag-5'>示波器</b>如何测试特定的脉冲信号?还在<b class='flag-5'>一个</b>个数?

    QT5+OpenCV4搭建应用开发环境

    作为深度学习算法工程师,必须要掌握应用开发技能吗?搞工程肯定是必须要会界面开发,QT就是很不错的选择。本文以QT5.15 + OpenCV4.8 + OpenVINO2023为例,
    的头像 发表于 07-23 11:23 847次阅读
    <b class='flag-5'>QT</b>5+OpenCV4搭建应用开发环境

    示波器通道的接地探头电压是样的吗?

    在电子测量领域,示波器种重要的仪器,用于观察和测量电信号的波形和幅度。在示波器的测量中,通常会使用探头来连接被测电路,而探头的接地引线则是
    的头像 发表于 06-24 10:19 423次阅读
    <b class='flag-5'>示波器</b>两<b class='flag-5'>个</b>通道的接地探头电压是<b class='flag-5'>一</b>样的吗?

    如何使用示波器测量串口波特率

    在通信和电子测量领域,串口波特率是至关重要的参数,它决定了数据在串行通信线上的传输速率。使用示波器来测量串口波特率是
    的头像 发表于 05-27 16:25 4051次阅读

    示波器的带宽是什么 示波器带宽选择的技巧

    示波器的带宽是示波器性能的重要指标,它指的是示波器可以准确地测量和显示信号的最高频率。
    的头像 发表于 05-20 15:37 1090次阅读

    做了 log 日志触发器控制示波器

    日常工作中,经常遇到需要在软件出错时抓到当时的波形,靠人看太费劲,就搞了触发器,可以直接读取串口日志,并在检测到关键字时控制 GPI
    发表于 03-21 21:42

    Qt上位机开发实战案例

    Qt Creator是用于Qt开发的轻量级跨平台集成开发环境。 Qt Creator可带来两大关键益处: 提供首个专为支持跨
    的头像 发表于 03-13 12:31 2098次阅读
    <b class='flag-5'>Qt</b>上位机开发实战案例

    Qt For OpenHarmony图形化的进展突破

    Qt 适配 OpenHarmony 意义 Qt C++ 跨平台开发框架,主要用于开发图形用户界面(Graphical User Interface,GUI)程序,具有跨平台类库
    的头像 发表于 02-02 14:29 1320次阅读
    <b class='flag-5'>Qt</b> For OpenHarmony图形化的进展突破

    QT串口通信的简单使用

    QT串口通信是上位机和下位机通信常用的通信方式, 也是学习QT必须学会的基础知识, 这篇就简单介绍QT
    的头像 发表于 01-15 09:27 1747次阅读
    <b class='flag-5'>QT</b><b class='flag-5'>串口</b>通信的简单使用

    【干货】示波器串口数据

    (低电平),数据位8bit,奇偶校验位(般不加),停止位1bit(高电平)。 所以我选择的数据帧格式为: 1bit起始位+8bit数据位+1bit停止位(大多数都是这样)  首先看示波器
    的头像 发表于 01-12 08:40 1058次阅读
    【干货】<b class='flag-5'>示波器</b>扒<b class='flag-5'>串口</b>数据

    示波器最重要的三参数

    示波器的三重要参数是:带宽、采样率、存储深度。1,带宽示波器带宽的定义没有变,就是输入正弦波,保持幅度不变,增加信号频率,当
    的头像 发表于 01-01 08:00 4367次阅读
    <b class='flag-5'>示波器</b>最重要的三<b class='flag-5'>个</b>参数

    ​【AWTK开源智能串口屏方案】方案介绍和工作原理

    本篇文章介绍下AWTK开源智能串口屏方案的基本原理和实际使用效果,包括主要特点、应用场景、工作原理以及简单的Demo演示。引言:AWTK-HMI是基于AWTK与AWTK-MVVM开发的低代码智能
    的头像 发表于 12-21 08:24 914次阅读
    ​【AWTK<b class='flag-5'>开源</b>智能<b class='flag-5'>串口</b>屏方案】方案介绍和工作原理

    开源 | 小而美!【aDataFlow】多功能串口工具,数据监听+USB转串口+ESP32烧录器…

    …… 【aDataFlow】多功能串口数据查看器 -  开源分享 - aDataFlow是款好看又好用的多功能串口数据查看/记录器,它的核心为ESP32-S3模块,且外置了程序烧录口
    的头像 发表于 12-15 16:35 3709次阅读
    <b class='flag-5'>开源</b> | 小而美!【aDataFlow】多功能<b class='flag-5'>串口</b>工具,数据监听+USB转<b class='flag-5'>串口</b>+ESP32烧录器…

    AWTK 开源智能串口屏方案

    AWTK开源智能串口屏方案发布,旨在解决传统串口屏诸多痛点,为用户提供更开放、更易用、更强大的开源串口屏方案。基于AWTK和AWTK-MVV
    的头像 发表于 12-02 08:24 863次阅读
    AWTK <b class='flag-5'>开源</b>智能<b class='flag-5'>串口</b>屏方案