C#串口数据读取速度很慢,但串口调试助手工具数据变化很快,怎么解决啊?

问题描述

我用FPGA向C#上位机串口实时连续发送数据,并在testbox控件中显示出来,当所发数据内容改变时,上位机串口数据的显示会维持原来的数一段时间很慢才变化,而利用串口调试助手可以看到,串口接收到的数据确实很快就变化了,不明白C#的串口为什么会那么长时间才变化。急求各位大神大牛帮忙解决,小弟学生党一枚,初学C#,缺少经验,也请大家帮帮忙,跪谢了!!

解决方案

解决方案二:
第一,两个是不是采用的相同波特率?其次,你的textbox显示变更是在发送成功前还是成功后?
解决方案三:
privatevoidserialPort2_DataReceived(objectsender,System.IO.Ports.SerialDataReceivedEventArgse){BeginInvoke(a,serialPort2.ReadByte());}//对接收到的数据进行处理stringstring_total;intmyint1;privatevoiddeal(intstr){//System.Threading.Thread.Sleep(100);//对收到的第一位数据进行处理if(i==1){string_total=str.ToString();textBox1.Text=string_total;i++;stringdata3=textBox1.Text;}elseif(i==2)//收到的第二位数据储存起来myint1=str;i++;}elseif(i==3){......}i=1;//令i归1}}

解决方案四:
引用1楼losebaby的回复:

第一,两个是不是采用的相同波特率?其次,你的textbox显示变更是在发送成功前还是成功后?

波特率相同,都是115200,另外我是在委托中让textbox显示数据的,您可以看我的程序,每次收到数据就让textbox.text显示出来
解决方案五:
第一次发帖,总是提示我有非法词汇,不知道怎么回事,我贴了程序,a=newmydelegate(deal);后面那个Privatevoiddeal(intstr)是委托函数,也请帮忙看看,感谢了!
解决方案六:
你的数据是一个一个字节传的吗?
解决方案七:
引用5楼shingoscar的回复:

你的数据是一个一个字节传的吗?

我的数据是FPGA发的,每次发送三字节的数据。
解决方案八:
引用6楼u014025715的回复:

Quote: 引用5楼shingoscar的回复:
你的数据是一个一个字节传的吗?

我的数据是FPGA发的,每次发送三字节的数据。

那你应该每次读3字节,准确的说应该每次都读光、处理、交给UI显示你一个个读再回给UI有延迟是正常的
解决方案九:
引用7楼shingoscar的回复:

Quote: 引用6楼u014025715的回复:
Quote: 引用5楼shingoscar的回复:
你的数据是一个一个字节传的吗?

我的数据是FPGA发的,每次发送三字节的数据。

那你应该每次读3字节,准确的说应该每次都读光、处理、交给UI显示你一个个读再回给UI有延迟是正常的

每次读光?我是新手,不太清楚,怎么做到每次读三个字节的数据啊,我理解的是datareceived事件触发就readbyte读取一个字节的数据,这样子理解是不是不对呢?应该如何进行修正呢
解决方案十:
串口调试助手变化很快,可以证明是程序的问题,可能是代码中做了延时或者有算法执行时间过久造成的。你可以先把数据处理的内容除掉,就保留数据的接受部分,看看数据接收的效率。
解决方案十一:
不光只有ReadByte,还有Read方法
解决方案十二:
读取一个字节太慢了有readtoend一般协议都会有结束符啊
解决方案十三:
最好建立一个串口的监控线程对串口监控,在有数据输入时立刻响应。你这个程序看不到是如何实现的
解决方案十四:
引用9楼shuzhongxiao的回复:

串口调试助手变化很快,可以证明是程序的问题,可能是代码中做了延时或者有算法执行时间过久造成的。你可以先把数据处理的内容除掉,就保留数据的接受部分,看看数据接收的效率。

您说的没错,我这里确实有数据的处理,可能会有一定影响,我再试试再回复您,谢谢哈
解决方案十五:
引用11楼wukaiping870123的回复:

读取一个字节太慢了有readtoend一般协议都会有结束符啊

能不能麻烦大牛给我个例子,实在初学,都不知道这些用法
解决方案:
引用9楼shuzhongxiao的回复:

串口调试助手变化很快,可以证明是程序的问题,可能是代码中做了延时或者有算法执行时间过久造成的。你可以先把数据处理的内容除掉,就保留数据的接受部分,看看数据接收的效率。

我设置了几个全局变量,在串口接收数据时在其线程里把接收到的数据送给全局变量,然后主线程一直在处理这些全局变量,并进行显示,但出来的界面就完全乱了,不知为何了,您看我这么处理有什么不妥吗
解决方案:
我也出现了这个问题词,感觉串口读取30个字节好慢
解决方案:
慢,是自己的程序的问题。当它没有收到数据的时候,那么应该没有任何代码在那里循环、浪费CPU时间。当它收到了数据,不管是多少字节,都应该被迅速读取完毕并且被处理,而不是堆积在那里。两个方面都要做到,才能保证最基本的效率。

时间: 2024-09-17 03:35:46

C#串口数据读取速度很慢,但串口调试助手工具数据变化很快,怎么解决啊?的相关文章

笔记本硬盘读取速度很慢怎么回事

  笔记本硬盘读取速度很慢怎么回事: 我们一系统盘为例,来清除一下系统盘的磁盘碎片,大家可以把各个盘的碎片都清理一下! 第一步:右击系统盘,点击属性! 第二步:在常规选项里面我们点击一下磁盘清理!电脑会显示正在计算可以释放多少空间! 第三步:我们选择需要清理的文件清理删除掉!在常规选项里面,我们可以选择删除不用的程序! 第四步:我们在计算机属性的工具里面点击磁盘碎片整理!

文件读取-c语言,用fgets将文件的数据读取后,如何对返回的数据进行操作,例如排序

问题描述 c语言,用fgets将文件的数据读取后,如何对返回的数据进行操作,例如排序 代码如下,我做法是 将fgets(readline, N, fp) 返回的readline 用atoi函数转为整型后赋给数组list,然后对list数组中的数据进行排序. 但实际运行下来,没有得到想要的结果,从printf结果看,atoi函数未能将readline 中的值转为整型,请各位大虾不吝指教,如何才能拿到fgets返回的readline的值,然后进行排序? #define N 256 #define S

笔记本电脑硬盘读取速度慢怎么办

  笔记本电脑硬盘读取速度慢怎么办: 不少电脑用户反映自己的硬盘读取速度很慢,不仅严重影响自己的电脑工作效率,也严重影响我们的工作心情,当我们遇到电脑硬盘读取速度很慢的情况该怎么办呢? 我们一系统盘为例,来清除一下系统盘的磁盘碎片,大家可以把各个盘的碎片都清理一下! 第一步:右击系统盘,点击属性 第二步:在常规选项里面我们点击一下磁盘清理!电脑会显示正在计算可以释放多少空间! 第三步:我们选择需要清理的文件清理删除掉!在常规选项里面,我们可以选择删除不用的程序! 第四步:我们在计算机属性的工具里

HBase原理-迟到的‘数据读取流程’部分细节

笔者去年年底分享了一篇关于HBase中数据读取(scan)逻辑的文章(戳这里),主要介绍了scan的基本流程以及实现框架,看官反应甚是强烈.文章最后还挖了一个不大不小的坑,承诺后期会就部分细节进行深入分析,然而因为部分原因这个坑一直没填上.HBase-Scan的细节其实并不好讲,涉及太多代码层面的底层逻辑,大部分童鞋应该都不会太过关心.虽说如此,挖了的坑,含着泪也要填上,当然为了把坑填好,笔者将会使出洪荒之力将这些核心细节通过各种辅助化方式(示例.图解等)进行解读,方便读者理解.注:笔者能力有限

socket通信inputStream.read(byte)读取速度小于接收速度,导致多帧数据叠加在一起。

问题描述 在socket通信中,由于inputStream.read(byte)是尽可能的读byte[]大小的数据,当服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文.而这些发送数据,读取数据的速度是未知的.怎么解决这个问题,服务器端不能改变, 解决方案 解决方案二:想办法将读取的后续动作的耗时降低.比如读取动作只负责读取,读取的内容传给多线程进行处理.解决方案三:没用.....解决方案四:想到了一个办法,把所有读的数据放到一起,不管每次读的是多少,放在所接收数

Java串口通信读取浮点型数据

问题描述 Java串口通信读取浮点型数据 怎么将如下位机中的数据:如温度读取并显示,大神们有具体的例子吗 解决方案 这个要取决于你下位机是用的什么方式通讯的,它的通信协议.基本的思路是读取串口数据,然后根据协议对得到缓冲区的字节数组进行解析. 参考:http://blog.csdn.net/wssiqi/article/details/14107341 解决方案二: java 串口通信Java串口通信简介

android 串口通信读取数据

问题描述 android 串口通信读取数据 串口读数据时,size= mInputStream.read(buffer),执行到这一步就不往下执行了,求解! 解决方案 android串口通信Android串口通信android串口通信 解决方案二: 亲,您这个问题解决了吗??我现在也是卡在这块了,,您有办法吗??求告诉一下,,万分感谢 解决方案三: 亲,我的是线程阻塞了,

C# 串口 SerialPort读取串口数据回显到文本框(显示不出来?)

问题描述 求教:环境VS2010,RS-232,通过SerialPort读取COM1口数据,回显到文本框中,但是无法获取回显数据.而通过串口调试工具,可以读取到发送到串口的值?源码: 解决方案 本帖最后由 sucretiger 于 2014-09-03 17:16:56 编辑解决方案二:断点看,到底收到数据没有解决方案三:估计是你程序没写对,你需要加一点延迟,然后把缓冲区的数据全部取出来.注意串口是串行发送数据的,你需要累加它发来的数据,而不是简单的接收,不然后面的数据会冲掉前面的.解决方案四:

c# 串口通信-C#串口数据读取问题求助

问题描述 C#串口数据读取问题求助 用C#中的一个serialport类读取cc2431传感器通过usb(com口)传来的数据,程序代码如下 void comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致 byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据