serialport串口超時問題

tangx10 2015-01-29 03:00:52
如果读取字节时,如何当第一个字节无法读取时超时设置,并不是用ReadTimeout,因为这个是一个全局超时的,如果没有,有什么办法可以做到读一个字节时超时限制?
...全文
118 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-01-30
  • 打赏
  • 举报
回复
於黾 2015-01-30
  • 打赏
  • 举报
回复
引用 9 楼 tangx10 的回复:
如果设置ReadTimeout为20ms,但第一个字节来了之后,报文有30个字节的,但只接收一半时达到了20ms就自动报超时了 ReadTimeout是读取操作未完成时发生超时之前的毫秒数
要么你用异步回调函数Data_Recived事件去获取,然后拼接 要么你死循环每次读取1个字节然后拼接,这样任意2个字节之间超时就会进入catch,而不是整体超时
老张一笑 2015-01-30
  • 打赏
  • 举报
回复
我觉得对ReadTimeout理解不对吧,这个是多久没有得到数据的超时,你既然收到第一个字节那就一个个字节收,怎么会超时呢? 从缓冲区里已经读到数据就不会触发到超时. 不过我还是想说,20秒都读不完的一个包,缓冲区够吗?
老张一笑 2015-01-30
  • 打赏
  • 举报
回复
我想问,20秒一个包都收不完,到底是多大的包? 之前有我的接收是用while(true){} 方式,超时逻辑自己写, while 里面 sleep很小的时间如:100毫秒,外部定义变量来计时. 这样可以有两个计时,一个是第一个字节计时判断,第二个整包计时.
tangx10 2015-01-29
  • 打赏
  • 举报
回复
如果设置ReadTimeout为20ms,但第一个字节来了之后,报文有30个字节的,但只接收一半时达到了20ms就自动报超时了 ReadTimeout是读取操作未完成时发生超时之前的毫秒数
於黾 2015-01-29
  • 打赏
  • 举报
回复
举个恰当但又不恰当的例子: 比如你女朋友失踪了 那你到底应该等她多长时间,她没有出现,你就不再等了呢? 法律规定是3年如果还没找到,就可以判定死亡了 那么如果你等了1周就不等了,又找了个新女朋友,哪天你女朋友回来了能杀了你 而如果你等20年还在等,那你就等一辈子好了
於黾 2015-01-29
  • 打赏
  • 举报
回复
引用 3 楼 tangx10 的回复:
正需设置超时,但ReadTimeout设置得太短,无法接收完整的报文,如果太长的话,正如第一个字节无法获取时,要等太久时间返回
所以你应该测试数据到底正常需要多长时间返回,然后确定一个合理的超时时间 既不会太短让正常数据也接收不到,也不要太长影响效率(比如设置成24小时,那某一次发送完没有接收程序就直接挂掉了)
於黾 2015-01-29
  • 打赏
  • 举报
回复
如果你能接收到第一个字节,那么后面的字节保证也都会陆续到达的,这就跟火车头拉着火车皮一样,除非火车发生事故断成两截了(数据也可能因为某种原因被截断,但那不是正常现象,是事故) 而不想知道后面的数据是否会来,就想知道第一个字节是否会来,这两个东西本质上没有任何区别的 极端情况:每次就只发送一个字节,后面的字节不发送
本拉灯 2015-01-29
  • 打赏
  • 举报
回复
於黾 2015-01-29
  • 打赏
  • 举报
回复
你可以把数据流想象成火车 我在一个道闸口看道闸,上面告诉我10点有火车要来,我就定个闹钟,10还没到就响铃 如果我看到火车头了,那么我就把闹钟按了让它不要响了,如果响了我就得汇报:火车没有到,派人去看看怎么了吧 这就是ReadTimeout 而你现在说:我不管火车,就想知道火车头晚没晚点,到底会不会来. 这和看整个火车有任何区别?
tangx10 2015-01-29
  • 打赏
  • 举报
回复
正需设置超时,但ReadTimeout设置得太短,无法接收完整的报文,如果太长的话,正如第一个字节无法获取时,要等太久时间返回
於黾 2015-01-29
  • 打赏
  • 举报
回复
此外,你不用超时时间判断,你怎么知道第一个字节无法读取?
於黾 2015-01-29
  • 打赏
  • 举报
回复
没看懂你想干什么 ReadTimeout不就行了 第一个字节无法读取,难道可以先读取第二个字节吗 ReadTimeout不就是时间到了但是一个字节都没有读取到吗

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧