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时,提示下标越界,不知道是什么原因,应该怎么解决?
展开
 我来答
tystq
2011-06-20 · TA获得超过1201个赞
知道小有建树答主
回答量:943
采纳率:100%
帮助的人:832万
展开全部
你有设置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
追问
设置了mscomm1.inputmode=comInputModeBinary,改成dim av () as byte,在ab(1) = av(0)这一行就提示下标越界了
追答
你的整个逻辑都错了,MSComm1_OnComm事件中不能有多个MSComm1.Input语句,因为
MSComm1.Input已经把所有的数据都接收了,后面再用MSComm1.Input肯定得到的是空

关键你要实现什么操作
cocopark1982
2011-06-20 · TA获得超过348个赞
知道小有建树答主
回答量:556
采纳率:0%
帮助的人:491万
展开全部
ab(2) = av(0) '此处提示下标越界
Dim ab(4) As Byte 你把这个定大一点就行啦
dim ab(100) as byte
追问
试过了,还是不行
追答
哦,那不知道什么原因了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-20
展开全部
推荐看书
Visual_Basic与_RS-232_串行通信控制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MasterChiefs
2011-06-20 · 超过10用户采纳过TA的回答
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
这里你看一下MSComm1.Input是否有返回数组 ,说不定MSComm1.Input是NULL ,虽然不懂MSComm1.RThreshold = 0是什么意思,但说不定会清空MSComm1.Input
更多追问追答
追问
不好意思,怎么看啊
追答
dim i as byte
i=MSComm1.Input(0)
看看,如果是显示下标越界,则是上面的原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式