Private Sub MSComm2_OnComm() '''''串口返回的数据都先到Text7中
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
Dim I As Integer
If (MSComm2.CommEvent = comEvReceive) Then '这句的作用是什么?
S = MSComm2.Input
If (Timer - T > 0.01) Then
Text7 = ""
N = 0
End If
T = Timer
For I = 0 To UBound(S)
Text7.Text = Text7.Text & Right("0" & Hex(S(I)), 2) '这句的作用是什么?
SS(N + I) = S(I) '这句的作用是什么?
N = N + UBound(S)
Next I
End If
End Sub
1) CommEvent 是控件MSComm的一个属性;comEvReceive是VB6定义的一个常数,表示MSComm接收到数据;判断语句if(MSComm2.CommEvent = comEvReceive)表示如果串口MSComm2接收到数据则进行处理
2)在Text7.Text = Text7.Text & Right("0" & Hex(S(I)), 2) 中,
Hex(S(I))表示将接收到的第I个字节转换成十六进制的字符串,S是动态数据是 dim S() As Byte 定义动态数组;
"0" & Hex(S(I)) 是拼接字符串,Right("0" & Hex(S(I)), 2)是取拼接好的字符串最右边的两字符;
Text7.Text =Text7.Text & Right("0" & Hex(S(I)), 2) 的意思是将(b)步骤获取的两个字符添加在Text7中文本的末尾
(3)SS(N + I) = S(I)
根据dim SS(1024) As Byte ,SS是一个具有1024个元素的字节数组;
S 是动态数组,在执行S = MSComm2.Input后接收到数据被放入S。由于事先不知道串口到底接收到几个字节,所以采用动态数组。
SS(N + I) = S(I) 的作用就是将每次接收到的数据转移到SS数组中