Private Sub CmdConfig_Click()
    Dim k As Boolean    If Option_on = True And Option_off = False Then
        k = True
    ElseIf Option_on = False And Option_off = True Then
        k = True
    End If    queryDetectorP = False    Sleep (100) '释放总线    Call MDIForm1.SetOnlyDetect(AddrMain1, DetectAdrr, k)    Sleep (900) '等待设置返回
    queryDetectorP = True    If TextVal.text <> "" Then
        Set_alarm_value = Val(TextVal.text) / 10
        queryDetectorP = False
        Call MDIForm1.setAlarmVal(AddrNum, DetectAdrr, Set_alarm_value)             queryDetectorP = True
    End IfEnd Sub
以下代码,按下一个按键 ,然后使用串口发送两次命令(红字部分),第二次命令必须在第一次命令收到返回值以后发送 不然会出错。但是无论我怎样增加延迟,第二条指令总是紧接着第一条指令出现,而未在第一条指令的返回之后出现。(用BUSBOUND观察)请问,用sleep()做接收延迟不合适么?我的问题出在哪?怎样解决?

解决方案 »

  1.   

    call去掉试试,后面的括号也去掉
      

  2.   

    建议LZ接收在MSCOMM控件的ONCOMM事件中完成.发送可通过控制TIMER计时器来完成.延迟由TIMER计时器完成.
      

  3.   

    Sleep做短暂的延迟是非常合适的,串口通信很实用。
    你看看这个:http://download.csdn.net/source/1262066串口通信的详细例子
      

  4.   

    问题解决了  谢谢各位解决方法如下,在返回成功后置标志位,使用等待延时,判断标志位跳出,并加入超时判断    Do While FlagRev = False
                If delayNum >= 10 Then
                    Timer1.Enabled = False
                    delayNum = 0
                    Exit Do
                End If
                DoEvents    
            LoopPrivate Sub Timer1_Timer()
        delayNum = delayNum + 1
    End Sub