serialport串口超時問題

问题描述

如果读取字节时,如何当第一个字节无法读取时超时设置,并不是用ReadTimeout,因为这个是一个全局超时的,如果没有,有什么办法可以做到读一个字节时超时限制?

解决方案

解决方案二:
没看懂你想干什么ReadTimeout不就行了第一个字节无法读取,难道可以先读取第二个字节吗ReadTimeout不就是时间到了但是一个字节都没有读取到吗
解决方案三:
此外,你不用超时时间判断,你怎么知道第一个字节无法读取?
解决方案四:
正需设置超时,但ReadTimeout设置得太短,无法接收完整的报文,如果太长的话,正如第一个字节无法获取时,要等太久时间返回
解决方案五:
你可以把数据流想象成火车我在一个道闸口看道闸,上面告诉我10点有火车要来,我就定个闹钟,10还没到就响铃如果我看到火车头了,那么我就把闹钟按了让它不要响了,如果响了我就得汇报:火车没有到,派人去看看怎么了吧这就是ReadTimeout而你现在说:我不管火车,就想知道火车头晚没晚点,到底会不会来.这和看整个火车有任何区别?
解决方案六:

解决方案七:
如果你能接收到第一个字节,那么后面的字节保证也都会陆续到达的,这就跟火车头拉着火车皮一样,除非火车发生事故断成两截了(数据也可能因为某种原因被截断,但那不是正常现象,是事故)而不想知道后面的数据是否会来,就想知道第一个字节是否会来,这两个东西本质上没有任何区别的极端情况:每次就只发送一个字节,后面的字节不发送
解决方案八:
引用3楼tangx10的回复:

正需设置超时,但ReadTimeout设置得太短,无法接收完整的报文,如果太长的话,正如第一个字节无法获取时,要等太久时间返回

所以你应该测试数据到底正常需要多长时间返回,然后确定一个合理的超时时间既不会太短让正常数据也接收不到,也不要太长影响效率(比如设置成24小时,那某一次发送完没有接收程序就直接挂掉了)
解决方案九:
举个恰当但又不恰当的例子:比如你女朋友失踪了那你到底应该等她多长时间,她没有出现,你就不再等了呢?法律规定是3年如果还没找到,就可以判定死亡了那么如果你等了1周就不等了,又找了个新女朋友,哪天你女朋友回来了能杀了你而如果你等20年还在等,那你就等一辈子好了
解决方案十:
如果设置ReadTimeout为20ms,但第一个字节来了之后,报文有30个字节的,但只接收一半时达到了20ms就自动报超时了ReadTimeout是读取操作未完成时发生超时之前的毫秒数
解决方案十一:
我想问,20秒一个包都收不完,到底是多大的包?之前有我的接收是用while(true){}方式,超时逻辑自己写,while里面sleep很小的时间如:100毫秒,外部定义变量来计时.这样可以有两个计时,一个是第一个字节计时判断,第二个整包计时.
解决方案十二:
我觉得对ReadTimeout理解不对吧,这个是多久没有得到数据的超时,你既然收到第一个字节那就一个个字节收,怎么会超时呢?从缓冲区里已经读到数据就不会触发到超时.不过我还是想说,20秒都读不完的一个包,缓冲区够吗?
解决方案十三:
引用9楼tangx10的回复:

如果设置ReadTimeout为20ms,但第一个字节来了之后,报文有30个字节的,但只接收一半时达到了20ms就自动报超时了ReadTimeout是读取操作未完成时发生超时之前的毫秒数

要么你用异步回调函数Data_Recived事件去获取,然后拼接要么你死循环每次读取1个字节然后拼接,这样任意2个字节之间超时就会进入catch,而不是整体超时

时间: 2024-08-03 16:22:01

serialport串口超時問題的相关文章

串口操作的數据接收問題

问题描述 我用C#做的串口通信,在循環測試的時候,接收有問題.例如:發送100次字符串"nihao",接受端兩次就把字符串接收完畢(數量和字符串都是正確的),正常情況是100次接收完畢啊.我的接受字符串是寫在serialPort1_DataReceived事件裏面.try{byte[]buffrec=newbyte[serialPort1.BytesToRead];serialPort1.Read(buffrec,0,buffrec.Length);Thread.Sleep(100);

ibatis-iBATIS 將model 中的java.util.date類型做insert時候提示無效列類型問題

问题描述 iBATIS 將model 中的java.util.date類型做insert時候提示無效列類型問題 model 的某一個字段A在為java.util.Date,對應table中的data類型 可為空 但是在做inert動作的時候,如果model中的A=null,插入就會出現無效的列類型的提示,為什麼.... 解决方案 ibatis 无效列类型 解决方案二: 当你插入时null 识别改字符类型是不是date类型,你可以写动态的sql语句如 <isNotNull prepend="

問一個問題,頁面上 在匯出報表的時候 報表沒有匯出來之前 不能做別的操作 怎麼限制?

问题描述 問一個問題,頁面上 在匯出excel報表的時候 報表沒有匯出來之前 不能做別的操作 怎麼限制? 解决方案 页面里面没有异步,不过你可以先用一个ifram制作一个loading弹出层来加载,然后等加载完以后在结束这个loading层

VS2005智能敏感提示時間過短的問題!

问题描述 郁悶,怎么會碰到這樣的問題!比如我在VS2005中打個"."就彈出敏感提示,但是這敏感提示時間太短了.1秒鐘不到就消失了!請問各位大俠從哪里設置一下?我希望敏感提示時間長一點!非常謝謝了! 解决方案 解决方案二:装了其它插件吧?不然不会消失的解决方案三:裝了什么插件哦?敏感提示沒有消失!只是彈出的時間太短了!不到1秒鐘!就是刷一下彈出有消失了?這什么原因?我只有這么一點分了,希望大俠幫我看下從哪里設置一下?解决方案四:弹出广告窗口被阻止了------------^^解决方案五

Oracle常見問題集(四)

oracle 21. 用EXISTS替換DISTINCT 當提交一個包含一對多表資訊(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換 例如: 低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO = E.DEPT_NO 高效: SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT 'X

Oracle常見問題集(一)

oracle 一.常見問題 1. Oracle安裝完成後的初始口令 internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_temp   2. ORACLE9IAS WEB CACHE的初始默認用戶和密碼? administrator/administrator   3. oracle 8.0.5怎麽創建資料庫 用orainst.如果有motif介面,可以用orainst /m   4. oracle

Oracle常見問題集(二)

oracle 71. 內核參數的應用 shmmax 含義:這個設置並不決定究竟Oracle資料庫或者作業系統使用多少實體記憶體,只決定了最多可以使用的記憶體數目.這個設置也不影響作業系統的內核資源.   設置方法:0.5*實體記憶體 例子:Set shmsys:shminfo_shmmax=10485760 shmmin 含義:共用記憶體的最小大小. 設置方法:一般都設置成爲1. 例子:Set shmsys:shminfo_shmmin=1: shmmni 含義:系統中共用記憶體段的最大個數.

Oracle常見問題集(三)

oracle 151. 如何監控 SGA 中字典緩衝區的命中率? select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" from v$rowcache where gets+getmisses <>0 group by p

ORACLE常用問題1000問(之一)

oracle 大家在應用ORACLE的時候可能會遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結一下, 發布給大家, 希望對大家有幫助! 和大家一起探討, 共同進步! 對ORACLE高手來說是不用看的. 1. Oracle安裝完成后的初始口令? internal/oracle sys/change_on_install system/manager scott/tiger sysman/oem_temp 2. ORACLE9IAS WEB CACHE的初始默认用户和密码? adm