程序代码如下:
Case comEvReceive
     requ_flag = 0
     stop_flag = 0
     b(0) = MSComm1.Input  //串口接收到的数据放入b(0)中
     Text2.Text = Text2.Text + b(0) '& vbCrLf '回车换行
     目前text2中显示为$PAU
     If b(0) = "$STA\r\n" Then   //If b(0) = "$STA" Then  这样写也不可以 
     requ_flag = 1
     ElseIf b(0) = "$PAU\r\n" Then    //ElseIf Text2.text = "$PAU\r\n" Then 这样也不行   
     stop_flag = 1    ??问题在这,就是进不了这句
不知到为什么?不知道是不是因为串口 马上要接收$STA,速度太快引起的。目前调试结果来看$STA好像没有接收到,因为TEXT2中没显示出来。大家看看

解决方案 »

  1.   

    还有个END IF呢,跑到哪里去了
      

  2.   

    ElseIf left(Text2.text,4) = "$PAU"
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  3.   

    在 VB 中不可以用 "\r\n".
      

  4.   

    END IF我没写上来,不好意思啊
      

  5.   

    "$STA\r\n"试改为 "$STA" & vbcrlf
      

  6.   

    of123()高见啊我改成elseif b(0) = "$PAU" & Chr(13) & Chr(10) then 就可以进入了
    feiyun0112 的ElseIf left(Text2.text,4) = "$PAU" 也可以
    非常感谢!!!
    不过我有不明白的,就是下位机发给这边串口 的是$PAU\r\n,由刚才我调试看b(0)中也确实接收到了$PAU\r\n,但为什么让它在text2中显示出来却只显示$PAU,我想的是是不是在text2中转化为实际的行动了,就是回车换行了,等待下面接收到的问题,忘明白的给予正解第二个问题是,我下位机发送了$PAU\r\n命令,上位机接收到了也执行了相应的语句,很短时间内下位机就发送$STA\r\n命令,我现在这个命令收不到,我用串口 调试助手试了一下,可以收到的,说明下位机这个命令是发出来的,只是上位机这边接收不到,不知到问题出在哪,感觉不像程序出了问题吧,因为$PAU\r\n这个命令能接收到,难道第一次接收完了要清什么东西吗?高手正解,谢谢
      

  7.   

    是不是因为我在另一个sub中这样写的有问题
    If stop_flag = 1 Then
       
       Do 
       Loop Until requ_flag = 1   ???单步执行程序走到这就不动了
       requ_flag = 0
       stop_flag = 0
     End If
    ……
    ……
    会不会像上面那样一直在这执行,当串口那有数据进来时也不去响应oncomm事件了??该怎么解决这类问题呢
      

  8.   

    看不懂没关系了
    不过想想虽然程序一直在loop这执行,但是当串口那有数据进来时,相当于有中断了,程序应该去处理oncomm事件了啊,处理完了再回到loop这,是不是应该这样呢?
      

  9.   

    If stop_flag = 1 Then
       
       Do 
         doevents
       Loop Until requ_flag = 1
       requ_flag = 0
       stop_flag = 0
     End If
      

  10.   

    楼上的大哥,还是不行啊,一直在下面这两句那循环。$STA命令一直没接收到,用串口 调试助手就能接收到,不知道我这里毛病出在哪里,高人指点阿,很急
    doevents
       Loop Until requ_flag = 1
      

  11.   

    Private Sub Command1_Click()
    List1.AddItem "正在发送数据……"
    Do While Not EOF(1)  '循环至文件尾
         '读出一行数据放入one_line中
       Line Input #1, one_line
       List1.AddItem one_line
       '得到一行数据,然后串口发送处理
       MSComm1.Output = one_line
       '延时50ms
       Sleep (50)
       DoEvents
       
      If stop_flag = 1 Then
       
       Do
         DoEvents
         Loop Until requ_flag = 1
         requ_flag = 0
         stop_flag = 0
         End If   LoopClose #1
    '数据发送完毕发结束标志
    Text1.Text = "$END\r\n"
    MSComm1.Output = Text1.Text
    List1.AddItem "数据发送完毕"Private Sub MSComm1_OnComm()
    Text2.Text = ""
    '在CommEvwnt中接收数据
    Select Case MSComm1.CommEvent
    Case comEvReceive
            
        b(0) = MSComm1.Input
        
         Text2.Text = Text2.Text + b(0) '& vbCrLf '回车换行
         
         If b(0) = "$STA" & vbCrLf Then
         
         requ_flag = 1
        
         ElseIf b(0) = "$PAU" & vbCrLf Then
         
         stop_flag = 1
         Else
        '打开文件
        Open "d:\sun\temp.txt" For Append As #1
         '写入文件
        Print #1, b(0)
        List1.AddItem "保存完成"
        'MSComm1.InBufferCount = 0
        '关闭文件
        Close #1
        End If
       
     Case comEvSend
    End Select
    End Sub主要目的是发几包数据后接收到下位机的暂停命令,暂停发送数据,等接收到下位 机的开始命令,再继续发,我在想现在能收到暂停命令却收不到开始命令,会不会是因为这两个命令之间的间隔太小的缘故啊
      

  12.   

    在你的代码中发现一个小问题,拿不准是不是问题的原因,又无法实际测试,楼主自己改改看看吧:你在MSComm1.Output后面用了Sleep来延时,sleep会造成程序停止响应,如果正好在延时过程中下位机发送了"$STA"过来,MSComm1可能就接收不到了,如果必须要延时,你换成其他不会造成程序停止响应的延时方式试试看。
      

  13.   

    还有一点,在发送指令前(也就是准备接收前),必须清除输入缓冲区的数据,也就是说MSComm1.InBufferCount = 0是必须的。