本教程基于  物联网浏览器(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电子秤协议实现的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 9. 协议过滤器,解决一包多发、粘包、冗余数据

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. 转战物联网·基础篇09-选择MQTT协议还是CoAP协议

      前面章节介绍过,MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境.   XMPP协议也有人说是适合物联网通信的,但它是基于XML, ...

  3. 转战物联网·基础篇08-例说MQTT协议各控制报文

      前面讨论了MQTT协议的控制报文的格式,下面分别举例探讨各个控制报文的详细内容. 01.CONNECT – 连接服务端   客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是CO ...

  4. 无线物联网中CoAP协议的研究与实现【转】

    无线物联网中CoAP协议的研究与实现 时间:2013-04-09 来源:电子科技 作者:汤春明,张 荧,吴宇平 关键字:CoAP   无线   物联网   协议 摘要:由于物联网中的很多设备都是资源受 ...

  5. 浏览器与服务端请求响应流程与HTTP协议

    浏览器与服务端请求响应流程图: 1.HTTP概要 1.1. 定义 HTTP(HyperText Transfer  Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种 ...

  6. 在IE中启动火狐——自定义浏览器链接协议

    有时候需求就是这么奇葩,特别是在这个浏览器混战收尾的节骨眼上,有的客户正在将全单位的浏览器统一到Chrome.有的正在统一到Firefox.还有的正在统一到360上.于是就有了如题的需求,客户正在将浏 ...

  7. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序

    本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...

  8. fiddler抓取火狐浏览器上https协议请求

    前言:现在很多网站采用https协议,当打开fiddler时.浏览https协议的网站会提示不安全,若使用fiddler抓取https协议的请求,则需要向浏览器导入证书,才能抓取https协议的请求, ...

  9. MQTT协议之 Apache Apollo服务

    一.说明 MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网) ...

  10. 深入理解 Web 协议 (三):HTTP 2

    本篇将详细介绍 HTTP 2 协议的方方面面,知识点如下: HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘:HPACK 算法 HTTP 2 协议中 Server ...

随机推荐

  1. 云小课|聊一聊DRS的数据过滤特性

    [本期推荐专题]在DevOps市场中,华为云DevCloud拔得头筹,看它如何助力企业面对商业环境瞬息万变快速响应. [摘要] 目前,DRS已支持其他云.本地IDC.ECS自建MySQL.SQL Se ...

  2. 常遇到读多写少,教你用ReadWriteLock实现一个通用的缓存中心

    摘要:本文我们就来说说使用ReadWriteLock如何实现一个通用的缓存中心. 本文分享自华为云社区<[高并发]原来ReadWriteLock也能开发高性能缓存,看完我也能和面试官好好聊聊了! ...

  3. 教你用Java7的Fork/Join框架开发高并发程序

    摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最 ...

  4. 火山引擎 DataLeap 一招教你避坑“数据开发”中的资源隔离问题

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在离线数仓开发过程中,研发人员需要根据业务变化,在开发/生产环境中不断切换.解析.调试.以往,企业一般通过人工方式 ...

  5. zsh踩坑记录

    1. zsh: no matches found: uvicorn[standard] 方法一 # 在~/.zshrc中添加下面这句话 setopt no_nomatch # 然后source ~/. ...

  6. lab3 page tables

    1.Speed up system calls (easy) 要求:有些操作系统(例如 Linux)通过在用户空间和内核之间的只读区域共享数据来加速某些系统调用.这样可以消除在执行这些系统调用时进行内 ...

  7. Vue框架基础

    博客目录 前端发展介绍 Vue的快速使用 插值语法 指令系统之文本指令.事件指令.属性指令 style和class 条件渲染 列表渲染 使用v-for进行循环 监控失效 双向数据绑定 input输入框 ...

  8. 2021InfoComm|钉钉会议 Rooms 的 "全场景" 智能化解决方案

    InfoComm China 是亚太地区规模盛大的专业视听和集成体验解决方案商贸展会,提供前沿革新的产品和一系列高价值的技术展示. 在疫情期间,钉钉音视频支持了全国人民在线办公.在家上课,单日在线会议 ...

  9. Three.js 入门

    Demo代码地址: https://gitee.com/s0611163/three.js-demo Three.js Three.js下载 从GitHub上下载一个Release版本,https:/ ...

  10. MAVEN 配置和基本使用

    Maven 安装配置 解压 apache-maven-3.6.1.rar 既安装完成 配置环境变量 MAVEN_HOME 为安装路径的 bin 目录 在 Path 下添加 %MAVEN_HOME%\b ...