关于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  tempstr;
		QString tempstr[112];
		// QString buf;
		int i = 0;
		while (!out.atEnd())
		{
			qint8 outChar = 0;
			out >> outChar;   //每次一个字节的填充到 outchar
							  //           qDebug()<

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



 

你可能感兴趣的:(Qt开发)