请高手帮忙?急!串行通信问题。

windwater 2002-12-12 03:42:09
问题: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
...全文
5 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
windwater 2002-12-13
好像不是这个问题。数组下界默认从零开始。
回复
zyl910 2002-12-12
注意指定下界


Dim CheckBack2(0 to 1) As Byte
回复
windwater 2002-12-12
帮帮忙呀!
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7517

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2002-12-12 03:42
社区公告
暂无公告