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

    文章

    6967

    浏览量

    194686
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121734

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙SIG-Qt技术沙龙成都站成功举办,触觉智能产品方案展示

    ,深圳触觉智能等嘉宾展示了SIG-Qt产品解决方案。SIG-Qt产品解决方案深圳触觉智能科技有限公司,iotdraw方案展示:iotdraw是面向工业设备监控
    的头像 发表于 11-24 13:40 285次阅读
    <b class='flag-5'>开源</b>鸿蒙SIG-<b class='flag-5'>Qt</b>技术沙龙成都站成功举办,触觉智能产品方案展示

    实时示波器和采样示波器的差别

    实时示波器(Real-Time Oscilloscope)又称“单次示波器”,它每次触发时将会捕获完整波形。在次连续记录中,会捕获大量
    的头像 发表于 11-08 10:58 1614次阅读
    实时<b class='flag-5'>示波器</b>和采样<b class='flag-5'>示波器</b>的差别

    开源鸿蒙城市技术沙龙成都站圆满落幕

    10月31日,由开源鸿蒙项目管理委员会(PMC)、开源鸿蒙 SIG-Qt主办,成都中科合迅科技有限公司(以下简称“合迅科技”)支持的“开源鸿蒙城市技术沙龙·成都站”在成都海特国际广场成
    的头像 发表于 11-07 11:14 508次阅读

    LVGL近期很多人问,那它和Qt哪个好?

    最近拜访做工业控制、智能家居的客户时,常被问到同一个问题:嵌入式产品,GUI选LVGL还是Qt? 其实工具选择没有绝对的“好”与“坏”,但选对适配场景的GUI图形用户界面工具,能直接让产品开发效率
    的头像 发表于 09-23 15:54 810次阅读
    LVGL近期很多人问,那它和<b class='flag-5'>Qt</b>哪个好?

    普源示波器DS1102Z-E调试串口通信信号

    ,详解利用DS1102Z-E进行串口信号调试的全流程。   、硬件连接与初步设置 首先需确保示波器与待测串口电路正确连接:使用BNC转接线连接示波
    的头像 发表于 09-17 16:49 717次阅读
    普源<b class='flag-5'>示波器</b>DS1102Z-E调试<b class='flag-5'>串口</b>通信信号

    又短又好用:单片机就串口,如何和多个从机串口通信?串口如何实现主多从?

    即可实现总线。 但是有时候由于些原因不得不也想到另种设计,即让串口实现主多从这种总线设计。比如板内主MCU只有
    的头像 发表于 09-17 11:49 869次阅读
    又短又好用:单片机就<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>串口</b>,如何和多个从机<b class='flag-5'>串口</b>通信?<b class='flag-5'>串口</b>如何实现<b class='flag-5'>一</b>主多从?

    如何用QT开发USB3.0上位机?

    如何用QT开发USB3.0上位机
    发表于 05-21 06:54

    ThunderScope:开源的、优雅的、便携的专业级示波器

    的、高性价比的专业示波器。目前已经迭代了多个版本,在 Aleksa 和开源社区的努力下,产品日趋完善。 示波器有两主要版本,一个是便携的盒
    的头像 发表于 04-29 16:43 1998次阅读
    ThunderScope:<b class='flag-5'>开源</b>的、优雅的、便携的专业级<b class='flag-5'>示波器</b>

    EtherCAT运动控制器实时数据的Qt示波器

    基于QT开发调用正运动函数接口实现控制器数据实时监测的示波器效果
    的头像 发表于 04-17 17:12 572次阅读
    EtherCAT运动控制器实时数据的<b class='flag-5'>Qt</b><b class='flag-5'>示波器</b>

    【技术案例】Qt 环境部署 - Ubuntu 篇

    什么是QtQt跨平台C++图形用户界面应用程序开发框架,可构建高性能的桌面、移动及Web应用程序,也可用于开发非GUI程序,比如控制台工具和服务器。
    的头像 发表于 04-16 17:17 1439次阅读
    【技术案例】<b class='flag-5'>Qt</b> 环境部署 - Ubuntu 篇

    Open Echo:开源的声纳项目

    “  这是还在迭代中的项目。开源的回声测深仪/水深测量仪/声呐系统,适用于水文测绘及科研用途。基于Arduino平台开发并具备良好兼容性  ”   Open Echo 概览 作为持续迭代
    的头像 发表于 03-20 11:14 2014次阅读
    Open Echo:<b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>开源</b>的声纳项目

    使用Labview做一个485串口电子秤程序

    232、485串口通讯是最常见的仪器仪表通讯方式之,本文详细介绍,用Labview编写电子秤的485串口程序.
    发表于 03-06 18:11 0次下载

    用Labview写电子称的485串口程序

    关键词:Labview + 串口程序 232、485串口通讯是最常见的仪器仪表通讯方式之,本文详细介绍,用Labview编写电子秤的
    的头像 发表于 03-06 09:54 1488次阅读
    用Labview写<b class='flag-5'>一</b><b class='flag-5'>个</b>电子称的485<b class='flag-5'>串口</b>程序

    Qt Group发布Qt AI Assistant,助力跨平台UI开发

    为了进步提升跨平台用户界面(UI)开发的效率与便捷性,Qt Group近日推出了款实验性工具——Qt AI Assistant。这款工具的问世,标志着
    的头像 发表于 02-07 13:47 1644次阅读

    Qt Group发布Qt Accelerate,加速数字产品开发进程

    Qt Group近日正式推出了Qt Accelerate,这是款专为快速构建数字应用而设计的解决方案,旨在满足工业制造、移动出行、消费类电子等多个领域的需求。 Qt Accelera
    的头像 发表于 01-13 11:19 929次阅读