该控件有两个属性我有疑问,分别是 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
说的很好,确实,传输并不因进入了OnComm 事件而停止,我之前一直用的是MCU,所以有思维定势了。。
在网上下载了一个温度采集系统VB工程,其中有一段表格初始化代码:
'-----------------------------------------------
' 数据表格初始化
'-----------------------------------------------
Public Sub tabinit() Grid.Cols = 2 ' 两列
Grid.Rows = Txttimes.Text + 1 ' Rows 的值必须至少比 FixedRows 的值大一
Grid.ColWidth(0) = 650 ' 设置表格宽度
Grid.ColWidth(1) = 850
Grid.Col = 0
For i = 1 To Txttimes.Text
Grid.Row = i
Grid.Text = " " + Str$(i)
Next i
Grid.Row = 0
Grid.Col = 0: Grid.Text = " 序号"
Grid.Col = 1: Grid.Text = " 温度值"
Grid.TopRow = 1 '置在第一页
Grid.LeftCol = 1
End Sub想问问:Grid.TopRow = 1 Grid.LeftCol = 1 这是什么意思?原作者的注释我看不懂
Grid.TopRow = 1 Grid.LeftCol = 1 就是滚动到第一行第一列。