用MSCOMMON控件来实现通讯,我一次从仪表读取20个参数,具体在程序里面这么写:
MSCOMM1.OUTPUT = "......" //第一个仪表的读命令
sleep(150)
MSCOMM1.OUTPUT = "......" //第二个仪表的读命令
sleep(150)
......
MSCOMM1.OUTPUT = "......" //第二十个仪表的读命令
sleep(150)
这样做会出现一个问题,就是一点“读数据”按钮的时候,程序在读取仪表数据的时候会定住一段时间。不知道各位大侠有什么
好办法来解决这个问题?谢谢!

解决方案 »

  1.   

    楼主想发送延时??
    timer1.enable=ture
    Do While True                                          DoEvents                             (在timer 中 延时150毫秒 让后让flag=true)        
             if flag=ture then exit sub                               
        Loop
      

  2.   

    写个延迟函数.Public Sub Delay(PauseTime As Single)  
    Dim Start As Single
    Start = Timer   ' 设置开始暂停的时刻。
    Do While Timer < Start + PauseTime
          DoEvents 
    Loop
    End Sub
    '
    MSCOMM1.OUTPUT = "......" //第一个仪表的读命令
    Delay 0.2'延迟
    MSCOMM1.OUTPUT = "......" //第二个仪表的读命令
    Delay 0.2
    ......
    MSCOMM1.OUTPUT = "......" //第二十个仪表的读命令
    Delay 0.2
      

  3.   

    你用sleep太强制了,必须要sleep那么长的时间用oncomm事件加楼上的方法 或者用timer来进行判断。一接收完了直接就可以了,而不是强制的多长事件。
      

  4.   

    你用sleep太强制了,必须要sleep那么长的时间用oncomm事件加楼上的方法 或者用timer来进行判断。一接收完了直接就可以了,而不是强制的多长事件。
      

  5.   

    通讯,仪表是有时间延迟的,因此如果不延时操作,会造成仪表的“反应不过来”
    解决这个问题的办法是在发送间隔增加延时,可以用sleep,也可以自己用timer控件写。前者的缺点是sleep的时候会造成你的整个应用程序没有响应,此间,如果你要产生oncome时间就会失败,所以最好使用后者,在timer里延时,别忘了加doevents哦!
      

  6.   

    更正,第三行:oncome时间====》改成oncome事件 :)
      

  7.   

    你最好别这样做!因为你只是延迟向串口写数据,而没有去理会数据读取的感受,如果数据返回的时候出现了问题呢?发生较长的延迟怎么办?
    可以用onComm事件,也可以用循环,但是必须要有判断数据是否正确和数据是否已经读取完毕的语句,在读取完毕上一条数据的前提下再使用延迟,这样才能保证你的数据的完整性和准确性。
      

  8.   

    估计你是使用了SLEEP造成的,采用 Winters_lee(其实我真的叫迪米亚路) 的方法吧。
      

  9.   

    仪表数据一定有自己的特点,我的建议是: 使用Timer控件,每次读取数据时一定要读到完整的数据后才作处理,数据并不一定是一次就能读完,所以,没有读到完整的数据时,请暂时保存已经读出来的数据,与后面读到的数据一起处理,至于Timer的周期,根据实际情况选择一个稍微合适的,这个嘛,多测试几次就知道了。
      

  10.   

    sleep,是让程序挂起!所以就会你写的程序就会运行好像会死机一样!一动不动
    建议用延迟函数()         '参照楼上
      

  11.   

    这样做会出现一个问题,就是一点“读数据”按钮的时候,程序在读取仪表数据的时候会定住一段时间。
    觉得这个和VB的数据传输机制有关.数据传送的时候,并不是楼主所设想的那样,收到第一个数据,然后150ms后,收到第二个数据。我也遇到过同样的问题,点击按钮的时候,不管数据量多大,都是在接收框一下收到,如果数据量很大,那么,就会出现楼主谈到的问题,"定住一段时间".不过,如果影响不大,可以随它去.
      

  12.   

    我现在也遇到同样的问题,必须要解决的,请各位大虾帮忙看看:因为我的系统是需要通过PC的串口发送数据给单片机,然后由单片机再转发出去。如果每次点击“发送”按钮时,PC串口不是一个字节一个字节传送出去,那么,由于单片机的串口缓存只有8位的情况下,每次点击“发送”按钮,单片机只能接收到第一个字节。我原来设想也是和楼主一样,用mid函数依次取一个字节传送给mscomm.output,并在每次取一个字节之间加延时,试验结果显示,仍然是一下子接收到。看来并没有解决问题。各位大虾,有什么办法可以解决?
      

  13.   

    timer
    最近怎么这么多问串口操作的?
      

  14.   

    to :qingfeng2010(qingfeng2010) 
        你把要发送的数据定义成数组发送不就成了么:)
      

  15.   

    to:wosirius(雨夜飚车手) 
    谢谢大虾,经你提醒,定义了一个足够大的字符数组,结果显示,在每次间隔足够(相比单片机接收的时间间隔)的情况下,效果良好。谢谢您啊!