请高手帮忙?急!串行通信问题。
问题:1 一次接受两字节的数据,但总与实际数不一致。因此接受两次,把第一次的高字节取出,把第二次的低字节取出,拼起来就可以。不知为什么?虽然该程序调试通过了,但接收效率不高。
2 没写 On Error Resume Next 之前,执行CheckBack2(0) = tmp1jl(0)时
总给出“下标越界错误“,写上On Error Resume Next 未写错误处理程序,程序是不报错了。但,这样程序能正常接收吗?
Private Sub CollectV() '采集值
Dim nowTime, EndTime As Long
Dim CheckBack2(1) As Byte
Dim tmp1jl() As Byte, tmp2jl() As Byte
Dim CheckArry(0) As Byte '发送命令
Dim num As Integer
On Error Resume Next
MSComm1. CommPort = 1
MSComm1.OutBufferSize = 30
MSComm1.InBufferSize = 30
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.Settings = "4800,m,8,1" '发送命令(&H9)
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
CheckArry(0) = &H10
MSComm1.Output = CheckArry
While MSComm1.OutBufferCount > 0
Wend
MSComm1.Settings = "4800,n,8,1"'接收高字节
nowTime = GetTickCount()
EndTime = nowTime + 40 'HANDTIME
Do
If MSComm1.InBufferCount > 0 Then
ReDim tmp1jl(0 To MSComm1.RThreshold) ''''''''
tmp1jl = MSComm1.Input
MSComm1.InBufferCount = 0
Exit Do
End If
Loop Until GetTickCount() > EndTime
MSComm1.Settings = "4800,m,8,1" '发送命令(&H9)
MSComm1.OutBufferCount = 0
MSComm1.Output = CheckArry
While MSComm1.OutBufferCount > 0
Wend
nowTime = GetTickCount()'接收低字节
EndTime = nowTime + 40 'HANDTIME
Do
If MSComm1.InBufferCount > 0 Then
ReDim tmp2jl(0 To MSComm1.RThreshold) ''''''''
tmp2jl = MSComm1.Input
MSComm1.InBufferCount = 0
Exit Do
End If
Loop Until GetTickCount() > EndTime
CheckBack2(0) = tmp1jl(0) '接收的是同一个数,但总与实际数不一致,仅此组合两字节,数就一致了。
CheckBack2(1) = tmp2jl(1)
End If
End Sub