作者: Blue_Pen
查看: 12986|回复: 23
打印 上一主题 下一主题

[源码] 【C#串口通讯加强版】BinGoo系列之串口通讯加强版

[复制链接]
跳转到指定楼层
楼主
Blue_Pen 发表于 2014-11-7 15:42:08 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
查看: 12986|回复: 23
本帖最后由 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[i])) + " ");
                    }
                    //移除BufferList列表中已处理的数据
                    BufferList.RemoveRange(0, 8); //从缓存中删除错误数据  
                    Invoke(new ShowDataCallback(ShowData), myStringBuilder.ToString());
                }
            }
            catch (Exception ex)
            {
                //最好写日志文件,保存起来
                //MessageBox.Show(ex.Message);
            }
        }


运行效果图:


这里源码下载:


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏12 转播转播
回复 论坛版权

使用道具 举报

24#
LoveGanJiQi 发表于 2023-1-12 10:38:06 | 只看该作者
学习了,顶一下
23#
HQing 发表于 2023-1-4 15:18:10 | 只看该作者
学习了,顶一下
22#
delay 发表于 2022-12-30 09:57:25 | 只看该作者
感谢分享
回复

使用道具 举报

21#
HQing 发表于 2022-12-21 14:44:53 | 只看该作者
必须顶一下
20#
jhyjhy213 发表于 2020-4-19 10:52:22 | 只看该作者
不错支持下·!!!
19#
玉简励 发表于 2020-3-12 17:59:03 | 只看该作者
可以参考下
18#
ww_87510531 发表于 2019-3-29 15:35:14 | 只看该作者
谢谢楼主 正需要这个!!
17#
土豆哥哥 发表于 2017-9-15 00:57:54 | 只看该作者
正好需要
回复

使用道具 举报

16#
anxiaohuai 发表于 2017-9-14 19:16:48 | 只看该作者
谢谢要了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-5-4 14:36, Processed in 0.599462 second(s), 32 queries , Gzip On.

快速回复 返回顶部 返回列表