webAPI serial——串口连称

在这里插入图片描述

重点

  • 关闭正在读的串口
    借鉴文章:webapi串口
async closeport() {this.$emit("changeSerialStatus", false);//这里要注意,一定要关闭读取this.status = false;//取消后,done会变成true,会执行reader.releaseLock();this.reader.cancel();
},

vue组件

<template><div><el-button @click="setPort" v-if="!status">连接串口</el-button><el-button @click="closeport" v-if="status">关闭串口</el-button><!-- <el-button @click="changeWgtStatus">重新称重</el-button> --><!-- <label class="pl15">注:当前页面称配置的串口是{{ serialInfo.portName }}</label> --></div>
</template><script>
export default {name: "serialSelect",props: {serialInfo: {type: Object,require: true,default: () => {},},},data() {return {wgtStatus: true, //是否传输重量lastWeight: null, //最后一次重量count: 4, //重量判稳次数times: 0, //重量获取次数port: null,reader: null,setIntervalName: "", //轮询的名称dataFirstTime: null, //判稳第一次的时间戳standardTimes: null, //设置的判稳时间status: false,//baudRate: "1200",//regexVal: "/[1-9]+/"};},created() {// this.count = this.serialInfo.stableTimes;this.standardTimes = this.serialInfo.dataTime; //this.serialInfo.stableTimes * this.serialInfo.retrievalDelay;/*  this.$modal.confirm("请选择相应串口连接").then((res) => {this.setPort();}); */},methods: {// 重新获取串口重量retrieveWgt() {this.wgtStatus = true;this.lastWeight = null;},changeWgtStatus() {this.wgtStatus = true;this.dataFirstTime = Date.now();this.$emit("changeColor", "red");this.$emit("getWgt", null);this.$emit("updateWgt", true);},async setPort() {this.port = await navigator.serial.requestPort();this.getPort();},async getPort() {let port = this.port;await port.open({ baudRate: this.serialInfo.baudRate }).then((res) => {this.status = true;}).catch((res) => {this.wgtStatus = false;this.status = false;this.$emit("changeSerialStatus", false);console.log("error:", res);}).finally((res) => {this.wgtStatus = true;this.status = true;this.$emit("changeSerialStatus", true);console.log("finally:", res);});while (port.readable && this.status) {this.reader = port.readable.getReader();try {while (true) {const { value, done } = await this.reader.read();if (done) {// 允许稍后关闭串口。this.reader.releaseLock();break;}let _this = this;// if (value && this.wgtStatus) {// 不判断状态了,一直读if (value) {_this.getwgt(value);/* this.setIntervalName = setInterval(() => {_this.getwgt(value);value = null;}, this.serialInfo.retrievalDelay); */}}} catch (error) {console.log("处理非致命的读错误", error);// TODO: 处理非致命的读错误。} finally {// 允许稍后关闭串口。this.reader.releaseLock();}}//这里一定要关闭,不要在关闭方法中closeawait port.close();},getwgt(value) {let result = this.Utf8ArrayToStr(value);// result = "+0001048"; // +0000console.log("收到的数据:", result, result.includes("-"));// 看重量是不是+开始的if (!result.includes("+") && !result.includes("-")) return;const flagSymbol = result.includes("-") ? "-" : "";// const resultArr = result.match(eval(this.serialInfo.regexVal));const resultNum = result.slice(1);// 取的数大于设置的最小值,改到父页面判断// if (!resultNum || Number(resultNum) / 10 <= this.serialInfo.minWgt) return;if (!resultNum) return;let wgt = Number(resultNum) > 0 ? Number(resultNum) / 10 : 0;wgt = flagSymbol ? flagSymbol + wgt : wgt;// this.$emit("getWgt", wgt);if (this.lastWeight == wgt) {const lastDataTime = Date.now();const dataTime = lastDataTime - this.dataFirstTime;// if (this.times >= this.count) {console.log(this.wgtStatus, dataTime);if ((this.wgtStatus || flagSymbol) && dataTime >= this.standardTimes) {this.dataFirstTime = Date.now();this.lastWeight = null;if (wgt > 0) {this.wgtStatus = false;this.$emit("changeColor", "green");} else {this.wgtStatus = true;this.$emit("changeColor", "red");}this.$emit("getWgt", wgt);}} else {this.dataFirstTime = Date.now();this.lastWeight = wgt;if (this.wgtStatus) {this.$emit("changeColor", "red");this.$emit("getWgt", wgt);}}},//utf8转字符串Utf8ArrayToStr(array) {var out, i, len, c;var char2, char3;out = "";len = array.length;i = 0;while (i < len) {c = array[i++];switch (c >> 4) {case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:// 0xxxxxxxout += String.fromCharCode(c);break;case 12:case 13:// 110x xxxx 10xx xxxxchar2 = array[i++];out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));break;case 14:// 1110 xxxx 10xx xxxx 10xx xxxxchar2 = array[i++];char3 = array[i++];out += String.fromCharCode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0));break;}}return out;},async closeport() {//这是我用于父页面切换手输或者连接串口的状态this.$emit("changeSerialStatus", false);this.status = false;this.reader.cancel();},},beforeDestroy() {console.log("离开");this.closeport();},
};
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/156920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git常常用命令

这篇文章中&#xff0c;一些简单的&#xff0c;大家都知道的git 命令我就不再赘述&#xff0c;我只写出来最近在项目中常用到的一些命令。这些命令可以帮助我更好的开发。 git stash 请大家设想下面的场景&#xff0c;你的本地有两个分支&#xff0c;develop,fix分支&#xf…

禁止linux shell 终端显示完整工作路径,如何让linux bash终端不显示当前工作路径

在操作linux时&#xff0c;默认安装的linux终端会显示当前完整的工作目录&#xff0c;如果目录比较短还是可以接收&#xff0c;如果目录比较长&#xff0c;就显得比较别扭&#xff0c;操作起来不方便&#xff0c;因此需要关闭这种功能。 要关闭这个功能&#xff0c;请按如下步骤…

智能座舱架构与芯片- (11) 软件篇 上

一、智能汽车基础软件平台分类 汽车软件主要分为应用软件和基础软件。应用软件和业务形态高度关联&#xff0c;不同控制器的应用软件之间差异较大。基础软件介于应用软件和硬件之间&#xff0c;用于屏蔽硬件特性、支撑应用软件。可有效地实现应用软件与硬件之间解耦&#xff0…

ky10 server x86 安装、更新openssl3.1.4(在线编译安装、离线安装)

查看openssl版本 openssl version 离线编译安装升级 #!/bin/shOPENSSLVER3.1.4OPENSSL_Vopenssl versionecho "当前OpenSSL 版本 ${OPENSSL_V}" #------------------------------------------------ #wget https://www.openssl.org/source/openssl-3.1.4.tar.gzech…

【Python】学习Python面向对象编程的疑问

&#xff08;Java菜鸟来学Python了&#xff09; &#x1f914; 1. 静态方法与类方法什么区别&#xff1f; 实例方法只能被实例对象调用(Python3 中&#xff0c;如果类调用实例方法&#xff0c;需要显示的传self, 也就是实例对象自己)&#xff0c;静态方法(由staticmethod装饰…

LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型

根据图片生成推广文案&#xff0c; 用的HuggingFace中的image-caption模型 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数…

STM32 寄存器配置笔记——系统时钟配置 HSE as PLL

一、概述 本文主要介绍使用HSE高速外部时钟通过PLL倍频输出72MHZ的时钟作为系统时钟。下图为时钟树。 使用正点原子的开发板调试OSC_IN、OSC_OUT接的是8MHZ的晶振即为HSE时钟。 二、配置流程 1&#xff09;复位RCC相关的所有寄存器 复位内容是参考正点原子例程&#xff0c;按照…

云计算:开辟数字时代的无限可能

云计算是一项革命性的技术&#xff0c;为企业和个人提供了灵活、可扩展和高效的计算资源。本文将介绍云计算的概念、架构和优势&#xff0c;并探讨其在数字化时代的重要性和未来发展趋势。 引言 随着信息技术的日新月异和数字化转型的浪潮席卷全球&#xff0c;云计算作为一种颠…

多元函数奇偶性

多元函数奇偶性 多元函数的定义域 定义域根据函数的变量数不同,有不同的形式 一元函数 y f ( x ) yf(x) yf(x),定义域可以是数集二元函数 z f ( x , y ) zf(x,y) zf(x,y),定义域可以是一平面区域,是平面点集三元函数 v f ( x , y , z ) vf(x,y,z) vf(x,y,z),定义域是一块空…

ZYNQ_project:lcd_pic_400x400

在lcd液晶屏上显示400x400像素的图片&#xff0c; 像素信息通过电脑的串口调试助手&#xff0c;发送给fpga&#xff0c;存储在例化的双端口ram中&#xff0c; 在要显示图像区域&#xff0c;读取ram中的像素信息。 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a;…

O-Star|再相识

暑去秋来&#xff0c;岁月如梭&#xff0c;几名"O-Star"们已经入职一段时间&#xff0c;在这期间他们褪去青涩&#xff0c;逐渐适应了公司的工作环境和文化&#xff0c;迈向沉稳&#xff5e; 为了进一步加深校招生之间的交流与了解&#xff0c;提高校招生的凝聚力和…

gitlab

Gitlab 安装git yum安装 [rootgit ~]# yum -y install git编译安装 Git官网 #安装依赖关系 [rootgit ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc perl-ExtUtils-MakeMaker # 编译安装 [rootgit ~]# tar -zxf git-2.0…

基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】

目录 一、前言 二、源码分析 三、负载均衡策略 一、前言 如下图&#xff0c;我们在 orderserver 中通过 restTemplate 向 usersever 发起 http 请求&#xff0c;在服务拉取的时候&#xff0c;主机名 localhost 是用服务名 userserver 代替的&#xff0c;那么该 url 是一个可…

Java动态代理JKD版本

1、ISale.java package com.atguigu; public interface ISale {void saleShaoBing();void saleJianBing();void saleYueBing();void saleManTou(); }2、WuDa.java package com.atguigu;//Target:目标类、目标对象 public class WuDa implements ISale{//target method:目标方法…

DAY60 84.柱状图中最大的矩形

84.柱状图中最大的矩形 题目要求&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼…

git -1

1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…

微信小程序 prettier 格式化

一、安装prettier插件 二、打开设置 然后再打开setting.json 新增代码 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml", "**/*.wx…

基于 Glibc 版本升级的 DolphinDB 数据查询性能优化实践

在高并发查询、查询需要涉及很多个分区的情况下&#xff0c;低版本的 glibc&#xff08;低于2.23&#xff09;会严重影响查询性能。需要升级 glibc 解决该问题优化性能。我们撰写了本文&#xff0c;通过 patchelf 工具修改可执行文件和动态库的 rpath&#xff0c;达到无需升级系…

专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享

专业课140总分420东南大学920专业综合考研&#xff0c;信息学院通信专业考研分享 我是三月开始系统考研备战&#xff0c;寒假先看的高数全书&#xff0c;奈何在家效率极其低下&#xff0c;才草草看了前三四章。回校后学习的比较认真&#xff0c;每天大概保持10个小时左右&…

3分钟看完NVIDIA GPU架构及演进

近期随着 AI 市场的爆发式增长&#xff0c;作为 AI 背后技术的核心之一 GPU&#xff08;图形处理器&#xff09;的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要&#xff0c;特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多&#xff0c;主要就是 NVIDIA、AM…