找回密码
 立即注册
收起左侧

串口读数据问题,跪求大神指点~~~~~~

6
回复
5894
查看
[复制链接]
累计签到:1 天
连续签到:1 天
来源: 2016-10-22 12:04:37 显示全部楼层 |阅读模式
10Qter豆
小弟新人,使用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。怎么破??
急等.....

回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-10-22 12:14:15 显示全部楼层
补充提问:
我的理解,readyRead()信号是串口buffer有新数据来到就会被触发,但是接受400byte应该只用大约10ms就够了,为什么 会用80+ms,似乎,串口是一次性读取了后面8次的数据,而后面只是从buffer里读,所以才出现第一次花费80+ms,后面7次只有0、1ms。但是无法理解原因,最重要的,怎么改怎么改怎么改??
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-10-22 21:05:32 显示全部楼层
try
  1. mySlot()
  2. {
  3.    static QByteArray queuedData;
  4.    queuedData += seriPort->readAll();
  5.    if (queuedData.size() >= 400) {
  6.       qDebug() << cnt++ << queuedData.length() << time.restart();
  7.       queuedData = queuedData.mid(400);
  8.    }
  9. }
复制代码
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-10-24 09:48:22 显示全部楼层
f0g 发表于 2016-10-22 21:05
try

谢谢,不过没有效果...
...
353 34304 85
354 34416 1
355 34528 1
356 34640 1
357 34752 1
358 34864 1
359 34976 1
360 34960 1
361 35072 82
362 35184 1
363 35296 0
364 35408 0
365 35520 1
366 35632 0
367 35744 0
368 35728 1
...
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-10-24 09:58:25 显示全部楼层
ls7165465 发表于 2016-10-24 09:48
谢谢,不过没有效果...
...
353 34304 85

这位兄台,应用场景要求每次读串口400byte的时间都是均匀的11ms左右,而不是85  1  1  1  1  1  1  1 ...这种东东,想请教下,有没有qt外设部分调用的windows api相关的资料?还有windows 对串口管理的原理介绍?
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-10-26 01:17:31 显示全部楼层
从逻辑上来说,这个结果应该是说明你的外设发送频率并非如你所说.
你给的调试信息也很奇怪
353 34304 85
354 34416 1
355 34528 1
中间的数据长度为什么会是这样?
我有在pc上模拟试过,qt的处理应该没有问题.
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-11-28 15:27:15 显示全部楼层
有没有人能告诉一下我,
为什么我按照(Qt编写串口通信程序全程图文讲解 )教程里添加了qextserialport-1.2win-alpha,里的头文件和源文件之后,qtcreator 的运行按钮就变成灰色了,然后我单独构建新添加的源文件时显示“:-1: error: No rule to make target 'debug/win_qextserialport.o'.  Stop.”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了