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

串口通讯Wirte以后怎样判断数据是否传输完成

5
回复
7264
查看
[复制链接]
累计签到:9 天
连续签到:1 天
来源: 2016-7-24 15:20:56 显示全部楼层 |阅读模式
4Qter豆
问题是这样的,我做的是RS485的串口通讯程序,SendData是发送数据函数,里面主要是通过Wirte函数将数据写入,我在主界面中单独调用SendData函数,我的电机响应没有问题,可是如果我连续调用SendData去发送两组数据,电机就没有响应了,后来我f发送一组数据完以后尝试着让系统sleep(50),电机又有响应了,我想这个问题可能是在调用Wirte函数发送数据以后,数据需要一段时间才能真正写入,而我连续发送的话,第一组数据还没有写完,我的第二组数据又来了,造成了数据的混乱。所以我在开始第二组数据的写入之前,需要判断第一组数据是否已经写入完全,可是QSerialportl类中没有找到判断数据是否写入完成的函数,有没有人能告诉我一个好的解决方法。
附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

这也可能跟你外设有关系吧,,,如果两个write()写在在一起,以计算机的速度,基本就是同一时间发送吧,,能不能按两条数据处理,很得看“接收方”的响应速度
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-7-24 15:20:57 显示全部楼层
这也可能跟你外设有关系吧,,,如果两个write()写在在一起,以计算机的速度,基本就是同一时间发送吧,,能不能按两条数据处理,很得看“接收方”的响应速度
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2016-7-24 19:04:10 显示全部楼层
有吧,,我记得有个信号是  bytesWritten(qint64 bytes) 就是发送完数据 然后发送的一个信号!看名字也知道吧,哈哈!建议你去查查QSerialportl的帮助手册,,内容很多
回复

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-7-24 19:09:15 显示全部楼层
qq1043068972 发表于 2016-7-24 19:04
有吧,,我记得有个信号是  bytesWritten(qint64 bytes) 就是发送完数据 然后发送的一个信号!看名字也知道 ...

我有查看过这个函数,不过有一个奇怪的现象,比如说我发两组数据,write(str1)和wirte(str2),write(str1)完成以后不会触发这个信号,只有当write(str2)以后才会触发这个信号
回复

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-7-24 22:00:41 显示全部楼层
qq1043068972 发表于 2016-7-24 21:01
这也可能跟你外设有关系吧,,,如果两个write()写在在一起,以计算机的速度,基本就是同一时间发送吧,, ...

按照你所说的,我又做了一个实验,我将串口接收和发送两个引脚连起来,也就是计算机给自己发送数据,那么这个响应速度应该够快了,可是还是一样,只有当两组数据发送完了才会触发这个信号
回复

使用道具 举报

累计签到:9 天
连续签到:1 天
2016-7-25 16:07:31 显示全部楼层
fairy_tale 发表于 2016-7-24 22:00
按照你所说的,我又做了一个实验,我将串口接收和发送两个引脚连起来,也就是计算机给自己发送数据,那么 ...

最后终于找到了问题的所以,我所通讯的下位机不支持连发,所以我连续发送两组数据的时候,下位机接收不过来,所以会出现上面的现象
回复

使用道具 举报

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

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