逐行调试的时候执行程序,直接运行(不设断点)不执行程序,请高手指点

解决方案 »

  1.   

    程序如下:
    Dim out1() As Byte
    Dim into1() As Byte
    If MSComm1.PortOpen Then
    MSComm1.PortOpen = False
    End If
    MSComm1.PortOpen = TrueMSComm1.Settings = "4800,m,8,1"
    MSComm1.SThreshold = 0
    MSComm1.RThreshold = 0
    'MSComm1.OutBufferCount = 0
    'MSComm1.InBufferCount = 0
    ReDim out1(0)
    out1(0) = &H1
    MSComm1.Output = out1
    MSComm1.Settings = "4800,S,8,1"
    Do Until MSComm1.InBufferCount > 0
        DoEvents
    Loop  '等待应答帧ReDim into1(0)
    into1 = MSComm1.Input
    'MSComm1.PortOpen = False
    ''MSComm1.PortOpen = True
    ReDim out1(3)
    out1(0) = &H1
    out1(1) = &H2
    out1(2) = &H7
    out1(3) = &HF7
    'MSComm1.OutBufferCount = 0
    'MSComm1.InBufferCount = 0
    MSComm1.Output = out1Do Until MSComm1.InBufferCount > 0
        DoEvents
    Loop  '等待应答帧ReDim into1(6)
    into1 = MSComm1.Input
    当我在开始(if...)打断点,按F8执行(一步一步),没有问题,直接执行完,但不打断点,执行到第一个doevents时就不动了,死循环
      

  2.   

    为什么要循环获得状态呢?MSComm控件不是有OnComm事件吗?所有的事情可以在该事件内进行处理的。
      

  3.   

    我必须循环,他是一个过程控制,在oncomm事件中也一样,关键问题是我提出的以上问题,谢谢
      

  4.   

    过程控制可以用一些全局变量来标志所进行到的步骤,也可以根据接收到的数据来进行散转。完全没有必要循环。
    windows系统已经在循环等待com中断了,这时候你又继续循环,有可能在串口发生并发,如果系统没处理好就挂了
      

  5.   

    Do 
        DoEvents
    Loop  Until MSComm1.InBufferCount > 0'等待应答帧
      

  6.   

    这样的问题我也是一直使我郁闷的问题,一直没有解决,……
    请 chewinggum(口香糖·dotnet转型中) 给个思路,谢谢了!
      

  7.   

    请 chewinggum(口香糖·dotnet转型中) 给出具体方法,分我可以另开帖给,
      

  8.   

    试一下类似下面的代码能不能解决你的问题。当然,实际应用中要比这个代码复杂的多。如果你们的数据包具有一定的通讯协议封装比较好实现复杂的通讯。Option Explicit
    Dim IntStep As Integer
    Dim DataIn As String
    Dim DataOut As StringPrivate Sub Form_Load()
        DataOut = "通讯开始"
        MSComm1.Output = DataOut
    End SubPrivate Sub MSComm1_OnComm()
        into1 = MSComm1.Input
        IntStep = IntStep + 1
        
        Select Case IntStep
            Case 1
                Call Exe(1) '处理第一次应答包
                DataOut = "第二批指令"
                MSComm1.Output = DataOut
            Case 2
                Call Exe(2) '处理第二次应答包
                DataOut = "第三批指令"
                MSComm1.Output = DataOut
            Case 3
                Call Exe(3) '处理第三次应答包
                DataOut = "结束指令"
                MSComm1.Output = DataOut
        End Select
        
    End Sub
      

  9.   

    应该是这儿的问题
    -------------
    MSComm1.Output = out1
    MSComm1.Settings = "4800,S,8,1"
    Do Until MSComm1.InBufferCount > 0
        DoEvents
    Loop  '等待应答帧
    ----------
    改成
    -------------------
    MSComm1.Output = out1Do Until MSComm1.InBufferCount > 0
        DoEvents
    Loop  '等待应答帧
    MSComm1.Settings = "4800,S,8,1"
    ---------
    这样看看
      

  10.   

    或者
    MSComm1.Output = out1
    doevents
    MSComm1.Settings = "4800,S,8,1"
    Do Until MSComm1.InBufferCount > 0
        DoEvents
    Loop  
      

  11.   

    你写得很有思路,谢谢:chewinggum(口香糖·dotnet转型中
    今天下午我有差了,我怀疑问题出在:
    单步执行给了硬件充足的响应时间。而是否没有断点时间太快了而来不及响应,但修改波特率
    也不行,看来还得考虑了,谢谢大家。我晚上得回家了有事。有建议明天分享。谢谢光临
      

  12.   

    错就错在你用了buffercount为条件!想清楚...通信程序