C#串口数据读取程序,解决串口读取不完整小问题。
出现问题:串口数据读取不完整
在对串口设备进行数据读取的过程中,遇到数据读取不完整的情况,例:完整的数据由506个字节,但每次串口读取的数据数量是随机的,506字节的数据,可能读2次才能全部读取完成整, 第1次100个字节,第2次406个字节;也可能读3次才能全部读取完整,第1次53字节,第2次77字节,第3次376字节,等等随机状况。
以上的情况会给我们带给数据读取上的困难。
解决方法:设置数据缓冲区
针对上出现的问题,我们可以设计相应的数据缓冲区,将每次读取的数据存储起来,直到读取到完整的数据为止,再进行数据处理。代码如下:
int n = 1;/
int AA = 0;//串口数据累积长度
private void datapoint_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (DataClosing)
{ return; }
try
{
n = datapoint.BytesToRead;//该部分为每次串口读取的数据长度
byte[] buf = new byte[n];//设置每次临时数据接收区的长度
datapoint.Read(buf, 0, n);//进行串口数据读取
Array.Copy(buf, 0, Received, AA, buf.Length);//将每次读取的数据拷贝至 Received 缓冲区。
if (AA < 1012)//对累积的数据长度进行判断,没达到需求则继续读取
{ AA += buf.Length; }
if (AA == 1012 && Received[1011] == 0xaa)//达到数据长度的要求后,进行后续的数据处理
{......数据处理部分......
AA=0;//同时将AA置零
Array.Clear(Received, 0, Received.Length);//清空Received
}
}
finally
{ DataListing = false; }
以上只是我个人的一点经验,如有更好的方法还希望大家多沟通。
以上代码实测通过。
该链接为相应的串口通信程序,实测通过。另包含数据存储、数据绘图、文件存储等功能
https://download.youkuaiyun.com/download/lnwin521/12106068


被折叠的 条评论
为什么被折叠?



