C#串口数据读取程序,解决串口数据读取不完整小问题。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值