本教程基于  物联网浏览器(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. 代码混淆工具ipaguard:如何使用ipaguard保护和混淆iOS应用程序代码

    ​ 转载:怎么保护苹果手机移动应用程序ios ipa文件中的代码? 目录 转载:怎么保护苹果手机移动应用程序ios ipa文件中的代码? 代码混淆步骤 1. 选择要混淆保护的ipa文件 2. 选择要混 ...

  2. Mac Maven环境变量配置 zsh: command not found: mvn

    之前配过环境变量,但是后来打开还是报 zsh: command not found: mvn 需要在运行前先刷下环境变量 source ~/.bash_profile 每次使用前都刷一下比较麻烦,这是 ...

  3. Nacos 服务状态监听四种写发

    监听服务的四种实现方式,以监听 Nacos 服务为例 1. 传统方式 public void subscribe() { try { NamingService namingService = Nam ...

  4. SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑

    如果不指定 xxl.job.executor.ip,默认会用 Docker 的IP,注册到 xxl-job 里面,这时候无法回调 如果xxl.job.executor.ip.xxl.job.execu ...

  5. Hugging News #0113:DreamBooth 编程马拉松活动保姆级视频教程来了!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  6. 柔性上肢康复机器人研究中的VR技术

    上肢康复机器人用于对脑卒中患者进行上肢康复治疗,能够维持和扩大患者关节活动度.增强肌肉力和协调性,以防止肌肉萎缩.关节痉挛等各类症状的出现,最终重建肢体功能,以便回归正常生活.现有的上肢康复机器人训练 ...

  7. 叫板GPT-4的Gemini,我做了一个聊天网页,可图片输入,附教程

    先看效果: 简介 Gemini 是谷歌研发的最新一代大语言模型,目前有三个版本,被称为中杯.大杯.超大杯,Gemini Ultra 号称可与GPT-4一较高低: Gemini Nano(预览访问) 为 ...

  8. 拥抱智能,AI 视频编码技术的新探索

    随着视频与交互在日常生活中的作用日益突显,愈发多样的视频场景与不断提高的视觉追求对视频编码提出更高的挑战.相较于人们手工设计的多种视频编码技术,AI 编码可以从大数据中自我学习到更广泛的信号内在编码规 ...

  9. SuperSocket 简单示例

    这是一个SuperSocket 简单示例,包括服务端和客户端. 一.首先使用NuGet安装SuperSocket和SuperSocket.Engine 二.实现IRequestInfo(数据包): 数 ...

  10. POJ 2387 Til the Cows Come Home(最短路板子题,Dijkstra算法, spfa算法,Floyd算法,深搜DFS)

    Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 43861 Accepted: 14 ...