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

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
...全文
19 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
windwater 2002-12-13
  • 打赏
  • 举报
回复
好像不是这个问题。数组下界默认从零开始。
zyl910 2002-12-12
  • 打赏
  • 举报
回复
注意指定下界


Dim CheckBack2(0 to 1) As Byte
windwater 2002-12-12
  • 打赏
  • 举报
回复
帮帮忙呀!

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧