喔,对不起还是遇到一个问题: 当发送12个BYTE的数据, 如果RThreshold设置成1,那么竟然产生两次OnComm事件! 两次的InBufferCount分别是8和4; 但是如果RThreshold设置成9,那么只有一次OnComm事件, InBufferCount是12。 为什么? 我又晕了 不是说“当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。 ”吗?谢谢了Const SendSize = 12Private Sub Command1_Click() Dim toSend As VariantDim a(0 To SendSize - 1) As Byte For i = 0 To SendSize - 1 a(i) = i Next toSend = a MSComm1.Output = toSend End SubPrivate Sub Form_Load()MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.InputMode = comInputModeBinaryMSComm1.RThreshold = 9 If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = FalseMSComm1.PortOpen = TrueEnd SubPrivate Sub MSComm1_OnComm()If MSComm1.CommEvent <> comEvReceive Then Exit SubList1.AddItem MSComm1.InBufferCountDim a() As Byte a = MSComm1.InputFor i = 0 To UBound(a) Text1.Text = Text1.Text + Str(a(i)) NextText1.Text = Text1.Text + vbCrLf End Sub
RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。
当发送12个BYTE的数据,
如果RThreshold设置成1,那么竟然产生两次OnComm事件!
两次的InBufferCount分别是8和4;
但是如果RThreshold设置成9,那么只有一次OnComm事件,
InBufferCount是12。
为什么?
我又晕了
不是说“当接收缓冲区内字节个数达到或超过该值后就产生代码为MSCOMM_EV_RECEIVE的OnComm事件。
”吗?谢谢了Const SendSize = 12Private Sub Command1_Click()
Dim toSend As VariantDim a(0 To SendSize - 1) As Byte
For i = 0 To SendSize - 1
a(i) = i
Next
toSend = a
MSComm1.Output = toSend
End SubPrivate Sub Form_Load()MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinaryMSComm1.RThreshold = 9
If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = FalseMSComm1.PortOpen = TrueEnd SubPrivate Sub MSComm1_OnComm()If MSComm1.CommEvent <> comEvReceive Then Exit SubList1.AddItem MSComm1.InBufferCountDim a() As Byte
a = MSComm1.InputFor i = 0 To UBound(a)
Text1.Text = Text1.Text + Str(a(i))
NextText1.Text = Text1.Text + vbCrLf
End Sub