读取和判断串口数据时,偶尔会提示“下标越界”。望大家指点。
Dim Buffer As Variant
Dim temperature As Long
Private Sub MSComm1_OnComm()
Image1(0).Picture = Image1(2).Picture
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0
Buffer = MSComm1.Input
If Buffer(0) = 1 And Buffer(1) = 1 Then ‘报错的就是这一条代码!
Text1.Text = Format(Buffer(2) * 200 / 256, "###0.00 ")
temperature = Format(Buffer(2) * 200 / 256, "###0.00 ")
' temperature = Buffer(2) / 2
End If
Case Else
End Select
End Sub
[解决办法]
Option Explicit
Dim Buffer() As Byte
Dim Lbljieshou As String
Dim lenInput As String
Dim strData As String
Dim strDataInteger As String
Private Sub Form_Load()
MSComm1.CommPort = 1 'COM1串口
MSComm1.Settings = "9600,n,8,1 " '串口设置
MSComm1.InputMode = comInputModeBinary '采用二进制传输
MSComm1.InBufferCount = 0 '清空接受缓冲区
MSComm1.OutBufferCount = 0 '清空传输缓冲区
MSComm1.InBufferSize = 512 '接收缓冲区大小
MSComm1.OutBufferSize = 512 '发送缓冲区大小
MSComm1.RThreshold = 1 '产生MSComm事件
MSComm1.PortOpen = True '开串口
Timer1.Interval = 200 '200ms Timer1使strData清空
End Sub
Private Sub MSComm1_OnComm()
'Dim strBuff As String
Dim intInputLen As Integer
Text1 = " "
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
intInputLen = MSComm1.InBufferCount
ReDim Buffer(intInputLen)
Buffer() = MSComm1.Input
'数据处理代码
Call Receive
If Mid(strData, 1, 4) = "0101 " Then
Text1.Text = Format(Val( "&H " & Mid(strData, 5, 2)) * 200 / 256, "###0.00 ")
'temperature = Format(Buffer(2) * 200 / 256, "###0.00 ")
End If
End Select
End Sub
Public Sub Receive()
Dim i As Integer
For i = 0 To UBound(Buffer)
If Len(Hex(Buffer(i))) = 1 Then
strData = strData & "0 " & Hex(Buffer(i))
Else
strData = strData & Hex(Buffer(i))
End If
Next
Text2 = strData
End Sub
Private Sub Timer1_Timer()
strData = " "
strDataInteger = " "
End Sub