关于Qt5 SerialPort串口传输丢失数据问题。

什么是Qt5 serialPort?

虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠,在工业领域中仍然有大量的应用。Qt以前的版本中,没有提供官方的对RS232串口的支持,编写串口程序很不方便。现在好了,在 Qt5.1 中提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。

Qt5 serialPort存在的问题。

在项目中需要编写一个上位机串口接受数据,结果发现接受数据时,使用Qt5serialport会丢失数据。编写程序时参考文章。
http://blog.csdn.net/u014695839/article/details/50611549
然后换用多个版本任然存在此问题。

解决方式。

使用第三方库 qextserialport ,使用这个比较古老的库就不会出现本文所述问题。使用这个库可以参考
http://blog.csdn.net/u010580186/article/details/51595227
这篇文章,这篇文章详细介绍了如何使用。包括加入.h文件,以及加入.cpp文件等。可以先参考第一部来测试是否丢失数据。

如何判断是否丢失数据?

我在上面提到的博文中优化了显示数据,即是可以显示看到是否有数据。数据是否丢失,使用qDebug方法
void MainWindow::readMyCom() //读串口函数
{
//	qDebug() << "进入";
	
	if (myCom->bytesAvailable() >= 56)
	{
		qDebug() << "1";
		QByteArray temp = myCom->readAll();
		//读取串口缓冲区的所有数据给临时变量temp
		ui->textBrowser->insertPlainText(temp);
		qDebug() << temp;
		//将串口的数据显示在窗口的文本浏览器中

		QDataStream out(&temp, QIODevice::ReadWrite);   //将str的数据 读到out里面去
															   //  QVector <QString> tempstr;
		QString tempstr[112];
		// QString buf;
		int i = 0;
		while (!out.atEnd())
		{
			qint8 outChar = 0;
			out >> outChar;   //每次一个字节的填充到 outchar
							  //           qDebug()<<outChar;
							  //           QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0')).toUpper();// + QString(" ");   //2 字符宽度

							  //           tempstr[i] << str;
			tempstr[i] = QString("%1").arg(outChar & 0xFF, 2, 16, QLatin1Char('0')).toUpper();
			//qDebug() << "******";
			//qDebug() << tempstr[i];
			//qDebug() << "******";
			if (i<56)
				i++;
		}
		for(int i = 0; i < 96; i++)
			qDebug()<<tempstr[i];
	}
}

同时还要注意串口是串口几,博文默认的是串口1,但是我的是串口3因此需要改动
myCom = new Win_QextSerialPort("com3", myComSetting, QextSerialBase::EventDriven)



 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值