串口数据处理分包处理

Posted -fengzheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口数据处理分包处理相关的知识,希望对你有一定的参考价值。

最近遇到一个需求,利用树莓派去采集一个串口设备的所有数据,设备会主动上报数据,但是呢这个设备是一个集合设备,会上报的报文头都不一样,比如灯亮度或者开关会上报21 12 ·········,风速会上报71 23 ······。等等10多种数据格式。

刚好net core 支持跨平台串口通信。所以记录如下,主要是数据处理这部分;

1. 收到的数据立马转移到深度缓存中,在开启线程处理数据

   private List<byte> tempBuffer = new List<byte>();//深度缓存数据
        private void SP_ReadData_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                int count = sP_ReadData.BytesToRead;
                byte[] buf = new byte[count];
                sP_ReadData.Read(buf, 0, count);//读取缓冲数据
                tempBuffer.AddRange(buf);//把数据放入深度缓存区域
                //提高数据处理速度
                ThreadPool.QueueUserWorkItem(new WaitCallback(DealData), null);              
            }
            catch (Exception ex)
            {

            }
        }

 

1. 数据处理部分,利用了检测报文头和校验位的做法,把不对的数据剔除

技术图片

 

 技术图片

 

 

文笔不行,做个记录,酌情参考。

以上是关于串口数据处理分包处理的主要内容,如果未能解决你的问题,请参考以下文章

uni-app做微信小程序的分包处理

STM32标准库_04 | 串口接收不定长数据

uniapp分包,小程序分包处理,详解(图解),手把手从0开始

C#语言里对TCP接收数据的分包处理

C#语言里对TCP接收数据的分包处理

高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传)