vb串口通信中数组下标越界问题 10
Dimab(4)AsByteDimavAsVariantSelectCaseMSComm1.CommEventCasecomEvReceiveav=MSComm1.Inp...
Dim ab(4) As Byte
Dim av As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
av = MSComm1.Input
ab(1) = av(0)
If ab(1) = 83 Then
MSComm1.RThreshold = 0
av = MSComm1.Input
ab(2) = av(0) '此处提示下标越界
av = MSComm1.Input
ab(3) = av(0)
av = MSComm1.Input
ab(4) = av(0)
End If
End Select
使用串口调试助手以十六进制发送53时,提示下标越界,不知道是什么原因,应该怎么解决? 展开
Dim av As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
av = MSComm1.Input
ab(1) = av(0)
If ab(1) = 83 Then
MSComm1.RThreshold = 0
av = MSComm1.Input
ab(2) = av(0) '此处提示下标越界
av = MSComm1.Input
ab(3) = av(0)
av = MSComm1.Input
ab(4) = av(0)
End If
End Select
使用串口调试助手以十六进制发送53时,提示下标越界,不知道是什么原因,应该怎么解决? 展开
4个回答
展开全部
你有设置MSComm1.InputMode = comInputModeBinary吗?只有这样才表示按2进制方式接收
同时dim av () as byte,
具体就是
Dim ab(4) As Byte
dim av () as byte'这里改变了
MSComm1.RThreshold=1'这里追加一行,表示有一个字节就触发接收
MSComm1.InputMode = comInputModeBinary'这里追加一行
Select Case MSComm1.CommEvent
Case comEvReceive
av = MSComm1.Input
ab(1) = av(0)
If ab(1) = 83 Then
MSComm1.RThreshold = 0
av = MSComm1.Input
ab(2) = av(0) '此处提示下标越界
av = MSComm1.Input
ab(3) = av(0)
av = MSComm1.Input
ab(4) = av(0)
End If
End Select
同时dim av () as byte,
具体就是
Dim ab(4) As Byte
dim av () as byte'这里改变了
MSComm1.RThreshold=1'这里追加一行,表示有一个字节就触发接收
MSComm1.InputMode = comInputModeBinary'这里追加一行
Select Case MSComm1.CommEvent
Case comEvReceive
av = MSComm1.Input
ab(1) = av(0)
If ab(1) = 83 Then
MSComm1.RThreshold = 0
av = MSComm1.Input
ab(2) = av(0) '此处提示下标越界
av = MSComm1.Input
ab(3) = av(0)
av = MSComm1.Input
ab(4) = av(0)
End If
End Select
追问
设置了mscomm1.inputmode=comInputModeBinary,改成dim av () as byte,在ab(1) = av(0)这一行就提示下标越界了
追答
你的整个逻辑都错了,MSComm1_OnComm事件中不能有多个MSComm1.Input语句,因为
MSComm1.Input已经把所有的数据都接收了,后面再用MSComm1.Input肯定得到的是空
关键你要实现什么操作
展开全部
ab(2) = av(0) '此处提示下标越界
Dim ab(4) As Byte 你把这个定大一点就行啦
dim ab(100) as byte
Dim ab(4) As Byte 你把这个定大一点就行啦
dim ab(100) as byte
追问
试过了,还是不行
追答
哦,那不知道什么原因了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-06-20
展开全部
推荐看书
Visual_Basic与_RS-232_串行通信控制
Visual_Basic与_RS-232_串行通信控制
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这里你看一下MSComm1.Input是否有返回数组 ,说不定MSComm1.Input是NULL ,虽然不懂MSComm1.RThreshold = 0是什么意思,但说不定会清空MSComm1.Input
更多追问追答
追问
不好意思,怎么看啊
追答
dim i as byte
i=MSComm1.Input(0)
看看,如果是显示下标越界,则是上面的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询