Qt串口读数问题,跪求,急等...
小弟新人,使用QtserialPort遇到问题,跪求大神指点~~~问题如下:外设每2ms左右产生一个数据包(400Byte),通过串口向PC不停发送(波特率460800,...
小弟新人,使用Qt serialPort遇到问题,跪求大神指点~~~
问题如下:
外设每2ms左右产生一个数据包(400Byte),通过串口向PC不停发送(波特率460800,1bit stop bit,无校验位),这样每个数据包产生+发送时间大概11ms左右。
PC侧功能如下:
connect(seriPort, SIGNAL(readyRead(), this, SLOT(mySlot()));
QTime time;
int cnt = 0;
mySlot()
{
QByteArray data = seriPort->read(400);
qDebug() << cnt++ << data.length() << time.restart(); // 输出计数,数据长度,距上次零点流逝的时间ms
}
time是QTime类型全局变量。mySlot()把当前时间设为零点,并输出据上次零点逝去的时间,我就是想看看pc侧每次接收400字节数据花费多长时间......当然,期望值肯定是11ms左右。
然后问题来了,实际运行结果是酱婶的:
....
1777 400 86
1778 400 1
1779 400 0
1780 400 1
1781 400 0
1782 400 0
1783 400 0
1784 400 1
1785 400 86
1786 400 1
1787 400 0
1788 400 0
1789 400 0
1790 400 0
1791 400 0
1792 400 0
...
尝试seri->setReadBufferSize(400);也没有效果
跪求:
1)为什么时间不是均匀的11ms,而是86 1 0 1 0 0 0 1这种东东?
2)如何实现均匀的11ms,即,想每次读400Byte用11ms。怎么破??
急等..... 展开
问题如下:
外设每2ms左右产生一个数据包(400Byte),通过串口向PC不停发送(波特率460800,1bit stop bit,无校验位),这样每个数据包产生+发送时间大概11ms左右。
PC侧功能如下:
connect(seriPort, SIGNAL(readyRead(), this, SLOT(mySlot()));
QTime time;
int cnt = 0;
mySlot()
{
QByteArray data = seriPort->read(400);
qDebug() << cnt++ << data.length() << time.restart(); // 输出计数,数据长度,距上次零点流逝的时间ms
}
time是QTime类型全局变量。mySlot()把当前时间设为零点,并输出据上次零点逝去的时间,我就是想看看pc侧每次接收400字节数据花费多长时间......当然,期望值肯定是11ms左右。
然后问题来了,实际运行结果是酱婶的:
....
1777 400 86
1778 400 1
1779 400 0
1780 400 1
1781 400 0
1782 400 0
1783 400 0
1784 400 1
1785 400 86
1786 400 1
1787 400 0
1788 400 0
1789 400 0
1790 400 0
1791 400 0
1792 400 0
...
尝试seri->setReadBufferSize(400);也没有效果
跪求:
1)为什么时间不是均匀的11ms,而是86 1 0 1 0 0 0 1这种东东?
2)如何实现均匀的11ms,即,想每次读400Byte用11ms。怎么破??
急等..... 展开
1个回答
展开全部
你是想计算每次读取400字节数据的时间吗?,如果是那么你的Qtime计数器用错了
QTime time;
timer.start();
// 然后读取数据
QByteArray dataRead = serialport->read(400);
// 然后输出数据及时间
qDebug() << "data" << dataRead->toHex() << "and elapsed" << time.elapsed() << "ms";
更多追问追答
追问
restart()同时具有elapsed() + start()的功能...
另外,兄台,我觉得你这种方法测得的并不是从串口读400Byte字节,而是从内部的buffer读
的。因为理论上来说,依据问题中给出的数据,串口传输400Byte至少需要8~9ms时间,可用
你这种方法实际测得只有1~2ms,比理论值快太多了,不现实...
追答
那怎么能确定是时候发数据,什么时候收数据,这些都不是人为控制的,都是通过串口上报的,而通过信号槽上来的数据本身就带有延迟,我觉得你这种测试时间启动点不好掌握。
leipole
2024-11-29 广告
2024-11-29 广告
作为上海雷普电气有限公司的一员,我们深知温度控制在工业领域的重要性。Arduino温度控制系统凭借其灵活性和易用性,成为我们温控方案中的重要组成部分。该系统通过Arduino控制器与温度传感器相连,实时监测并调整温度,实现精确的温度控制。无...
点击进入详情页
本回答由leipole提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询