Type COMMTIMEOUTS       '串口超时参数设置
        ReadIntervalTimeout As Long         '以毫秒为单位指定通信线上两个字符到达之间的最大时间。
        ReadTotalTimeoutMultiplier As Long  '以毫秒为单位指定一个乘数,该乘数用来计算读操作的总限时时间。每个
                                            '读操作的总限时时间等于读操作所需的字节数与该值的乘积。
        ReadTotalTimeoutConstant As Long    '以毫秒为单位指定一个常数,用于计算读操作的总限时时间。每个操作的
                              '&总限时时间等于ReadTotalTimeoutMultiplier成员乘以读操作所需字节数再加上该值的和
        WriteTotalTimeoutMultiplier As Long '以毫秒为单位指定一个乘数,该乘数用来计算写操作的总限时时间。
        WriteTotalTimeoutConstant As Long   '以毫秒为单位指定一个常数,用于计算写操作的总限时时间。
    End Type
 
    Dim CtimeOut As COMMTIMEOUTS    CtimeOut.ReadIntervalTimeout = 20
    CtimeOut.ReadTotalTimeoutConstant = 1
    CtimeOut.ReadTotalTimeoutMultiplier = 1
    CtimeOut.WriteTotalTimeoutConstant = 10
    CtimeOut.WriteTotalTimeoutMultiplier = 1
    retval = SetCommTimeouts(ComNum, CtimeOut)  '设置通信超时参数
    不是这时间计算不是很懂,如上所述那么比如读8个字节需要多少时间,写8个字节需要多少时间呢?
  请指点!!!

解决方案 »

  1.   

    http://download.csdn.net/source/1339593
    这是一个用API实现串口通信的代码,里面有关于超时的设置。
      

  2.   


    呵呵!想请教的是比如从串口读8个字节数据为例按照以上的的设置读的部总时间是不是CtimeOut.ReadTotalTimeoutConstant*8+CtimeOut.ReadTotalTimeoutMultiplier=9ms
    写8个字节按照以上的的设置CtimeOut.WriteTotalTimeoutConstant*8+CtimeOut.WriteTotalTimeoutMultiplier=81?
      

  3.   

    LZ:读取8字节数据(实际是串口传输时间)与串口的波特率设置有很大关系,假如波特率设置为9600,按数据位,1停止位,无校验位,1起始位,则每秒可传输960字节,即每字节占1ms略多,那么8字节则大于8ms小于9ms.
      

  4.   

    嗯,看过这样的算法.那么COMMTIMEOUTS结构也是控制通讯设备的读与写那么又起到什么作用呢?
      

  5.   

    嗯,好象有点懂了,正常情况数据传输时间按设置的波特率来计算.如超时的话再按上面的结构来计算.但下面的这个算法对吗?读8个字节如超过下面
    CtimeOut.ReadTotalTimeoutConstant*8+CtimeOut.ReadTotalTimeoutMultiplier=9ms 
    就算超进
    写8个字节按照以上的的设置超过CtimeOut.WriteTotalTimeoutConstant*8+CtimeOut.WriteTotalTimeoutMultiplier=81就算超时??