C# 串口操作系列(4) -- 协议篇,文本协议数据解析
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyazhe/archive/2010/06/09/5657188.aspx
上一篇已经介绍了协议的组成,一个协议,一般具有 :协议头+长度+数据+校验 , 文本格式可以直观的定义回车换行是协议的结尾,所以我们可以省略数据长度,增加协议尾。即: 协议头 + 数据 + 校验 + 数据尾 。
文本方式的数据比较容易分析。如果数据缓存,可以考虑用StringBuilder。或是不缓存也可以。文本格式数据大多有换行结尾。稍微修改即可。例如分析常见的NMEA 0183格式的卫星坐标数据GGA。
$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77
$ 开始
GPGGA 命令字
* 结尾
77 校验
对上一篇代码稍作修改就可以了。例子不贴了。文本格式比较简单,只是为了内容完整。贴来做参考。只有分析的地方简化很多。
- void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- if (Closing) return;//如果正在关闭,忽略操作,直接返回,尽快的完成串口监听线程的一次循环
- try
- {
- Listening = true;//设置标记,说明我已经开始处理数据,一会儿要使用系统UI的。
- //文本格式比较简单,你可以死等。
- string line = comm.ReadLine();//这就得到回车换行结尾的了。但是不是从头开始的就要检查了
- /
- //<协议解析>
- //因为恢复的代码在finally中。你可以直接的return
- if(line[0] != '$') return;//虽然可能有点垃圾,但是数据不重要。直接丢弃就可以了。后续的都是对的
- int star = line.IndexOf("*",1);
- if(star == -1) return;
- //根据$后面数据计算异或校验,并和*后面的数字对比。如果不同,也不进行分析。因为校验错误
- //当确定头尾存在,校验正确。就可以分析数据了。
- //分析数据
- //略
- //因为要访问ui资源,所以需要使用invoke方式同步ui。
- this.Invoke((EventHandler)(delegate
- {
- //判断是否是显示为16禁止
- if (checkBoxHexView.Checked)
- {
- //依次的拼接出16进制字符串
- foreach (byte b in buf)
- {
- builder.Append(b.ToString("X2") + " ");
- }
- }
- else
- {
- //直接按ASCII规则转换成字符串
- builder.Append(Encoding.ASCII.GetString(buf));
- }
- //追加的形式添加到文本框末端,并滚动到最后。
- this.txGet.AppendText(builder.ToString());
- //修改接收计数
- labelGetCount.Text = "Get:" + received_count.ToString();
- }));
- }
- finally
- {
- Listening = false;//我用完了,ui可以关闭串口了。
- }
- }
C# 串口操作系列(4) -- 协议篇,文本协议数据解析相关推荐
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础. 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用20 ...
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyazhe/archive/2010/05/17/5598945.aspx 我假设读者已经了解了c#的语法,本文是针 ...
- C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 ——兔子党逍遥原创,转来分享学习
我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础. 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用20 ...
- C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyazhe/archive/2010/05/19/5606276.aspx 第一篇文章我相信很多人不看都能做的出来, ...
- (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇
(一)JAVA基于OPENXML的word文档插入.合并.替换操作系列之基础篇 前言 什么是Open Xml? Open XML SDK 这系列笔记要做点什么? 涉及技术点 关于word.openxm ...
- C# 串口操作系列(4) -- 协议篇,文本协议数据解析 .
上一篇已经介绍了协议的组成,一个协议,一般具有 :协议头+长度+数据+校验 , 文本格式可以直观的定义回车换行是协议的结尾,所以我们可以省略数据长度,增加协议尾.即: 协议头 + 数据 + 校验 + ...
- C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wuyazhe/archive/2010/05/27/5627253.aspx 我们的串口程序,除了通用的,进行串口监听 ...
- C# 串口操作系列(5)--通讯库雏形
串口是很简单的,编写基于串口的程序也很容易.新手们除了要面对一堆的生僻概念,以及跨线程访问的细节,还有一个需要跨越的难题,就是协议解析,上一篇已经说明了: 一个二进制格式的协议一般包含: 协议头 + ...
- 【Unity3D 教程系列第 15 篇】本地数据持久化之 Playerprefs 类
这是[Unity3D 教程系列第 15 篇],如果觉得有用的话,欢迎关注专栏. 文章目录 一:什么是 PlayerPrefs 类 二:PlayerPrefs 类中的静态方法 1:写入数据 2:读取数据 ...
最新文章
- Scalaz(7)- typeclass:Applicative-idomatic function application
- Windows下更改pip镜像源
- nginx重新编译添加ssl模块
- linux配ipv6 ipv4 双栈,RouterOS配置原生IPv6(电信IPv4/IPv6双栈)
- php大作业含代码_目标检测 | 目标检测技巧大汇总(含代码与解读)
- day01-pycharm快捷键
- 图解WebGLThree.js工作原理
- 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法
- 前端常用插件、工具类库汇总,不要重复造轮子啦!!!
- SVN下载以及汉化安装包的使用
- 认知电子战 (1.2):认知理论及其在无线电领域的应用
- 计算机主机故障有哪些,电脑硬件常见故障有哪些
- 大数据杀熟!我被美团会员割了韭菜
- 57之最,来找找你的之最吧
- C++ Primer Plus P60 程序清单4.1(马铃薯的分析程序 ,理解数组的一些属性)——中职
- 女生应该找一个会打DOTA的男生做老公
- 微软的语音交互“滑铁卢”:Cortana小娜悲惨收场,未来路在何方?
- WHERE条件子句 | 零基础自学SQL课程系列Day5
- python去除字符串中空格和特殊符号的方法
- java.net.MalformedURLException: no protocol 可能的解决方法
热门文章
- 会声会影x5 屏幕捕获功能 未检测到系统音频 请确保您的计算机已启动此功能...
- 电商数据源分析-尚硅谷大数据培训
- 赢在中国对80后30个忠告
- 基于大数据应用探索“互联网+卷烟市场监管”新模式
- matlab 纯迟延_基于Matlab参数辨识的纯迟延系统预估控制在火电厂的应用
- 【javaWeb】Struts 2导出excel文件
- android 商米扫码sdk,应用市场外部调用SDK接口
- 《高效15法则》读书笔记
- 服务器硬件RAID性能横评(1)
- macbook没有权限打开文件_手把手教你删除没有权限的文件