耀华仪表A9 数据解析,磨蹭一中午,终于把他解析出来了,测试了一下午感觉很完美,在这里分享给大家;废话不说,直接贴代码;顺便给大家推荐一个开源称重软件,git 码云地址:https://gitee.com/jinhengliuyafei/2022.git , 谢谢大家支持;

/// <summary>

/// 缓存

/// </summary>

List<byte> buffData = new List<byte>();

/// <summary>

/// 缓存

/// </summary>

List<byte> buffData = new List<byte>();

/// <summary>

/// 仪表数据解析

/// </summary>

/// <param name="data">串口数据</param>

/// <returns></returns>

public string DataConvert(byte[] data)

{

string weightVal = string.Empty;

buffData.AddRange(data);

if (buffData.Count < 12) return weightVal;

int startFlag = buffData.LastIndexOf(2);

int endFlag = buffData.LastIndexOf(3);

if (startFlag >= 0 && 0 < endFlag && startFlag < endFlag)

{

//截取一帧数据

var tmpData = buffData.GetRange(startFlag, endFlag - startFlag + 1);

if (tmpData.Count < 12 || tmpData.Count >12) return weightVal;

buffData.Clear();

//判断符号

string flag = string.Empty;

if (tmpData[1] == 45) //45的ascii符号是 -;

{

flag = "-";

}

//读取中间6个字节的数据

string value = string.Empty;

byte[] arr = new byte[6];

int j = 0;

for (int i = 2; i < 8; i++)

{

arr[j] = tmpData[i];

j++;

}

string num = Encoding.ASCII.GetString(arr);

//读取小数位

byte[] arrDot = new byte[1];

arrDot[0] = tmpData[8];

int dot = 0;

int.TryParse(Encoding.ASCII.GetString(arrDot), out dot);

int len = num.Length - dot;

if (len <= 0) return string.Empty;

string num1 = num.Substring(0, len);

string num2 = num.Substring(num.Length - dot, dot);

string result = flag + num1 + "." + num2;

//校验

byte[] checkData = new byte[12];

for (int i = 0; i < tmpData.Count && i < 12; i++)

{

checkData[i] = tmpData[i];

}

var heightResult = HeightBitValidate(checkData);

var lowResult = LowBitValidate(checkData);

if (heightResult == tmpData[9] && lowResult == tmpData[10])

{

weightVal = result;

}

}

return weightVal;

}

/// <summary>

/// 高位验证

/// </summary>

/// <param name="data"></param>

/// <returns></returns>

public static int HeightBitValidate(byte[] data)

{

byte[] height = new byte[8];

if (data.Length == 12 && data[0] == 2)

{

int i = 0;

for (int index = 1; index < 9; index++)

{

height[i] = (byte)((data[index]) >> 4);

i++;

}

}

int tmp = 0;

for (int i = 0; i < height.Length; i++)

{

tmp = tmp ^ height[i];

}

if (tmp <= 9)

{

tmp += 48;

}

else

{

tmp += 55;

}

return tmp;

}

/// <summary>

/// 低位验证

/// </summary>

/// <param name="data"></param>

/// <returns></returns>

public static int LowBitValidate(byte[] data)

{

byte[] height = new byte[8];

if (data.Length == 12 && data[0] == 2)

{

int i = 0;

for (int index = 1; index < 9; index++)

{

height[i] = (byte)((data[index]) << 4);

i++;

}

}

int tmp = 0;

for (int i = 0; i < height.Length; i++)

{

tmp = tmp ^ height[i];

}

tmp = tmp >> 4;

if (tmp <= 9)

{

tmp += 48;

}

else

{

tmp += 55;

}

return tmp;

}

耀华仪表A9数据解析(C#)相关推荐

  1. xk3190-a9 和计算机com口连接方式,耀华XK3190-A9+仪表串行通讯接口与仪表的联接和使用...

    耀华XK3190-A9+仪表串行通讯接口与仪表的联接和使用 ▲!通讯接口输出引线与计算机联接必须准确无误,倘若联接错误,将损坏仪表输出端口或计算机通讯输入端口,甚至严重损坏仪表和计算机及相应的外部设备 ...

  2. 用计算机设置仪表通讯地址,教你耀华XK3190-A9+仪表接电脑通讯协议

    原标题:教你耀华XK3190-A9+仪表接电脑通讯协议 ▲!通讯接口输出引线与计算机联接必须准确无误,倘若联接错误,将损坏仪表输出端口或计算机通讯输入端口,甚至严重损坏仪表和计算机及相应的外部设备. ...

  3. 数据解析1:XML解析(2)

    上一篇着重记录了XML解析中的SAX解析,该篇继续上篇(数据解析1:XML解析(2))未讲完的内容. XML补充: 1. 2. . 3. 示例:使用SAX解析一个比较复杂的XML文件 1 <?x ...

  4. 《硬件接入》耀华XK3190-A9+地磅安卓(java)接入过程分享

    最近遇到在安卓上通过串口连接地磅的需求, 基本上实现了读数和判断地磅稳定状态 , 这里分享出来实现过程以方便大家开发.我们开发用的打印机是XK3190-A9+ ,需要这个打印机参数文档的可以耀华官网下 ...

  5. 基于TencentOS-tiny实现PM2.5传感器(攀藤PMSA003)数据解析思路及实现

    说明:此文章提供了一种基于TencentOS-tiny的串口数据解析思路及实现,感谢戴大神最初写的源码,这种思路同样可以实现AT框架.基于串口的GPS数据解析等等. 1. PM2.5传感器 本文使用的 ...

  6. c语言编程求macd最大值,2010年天津工业大学耀华杯计算机竞赛试卷(C语言全卷带答案).doc...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp习题/试题 2010年天津工业大学耀华杯计算机竞赛试卷(C语言 ...

  7. Python实现OSM地图数据解析——OSM2Rail

    目录 1. 简介 2. 功能特色 2.1 自动下载OpenStreetMap地图数据包 2.2 提供更精确的铁路网络数据解析 2.3 扩展GMNS标准 3. 快速上手 4. 效果展示 5. 相关阅读 ...

  8. 上海耀华地磅串口开发(C#)

    上海耀华地磅串口开发(C#) 耀华地磅通用的型号为XK3190-DS3q1和电脑采用DB9接线方式,RS232协议传输. 如果需要转接 接线正常后我们开始通过C#遍历计算机所有的串口设备 打开串口 接 ...

  9. 耀华YHL-5屏幕开发教程

    耀华YHL-5屏幕开发教程 耀华LED通讯协议 数据处理与函数封装 发送重量数据函数封装 耀华LED通讯协议 波特率1200,数据位8位(只能显示6个数字或符号) 发送端串口以连续发送方式时,数据以A ...

最新文章

  1. 关于学习tf.random.normal()和tf.random.uniform()的一点小总结
  2. 谷歌首款Tensor手机芯片,全是AI炫技,性能一笔带过
  3. Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
  4. 我的VIM配置及说明【K-VIM】
  5. 3月2日,阿里云开源 PolarDB 企业级架构即将发布
  6. 关于JDK8采坑JCE加密限制版本问题
  7. vlookup两个条件匹配_vlookup,你还是只会基础的单条件查找?
  8. store 存取数据数组对象_如何从Firestore文档中获取对象数组
  9. 布同:pdf自定义分割(断章)
  10. IBATIS的优缺点
  11. 2019年失业以后,他们都经历了什么?
  12. jenkins+ansible+gitlab
  13. 节约里程法—单配送中心CVRP求解
  14. 常用实用网站整理大全
  15. iOS开发之地图代理不起作用(提示vImage decode failed, falling back to CG path.)
  16. 教你批量采集晨光文具的商品图片到电脑中
  17. ECCV 2020预会议 直播笔记| Cross-Modal Weighting Network for RGB-D Salient Object Detection
  18. VUE-waterfall瀑布流组件使用
  19. 警务系统三维可视化管理与情报研判综合分析平台
  20. 嵌入式系统的硬件核心是什么?

热门文章

  1. 案例——淘宝轮播图和土豆网鼠标经过显示遮罩
  2. 第十一届蓝桥杯(国赛) 阶乘约数C语言代码
  3. 物流科技杂志物流科技杂志社物流科技编辑部2022年第11期目录
  4. 如何将Word文档每页转换为图片保存?
  5. error C2448: 'Unknown' : function-style initializer appears to be a function definition
  6. 2015年全国谷歌卫星地图离线数据存储方案
  7. 【虹科白皮书】通过卫星网络测试应用程序性能的最佳做法
  8. CDLinux U盘启动教程
  9. 随心玩玩(四)docker从入门到入土
  10. 01马氏链及其平稳分布