zoukankan      html  css  js  c++  java
  • 如何设置超时参数(串行通讯)

     如果想读写可靠,要根据 不同的速率和应用实际情况设置合适的值。和同步模式和异步模式、不同的通信协议无关。

    COMMTIMEOUTS:COMMTIMEOUTS主要用于串口超时参数设置。COMMTIMEOUTS结构如下:  
       
      typedef   struct   _COMMTIMEOUTS   {    
      DWORD   ReadIntervalTimeout;    
      DWORD   ReadTotalTimeoutMultiplier;    
      DWORD   ReadTotalTimeoutConstant;    
      DWORD   WriteTotalTimeoutMultiplier;    
      DWORD   WriteTotalTimeoutConstant;    
      }   COMMTIMEOUTS,*LPCOMMTIMEOUTS;    
         
       
        ReadIntervalTimeout:两字符之间最大的延时,当读取串口数据时,一旦两个字符传输的时间差超过该时间,读取函数将返回现有的数据。设置为0表示该参数不起作用。指定时间最大值(毫秒),充许接收的2个字节间有时间差。也就    是说,刚接收了一个字节后,等了ReadIntervalTimeout时间后还没有新的字节到达,就 认为本次读串口操作结束(后面的字节等下一次读取操作来处理)。即使你想读8个字节,但读第2个字节后,过了ReadIntervalTimeout时间后,第3个字节还没到。实际上就只读了2个字节。   
         
        
        ReadTotalTimeoutMultiplier:指定比例因子(毫秒),实际上是设置读取一个字节和等待下一个字节所需的时间,这样总的超时时间为读取的字节数乘以该值,同样一次读取操作到达这个时间后,也认为本次读操作己经结束。   
        
        ReadTotalTimeoutConstant:一次读取串口数据的固定超时。所以在一次读取串口的操作中,其超时为ReadTotalTimeoutMultiplier乘以读取的字节数再加上   ReadTotalTimeoutConstant。将ReadIntervalTimeout设置为MAXDWORD,并将ReadTotalTimeoutMultiplier   和ReadTotalTimeoutConstant设置为0,表示读取操作将立即返回存放在输入缓冲区的字符。可以理解为一个修正时间,实际上就是按ReadTotalTimeoutMultiplier计算出的超时时间再加上该时间才作为整个超时时间。   
        
        WriteTotalTimeoutMultiplier:写入每字符间的超时。  
       
        WriteTotalTimeoutConstant:一次写入串口数据的固定超时。所以在一次写入串口的操作中,其超时为WriteTotalTimeoutMultiplier乘以写入的字节数再加上   WriteTotalTimeoutConstant。  
       
      一般都会做以下设置:  
      TimeOuts.ReadIntervalTimeout=MAXDWORD;                        
      //   把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作  
       
      TimeOuts.ReadTotalTimeoutMultiplier=0;                        
      //读时间系数  
       
      TimeOuts.ReadTotalTimeoutConstant=0;                          
      //读时间常量      
       
      TimeOuts.WriteTotalTimeoutMultiplier=50;                
      //总超时=时间系数*要求读/写的字符数+时间常量  
       
      TimeOuts.WriteTotalTimeoutConstant=2000;                
      //设置写超时以指定WriteComm成员函数中的

  • 相关阅读:
    base64 压缩上传上传图片
    mvc 微信支付
    微信自动回复消息的坑
    solr集群搭建,zookeeper集群管理
    zookeeper集群的搭建
    linux环境下搭建solr服务器--单机版
    连接redis集群报错问题解决java.lang.NumberFormatException: For input string: "7002@17002"
    linux环境下搭建ActiveMQ集群
    windows下以及Linux环境下安装activeMQ
    卸载linux系统自带JDK,安装自己的jdk
  • 原文地址:https://www.cnblogs.com/buffer/p/1274676.html
Copyright © 2011-2022 走看看