物联网浏览器(IoTBrowser)-顶尖OS2电子秤协议实现
本教程基于 物联网浏览器(IoTBrowser)-Web串口自定义开发 ,详细的过程可以翻看之前的文章。
本篇以实现顶尖OS2系列电子秤协议对接,并集成到IoTBrowser平台。由于没有找到OS2协议的官方文档,用串口助手抓包分析了一下,简单封装了一下实现代码有点潦草。
所有的串口或者需要实时数据同步的业务都可以集成ComBase类,重量数据采集是典型的实时推送场景,由于电子秤基本只需要推送重量,需要往串口写数据,所以不需要实现发送数据接口。
代码如下:
using DDS.IoT.Com;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace DDS.IoT.DJ
{
public class Os2Driver : ComBase
{
public override string Type => "DJ_Os2"; public override string Name => "顶尖OS2"; /// <summary>
/// 最近一次重量
/// </summary>
private string _lastValue = string.Empty;
private object _locker = new object(); public override bool Init(int port, int baudRate = 9600, string extendData = null)
{
if (SP == null)
{
this.Port = port;
var portName = "COM" + port;
SP = new SerialPort(portName);
base.PortName = portName;
SP.BaudRate = baudRate;
SP.Parity = System.IO.Ports.Parity.None;
SP.DataBits = 8;
SP.StopBits = System.IO.Ports.StopBits.One;
//SP.DtrEnable = true;
//SP.RtsEnable = true;
SP.DataReceived += SP_DataReceived;
Console.WriteLine("初始化Os2驱动程序成功!");
}
return true;
} private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
lock (_locker)
{
if (false == SP.IsOpen) return;
int bytesRead = SP.BytesToRead;//获取接收缓冲区中数据的字节数
if (bytesRead < 16)
{
return;
}
byte[] bytesData = new byte[16];
//var strData = "1,2,83,45,48,48,46,48,49,56,107,103,101,3,4,0";
SP.Read(bytesData, 0, 16);
if (bytesData[0] != 0x01)
{
SP.DiscardInBuffer();
return;
}
List<byte> buffer = new List<byte>();
buffer.AddRange(bytesData);
SP.DiscardInBuffer();
var weight = ConvertWeight(buffer);
// 验证数据是否有效,且与上一次数据不一致
if (weight != this.Data)
{
if (this.OnPushData != null)
{
this.OnPushData(this.Id,weight);// 触发事件
this.Data = weight;
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("串口操作失败:" + ex.Message);
}
} /// <summary>
/// Os2称重数据--读取字节为十进制数据 0x为十六进制
/// </summary>
/// <param name="byteFrame">帧数据(两位wn+8位数据带小数点+kg+两个固定字节回车换行)</param>
private float ConvertWeight(List<byte> byteFrame)
{
float value = 0f;
if (byteFrame == null || byteFrame.Count == 0)
{
return value;
} if (true)
{
byte[] byteData = new byte[9];
byteFrame.CopyTo(3, byteData, 0, 9);
string weightData = Encoding.ASCII.GetString(byteData).Replace("kg", "").Replace("g", "");
value = float.Parse(weightData);
}
return value;
}
public bool Opened = false; public override event PushData OnPushData; public override bool Open()
{
var b = false;
try
{
if (!Opened)
SP.Open();
b = true;
Opened = true;
}
catch (Exception ex)
{ string msg = string.Format("Os2串口打开失败:{0} ", ex.Message);
Console.WriteLine(msg);
}
return b;
} public override bool Close()
{
if (SP.IsOpen)
SP.Close();
Opened = false;
OnPushData = null;
return true;
} }
}
同样,先需要本地测试,所以需要在main方法中编写测试代码。
static void Main(string[] args)
{
var ok = false;
do
{
Os2Driver driver = new Os2Driver();
driver.OnPushData += OnPushData;
Console.Write("请输入串口号:");
var port = Convert.ToInt32(Console.ReadLine());
ok=driver.Init(port);
ok = driver.Open();
if(ok)
Console.Write("打开成功,重量监听中...");
} while (!ok);
Console.ReadLine();
} private static void OnPushData(string id, dynamic weight)
{
Console.WriteLine(DateTime.Now.ToString()+ ":" + weight);
}
本地编译,拷贝到Plugins/Com文件夹下,在IoTBrowser中将驱动型号改为DJ_Os2,串口号根据实际情况填写即可。
示例代码:
https://gitee.com/yizhuqing/IoTBrowser/tree/master/Plugins/DDS.IoT.DJ
物联网浏览器(IoTBrowser)-顶尖OS2电子秤协议实现的更多相关文章
- 《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 转战物联网·基础篇09-选择MQTT协议还是CoAP协议
前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境. XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...
- 转战物联网·基础篇08-例说MQTT协议各控制报文
前面讨论了MQTT协议的控制报文的格式,下面分别举例探讨各个控制报文的详细内容. 01.CONNECT – 连接服务端 客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是CO ...
- 无线物联网中CoAP协议的研究与实现【转】
无线物联网中CoAP协议的研究与实现 时间:2013-04-09 来源:电子科技 作者:汤春明,张 荧,吴宇平 关键字:CoAP 无线 物联网 协议 摘要:由于物联网中的很多设备都是资源受 ...
- 浏览器与服务端请求响应流程与HTTP协议
浏览器与服务端请求响应流程图: 1.HTTP概要 1.1. 定义 HTTP(HyperText Transfer Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种 ...
- 在IE中启动火狐——自定义浏览器链接协议
有时候需求就是这么奇葩,特别是在这个浏览器混战收尾的节骨眼上,有的客户正在将全单位的浏览器统一到Chrome.有的正在统一到Firefox.还有的正在统一到360上.于是就有了如题的需求,客户正在将浏 ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
- fiddler抓取火狐浏览器上https协议请求
前言:现在很多网站采用https协议,当打开fiddler时.浏览https协议的网站会提示不安全,若使用fiddler抓取https协议的请求,则需要向浏览器导入证书,才能抓取https协议的请求, ...
- MQTT协议之 Apache Apollo服务
一.说明 MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网) ...
- 深入理解 Web 协议 (三):HTTP 2
本篇将详细介绍 HTTP 2 协议的方方面面,知识点如下: HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘:HPACK 算法 HTTP 2 协议中 Server ...
随机推荐
- openGauss内核分析:SQL by pass & 经典执行器
摘要:执行引擎一般负责查询的执行,执行引擎在SQL执行栈中起到接收优化器生成的执行计划Plan.并对通过存储引擎提供的数据读写接口,实现对数据进行计算得到查询的结果集. 本文分享自华为云社区<o ...
- 带你掌握Visual Studio Code的格式化程序
摘要:Visual Studio Code 中的所有语言都可以使用其中一种自动格式化程序进行格式化,并且 Python 扩展还支持 linter. 本文分享自华为云社区<Visual Studi ...
- 使用 Python Poetry 进行依赖管理
摘要:在本教程中,您探索了如何创建新的 Python Poetry 项目以及如何将 Poetry 添加到现有项目中. 本文分享自华为云社区<使用 Python Poetry 进行依赖管理> ...
- mac下python3.7安装mysqlclient出错解决
错误信息 Building wheel for mysqlclient (setup.py) ... error ERROR: Command errored out with exit status ...
- 如何安装和使用 Hugging Face Unity API
Hugging Face Unity API 提供了一个简单易用的接口,允许开发者在自己的 Unity 项目中方便地访问和使用 Hugging Face AI 模型,已集成到 Hugging Face ...
- Win 10 Rust Installtion in D Disk with VSCode
(只记录了必须要内容,日后完善!) 1. rust的安装与环境变量: 要提前把下面两个环境变量配置好,这样是为了指定安装路径.否则会默认安装在 C 盘下. CARGO_HOME: D:\Soft\La ...
- Python | 使用SVM支持向量机进行鸢尾花分类
运行环境 Python: 3.7.1 库: sklearn (Python的机器学习工具箱) 目的: 根据鸢尾花的四个特征,对三种鸢尾花进行分类 数据(共150行,这里截取前6行,完整数据以及代码的下 ...
- 【每日一题】3.数学考试 (前缀和,线性DP)
题目链接:Here 思路:区间求和问题可以想到一个常用算法.前缀和.区间 \([l,r]\) 的和可以用 \(sum_r - sum_l\) 方便求出 由于区间长度 \(k\) 已知,所以我们可以直接 ...
- 制作PE工具箱
事前准备: 能上网的电脑 x1 台 大于8G的U盘 x一个(如果需要储存安装镜像的话,如果不需要的话大于1G即可) 一.下载PE工具箱 推荐使用WEPE工具箱,无广告无推广.不推荐老X桃,大X菜,大X ...
- 实战指南 | Serverless 架构下的应用开发
作者 | 刘宇.田初东.卢萌凯.王仁达 UC Berkeley认为Serverless架构的出现过程类似于40多年前从汇编语言转向高级语言的过程,在未来Serverless架构的使用会飙升,或许服务器 ...