今年年初我们做了一套防窃电的软件,其中通讯采取的是串口方式。前段时间,根据现场的反馈,我们增加了蓝牙通讯的功能。系统界面如下图所示:

今天,现场人员反馈说:“解析的数据出现问题”,所以我在这里把调试代码的过程做个记录,以方便大家的参考。现场发回的数据如下图所示:

我们要做的就是对这些数据进行拆分,得到满足规约的数据,然后进行解析。

本软件所用规约如下图所示:

这个规约比较简单,可以看到以 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#通讯类库构建

记录一次自己调试代码的过程相关推荐

  1. win10 下用 vs code 编译调试代码的过程 (MinGW)

    一.下载软件 官网下载 vs code 和 MinGW. 二.建立工作区 1.建立文件夹 "ProjectTest",其内创建 Hello.cpp 文件,内容如下: #includ ...

  2. 云小课 | 玩转HiLens Studio之手机实时视频流调试代码

    摘要:在开发技能过程中,搭配视频流调试技能是非常必要的环节,也是检验技能效果的重要环节.HiLens Studio推出使用手机实时视频流调试代码的功能,以手机摄像头实时的视频流作为技能输入,查看技能输 ...

  3. VS调试dll详细过程记录

    VS调试dll详细过程记录 还可以参考博客: https://blog.csdn.net/u014738665/article/details/79779632 在我们写的程序中有时候调用dll,并且 ...

  4. linux下使用syslog日志调试程序快速的调试代码信息的过程

    linux下使用syslog日志调试程序快速的调试代码信息的过程 环境背景:ubuntu 20.0.4 开发环境:QtCreator 功能:查看函数是否调用成功:函数调用执行的过程等等: 1.使用头文 ...

  5. python代码执行过程记录_这款神器,能把 Python 代码执行过程看地一清二楚

    原标题:这款神器,能把 Python 代码执行过程看地一清二楚 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 机器之心报道,参与:一鸣.杜伟 Python 是一门 ...

  6. 别再用print输出来调试代码了

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法那些事 | 导语 最近在github上冒出了 ...

  7. 学了编程却写出错误代码?程序运行结果与想象不符?当bug出现时该何去何从,别担心,这篇文章统统告诉你!手把手带你调试代码,让bug原形毕露!

    [手把手带你搞定]实用调试技巧 什么是bug 调试及调试的重要性 什么是调试 调试的基本步骤 1. 发现程序错误的存在 2. 以隔离.消除等方式对错误进行定位 3. 确定错误产生的原因 4. 提出纠正 ...

  8. chrome 不记录填写值_Chrome 调试技巧

    alert 这个不用多说了,不言自明 console 基本输出 想必大家都在用console.log在控制台输出点东西,其实console还有其它的方法: console.log("打印字符 ...

  9. oracle存储过程报错 跳过,oracle调试存储过程的过程详解

    oracle调试存储过程的过程详解 oracle如果存储过程比较复杂,我们要定位到错误就比较困难,那么可以存储过程的调试功能 先按简单的存储过程做个例子,就是上次做的存储过程(proc_test) 1 ...

最新文章

  1. Linux查看进程线程个数
  2. Java transient关键字使用小记
  3. 今年最惨的交易:做空特斯拉
  4. Java虚拟机------JVM分析工具
  5. ASN.1编解码:asn1c、enber和unber
  6. 解决IIS占用CPU和内存大的问题
  7. auc 和loss_精确率、召回率、F1 值、ROC、AUC 各自的优缺点是什么?
  8. 尝试在Community Server中添加一个页面
  9. 解决WORD无法多次编辑保存
  10. BERT 的演进和应用
  11. ASCII码判断大小
  12. python查找相似图片或重复图片
  13. 印度影星沙鲁克-罕简介
  14. 兴义智力象机器人_中科院科普讲师专家赴黔西南州做科普报告巡讲
  15. 在聊天群中,如何快速获取信息,了解群中讨论的话题。
  16. pip3.7.5安装环境依赖onnxruntime、onnx、numpy、skl2onnx
  17. Object.assign()用法和特性
  18. BootStrap栅格之间留出空隙
  19. android友盟自定义事件,友盟统计事件添加
  20. 阿里巴巴1688诚信通通过市场全面分析选品策略

热门文章

  1. 学Python的好处有哪些?
  2. 使用树形结构保存实体
  3. mysql 新增 删除用户和权限分配
  4. 9成P2P平台面临出局,千亿资本何去何从?
  5. Ubuntu 15.10安装ns2.35+nam
  6. 开发三年,如何摆脱日复一日的CRUD?
  7. 动态规划——最长上升子序列问题 两种角度及优化算法
  8. 论文:基于粒子群优化的测试数据生成及其实证分析-----生成过程以及实验(计算机研究与发展)
  9. 基于四元数互补滤波的无人机姿态解算
  10. 学习笔记53—Wilcoxon检验和Mann-whitney检验的区别