CSkin博客

标题: 【C#串口通讯加强版】BinGoo系列之串口通讯加强版 [打印本页]

作者: Blue_Pen    时间: 2014-11-7 15:42
标题: 【C#串口通讯加强版】BinGoo系列之串口通讯加强版
本帖最后由 Blue_Pen 于 2014-11-7 15:44 编辑

BinGoo系列之《串口通讯加强版 》

* 名称:串口通讯


* 功能:串口通讯,接收、发送串口数据


* 特点:解决接收数据不全,数据丢失,按照协议解析数据


源码案例下载在最底下
下面贴出接收数据的代码:
[C#] 纯文本查看 复制代码
/// <summary>
        /// 串口接收数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SpDataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //根据不同协议更改协议长度和针头针尾数据
            //这里以FF FE XX XX XX XX XX AA为例
            //针头为:FF FE,针尾为:AA
            try
            {
                int n = MySerialPort.BytesToRead; //记录缓存数据的长度
                byte[] buf = new byte[n]; //声明一个临时数组存储当前来的串口数据  
                MySerialPort.Read(buf, 0, n); //读取缓冲数据  
                BufferList.AddRange(buf);//将本次接收到的缓存数据添加到BufferList列表数据中
                //当BufferList缓存列表数据大于或等于协议数据长度时开始处理数据
                while (BufferList.Count >= 8)
                {
                    //查找数据头(重要,防止数据丢失或不全)
                    if (BufferList[0] != 0xFF || BufferList[1] != 0xFE || BufferList[7] != 0xAA)
                    {
                        //若针头针尾没有达到协议标准则移除BufferList第一位,继续下一轮判断
                        BufferList.RemoveAt(0);
                        continue;
                    }
                    //若前面数据验证成功则将数据取出
                    StringBuilder myStringBuilder = new StringBuilder(MySerialPort.ReadBufferSize*2);
                    for (int i = 0; i < 8; i++)
                    {
                        myStringBuilder.Append(String.Format("{0:X2}", Convert.ToInt32(BufferList)) + " ");
                    }
                    //移除BufferList列表中已处理的数据
                    BufferList.RemoveRange(0, 8); //从缓存中删除错误数据  
                    Invoke(new ShowDataCallback(ShowData), myStringBuilder.ToString());
                }
            }
            catch (Exception ex)
            {
                //最好写日志文件,保存起来
                //MessageBox.Show(ex.Message);
            }
        }


运行效果图:


这里源码下载: SerialPortDemo.zip (58.04 KB, 下载次数: 1019)



作者: hhjj3388    时间: 2014-11-12 13:58
不错支持下·!!!
作者: qewen0920    时间: 2015-2-6 09:12
谢谢要了
作者: 高博    时间: 2015-2-6 13:32
不错!最近在研究这些!
作者: 工会发的    时间: 2015-3-23 18:22
学习学习111111111111111111
作者: zz82103    时间: 2015-6-24 09:04
要用到了,下载下来看看,稳定快速就好
作者: zjwzcx    时间: 2016-1-25 10:45
看着不错,支持了。
作者: 杨员外    时间: 2016-11-18 10:04
串口的必须用到,收藏备用
作者: 潇潇君子哥    时间: 2017-1-18 16:30
好,做项目,刚好可以参考下。
作者: kingzgh    时间: 2017-2-24 15:57
刚好可以参考下
作者: wesson2016    时间: 2017-2-28 08:50
支持楼主
作者: nyzjs    时间: 2017-3-16 15:20
不错支持下·!!!
作者: qq33951    时间: 2017-7-20 09:55
谢谢分享
作者: zyp6663    时间: 2017-8-23 21:44
谢谢1!!~~~~~~~
作者: xiaox314    时间: 2017-9-14 16:15
支持一下,不错,可以借鉴一下
作者: anxiaohuai    时间: 2017-9-14 19:16
谢谢要了
作者: 土豆哥哥    时间: 2017-9-15 00:57
正好需要
作者: ww_87510531    时间: 2019-3-29 15:35
谢谢楼主 正需要这个!!
作者: 玉简励    时间: 2020-3-12 17:59
可以参考下
作者: jhyjhy213    时间: 2020-4-19 10:52
不错支持下·!!!
作者: HQing    时间: 2022-12-21 14:44
必须顶一下
作者: delay    时间: 2022-12-30 09:57
感谢分享
作者: HQing    时间: 2023-1-4 15:18
学习了,顶一下
作者: LoveGanJiQi    时间: 2023-1-12 10:38
学习了,顶一下




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2