串口通讯超时的设置与含义(COMMTIMEOUTS)
来源:互联网 发布:初中生 编程 编辑:程序博客网 时间:2024/05/29 16:27
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout;
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
间隔超时=ReadIntervalTimeout
总超时 = ReadTotalTimeoutMultiplier * 字节数 + ReadTotalTimeoutConstant
串口读取事件分为两个阶段(我以Win32 API函数ReadFile读取串口过程来说明一下)
第一个阶段是:串口执行到ReadFile()函数时,串口还没有开始传输数据,所以串口缓冲区的第一个字节是没有装数据的,这时候总超时起作用,如果在总超时时间内没有进行串口数据的传输,ReadFile()函数就返回,当然 没有读取到任何数据。而且,间隔超时并没有起作用。
第二阶段:假设总超时为20秒,程序运行到ReadFile(),总超时开始从0 计时,如果在计时到达10秒时,串口开始了数据的传输,那么从接收的第一个字节开始,间隔超时就开始计时,假如间隔超时为1ms,那么在读取完第一个字节后,串口开始等待1ms,如果1ms之内接收到了第二个字节,就读取第二个字节,间隔超时重置为0并计时,等待第三个字节的到来,如果第三个字节到来的时间超过了1ms,那么ReadFile()函数立即返回,这时候总超时计时是没到20秒的。如果在20秒总计时时间结束之前,所有的数据都遵守数据间隔为1ms的约定并陆陆续续的到达串口缓冲区,那么就成功进行了一次串口传输和读取;如果20秒总计时时间到,串口还陆陆续续的有数据到达,即使遵守字节间隔为1ms的约定,ReadFile()函数也会立即返回,这时候总超时就起作用了。
总结起来,总超时在两种情况下起作用
第一:串口没进行数据传输,等待总超时时间那么长ReadFile()才返回。非正常数据传输
第二:数据太长,总超时设置太短,数据还没读取完就返回了。读取的数据是不全的
间隔超时触发是有条件的
第一:在总超时时间内。
第二:串口进行了数据的传输。
成功的进行一次串口数据的传输和读取,只有总超时和间隔超时相互参与配合才能完成
- 串口通讯超时的设置与含义(COMMTIMEOUTS)
- 串口编程-读写超时 COMMTIMEOUTS设置
- 串口编程:超时COMMTIMEOUTS结构
- COMMTIMEOUTS详解(读写串口超时)
- 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
- 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
- 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
- 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
- COMMTIMEOUTS主要用于串口超时参数设置
- 串口编程之二:超时COMMTIMEOUTS结构
- 解决串口通讯中部分串口ReadFile使用SetCommTimeouts设置超时无效的问题
- 如何设置串口通信中的COMMTIMEOUTS结构?
- ServerXMLHTTP的超时设置(setTimeouts)参数含义 转帖
- 如何设置超时参数(串行通讯)
- 串口的超时设置(加心得)
- 设置串口读写超时
- 串口设置超时
- VC串口超时参数结构体COMMTIMEOUTS [附 VC9下载地址]
- 关于C++编译的程序无法在新一台电脑上运行总结
- 建设银行通知到商户个人系统
- 网易云信排坑之 Can not load ne_audio library异常处理
- mybatis传入时间比较
- JavaScript入门
- 串口通讯超时的设置与含义(COMMTIMEOUTS)
- Map Sum Pairs问题及解法
- C#字节数组的常用解码处理方法
- C# 泛型
- OpenCV 3.0中IplImage* 转cv::Mat
- Android 如何静默安装app
- sql三种分页方式
- OpenCV——Mat、CvMat、IplImage类型浅析【转】
- 如何将使用托管磁盘虚拟机的 OS 盘挂载到其他虚拟机上