首页 串口通信之超时(1)

串口通信之超时(1)

举报
开通vip

串口通信之超时(1)超时分串口读超时和串口写超时,主要是读超时,即ReadTimeout与Read方法之间的超时。下面谈谈他们之间的意义和实现。Read方法是阻塞的,它一直在读串口接收缓冲区中的数据,如果接收缓冲区有数据,Read方法则返回一个或多个字节数据;如果Read方法在等待ReadTimeout毫秒时间内,串口接收区一直没有任何数据,则Read方法将甩ExceptionTimeout异常。注意,Read(outBuf,offset,count)阻塞读取的不是非等到count个字节数据,而是当前接收缓冲区大于等于1小于等于cou...

串口通信之超时(1)
超时分串口读超时和串口写超时,主要是读超时,即ReadTimeout与Read方法之间的超时。下面谈谈他们之间的意义和实现。Read方法是阻塞的,它一直在读串口接收缓冲区中的数据,如果接收缓冲区有数据,Read方法则返回一个或多个字节数据;如果Read方法在等待ReadTimeout毫秒时间内,串口接收区一直没有任何数据,则Read方法将甩ExceptionTimeout异常。注意,Read(outBuf,offset,count)阻塞读取的不是非等到count个字节数据,而是当前接收缓冲区大于等于1小于等于count个字节数据,即只要有数据Read方法就立刻返回。由于Read方法的阻塞性,所以我们必须防止(如串口物理断开)Read永远不返回,而导致程序卡死。方法有:1.设置ReadTimeout属性为合理值,其默认值为-1,即Read永不可能因为ReadTimeout而超时返回。2.先判断serialPort.BytesToRead大于0,再调用Read方法,则Read肯定会返回。代码段一:intnStartTime=Environment.TickCount;while(true){intnNowTime=Environment.TickCount;if(nNowTime–nStartTime>360)//等待360ms{Console.WriteLine(“等待360ms后超时”);break;}if(serialPort.BytesToRead>35)//用户业务数据包长度{intnLen=serialPort.Read(outBuf,0,35);DealData(outBuf,nLen);//验证合法包,然后处理业务break;}//时间消耗在循环过程中,可在这加一行Thread.Sleep(20);}代码段二:serialPort.ReadTimeout=1000;//等待1000ms初始化//接收处理函数try{intnLen=serialPort.Read(outBuf,0,serialPort.BytesToRead); //如果接收区一直没数据,时间消耗在这,等1000ms后甩TimeoutException异常if(nLen>0){DealData(outBuf,nLen);//进全局数据队列,然后 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 队列里的合法数据包}}catch(TimeoutExceptionex){Console.WriteLine("通信超时");}
本文档为【串口通信之超时(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_281650
暂无简介~
格式:doc
大小:14KB
软件:Word
页数:4
分类:
上传时间:2022-07-01
浏览量:2