using System;

using System.IO.Ports;

using System.Text;

using System.Threading;

namespace weight

{

///

/// 电子秤接口信息类,封装COM口数据

///

public class WeightInformation

{

string _wdata;

string _wunit;

string _qdata;

string _qunit;

string _percentage;

///

/// 获取或设置重量

///

public string WData { get { return this._wdata; } set { this._wdata = value; } }

///

/// 获取或设置重量单位

///

public string WUnit { get { return this._wunit; } set { this._wunit = value; } }

///

/// 获取或设置数量

///

public string QData { get { return this._qdata; } set { this._qdata = value; } }

///

/// 获取或设置数量单位

///

public string QUnit { get { return this._qunit; } set { this._qunit = value; } }

///

/// 获取或设置百分数

///

public string Percentage { get { return this._percentage; } set { this._percentage = value; } }

}

///

/// 电子称数据读取类

///

public class WeightReader : IDisposable

{

#region 字段、属性与构造函数

SerialPort sp;

int _speed = 300;

///

/// 获取或设置电脑取COM数据缓冲时间,单位毫秒

///

public int Speed

{

get

{

return this._speed;

}

set

{

if (value < 300)

throw new Exception("串口读取缓冲时间不能小于300毫秒!");

this._speed = value;

}

}

public bool InitCom(string PortName)

{

return this.InitCom(PortName, 4800, 300);

}

///

/// 初始化串口

///

/// 数据传输端口

/// 波特率

/// 串口读数缓冲时间

///

public bool InitCom(string PortName, int BaudRate,int Speed)

{

try

{

sp = new SerialPort(PortName, BaudRate, Parity.None, 8);

sp.ReceivedBytesThreshold = 10;

sp.Handshake = Handshake.RequestToSend;

sp.Parity = Parity.None;

sp.ReadTimeout = 600;

sp.WriteTimeout = 600;

this.Speed = Speed;

if (!sp.IsOpen)

{

sp.Open();

}

return true;

}

catch

{

throw new Exception(string.Format("无法初始化串口{0}!",PortName));

}

}

#endregion

#region 串口数据读取方法

public WeightInformation ReadInfo()

{

string src = this.ReadCom();

WeightInformation info = new WeightInformation();

info.WData = this.DecodeWeightData(src);

info.WUnit = this.DecodeWeightUnit(src);

info.Percentage = this.DecodePercentage(src);

info.QData = this.DecodeQualityData(src);

info.QUnit = this.DecodeQualityUnit(src);

return info;

}

///

/// 将COM口缓存数据全部读取

///

///

private string ReadCom()//返回信息

{

if (this.sp.IsOpen)

{

Thread.Sleep(this._speed);

string res = "";

//for (int i = 0; i < 5; i++)

//{

byte[] buffer = new byte[sp.BytesToRead];

sp.Read(buffer, 0, buffer.Length);

res = System.Text.Encoding.ASCII.GetString(buffer);

//if (res != "")

//    break;

//}

if (res == "")

{

throw new Exception("串口读取数据为空,参数设置是否正确!");

}

return res;

}

return "";

}

#endregion

#region  基本取数方法

///

/// 从字符串中取值

///

/// 起始字符串

/// 间隔位长度

/// 值长度

/// 源字符串

///

private string DecodeValue(string head, int intervalLen, int valueLen,string src)

{

int index = src.IndexOf(head);

return src.Substring(index + intervalLen, valueLen);

}

///

/// 取重量

///

/// 源字符串

///

private string DecodeWeightData(string srcString)

{

return this.DecodeValue("GS,", 3, 8,srcString);

}

///

/// 取重量单位

///

/// 源字符串

///

private string DecodeWeightUnit(string srcString)

{

return this.DecodeValue("GS,", 12, 2, srcString);

}

///

/// 取百分数

///

/// 源字符串

///

private string DecodePercentage(string srcString)

{

return this.DecodeValue("U.W.", 4, 14, srcString);

}

///

/// 取数量

///

/// 源字符串

///

private string DecodeQualityData(string srcString)

{

return this.DecodeValue("PCS", 3, 9, srcString);

}

///

/// 取数量单位

///

/// 源字符串

///

private string DecodeQualityUnit(string srcString)

{

return this.DecodeValue("PCS", 12, 3, srcString);

}

#endregion

#region 释放所有资源

public void Dispose()

{

if (sp != null && sp.IsOpen)

{

sp.Close();

}

}

#endregion

}

}

————————————————

版权声明:本文为CSDN博主「maomaoawen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/maomaoawen/article/details/4284514

php获取体重秤数据,SerialPort访问COM接口获取电子秤数据(C#)相关推荐

  1. 拼多多商品数据如何通过api接口获取

    要从拼多多获取商品数据,可以使用拼多多提供的API接口.首先需要注册一个拼多多开放平台的开发者账号,然后创建一个应用程序,获取应用程序的app_id和app_secret,以在API请求中进行身份验证 ...

  2. python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  3. python读取txt文件并求和,Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  4. 跨域支持与返回json数据--mvc访问api接口

    api的设置 1.设置api接口返回json数据 App_Start-->WebApiConfig-->添加  config.Formatters.Clear();config.Forma ...

  5. 网页前端套java数据_【java】网页/移动前端需要的数据,最好一个接口包含所有数据么?...

    前端同事告诉我一个接口需要包含所有的数据,理由是多接口请求,前端逻辑会很复杂,同时如果移动网络有问题的话,容易接口部分成功部分失败,前端处理这些异常情况很费劲,我们使用restful接口,这样的话感觉 ...

  6. Echarts插件中的data绑定一个变量,后面通过访问后端接口获取数据给这个变量,Echarts插件无法渲染数据

    我们都知道echarts图标数据是写在option = {}对象里,但是数据不可能是固定值,而是通过后端接口返回来的,本以为只需要在 data里设置一个变量去接收返回的数据,然后再将变量赋值给echa ...

  7. jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整

    啊哈哈哈哈哈哈哈哈哈哈哈我太激动了~ 其实这个工作我一直在拖延啊,就觉得哇,好难啊,不想做欸= = 然后硬着头皮研究了一整个下午+晚上终于搞清楚了~~~~哇哈哈哈哈~~~好神奇哈哈哈哈哈~~~(疯了吧 ...

  8. java从输入中获取经纬度_java从百度后台接口获取经纬度

    首先,我需要从文本文档里获取地址信息 package com.tech.lgyj; import java.io.BufferedReader; import java.io.FileInputStr ...

  9. php 百度地图api获取经纬度,调用百度地图API接口获取地铁站的经纬度信息

    今天我们来看一下,如何通过百地图API来获取地点的经纬度.首先百度地图提供了强大的API接口,我们可以通过调用它来实现目的.这是网址:https://lbsyun.baidu.com/.首先想要调用A ...

最新文章

  1. 说AI没有创造性?现在它都能创作鬼畜音乐了
  2. 这么画c语言编程流程图,我想问一下这两个C语言的流程图像图中这么画吗?
  3. 实战 SSH 端口转发
  4. Hibernate问题浅析
  5. AttributeError: ‘set‘ object has no attribute ‘items‘
  6. leetcode - 437. 路径总和 III
  7. Linux线程私有数据Thread-specific Data(TSD) 详解
  8. 多张表格链接一起——《超级处理器》应用
  9. 数据结构-链表-环形链表
  10. ManyPixels 插画素材分享
  11. 循环日程表(递归、分治)
  12. python幂函数无序分布_Python:从幂律分布中生成随机数
  13. Kaggle Lending Club Loan Data数据可视化分析与不良贷款预测
  14. OTRS安装使用系列之一——安装及初始…
  15. Reverse-it
  16. 安卓九宫格上传图片(微信朋友圈,QQ动态)小demo
  17. wampserver 2.4 配置虚拟主机
  18. 定义一个字典——Dictionary
  19. hp电脑java图片抖动_HPPC:高效的Java集合库
  20. 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)

热门文章

  1. 我在北京实习的四个月
  2. Android APK签名原理及方法
  3. 网页案例:好商城首页
  4. 服务器mysql 修改数据库密码怎么修改,服务器mysql修改数据库密码
  5. 解决“ ICMP timestamp请求响应漏洞”和“ 允许Traceroute探测”
  6. 人月神话——我从绝望中读到了希望
  7. 十年游戏一场梦,回首一看尽浮云
  8. 方差和标准差,为何使用标准差?
  9. 10年程序员经历总结及后续规划
  10. 字符串函数(strlen、str(n)cat、str(n)cmp、str(n)cpy)