找回密码
 立即注册
12
返回列表 发新帖
收起左侧
楼主: tovax

怎么判断串口以发送完毕?

27
回复
23909
查看
[复制链接]
累计签到:256 天
连续签到:1 天
2015-10-31 14:02:42 显示全部楼层
tovax 发表于 2015-10-31 08:54
恩恩,我也是纠结这个问题,主机发送完请求信息后,设备立刻就返回了应答信息。如果设置读写模式的话,主 ...

通过协议分离数据这不是协议的作用么、、、、、、
回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-10-31 14:05:14 显示全部楼层
tovax 发表于 2015-10-31 08:51
由于设备端已经把协议定好了,主机端只能配合设备的通信过程。

按照基本的协议模式,应该包括包头包尾一些标识,你每次接收到之后去判断这个包头和包尾,取出中间就是返回的数据了
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-10-31 17:25:11 显示全部楼层
tovax 发表于 2015-10-31 09:16
connect的时候也没有指明发6个字符后触发槽,QT怎么知道这个参数“6”呢?

其实这个信号是这样,,,比如:你这次向串口写了50个字符,,那么发送完50个字符号,这个信号就自动触发了,QT当然知道这次串口发了多少字符,这个信号的参数不是你人为控制的,是串口本次发送了多少有效数据!
回复

使用道具 举报

累计签到:27 天
连续签到:1 天
2015-10-31 19:22:20 显示全部楼层
z55716368 发表于 2015-10-31 14:02
通过协议分离数据这不是协议的作用么、、、、、、

实在不行的话,就在主机端把协议数据分离处理了。协议是没法改进的,这个协议没有标准协议那么规范,因为设备端的单片机程序空间受限,必须用几百个字节的代码实现相对比较多的功能,主机端只能将就她了。。
回复

使用道具 举报

累计签到:27 天
连续签到:1 天
2015-10-31 19:29:48 显示全部楼层
qq1043068972 发表于 2015-10-31 17:25
其实这个信号是这样,,,比如:你这次向串口写了50个字符,,那么发送完50个字符号,这个信号就自动触发了,QT当 ...

杯具了,我竟然没懂。。。奔着做技术的“厚脸皮”精神,我再烦你一下吧:我向串口写了50个字符,QT为什么在50个字符发送完后触发呢,为什么不是49,48呢?还有,既然是入口参数,为什么不用传递数据给她呢?(可能问的太弱了,我对这个太外行了,但愿不会气到你)

点评

50只是举个例子,,他是这样的 比如串口对象是 MyCom吧,字符是QString str="qingdao"; MyCom->write(str),执行完write方法后(发送了7个字符),这时候ByteWritten(qint64),信号就发射了,实际信号以这种形式ByteWritten  详情 回复 发表于 2015-11-1 16:43
回复

使用道具 举报

累计签到:27 天
连续签到:1 天
2015-11-11 14:08:33 显示全部楼层
qq1043068972 发表于 2015-11-1 16:43
50只是举个例子,,他是这样的  比如串口对象是  MyCom吧,字符是QString str="qingdao"; MyCom->write(str) ...

QString str1 = "1234567890";
QString str2 = "0987654321";
MyCom->write(str1);
MyCom->write(str2);

请问为什么MyCom->write(str1)没有触发槽呢,MyCom->write(str2)之后才触发了?

点评

这个可能是有关于QT的底层实现问题了,,你写了一次,接着又写了一次,,要知道这两条语句的间隔很小,,,,底层估计是当成一句了吧!!!你延时一下试试....?呵呵  详情 回复 发表于 2015-11-11 15:44
回复

使用道具 举报

累计签到:615 天
连续签到:1 天
2015-11-11 15:44:48 显示全部楼层
tovax 发表于 2015-11-11 14:08
QString str1 = "1234567890";
QString str2 = "0987654321";
MyCom->write(str1);

这个可能是有关于QT的底层实现问题了,,你写了一次,接着又写了一次,,要知道这两条语句的间隔很小,,,,底层估计是当成一句了吧!!!你延时一下试试....?呵呵
回复

使用道具 举报

累计签到:27 天
连续签到:1 天
2015-11-11 19:03:06 显示全部楼层
qq1043068972 发表于 2015-11-11 15:44
这个可能是有关于QT的底层实现问题了,,你写了一次,接着又写了一次,,要知道这两条语句的间隔很小,,,,底层 ...

猜测可能是检测“写缓冲区为空”后发射bytesWritten信号,还没找到好的方法验证
回复

使用道具 举报

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

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