C# 串口通信 使用SerialPort类的DataReceived事件接收的数据不完整,如何解决,请指教。

C# 串口通信 使用SerialPort类的DataReceived事件接收的数据不完整,只能就受到很少的一部分数据,大部分数据接收不到,如何解决,请指教。

你这种情况我以前也遇到过,根据实际情况有很多解决办法:
1.你可以在接收事件函数的开始位置延迟一段时间,根据数据长度的不同可以适当改变延迟的时间。
2.根据你接收的数据格式可以使用不同的Read方法。ReadTo()方法是直到读到相应的字符为止,ReadLine()方法是读到一个新行,Read()读取缓冲区的字节数。
希望对你有帮助。不懂的话可以继续问。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-12
你只接受一次?还是不停的循环接收,收到结束符未知?追问

如果循环接收的话,接收数据时read()方法中的字节数据的偏移量怎么设置?

追答

设置足够的缓冲区。收到足够长度的内容或者特殊字节作为结束符。作为一个段有效数据去解包处理

C# 串口通信 使用SerialPort类的DataReceived事件接收的数据不完整...
1.你可以在接收事件函数的开始位置延迟一段时间,根据数据长度的不同可以适当改变延迟的时间。2.根据你接收的数据格式可以使用不同的Read方法。ReadTo()方法是直到读到相应的字符为止,ReadLine()方法是读到一个新行,Read()读取缓冲区的字节数。希望对你有帮助。不懂的话可以继续问。

c#串口SerialPort接收数据不完整问题
解决:自己建立一个byte或string的队列,拼接拆分(这就要求必须有自定义的终止符)

c#,采用SerialPort类的DataReceived事件来接收数据,性能达不到要求,有...
1.如果是从设备数据发出,到程序SerialPort类的DataReceived收到时间觉得过长,那你这个系统需要的性能就太牛叉了,还是换其他方式吧,例如socket。2.如果是设备数据发出,程序也收到。但是如果是因为你在DataReceived事件里写了大量的处理逻辑导致在两次接收数据的时间间隔之内跟不上处理,那这个,我建议你...

C# serialport类编写串口通信程序,无法接收全部数据!
解决办法:只能通过控制代码来实现你想要的功能,我认为有两种方案可供使用:一、设置一个大小为59的缓存,写一个while循环,只有从串口读满59个字节的数据时才退出while循环,否则继续读取。二、思想跟第一种类似,只是不写while循环,利用调用函数思想,当存满59个字节时,返回true,否则返回false,继续...

C# serialport内datareceived事件接收串口数据,详细步骤。
byte[] data = new byte[serialPort1.BytesToRead]; \/\/定义缓冲区,因为串口事件触发时有可能收到不止一个字节 serialPort1.Read(data, 0, data.Length);\/\/读取指定长度 foreach (byte Member in data) \/\/遍历用法 { string str = Convert.ToString(Member, 16).ToUpper();textBox1.AppendText...

C# serialport
出现收不完整的根本原因是有串口通信特性决定的:由于是串行通信,GPS数据是一个字节接一个字节,以给定的波特率送人计算机的串口。这就有可能GPS还没有将数据发送完,你就读取串口数据,造成接收不完整。解决问题的关键:怎么判断GPS已经数据发送完毕?一条完整的GPS数据帧是以<CR><LF> (回车 换行 )...

C#读串口的数据,读不全的问题 不懂的千万别说话!
serialPort1.Read(buff, 0, buff.Length);\/\/之后buff里面就是串口接受的数据了,这个时候需要尽快处理掉,\/\/串口缓冲区会被塞满数据导致数据丢失 \/\/假如对数据的处理很复杂,很慢,建议把buff扔到一个缓冲区里面 \/\/并使用另外的一个线程去处理数据,而不是直接在serialPort1_DataReceived这个 \/\/事件...

...发送数据有动作,但数据接收不到,DataReceived事件总是不触发?_百度...
用串口调试工具确保代码无误.设置好串口和比特率点击open,然后编辑内容发送.用下面的方法接收.private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { if (serialPort1.IsOpen) { StringBuilder strb = new StringBuilder(); ...

c#串口通讯中serialPort_DataReceive读取数据并显示的使用方法:
\/\/你的循环条件有问题,当然会超了private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { MsgRectextBox.AppendText("Recieved:" + "\\r\\n\\r\\n"); \/\/int Length = serialPort1.BytesToRead; byte[] MsgRec = new byte[1024 * 10...

c# PLC串口读写serialPort1.BytesToRead没有数据
你的serialport的handsheake有没有设置,设置一下试试 ,还有,你的write和read之间最好sleep()一下,长度看你获取的数据长度

相似回答