首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MScomm控件的有关问题,高分悬赏,多谢

2013-08-14 
MScomm控件的问题,高分悬赏,谢谢该控件有两个属性我有疑问,分别是 InputLen 和 Rthreshold ,我也看了很多

MScomm控件的问题,高分悬赏,谢谢
该控件有两个属性我有疑问,分别是 InputLen 和 Rthreshold ,我也看了很多资料,今天也编了了个程序验证了下,感觉不太理解,拿第二个为例,书上说是当其为0时,不论接收到了多少数据,都不会触发OnComm事件,我验证了 OK!,确实是那样,但是当我设为1时,书上说是系统每收到1个数据就会触发OnComm,我的发送程序是个循环,只要按一下发送按钮,就会一次性发送出去64个数据,是一个BYTE型数组,下位机是单片机,单片机是把收到的电脑数据原封不动返回,下位机程序是没有问题的,我用串口调试助手验证过。现在问题是,当我设Rthreshold 为1,InputLen 为0时,在OnComm事件中,为什么执行 num = MSComm.inbuffercount 后,我在调试中发现 num为64?既然收到一个数据就要触发一次,不是应该连续触发64次,每次监控到的Num都是1吗?求解释 VB串口控件 控件
[解决办法]
第一个问题:
InputLen属性是表示MScomm控件每执行一次MSComm1.Input所最多能够从接收缓冲区中读取的字节的数量,如果为1,那么每次就读取一个,为2就是2个,....100个就是每次最多能够读取100个,当然这个前提条件是接收缓冲区中要有足够的字节可读取。读取一次,就从接收缓冲区中清除掉这些字节打个比方,如果你的串口接收缓冲区中有50个字节,InputLen=4,那么每执行一次Input,就读取4个字节,如此反复执行12次,读取了48个字节,此时串口缓冲区还有两个字节,当第十三次读取接收缓冲区时,就只能读取两个了。
需要特别说明的是,当设置InputLen=0时,表示执行Input时,一次性清空接收缓冲区,也就是有多少读多少。
第二个问题:
Rthreshold属性设置为:0表示当串口接收到数据时,不触发OnComm事件,当设置非0时,就是当接收缓冲区每接收到这么多个字节时就触发一次OnComm事件。一般情况下,在Rthreshold不等于0的情况下,处理接收数据的代码都放在OnComm事件中。

请参考:
http://download.csdn.net/detail/veron_04/1262066
http://download.csdn.net/detail/veron_04/3601715


[解决办法]
Rthreshold = 1 并不意味着每接收一个字节都触发 OnComm 事件。而是,只要接收到 1 个字节就触发 OnComm 事件。而且,传输也不因为进入了 OnComm 事件处理而停止。

你能分清两者之间的区别吧?

[解决办法]

引用:
Rthreshold = 1 并不意味着每接收一个字节都触发 OnComm 事件。而是,只要接收到 1 个字节就触发 OnComm 事件。而且,传输也不因为进入了 OnComm 事件处理而停止。

你能分清两者之间的区别吧?

我的习惯是,当触发了Oncomm事件后,进入事件处理中,将Rthreshold=0,也就是在本次处理过程中不触发OnComm事件,加以适当的延迟,一般一次串口通信也就触发一次OnComm事件。当然,一定记得在处理完后一定要恢复:Rthreshold=1

热点排行