环境:   一个串口管理多个设备,每一个设备都单独有一个‘机号’
数据格式:1、首先选择机号,发送控制码过去,但是此处不返回数据
          2、然后发送返回数据的控制码,返回固定格式的数据(长度为10个字节)
要求:如何循环取出每一个设备的数据,用循环好,还是时间控件好
   
这是我做的程序(桌面上有2个按钮,“开始巡检“,“停止巡检“)
'------------------------------------------------------------------------------------
'基础设置
'------------------------------------------------------------------------------------
MSComm1.Settings = "9600,e,8,1"
MSComm1.RThreshold = 10                  '设置接收10个字节就产生OnComm事件
MSComm1.InputLen = 0                       '一次从缓冲区接受所有字节
MSComm1.OutBufferCount = 0              '清空发送缓冲区
MSComm1.InBufferCount = 0                '清空接收缓冲区
MSComm1.InputMode = comInputModeBinary  '设置接受数据的类型是二进制类型数据
MSComm1.PortOpen = True                 '---------------------------------------------------------------------------
'“开始巡检“程序如下
'---------------------------------------------------------------------------
Private Sub Command1_Click()
    Dim senddata5(1 To 6) As Byte
    ls_xj = "开始巡检"   '此处设置为死循环,什么时候,点击了“停止巡检”按钮,则退出巡检
    Do While 2 > 1
        '选择机号 1
        If ls_xj = "停止巡检" Then
            Exit Sub
        else
            '选择机号
            senddata5(1) = &HFE
            senddata5(2) = &HFD
            senddata5(3) = &H01
            senddata5(4) = &HFE
            senddata5(5) = &HFD
            senddata5(6) =&H01
            MSComm1.Output = senddata5            MSComm1.OutBufferCount = 0              '清空发送缓冲区
            MSComm1.InBufferCount = 0               '清空接收缓冲区
    
           '返回当前机号 的数据
           Dim senddate7(1 To 6) As Byte
           senddate7(1) = &HFC
           senddate7(2) = &HFC
           senddate7(3) = &HFC
           senddate7(4) = &H34
           senddate7(5) = &H1
           senddate7(6) = &H35
           MSComm1.Output = senddate7
         
            ls_dd="开始等待"
            zcx_dd                         '子程序_等待
        End If
  
        '选择机号 1
        ........    
        ........       
        '选择机号4
        .....        DoEvents
    Loop
End Sub'---------------------------------------------------------------------------
'“停止巡检“程序如下
'---------------------------------------------------------------------------
Private Sub Command1_Click()
    ls_xj = "停止巡检"
    ls_dd= "停止等待"
End Sub'------------------------------------------------------------------------
'子程序_等待
'------------------------------------------------------------------------
Public Sub zcx_dd()
    Do While ls_dd = "开始等待"
        DoEvents
    Loop
End Sub
'-------------------------------------------------------------------------
'接收数据缓冲区满10个字节,便激活此程序
'-------------------------------------------------------------------------
Private Sub MSComm1_OnComm()
    '此处为接收到数据后的处理,略过
    '    ls_dd = "停止等待"
End Sub
'*************************************************************
'程序有时候正常工作,但是有时候经常进入zcx_dd() 死循环,不知道为何?
'是否返回的过程中,丢失数据(这样的话,就不激活mscomm的OnComm事件了,那么ls_dd 就不会变化,那么就“子程序_等待”死循环了)'我想问下,这种方法合理吗,如果改的话怎么改,   用什么方法更好?怎么实现?