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

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

3天内不再提示

基于Qt实现的串口示波器

凡亿PCB 来源:果果小师弟 作者:果果小师弟 2022-06-12 15:34 次阅读

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

Sailor Project功能说明

48698448-e9e0-11ec-ba43-dac502259ad0.png

串口调试助手功能

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

操作说明

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

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

TCPServer界面

488946fc-e9e0-11ec-ba43-dac502259ad0.png48985ee4-e9e0-11ec-ba43-dac502259ad0.png48acebca-e9e0-11ec-ba43-dac502259ad0.png48ba99be-e9e0-11ec-ba43-dac502259ad0.png48cc7134-e9e0-11ec-ba43-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、帧头详细定义

48e29c52-e9e0-11ec-ba43-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;
}

软件截图

48f219fc-e9e0-11ec-ba43-dac502259ad0.png49092566-e9e0-11ec-ba43-dac502259ad0.png491dee6a-e9e0-11ec-ba43-dac502259ad0.png49342216-e9e0-11ec-ba43-dac502259ad0.png

项目开源地址:

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


原文标题:一个开源的QT的串口示波器,很nice!

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

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

    关注

    111

    文章

    5650

    浏览量

    181775
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74513
  • Qt
    Qt
    +关注

    关注

    1

    文章

    299

    浏览量

    37339

原文标题:一个开源的QT的串口示波器,很nice!

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

收藏 人收藏

    评论

    相关推荐

    基于QT串口调试工具设计

    串口通信是我们经常会遇到的问题。很多时候当我们设计一个串口应用时,我们希望有一个简便的、可视的方式来验证它。这一篇中我们就来基于QT设计一个串口调试工具。
    的头像 发表于 12-13 14:37 1300次阅读
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>调试工具设计

    QT串口通信的简单使用

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

    Qt串口通信专题教程

    这是一个关于在Qt Creator下进行串口通信软件开发的专题教程,能够帮助你快速的开发有关的串口应用。
    发表于 05-04 14:37 24次下载

    基于Qt串口通信应用研究与实现严贤

    基于Qt串口通信应用研究与实现_严贤
    发表于 03-17 08:00 3次下载

    基于RS232串口实现PIC单片机下位机与QT上位机通信

    基于RS232串口实现PIC单片机下位机与QT上位机通信
    发表于 11-16 12:21 21次下载
    基于RS232<b class='flag-5'>串口实现</b>PIC单片机下位机与<b class='flag-5'>QT</b>上位机通信

    Qt小项目之串口助手控制LED

    最近刚学了一点Qt开发上位机,尝试着做个小软件练练手。查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支...
    发表于 01-26 18:21 1次下载
    <b class='flag-5'>Qt</b>小项目之<b class='flag-5'>串口</b>助手控制LED

    【飞凌OKA40i-C开发板试用体验】QT实现串口助手

    本文来源电子发烧友社区,作者:刘建华, 帖子地址: https://bbs.elecfans.com/jishu_2308758_1_1.html 【目的】用QT实现一个串口助手。 因为我的项目
    的头像 发表于 10-19 11:21 749次阅读
    【飞凌OKA40i-C开发板试用体验】<b class='flag-5'>QT</b><b class='flag-5'>实现</b><b class='flag-5'>串口</b>助手

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

    注意由于QT自带文本显示窗口加载大量数据后会造成软件卡顿,现解决方案为设定一个显示缓冲区,在有刷新数据阶段(即串口接收数据阶段),如果需要保持刷新状态(即实时显示接收得数据),则仅显示显示缓冲区的内容,你可以使用鼠标移动向上滚动条,停止数据刷新
    的头像 发表于 11-25 10:28 697次阅读

    一个开源的QT串口示波器案例

    通信方式是串口,配置为波特率115200, 8位数据位, 1位停止位, 无硬件流控, 无校验位。
    发表于 02-09 10:08 928次阅读

    基于QT串口小助手开发

    QT开发一个串口小助手,要求能实现串口接收,发送等基本功能。
    的头像 发表于 04-04 15:07 1106次阅读
    基于<b class='flag-5'>QT</b>的<b class='flag-5'>串口</b>小助手开发

    Qt实现串口通信

    实现串口通信,需要知道串口通信需要的信息
    的头像 发表于 04-23 17:34 3196次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>实现</b><b class='flag-5'>串口</b>通信

    QTQT上位机串口编程

    QTQT上位机串口编程 最近因为项目需要,需要用到上位机,通过串口与上位机进行通讯,来上传和下发一些数据以及控制指令,所以用QT写了一
    发表于 05-08 10:02 20次下载
    <b class='flag-5'>QT</b>篇<b class='flag-5'>QT</b>上位机<b class='flag-5'>串口</b>编程

    QT实现简单的上位机软件

    最近项目要求写上位机软件,需要实现界面功能和串口读写。界面方面用过MFC(早忘记了),网上查阅资料后发现QT在5.1版本后有自带的串口模块,而且用Q
    发表于 05-08 09:54 4次下载
    <b class='flag-5'>QT</b><b class='flag-5'>实现</b>简单的上位机软件

    QT5串口编程——编写简单的上位机

    下面开始介绍串口类的使用。 首先,QT5是自带QSerialPort这个类的,使用时需要在pro文件里面添加一行: ​然后直接引用头文件就可以了。 ​在QT5中,串口通信是借助
    发表于 05-10 14:28 0次下载
    <b class='flag-5'>QT</b>5<b class='flag-5'>串口</b>编程——编写简单的上位机

    Qt5实现上位机与串口通信

    Qt助手内搜索:Qt Serial Port为串口的相关函数  1.添加串口头文件: # include //使用串口功能# inc
    发表于 05-10 10:46 0次下载
    <b class='flag-5'>Qt</b>5<b class='flag-5'>实现</b>上位机与<b class='flag-5'>串口</b>通信