单片机与VB通信。vb的mscomm控件只接收8字节数据?求助!!!

[复制链接]
6157|6
 楼主| bhsdlmj 发表于 2009-8-5 20:49 | 显示全部楼层 |阅读模式
单片机和PC机的VB的mSCOMM进行串口通信。
其中单片机为主机,VB为从。

单片机每隔200ms发送17字节的帧给VB,VB接收到17字节后,若符合协议,VB发送10字节的帧给单片机。

请问:(1)采用oncomm好呢,还是采用轮询方式好呢?
(2)若采用oncomm事件,令MSComm1.RThreshold = 1,那么 VB先收8个字节,再收8个字节,最后收1个字节,发生了三次oncomm事件。微软技术支持说是因为数据传输需要时间的缘故,见链接http://faq.csdn.net/read/215129.html
但是我发现把波特率更改了变大几倍之后,仍然是上面的“8字节现象”。不知道什么原因?

注:我也觉得微软技术支持说得是对的。因为我用虚拟串口在同一台电脑上面模拟发送和接收,就不会出现“8字节现象”。

现在我的做法是在oncomm程序里面的comEvReceive事件后面 加个延时,针对17个字节延时20毫秒,那么就可以完整接收17个字节了

不知道大家针对这个问题  有什么自己的看法??
渤海三叠浪 发表于 2009-8-6 07:10 | 显示全部楼层
楼主的问题不容易解决 比较麻烦 尤其是8个字节 的那个问题   ,期待好的方法
古道热肠 发表于 2009-8-6 10:33 | 显示全部楼层
俺过去用的是查询长度,做个延时,收到数据后等一会儿,长度够量就处理,处理完全清空串口缓冲.
 楼主| bhsdlmj 发表于 2009-8-6 13:55 | 显示全部楼层
古道热肠 很热心 !!!

多谢你分享经验!!
呆板书生 发表于 2009-8-6 14:01 | 显示全部楼层
协议定长用oncomm,不定长用定时查询
 楼主| bhsdlmj 发表于 2009-8-6 21:13 | 显示全部楼层
为什么延时就好用  好像没有权威的解释。

有个微软全球支持说是和传输时间有关。

我看可能是 数据向缓冲区里面移动的速度可能是个特定的定值。


=======================================================

设置inputlen = 1  不知道能不能搞定?  我明天要好好试验一下!!
 楼主| bhsdlmj 发表于 2009-8-10 08:27 | 显示全部楼层
5# 呆板书生

同意5楼的观点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

351

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部