记录一次自己调试代码的过程
今年年初我们做了一套防窃电的软件,其中通讯采取的是串口方式。前段时间,根据现场的反馈,我们增加了蓝牙通讯的功能。系统界面如下图所示:
今天,现场人员反馈说:“解析的数据出现问题”,所以我在这里把调试代码的过程做个记录,以方便大家的参考。现场发回的数据如下图所示:
我们要做的就是对这些数据进行拆分,得到满足规约的数据,然后进行解析。
本软件所用规约如下图所示:
这个规约比较简单,可以看到以 0x68 0xA5 0x00 0x68
开头,一共170(0xA5 0x00
)个字节,为了验证数据的有效性,对数据做了CRC
校验。
下面是读取数据、拆分数据、显示数据的代码。
//读取数据public static List<byte> ReadFile(string fileName)
{List<byte> lst = new List<byte>();string[] strs = File.ReadAllLines(fileName);foreach (string str in strs){string[] chars = str.Split(' ');foreach (string s in chars){byte byt = Convert.ToByte("0x" + s, 16);lst.Add(byt);}}return lst;
}
//拆分并显示数据private static int FindPara(List<byte> lst)
{byte[] model = new byte[] { 104, 165, 00, 104 };int count = lst.Count - model.Length;for (int i = 0; i <= count; i++){if (lst[i] == model[0]){int j = 1;for (; j < model.Length; j++){if (lst[i + j] != model[j])break;}if (j == model.Length)return i;}}return -1;
}private static string PrimaryDataOx(byte[] buf)
{string str = string.Empty;for (int i = 0; i < buf.Length; i++){str += buf[i].ToString("X2") + " ";}return str.Trim();
}public static void WriteFile(string fileName,List<byte> lst)
{StreamWriter sw = File.CreateText(fileName);int index = FindPara(lst);int len = 170;int count = 1;while (index != -1){lst.RemoveRange(0, index);if (lst.Count < len)break;byte[] buf = lst.GetRange(0, len).ToArray();string text = count + " -- " + PrimaryDataOx(buf);sw.WriteLine(text);lst.RemoveRange(0, len);count++;index = FindPara(lst);}sw.Close();Process.Start(fileName);
}
通过以上代码,我们就可以把满足规约的数据拆分出来,根据规约进行解析得到实际的物理量,然后进行分析处理了。
拆分后的数据如下图所示:
最后总结一下,通过这种方式就没有必要每次都等现场人员把设备拿回实验室,或者自己跑现场了,直接让他们把数据导入到文件中,我们在远程就能调试代码解决问题了,是不是很方便。今天就到这里吧!See You!
参考阅读:
- 1. 串口编程简介
- 2. 如何避免关闭串口时软件死锁
- 3. C#串口协议解析 – 二进制数据
- 4. C#串口协议解析 – 文本数据
- 5. 通信协议解析 – byte数组与常用类型的转换
- 6. C#通讯类库构建
相关文章:

CBitmapButton的使用(转)
CBitmapButton的使用 CBitmapButton作为MFC的控件类,并不为很多人所使用,因为现在网上遍布着从CButton派生的各种各样的按钮类,其中最为著名的就是CButtonST类了。但是最近在CSDN上看到几个问题都是使用CBitmapButton类,但是由于…

web前端干货:详细了解JS前端开发框架都有哪些
1. Foundation框架 Foundation框架总体来看要比Bootstrap略显高大上一点,但他们俩的设计理念都是非常清楚的,Bootstrap有引导的意思,尝试处理你项目中的一切所需。Foundation有基础、地基及支柱的意思,给项目中强有力的创造与支持…

Platform Builder 5下WinCE 5.0目录结构
Platform Builder 5下WinCE 5.0目录结构 Platform Builder 5已经自带WinCE 5.0,安装过程会指定WinCE 5.0的安装路径,默认为X:\WINCE500,WINCE500即为WinCE 5.0的根目录。根目录下主要有以下几个目录:PUBLIC, PLATFORM, PRIVATE, P…

记录一次自己清理数据的过程
今天接到一个任务,从原始数据(在不同监测点对白纹伊蚊,18周的监测数据)中提取监测点列表,然后从网上爬取各个监测点的空间信息(经纬度),并把这些经纬度数据转换成墨卡托坐标…

man nfsd(rpc.nfsd中文手册)
本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rpc.nfsd(8) System Managers Manual rpc.nfsd(8)NAMErpc.nfsd - NFS服务进程SYNOPSIS/usr/sbin/rpc.nfsd [options] nprocDESCRIPTIONrpc.nfsd程序…

Java学习从入门到精通的学习建议
想要学好java技术,首先打好基础很重要,不论学什么基础都是重中之重,学习Java更是如此。如:基础语法、核心类库、面向对象编程、异常、集合、IO流等基础如果学不好,那么后边更深入的语法也不容易学会。所以在学基础部分…

Automatically highlight current page in menu via Javascript
Please check the link, http://www.richnetapps.com/automatically_highlight_current_page_in/ 转载于:https://www.cnblogs.com/OceanChen/archive/2010/08/10/1796410.html

基于Vue的小日历(支持按周切换)
基于Vue的日历小功能,可根据实际开发情况按每年、每月、每周、进行切换 <template><div class"date"><!-- 年份 月份 --><div class"month"><p>{{ currentYear }}年{{ currentMonth }}月</p></div>&…

股市币市:数据分析与交易所公告(20190225)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: htt…

哪些人适合参加UI设计培训
UI设计在最近几年受到了很多人的关注,想要学习UI设计技术的人越来越多,大部分选择报UI设计培训班进行学习,有些人想要通过自学来学,那么到底哪些人适合参加UI设计培训呢?来看看下面的详细介绍。 哪些人适合参加UI设计培训? 1. 零…

java常用的7大排序算法汇总
这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应…

深度优先搜索算法在RPG游戏迷宫中的应用
在RPG游戏中我们经常会看到一些迷宫,我之前玩仙剑一的时候就经常在几个迷宫里绕来绕去也绕不出来,玩仙三由于游戏视角可以转,更是费劲。这里我们使用深度优先算法达到遍历一个迷宫的目的。 首先定义一个有序元组A:{左,上ÿ…

又有六所大学考研预调剂系统已开放!
距离 19 考研初试成绩的公布已经有一周了,成绩不错的同学就安心准备复试吧,全力备考,一定要拿到属于你的录取通知书!成绩不满意,擦线或者排名靠后的同学,复试、调剂两手准备,注定咱们要花更多的…

零基础参加java培训如何学习
零基础的同学想要学好java技术,一定要比有基础的学员更加努力才可以,因为java技术要学习的东西有很多,在Java培训学习的过程中也是要掌握一定的技巧和方法的,下面就为大家详细的介绍一下零基础参加java培训如何学习? 零基础参加j…

webGL的一些咨询--web3D
来自:http://www.bumao.com/index.php/2010/06/webgl-overview.html什么是webGLWebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供…

如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
当前,信息技术领域的知识在飞速的更新。作为一个程序爱好者,或者说已经超过 10年 的老码农,稍有懈怠就会被落下!跟踪当前信息技术领域的畅销书,结合自己所做的事情买来阅读,以便提升技能,就显得…

突发!微信官方证实:“绞杀”了刷量平台
今天,有关微信刷量平台崩溃的新闻刷爆朋友圈。在朝阳群众的“深扒”之下,不少微信大号的惨淡阅读量展露出了“娇羞的真容”。 不过,对此事,微信官方一直保持了“可怕的沉默”,今天下午,微信终于做出了官方回…

Java培训一共分几个阶段
Java培训一共分几个阶段?一般培训机构的课程都是从基础知识讲起,千锋教育的Java培训课程也不例外,第一阶段为JavaEE基础,主要讲授Java基础语法、面向对象、核心类库、集合等等基础知识点,把基础打牢学习接下来的知识的时候才会更…

IE6,7,8,FF兼容总结
做到浏览器兼容需要注意的四大要素(一)2009-05-31 17:091 Css1.1 选择器 通配符 * :: IE6不支持类选择器 .class :: IE6元素的class不能超过2个属性选择器 [attvalue] [att] [att|value] [att(^|$|~)value] :: IE6不支持关系选择器 E F; E > F ; E ~ F :: IE6不支持 1.2 伪…

二叉树的路径(根节点到叶节点)Binary Tree Paths
为什么80%的码农都做不了架构师?>>> 问题: Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1/ \ 2 3\5 All root-to-leaf paths are: ["1->2->5", "1->…

股市币市:数据分析与交易所公告(20190226)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

零基础怎么学UI设计
互联网的快速发展,给很多企业和求职人员有了更多的创业和工作机会,近几年,UI设计行业招聘需求人数就在不断上涨,越来越多的人想转行做UI设计。那么零基础怎么学UI设计?有哪些简单有效的学习方法?我们来看看下面的详细介绍。 零基…

原创:嵌入图片的HTML内容在FLASH AS3中正确显示的最佳解决方案
做一个项目,遇到这个该死的问题,尝试了几乎所有解决方法,几近崩溃,终于找到完美解决方案。因为在网上,无论中文还是英文,搜索了无数遍,都没人给出正确答案,所以,在此记下…

总结六条对我们学习Linux系统有用的忠告
接触linux需要的是端正自己的态度,这个玩意可不是一天两天就能拿得下的。学习个基础,能装系统、能装常见服务、能编译、能配置存储空间、能配置系统参数、能简单查看系统负载等基本够用。但这些只保证能做机房运维,真正和进阶的运维工作不在机…

一份来自上海院校的考研预调剂系统已开放名单!
距离 19 考研初试成绩的公布已经有一段时间了,成绩不错的同学就安心准备复试吧,全力备考,一定要拿到属于你的录取通知书!成绩不满意,擦线或者排名靠后的同学,复试、调剂两手准备,注定咱们要花更…

【Python培训基础知识】Python生成器函数
对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的。 可以采用生成器推导式来解决内存不足的问题。例如,利用生成器推…

普华永道重磅报告:决定未来的八大核心科技
在新兴科技高速发展的今天,各个技术风口你方唱罢我登场,把我们裹挟其中,无论是创业者,还是大公司的决策人,都需要时刻判断趋势。 也许每个人心里都在想类似的问题:“这些人工智能技术会如何影响我们的物联网…

[转帖][实用]Linux 释放内存方法
先看看内存使用状况[rootnode1 ~]# free -mtotal used free shared buffers cachedMem: 8004 6557 1446 0 163 5630-/ buffers/cache: 763 7240Swap: 1983 0 1983把内存里的数据暂时写到硬盘里[rootnode1 ~]# sync修改 /proc/sys/vm/drop_caches文件[rootnode1 ~]# echo 3 >…

股市币市:数据分析与交易所公告(20190227)
沪深300 1. 沪深300分位数数据 2. 沪深300股指图 3. 沪深300分位数图 4. 沪深300筹码分布图 数据来源: https://finance.sina.com.cn/stock/ BTC比特币 1. 比特币分位数数据 2. 比特币交易图 3. 比特币分位数图 4. 比特币筹码分布图 数据来源: https…

【Web前端培训】预解析(变量提升)
今天千锋小编为大家介绍一下一下JavaScript中的预解析(变量提升)。从什么是预解析及变量的预解析和函数的预解析及加载流程进行学习(注意:我们这里说的ES5中的预解析)。 什么是解析 首先代码执行肯定需要一个执行环境,浏览器会提供一个供javaScript执行的…