百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

Qt开发小工具之三串口设备调试工具

liebian365 2024-10-17 13:59 6 浏览 0 评论

一、前言

这个为什么叫串口设备调试工具而不是串口调试工具,是因为这个工具比网络上的串口调试工具多出了一些真实需要的用来调试设备的功能,首先一点就是大部分的串口调试工具收到数据都是立即返回,这样的数据都是连着的,头一条数据和后一条数据头尾相连,对于调试着来说要看数据非常麻烦,而且在不断有数据过来时,要停下来看数据除非关闭串口,而不能在打开串口的时候看数据,因为不断有数据过来冲掉前面的数据显示,甚至有些还不能最大化等等情况,这个工具是根据将近四年的与硬件通信这块开发工具的切身实际需求量身定做的,还能模拟设备立即回复数据。之前很多QT开发的版本源码分成两套,一套在windows下编译,一套在linux下编译,甚至麻烦,虽然QT5.1之后的版本自带了串口通信类,本人测试过,貌似还有小问题,在快速收发数据时容易卡住,这次带来的源码不用做任何改动即可在多个平台编译。

二、项目环境

项目名称:串口设备调试工具

开发环境:WIN7+QT4.7+QT CREATOR2.8+MINGW

已编译通过测试平台:XP、Win7、ubuntu、tiny210

技术实现:通过第三方串口通信类,解析协议并作出处理

三、基本功能

1:支持16进制数据发送与接收。

2:支持windows下COM9以上的串口通信。

3:自动加载对应操作系统串口号。

4:实时显示收发数据字节大小以及串口状态。

四、高级功能

1:可自由管理需要发送的数据,每次只要从下拉框中选择数据即可,无需重新输入数据。

2:可模拟设备回复数据,需要在主界面开启模拟设备回复数据。当接收到设置好的指令时,立即回复设置的回复指令。例如指定收到0x16 0x00 0xFF 0x01需要回复0x16 0x00 0xFE 0x01,则只需要在SendData.txt中添加一条数据16 00 FF 01:16 00 FE 01即可。

3:可定时发送数据和保存数据到文本文件:,默认间隔5秒钟,可更改间隔时间。

4:在不断接收到大量数据时,可以暂停显示数据来查看具体数据,后台依然接收数据但不处理,无需关闭串口来查看已接收到的数据。

5:每次收到的数据都是完整的一条数据,而不是脱节的,做了延时处理。

6:一套源码随处编译,无需更改串口通信类,已在XP/WIN7/UBUNTU/ARMLINUX系统下成功编译并运行。

五、运行截图

六、开发步骤

第一步:布局好界面,控件命名好,建议用pascal命名法。

第二步:准备unix和windows串口通信第三方类qextserialport.h、qextserialport.cpp、qextserialport_global.h、qextserialport_p.h、qextserialport_unix.cpp、qextserialport_win.cpp。

第三步:初始化主界面,自动加载对应串口号波特率等信息。

第四步:采用定时器读取串口数据,其实也可以采用事件机制,在几大平台也测试通过事件来收数据也可以,但是在windows下在快速收发大量数据时候居然会卡住,同样的代码在linux表现很好,不明原因,后面采用定时器读取机制,问题就没有了。

void frmMain::ReadMyCom()
{
 //这个判断尤为重要,否则的话直接延时再接收数据,空闲时和会出现高内存占用
 if (myCom->bytesAvailable()<=0){return;}
 
 myHelper::Sleep(100);//延时100毫秒保证接收到的是一条完整的数据,而不是脱节的
 QByteArray buffer=myCom->readAll();
 
 if (IsShow)
 {
 if (IsHexReceive)
 {
 QString tempDataHex=myHelper::ByteArrayToHexStr(buffer);
 ui->txtDataHex->append(QString("接收:%1 时间:%2")
 .arg(tempDataHex)
 .arg(QTime::currentTime().toString("HH:mm:ss")));
 
 if (IsDebug)//2013-8-6增加接收数据后转发数据,模拟设备
 {
 foreach(QString tempData,SendDataList)
 {
 QStringList temp=tempData.split(';');
 if (tempDataHex==temp[0])
 {
 //这里没有跳出循环,有可能一条数据会对应多条数据需要转发
 myCom->write(myHelper::HexStrToByteArray(temp[1]));
 }
 }
 }
 }
 else
 {
 QString tempDataNormal=QString(buffer);
 ui->txtDataHex->append(QString("接收:%1 时间:%2")
 .arg(tempDataNormal)
 .arg(QTime::currentTime().toString("HH:mm:ss")));
 
 if (IsDebug)//2013-8-6增加接收数据后转发数据,模拟设备
 {
 foreach(QString tempData,SendDataList)
 {
 QStringList temp=tempData.split(';');
 if (tempDataNormal==temp[0])
 {
 //这里没有跳出循环,有可能一条数据会对应多条数据需要转发
 myCom->write(temp[1].toAscii());
 }
 }
 }
 }
 
 ReceiveCount=ReceiveCount+buffer.size();
 ui->labReceive->setText(QString("接收:%1 字节").arg(ReceiveCount));
 }
}
void frmMain::WriteMyCom()
{
 QString str=ui->txtSend->currentText();
 if (str==""){ui->txtSend->setFocus();return;}//发送数据为空
 if (!myCom->isOpen()) { return; }//串口没有打开
 
 QByteArray outData=str.toAscii();
 int size=outData.size();
 
 if (IsHexSend)//转化为16进制发送
 {
 outData=myHelper::HexStrToByteArray(str);
 size=outData.size();
 myCom->write(outData);
 }
 else
 {
 size=outData.size();
 myCom->write(outData);
 }
 
 ui->txtDataHex->append(QString("发送:%1 时间:%2")
 .arg(str)
 .arg(QTime::currentTime().toString("HH:mm:ss")));
 
 SendCount=SendCount+size;
 ui->labSend->setText(QString("发送:%1 字节").arg(SendCount));
 
 if (IsAutoClear)
 {
 ui->txtSend->setCurrentIndex(-1);
 ui->txtSend->setFocus();
 }
}
 
void frmMain::SaveMyCom()
{
 QString tempData=ui->txtDataHex->toPlainText();
 if (tempData==""){return;}//如果没有内容则不保存
 
 QDateTime now=QDateTime::currentDateTime();
 QString name=now.toString("yyyyMMddHHmmss");
 QString fileName=name+".txt";
 
 QFile file(fileName);
 file.open(QFile::WriteOnly | QIODevice::Text);
 QTextStream out(&file);
 out<<tempData;
 file.close();
}

相关推荐

快递查询教程,批量查询物流,一键管理快递

作为商家,每天需要查询许许多多的快递单号,面对不同的快递公司,有没有简单一点的物流查询方法呢?小编的回答当然是有的,下面随小编一起来试试这个新技巧。需要哪些工具?安装一个快递批量查询高手快递单号怎么快...

一键自动查询所有快递的物流信息 支持圆通、韵达等多家快递

对于各位商家来说拥有一个好的快递软件,能够有效的提高自己的工作效率,在管理快递单号的时候都需要对单号进行表格整理,那怎么样能够快速的查询所有单号信息,并自动生成表格呢?1、其实方法很简单,我们不需要一...

快递查询单号查询,怎么查物流到哪了

输入单号怎么查快递到哪里去了呢?今天小编给大家分享一个新的技巧,它支持多家快递,一次能查询多个单号物流,还可对查询到的物流进行分析、筛选以及导出,下面一起来试试。需要哪些工具?安装一个快递批量查询高手...

3分钟查询物流,教你一键批量查询全部物流信息

很多朋友在问,如何在短时间内把单号的物流信息查询出来,查询完成后筛选已签收件、筛选未签收件,今天小编就分享一款物流查询神器,感兴趣的朋友接着往下看。第一步,运行【快递批量查询高手】在主界面中点击【添...

快递单号查询,一次性查询全部物流信息

现在各种快递的查询方式,各有各的好,各有各的劣,总的来说,还是有比较方便的。今天小编就给大家分享一个新的技巧,支持多家快递,一次能查询多个单号的物流,还能对查询到的物流进行分析、筛选以及导出,下面一起...

快递查询工具,批量查询多个快递快递单号的物流状态、签收时间

最近有朋友在问,怎么快速查询单号的物流信息呢?除了官网,还有没有更简单的方法呢?小编的回答当然是有的,下面一起来看看。需要哪些工具?安装一个快递批量查询高手多个京东的快递单号怎么快速查询?进入快递批量...

快递查询软件,自动识别查询快递单号查询方法

当你拥有多个快递单号的时候,该如何快速查询物流信息?比如单号没有快递公司时,又该如何自动识别再去查询呢?不知道如何操作的宝贝们,下面随小编一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号若干...

教你怎样查询快递查询单号并保存物流信息

商家发货,快递揽收后,一般会直接手动复制到官网上一个个查询物流,那么久而久之,就会觉得查询变得特别繁琐,今天小编给大家分享一个新的技巧,下面一起来试试。教程之前,我们来预览一下用快递批量查询高手...

简单几步骤查询所有快递物流信息

在高峰期订单量大的时候,可能需要一双手当十双手去查询快递物流,但是由于逐一去查询,效率极低,追踪困难。那么今天小编给大家分享一个新的技巧,一次能查询多个快递单号的物流,下面一起来学习一下,希望能给大家...

物流单号查询,如何查询快递信息,按最后更新时间搜索需要的单号

最近有很多朋友在问,如何通过快递单号查询物流信息,并按最后更新时间搜索出需要的单号呢?下面随小编一起来试试吧。需要哪些工具?安装一个快递批量查询高手快递单号若干怎么快速查询?运行【快递批量查询高手】...

连续保存新单号功能解析,导入单号查询并自动识别批量查快递信息

快递查询已经成为我们日常生活中不可或缺的一部分。然而,面对海量的快递单号,如何高效、准确地查询每一个快递的物流信息,成为了许多人头疼的问题。幸运的是,随着科技的进步,一款名为“快递批量查询高手”的软件...

快递查询教程,快递单号查询,筛选更新量为1的单号

最近有很多朋友在问,怎么快速查询快递单号的物流,并筛选出更新量为1的单号呢?今天小编给大家分享一个新方法,一起来试试吧。需要哪些工具?安装一个快递批量查询高手多个快递单号怎么快速查询?运行【快递批量查...

掌握批量查询快递动态的技巧,一键查找无信息记录的两种方法解析

在快节奏的商业环境中,高效的物流查询是确保业务顺畅运行的关键。作为快递查询达人,我深知时间的宝贵,因此,今天我将向大家介绍一款强大的工具——快递批量查询高手软件。这款软件能够帮助你批量查询快递动态,一...

从复杂到简单的单号查询,一键清除单号中的符号并批量查快递信息

在繁忙的商务与日常生活中,快递查询已成为不可或缺的一环。然而,面对海量的单号,逐一查询不仅耗时费力,还容易出错。现在,有了快递批量查询高手软件,一切变得简单明了。只需一键,即可搞定单号查询,一键处理单...

物流单号查询,在哪里查询快递

如果在快递单号多的情况,你还在一个个复制粘贴到官网上手动查询,是一件非常麻烦的事情。于是乎今天小编给大家分享一个新的技巧,下面一起来试试。需要哪些工具?安装一个快递批量查询高手快递单号怎么快速查询?...

取消回复欢迎 发表评论: