小弟我的VB与12台仪表通讯时,老是出现下标越界,求高手解答
我的VB与12台仪表通讯时,老是出现下标越界,求高手解答
下面是我的代码
Private Sub MSComm1_OnComm()
Dim data(10) As String
Dim D(6) As Variant
Dim Inbyte() As Byte
Dim buffer As String
Dim datatemp(10) As String
Dim sinSj1 As Single
Dim sinSj2 As Single
Dim sinSj3 As Single
Dim sinSj4 As Single
Dim buffer1(7) As Byte
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sqlstr As String
Dim strcon As String
Dim M As String
If n > 180 Then Call renew
Select Case MSComm1.CommEvent
Case comEvReceive
For i = 1 To 3000
For j = 1 To 5000
f = j
Next j
Next i
buffer = ""
Inbyte = MSComm1.Input
For i = LBound(Inbyte) To UBound(Inbyte)
If Len(Hex(Inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(Inbyte(i))
Else
buffer = buffer + Hex(Inbyte(i))
End If
Next i
If Hex(Inbyte(9)) = "0" Then '读浓度值 \\\\\\\\这一句出现下标越界
If Len(Hex(Inbyte(10))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(10)), 1, 1): data(2) = Mid(Hex(Inbyte(10)), 2, 1)
End If
If Len(Hex(Inbyte(11))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(11)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(11)), 1, 1): data(4) = Mid(Hex(Inbyte(11)), 2, 1)
End If
If Len(Hex(Inbyte(12))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(12)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(12)), 1, 1): data(6) = Mid(Hex(Inbyte(12)), 2, 1)
End If
If Len(Hex(Inbyte(13))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(13)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(13)), 1, 1): data(8) = Mid(Hex(Inbyte(13)), 2, 1)
End If
datatemp(1) = data(1) + data(2) + data(3) + data(4) + data(5) + data(6) + data(7) + data(8)
For i = 1 To Len(datatemp(1)) Step 2
buffer1((7 - i) / 2) = Val("&H" & Mid(datatemp(1), i, 2))
Next
CopyMemory ByVal VarPtr(sinSj1), ByVal VarPtr(buffer1(0)), 4
If Len(Hex(Inbyte(14))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(14)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(14)), 1, 1): data(2) = Mid(Hex(Inbyte(14)), 2, 1)
End If
If Len(Hex(Inbyte(15))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(15)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(15)), 1, 1): data(4) = Mid(Hex(Inbyte(15)), 2, 1)
End If
If Len(Hex(Inbyte(16))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(16)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(16)), 1, 1): data(6) = Mid(Hex(Inbyte(16)), 2, 1)
End If
If Len(Hex(Inbyte(17))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(17)), 1, 1): data(8) = Mid(Hex(Inbyte(17)), 2, 1)
End If
datatemp(2) = data(1) + data(2) + data(3) + data(4) + data(5) + data(6) + data(7) + data(8)
For i = 1 To Len(datatemp(2)) Step 2
buffer1((7 - i) / 2) = Val("&H" & Mid(datatemp(2), i, 2))
Next
CopyMemory ByVal VarPtr(sinSj2), ByVal VarPtr(buffer1(0)), 4
If Len(Hex(Inbyte(18))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(18)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(18)), 1, 1): data(2) = Mid(Hex(Inbyte(18)), 2, 1)
End If
If Len(Hex(Inbyte(19))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(19)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(19)), 1, 1): data(4) = Mid(Hex(Inbyte(19)), 2, 1)
End If
If Len(Hex(Inbyte(20))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(20)), 1, 1): data(6) = Mid(Hex(Inbyte(20)), 2, 1)
End If
If Len(Hex(Inbyte(21))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(21)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(21)), 1, 1): data(8) = Mid(Hex(Inbyte(21)), 2, 1)
下面是我的代码
Private Sub MSComm1_OnComm()
Dim data(10) As String
Dim D(6) As Variant
Dim Inbyte() As Byte
Dim buffer As String
Dim datatemp(10) As String
Dim sinSj1 As Single
Dim sinSj2 As Single
Dim sinSj3 As Single
Dim sinSj4 As Single
Dim buffer1(7) As Byte
Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim sqlstr As String
Dim strcon As String
Dim M As String
If n > 180 Then Call renew
Select Case MSComm1.CommEvent
Case comEvReceive
For i = 1 To 3000
For j = 1 To 5000
f = j
Next j
Next i
buffer = ""
Inbyte = MSComm1.Input
For i = LBound(Inbyte) To UBound(Inbyte)
If Len(Hex(Inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(Inbyte(i))
Else
buffer = buffer + Hex(Inbyte(i))
End If
Next i
If Hex(Inbyte(9)) = "0" Then '读浓度值 \\\\\\\\这一句出现下标越界
If Len(Hex(Inbyte(10))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(10)), 1, 1): data(2) = Mid(Hex(Inbyte(10)), 2, 1)
End If
If Len(Hex(Inbyte(11))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(11)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(11)), 1, 1): data(4) = Mid(Hex(Inbyte(11)), 2, 1)
End If
If Len(Hex(Inbyte(12))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(12)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(12)), 1, 1): data(6) = Mid(Hex(Inbyte(12)), 2, 1)
End If
If Len(Hex(Inbyte(13))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(13)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(13)), 1, 1): data(8) = Mid(Hex(Inbyte(13)), 2, 1)
End If
datatemp(1) = data(1) + data(2) + data(3) + data(4) + data(5) + data(6) + data(7) + data(8)
For i = 1 To Len(datatemp(1)) Step 2
buffer1((7 - i) / 2) = Val("&H" & Mid(datatemp(1), i, 2))
Next
CopyMemory ByVal VarPtr(sinSj1), ByVal VarPtr(buffer1(0)), 4
If Len(Hex(Inbyte(14))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(14)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(14)), 1, 1): data(2) = Mid(Hex(Inbyte(14)), 2, 1)
End If
If Len(Hex(Inbyte(15))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(15)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(15)), 1, 1): data(4) = Mid(Hex(Inbyte(15)), 2, 1)
End If
If Len(Hex(Inbyte(16))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(16)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(16)), 1, 1): data(6) = Mid(Hex(Inbyte(16)), 2, 1)
End If
If Len(Hex(Inbyte(17))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(17)), 1, 1): data(8) = Mid(Hex(Inbyte(17)), 2, 1)
End If
datatemp(2) = data(1) + data(2) + data(3) + data(4) + data(5) + data(6) + data(7) + data(8)
For i = 1 To Len(datatemp(2)) Step 2
buffer1((7 - i) / 2) = Val("&H" & Mid(datatemp(2), i, 2))
Next
CopyMemory ByVal VarPtr(sinSj2), ByVal VarPtr(buffer1(0)), 4
If Len(Hex(Inbyte(18))) = 1 Then
data(1) = "0"
data(2) = Mid(Hex(Inbyte(18)), 1, 1)
Else
data(1) = Mid(Hex(Inbyte(18)), 1, 1): data(2) = Mid(Hex(Inbyte(18)), 2, 1)
End If
If Len(Hex(Inbyte(19))) = 1 Then
data(3) = "0"
data(4) = Mid(Hex(Inbyte(19)), 1, 1)
Else
data(3) = Mid(Hex(Inbyte(19)), 1, 1): data(4) = Mid(Hex(Inbyte(19)), 2, 1)
End If
If Len(Hex(Inbyte(20))) = 1 Then
data(5) = "0"
data(6) = Mid(Hex(Inbyte(10)), 1, 1)
Else
data(5) = Mid(Hex(Inbyte(20)), 1, 1): data(6) = Mid(Hex(Inbyte(20)), 2, 1)
End If
If Len(Hex(Inbyte(21))) = 1 Then
data(7) = "0"
data(8) = Mid(Hex(Inbyte(21)), 1, 1)
Else
data(7) = Mid(Hex(Inbyte(21)), 1, 1): data(8) = Mid(Hex(Inbyte(21)), 2, 1)