Dim b() As Byte                         '定义数组
Private Sub Timer1_Timer() 
dim k2
redim aa(0 To 5) 
aa = MSComm1.Inputk2 = Int(aa(0) * 255 + aa(1) * 1)   
p11 = Int(aa(2) * 255 + aa(3) * 1)
p22 = Int(aa(2) * 255 + aa(5) * 1)这三句,在运行几个循环后,老是提示“下标越界”,
k2的值发来的应该一直是1,但明显循环几次后这里自己变了。这是我的调试跟踪输出:帮忙看一一下
实验:
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            479 
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            249 
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            503 
---------
K2=            509 
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            255 
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            3059 
---------
K2=            249 
---------
K2=            1 
P11=           111 
P22=           222 
___________
---------
K2=            477 
---------
K2=            1 
P11=           111 
P22=           222 
___________K2=            255 
K2=            495 
P11=           111 
K2=            1 p11 p22信号一直正确,即使我改:k2 = Int(aa(0) * 255 + aa(1) * 1)
为k2=aa(0) ,也是“下标越界”,难到aa(0)数组真的有问题?

解决方案 »

  1.   

    贴上完整程序呀,方便大侠来看
    我这是一个接受二进制显示为十进制的代码:但运行时提示“下标越界”,有时能正确显示运行
    一会,再出错误下标越界提示,
    Dim x1, k1, k2
    Dim p11, p22                             '定义变量
    Dim aa() As Byte                         '定义数组Private Sub Command1_Click()             '
    Timer1.Enabled = True
    End Sub
    Private Sub Command2_Click()             '退事程序,定时器1无效,
    Timer1.Enabled = False
    Cls                                       '
    Unload Me
    End SubPrivate Sub Form_Load()                   '初始化
    Timer1.Enabled = False                    '定时器1无效
    Timer1.Interval = 100                     '定时器1
    Timer2.Enabled = True                     '定时器2有效
    Timer2.Interval = 1000                    '定时器2
    Picture1.ScaleMode = 0                    '定义纵横坐标
    MSComm1.CommPort = 1                      '设定端口号
    MSComm1.Settings = "9600,n,8,1"           '设定通讯波特率
    MSComm1.InputLen = 6                      '输入缓冲区为6个字符
    MSComm1.InBufferSize = 256                '
    MSComm1.OutBufferSize = 256               '
    MSComm1.InputMode = comInputModeBinary    '以二进制传输
    MSComm1.OutBufferCount = 0                '清空
    MSComm1.InBufferCount = 0                 '
    End Sub
    Private Sub Timer1_Timer()                               '定时器1有效,触发接收事件
    MSComm1.PortOpen = True                                  '打开端口
    ReDim aa(0 To 5)                                         '定义动态数组
    k1 = 0                                                   
    If k1 = 0 Then MSComm1.Output = "1" + Chr(10) + Chr(13)  
    Do While MSComm1.InBufferCount = 0                       
    Loop
    aa = MSComm1.Input                                        '接收数据存入数组
    If aa(0) >64 Then GoTo xxx:           'k2 = Int(aa(0) * 255 + aa(1) * 1)
    Select Case k2
    Case 1p11 = Int(aa(2) * 255 + aa(3) * 1)p22 = Int(aa(4) * 255 + aa(5) * 1)
    Case Else
    End Select
    k1 = k1 + 1
    If k1 > 2 Then k1 = 0
    xxx:
    MSComm1.PortOpen = False
    End SubPrivate Sub Timer2_Timer()                      
    x1 = x1 + 1                                     '时间增加为1S
    Text1.Text = Str(p11)                           '输出
    Text2.Text = Str(p22)                           '输出
    Text3.Text = Str(x1)                             '
    End Sub