qt 串口粘包_Qt开发串口

2023-11-18

首先,在工程文件里面,

QT += serialport

在头文件里面,

#include

1、配置打开串口

QSerialPort* myserial = new QSerialPort():

this->myserial->setPortName("COM1");//待打开的串口号

this->myserial->setBaudRate(9600,QSerialPort::AllDirections);//设置波特率;QSerialPort::AllDirections:双工

this->myserial->setDataBits(QSerialPort::Data8);//数据位

this->myserial->setParity(QSerialPort::NoParity);//校验位

this->myserial->setStopBits(QSerialPort::OneStop);//停止位

this->myserial->setFlowControl(QSerialPort::NoFlowControl);//流控制

this->myserial->open(QIODevice::ReadWrite);//打开串口

2、发送数据

char test[5] = {0x01,0x02,0x03,0x04,0x05};

myserial.write(test);//发送

3、接收数据

定义一个函数作为槽函数,当接收缓冲区有数据的时候回调此函数。

void ReadBuf()

{

QByteArray dataArray;

dataArray = myserial->readAll();//读取数据

if(!dataArray.isEmpty())

{

QString str;

str = dataArray.toHex();//把数据直接转化为16进制的字符串形式

ui->textEdit->setText(str);

}

}

此外,在打开串口函数里面关联信号与槽。已知,当接收缓冲区有数据的时候,串口对象会发送readyRead信号。

QObject::connect(myserial,&QSerialPort::readyRead,this,&MainWindow::ReadBuf);

4、关闭串口

this->myserial->close();

备注一、自动获取可用串口号,并设置在QComboBox中

1、需要包含头文件

#include

#include

2、自定义函数

QString getcomm(int index, QString keyorvalue)

{

HKEY hKey;

wchar_t keyname[256]; //键名数组

char keyvalue[256]; //键值数组

DWORD keysize,type,valuesize;

int indexnum;

QString commresult;

if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0)

{

QString error="Cannot open regedit!";

return error;

}

QString keymessage;//键名

QString message;

QString valuemessage;//键值

indexnum = index;//要读取键值的索引号

keysize = sizeof(keyname);

valuesize = sizeof(keyvalue);

if (RegEnumValue(hKey, indexnum, keyname, &keysize, 0, &type, (BYTE*)keyvalue, &valuesize) == 0)

{

for (int i=0; i

{

message = keyname[i];

keymessage.append(message);

}

for (int j=0; j

{

if (keyvalue[j] != 0x00)

valuemessage.append(keyvalue[j]);

}

if (keyorvalue == "key")

commresult = keymessage;

if (keyorvalue == "value")

commresult=valuemessage;

}

else

commresult = "nokey";

RegCloseKey(hKey);//关闭注册表

return commresult;

}

3、将可用串口放在QComboBox里面

void MainWindow::InitInterface()

{

QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";

QSettings *settings = new QSettings(path, QSettings::NativeFormat);

QStringList key = settings->allKeys();

QStringList comlist;

comlist.clear();

/* 取串口名 */

for (int i=0; i

comlist << getcomm(i, "value");

ui->comboBox->addItems(comlist);

}

PS:

1、波特率9600意思是每秒最多传输9600/8=1200个字节;

2、如何解决粘包:(以传输ascii为例)

1)、接收数据,如果数据长度刚好为协议那么长,则直接解析

2)、如果长度不正确就把此包追加到本地变量中,然后判断根据报文头的位置把本地变量去掉报文头前面的数据(QString::mid)

3)、判断长度是否足够(并且本地变量的头是协议头),如果足够则取本地变量前n个数据进行解析,并将本地变量去掉这个包;如果不是协议头则清空此变量,再次进行循环

PS:开发流程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt 串口粘包_Qt开发串口 的相关文章

随机推荐

  • 在Windons子系统ubuntu中安装ssh(保姆级教程)

    1 什么是ssh SSH Secure Shell 是一种用于远程登录和安全文件传输的网络协议 SSH服务是在计算机上运行的服务程序 它允许用户通过网络安全地远程访问计算机并执行各种操作 以下是关于SSH服务的一些重要信息 远程登录 SSH
  • 流操作

    StreamReader 与 FileStream 的区别用法 有关StreamReader的内容参考http blog sina com cn s blog 796ffec50100te51 html StreamReader 旨在以一种
  • “互联网+”最可行的路径就是“社群+”

    互联网 最可行的路径就是 社群 36氪的朋友们 2016 04 05 17 04 文章摘要 商业正从物以类聚走向人以群分 编者按 本文作者 卢彦 原文来自微信公众号 互联网思维 ID webthinking 36 氪经授权转载 前不久阿里
  • 【C++】通讯录管理系统

    1 系统功能介绍与展示 2 创建项目 3 菜单功能 代码 封装函数显示该界面 如 void showMenu 在main函数中调用封装好的函数 include
  • jmeter批量上传图片, csv文件参数化——详细讲解

    我们在测试的过程中 需要把图片放到请求中 而且还需要不一样的图片 批量修改图片后缀 我们也可以吧文件生成我们想要的后缀 1 首先创建一个文本txt 在文本中输入 ren jpg png 然后把txt的文件 修改 成bat后缀的 进行双击 在
  • 关于Altium Designer PCB元器件的3D封装

    关于Altium Designer PCB元器件的3D封装 虽然Altium Designer为我们提供了丰富的元件封装库资源 但是 在实际的电路设计中电子元器件技术的不断更新换代 有些特定的元器件封装仍需要我们自行制作 另外 有时根据工程
  • python3 中 dict和list 效率比较

    import time def count time func def int time args kwargs start time time time 程序开始时间 res func args kwargs over time time
  • 给 Ubuntu 操作系统配置静态 IP

    针对 Ubuntu 22 04 3 操作系统的静态 IP 配置 一 查看初始的网络信息 查看网卡名称 ifconfig 查看网关信息 route n 二 编辑网络配置文件 编辑文件 配置文件的名称可能不一样 自己去 etc netplan
  • 手把手教你Modelsim仿真【2020.4版本】

    首先新建一个文件夹 test5 打开Modelsim 依次选择 File gt Change Directory 把目录选择到创建的 test5 文件夹 创建库 依次选择 File gt New gt Library 一般我们选择第三个 库
  • 软文营销如何吸引用户情感意识引起共鸣

    当今互联网营销铺天盖地 自网络开始普及后 网络营销发展速度非常快 然而 我们需要在众多营销中取胜就需要技术创新 不管平台如何变化 有一个要素仍然至关重要 写好广告文案 因为文案内容才是读者了解你的关键所在 今天178软文网小编将分享我们最好
  • 大模型开发:从数据挖掘到智能应用

    在当今的数字化时代 数据的生成和处理已经成为一项重要的战略任务 随着大数据技术的发展 企业 组织以及个人对海量数据的需求越来越大 这也就催生了数据挖掘算法模型开发的快速发展 数据挖掘算法模型开发是一种从大量数据中提取有价值信息的过程 这些信
  • 国服ps4如何修改服务器地址,国服ps4如何修改服务器地址

    国服ps4如何修改服务器地址 内容精选 换一换 本节介绍如何查看云服务器的mac地址 云服务器的mac地址不支持修改 登录Linux云服务器 执行以下命令 查看云服务器的mac地址 ifconfig查看MAC地址ifconfig登录Linu
  • 【3分钟速读】运营到底是干啥的?

    欢迎关注天善智能 我们是专注于商业智能BI 人工智能AI 大数据分析与挖掘领域的垂直社区 学习 问答 求职一站式搞定 作者 陈老师 在咨询行业打拼了10 年 在如何诊断经营问题 建立分析体系 解决专项问题上有超过30个大型项目积累与实战 天
  • 时间序列预测(一)基于Prophet的销售额预测

    时间序列预测 一 基于Prophet的销售额预测 小O 小H 有没有什么方法能快速的预测下未来的销售额啊 小H Facebook曾经开源了一款时间序列预测算法fbprophet 简单又快速 传统的时间序列算法很多 例如AR MA ARIMA
  • 创建对象的几种方式

    一 工厂模式 工厂模式解决了创建相似对象的问题 但却没有解决对象识别的问题 怎样知道一个对象的类型 function createPerson name age job var o new Object o name name o age
  • 走进大数据,感受大数据

    摘要 大数据时代已经到来 现阶段 我国大数据产业发展如何 大数据应用领域在哪 大数据价值在哪里 带着这些疑问 走进大数据 感受大数据带来的神奇魔力 关注作者 需要大数据学习视频资料 其他文章可以找到大师组织 2017年9月8日 腾讯董事会主
  • shapley和树的shap

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 shapley and shap Shapley交互阶的计算 关于树结构Shap的计算 Shapley交互阶的计算 首先一阶的计算公式 二阶 交互值 计算 三阶计算 一般式
  • Qt-窗口消息处理机制及拦截消息的五种方法

    Qt 拦截消息的五种方法 覆写框架类QCoreApplication的notify函数 这个函数将得到整个框架中所有窗口的消息 给框架类安装一个消息过滤器 QCoreApplication gt nativeEventFilter filt
  • java中创建类的数组

    例题 定义一个People类 要求如下 1 成员变量 name height weight 分别表示姓名 身高 cm 和体重 kg 2 构造方法通过参数实现对成员变量的赋初值操作 3 成员方法int check 该方法返回0 1 1 分别表
  • qt 串口粘包_Qt开发串口

    首先 在工程文件里面 QT serialport 在头文件里面 include 1 配置打开串口 QSerialPort myserial new QSerialPort this gt myserial gt setPortName CO