php获取体重秤数据,SerialPort访问COM接口获取电子秤数据(C#)
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#)相关推荐
- 拼多多商品数据如何通过api接口获取
要从拼多多获取商品数据,可以使用拼多多提供的API接口.首先需要注册一个拼多多开放平台的开发者账号,然后创建一个应用程序,获取应用程序的app_id和app_secret,以在API请求中进行身份验证 ...
- python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...
小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...
- python读取txt文件并求和,Python读取txt文件数据的方法(用于接口自动化参数化数据)...
小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...
- 跨域支持与返回json数据--mvc访问api接口
api的设置 1.设置api接口返回json数据 App_Start-->WebApiConfig-->添加 config.Formatters.Clear();config.Forma ...
- 网页前端套java数据_【java】网页/移动前端需要的数据,最好一个接口包含所有数据么?...
前端同事告诉我一个接口需要包含所有的数据,理由是多接口请求,前端逻辑会很复杂,同时如果移动网络有问题的话,容易接口部分成功部分失败,前端处理这些异常情况很费劲,我们使用restful接口,这样的话感觉 ...
- Echarts插件中的data绑定一个变量,后面通过访问后端接口获取数据给这个变量,Echarts插件无法渲染数据
我们都知道echarts图标数据是写在option = {}对象里,但是数据不可能是固定值,而是通过后端接口返回来的,本以为只需要在 data里设置一个变量去接收返回的数据,然后再将变量赋值给echa ...
- jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整
啊哈哈哈哈哈哈哈哈哈哈哈我太激动了~ 其实这个工作我一直在拖延啊,就觉得哇,好难啊,不想做欸= = 然后硬着头皮研究了一整个下午+晚上终于搞清楚了~~~~哇哈哈哈哈~~~好神奇哈哈哈哈哈~~~(疯了吧 ...
- java从输入中获取经纬度_java从百度后台接口获取经纬度
首先,我需要从文本文档里获取地址信息 package com.tech.lgyj; import java.io.BufferedReader; import java.io.FileInputStr ...
- php 百度地图api获取经纬度,调用百度地图API接口获取地铁站的经纬度信息
今天我们来看一下,如何通过百地图API来获取地点的经纬度.首先百度地图提供了强大的API接口,我们可以通过调用它来实现目的.这是网址:https://lbsyun.baidu.com/.首先想要调用A ...
最新文章
- 说AI没有创造性?现在它都能创作鬼畜音乐了
- 这么画c语言编程流程图,我想问一下这两个C语言的流程图像图中这么画吗?
- 实战 SSH 端口转发
- Hibernate问题浅析
- AttributeError: ‘set‘ object has no attribute ‘items‘
- leetcode - 437. 路径总和 III
- Linux线程私有数据Thread-specific Data(TSD) 详解
- 多张表格链接一起——《超级处理器》应用
- 数据结构-链表-环形链表
- ManyPixels 插画素材分享
- 循环日程表(递归、分治)
- python幂函数无序分布_Python:从幂律分布中生成随机数
- Kaggle Lending Club Loan Data数据可视化分析与不良贷款预测
- OTRS安装使用系列之一——安装及初始…
- Reverse-it
- 安卓九宫格上传图片(微信朋友圈,QQ动态)小demo
- wampserver 2.4 配置虚拟主机
- 定义一个字典——Dictionary
- hp电脑java图片抖动_HPPC:高效的Java集合库
- 锁升级过程(无锁、偏向锁、轻量级锁、重量级锁)
热门文章
- 我在北京实习的四个月
- Android APK签名原理及方法
- 网页案例:好商城首页
- 服务器mysql 修改数据库密码怎么修改,服务器mysql修改数据库密码
- 解决“ ICMP timestamp请求响应漏洞”和“ 允许Traceroute探测”
- 人月神话——我从绝望中读到了希望
- 十年游戏一场梦,回首一看尽浮云
- 方差和标准差,为何使用标准差?
- 10年程序员经历总结及后续规划
- 字符串函数(strlen、str(n)cat、str(n)cmp、str(n)cpy)