中易网

commtimeouts参数怎么设置

答案:1  悬赏:70  
解决时间 2021-02-19 03:51
commtimeouts参数怎么设置
最佳答案
private struct COMMTIMEOUTS
{
public int ReadIntervalTimeout;
public int ReadTotalTimeoutMultiplier;
public int ReadTotalTimeoutConstant;
public int WriteTotalTimeoutMultiplier;
public int WriteTotalTimeoutConstant;
}

ReadIntervalTimeout:两字符之间最大的延时,当读取串口数据时,一旦两个字符传输的时间差超过该时间,读取函数将返回现有的数据。设置为0表示该参数不起作用。

  ReadTotalTimeoutMultiplier:读取每字符间的超时。

  ReadTotalTimeoutConstant:一次读取串口数据的固定超时。所以在一次读取串口的操作中,其超时为
ReadTotalTimeoutMultiplier乘以读取的字节数再加上
ReadTotalTimeoutConstant。将ReadIntervalTimeout设置为MAXDWORD,并将
ReadTotalTimeoutMultiplier
和ReadTotalTimeoutConstant设置为0,表示读取操作将立即返回存放在输入缓冲区的字符。

  WriteTotalTimeoutMultiplier:写入每字符间的超时。

  WriteTotalTimeoutConstant:一次写入串口数据的固定超时。所以在一次写入串口的操作中,其超时为WriteTotalTimeoutMultiplier乘以写入的字节数再加上 WriteTotalTimeoutConstant。

一般都会做以下设置:
TimeOuts.ReadIntervalTimeout=MAXDWORD;
// 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作

TimeOuts.ReadTotalTimeoutMultiplier=0;
//读时间系数

TimeOuts.ReadTotalTimeoutConstant=0;
//读时间常量

TimeOuts.WriteTotalTimeoutMultiplier=50;
//总超时=时间系数*要求读/写的字符数+时间常量

TimeOuts.WriteTotalTimeoutConstant=2000;
//设置写超时以指定WriteComm成员函数中的

// COMMTIMEOUTS对象
COMMTIMEOUTS comTimeOut;

// 接收时,两字符间最大的时延
comTimeOut.ReadIntervalTimeout = 3;

// 读取每字节的超时
comTimeOut.ReadTotalTimeoutMultiplier = 3;

// 读串口数据的固定超时
// 总超时 = ReadTotalTimeoutMultiplier * 字节数 + ReadTotalTimeoutConstant
comTimeOut.ReadTotalTimeoutConstant = 2;

// 写每字节的超时
comTimeOut.WriteTotalTimeoutMultiplier = 3;

// 写串口数据的固定超时
comTimeOut.WriteTotalTimeoutConstant = 2;

// 将超时参数写入设备控制
SetCommTimeouts(handlePort_,&comTimeOut);
ReadIntervalTimeout

指定通讯线上两个字符到达的最大时延,以毫秒为单位。在ReadFile操作期间,时间周期从第一个字符接收到算起。如果收到的两个字符之间的间隔超过该值,ReadFile操作完毕并返回所有缓冲数据。如果ReadIntervalTimeout为0,则该值不起作用。

如果值为MAXDWORD, 并且ReadTotalTimeoutConstant和ReadTotalTimeoutMultiplier两个值都为0, 则指定读操作携带已经收到的字符立即返回,即使没有收到任何字符。

ReadTotalTimeoutMultiplier

指定以毫秒为单位的累积值。用于计算读操作时的超时总数。对于每次读操作,该值与所要读的字节数相乘。

ReadTotalTimeoutConstant

指定以毫秒为单位的常数。用于计算读操作时的超时总数。对于每次读操作,ReadTotalTimeoutMultiplier与所要读的字节数相乘后与该值相加。

如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则在读操作时忽略总超时数。

WriteTotalTimeoutMultiplier

指定以毫秒为单位的累积值。用于计算写操作时的超时总数。对于每次写操作,该值与所要写的字节数相乘。

WriteTotalTimeoutConstant

指定以毫秒为单位的常数。用于计算写操作时的超时总数。对于每次写操作, WriteTotalTimeoutMultiplier与所要写的字节数相乘后与该值相加。

如果 WriteTotalTimeoutMultiplier 和 WriteTotalTimeoutConstant都为0,则在写操作时忽略总超时数。

提示:用户设置通讯超时后,如没有出错,串口已经被打开。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
竞字怎么加偏旁?
U深度uefi版怎么用u盘给电脑装系统?
贾汪汉风足疗店全身按摩有哪些
给监理送礼有什么窍门
跳子沟地址在哪,我要去那里办事
三相四线漏电开关,用了零线就跳闸
昨天晚上打了头孢类消炎针,今天早上起来全身
万青医药(井岸中兴分店)地址有知道的么?有点
衢州白云北大道405号怎么走,
十万火急!给意见的人感激不尽!我现在准备开
HTML主要内容
中福华晓药房东台天和堂有限公司地址有知道的
上海海滨经济技术开发园区地址在哪,我要去那
三相负载根据什么条件作星形或三角形连接??
盘多多为什么打不开别人的百度云主页了
推荐资讯
为什么我的<地球帝国2>不能玩
独立学院 民办三本 大学里的三本 哪个好 麻烦
哈尔滨驾驶证A3在什么部门办理
锦绣被姐姐放走第几集
中国移动世纪长兴手机大卖场指定专营店怎么去
已知等比数列{an}中 a1a2a3a4a5=32 且a11=8,
大召稍麦馆地址在哪,我要去那里办事
mbi能赚钱么?
请问前尘是什么意思?
极限挑战孙红雷花仙子那一期的背景音乐,就是
国美精品家倶大卖场我想知道这个在什么地方
一九五三年中国人民银行发行的黑十圆现正市场
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?