Private Sub MSComm1_OnComm() On Error Resume Next Static id_array(0 To 5000) As Double Select Case MSComm1.CommEvent Case comEvReceive ' 收到 RThreshold # of read_len = MSComm1.InBufferCount ReDim read_in(read_len) As Byte read_in = MSComm1.Input MsgBox read_len End Select MSComm1.InBufferCount = 0 '接收缓冲区清空 End Sub Rthreshold 和Sthreshold属性设的都是1
在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法object.Rthreshold [ = value ]Rthreshold 属性语法包括下列部分:部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。
说明当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。数据类型Integer
InBufferSize 属性
设置并返回接收缓冲区的字节数。语法object.InBufferSize[ = value ]InBufferSize 属性语法包括下列部分:部分 描述
object 对象表达式,其值是“应用于”列表中的对象。
value 整型表达式,说明接收缓冲区的字节数。
说明InBufferSize 是指整个接收缓冲区的大小。缺省值是 1024 字节。不要将该属性与 InBufferCount 属性混淆,InBufferCount 属性返回的是当前在接收缓冲区中等待的字符数。注意 接收缓冲区越大则应用程序可用内存越小。但若接受缓冲区太小,若不使用握手协议, 就可能有溢出的危险。一般的规律是,首先设置一个 1024 字节的缓冲区。如果出现溢出错误,则通过增加缓冲区的大小来控制应用程序的传输速率数据类型Integer
On Error Resume Next
Static id_array(0 To 5000) As Double
Select Case MSComm1.CommEvent
Case comEvReceive ' 收到 RThreshold # of
read_len = MSComm1.InBufferCount
ReDim read_in(read_len) As Byte
read_in = MSComm1.Input
MsgBox read_len
End Select
MSComm1.InBufferCount = 0 '接收缓冲区清空
End Sub
Rthreshold 和Sthreshold属性设的都是1
有没有什么固定的协议??
Rthreshold=1 应该每接收到一个字节都产生一次 oncomm
read_len = MSComm1.InBufferCount 应该等于1
也有可能是你以前没有接收到残留在缓冲区里面所以大于1
你的inputlen 设置位多少??
最好用循环语句来进行判断数据接收量,这种方法很好,我一直使用挺可靠的!
怎么用循环语句判断数据接收量?能给个小例子吗?谢谢。
RThreshold 改成 10
你看有什么效果啊