Web组态-仪器间的相互通信(WebSocket技术)

        Web组态,通过Vue3+TypeScript+WebSocket技术实现平台仪器间的相互通信,用于设计工业化虚拟仿真。

界面图如下(之前文章有详细教学)

 如下是通信设备虚拟仿真的三个仪器,设计初衷是想三个仪器能够数据互通,实现真实模拟效果。

思路:

仪器A发出信号(通过WebSocket技术发送信息给主界面)==》主界面(主界面初始化就建立WebSocket连接,并接收仪器A发出的信息,然后将仪器A发出的信息进行处理,通过传参的方式传递给仪器B、C)=》仪器B、C(接收所传递的参数)

主界面代码如下:关键代码 socket.onmessage接收信息逻辑

onMounted(() => {
  connectWebSocket();
});

// 当组件卸载时关闭 WebSocket
onUnmounted(() => {
  if (socket) {
    socket.close();
  }
});




//WebSocket模块
// 连接 WebSocket,并处理接收和发送消息的逻辑
// WebSocket 对象
let socket: WebSocket | null = null;
const connectWebSocket = () => {
  socket = new WebSocket('ws://localhost:8667/VirtuLab_back/chat'); // 连接到后端 WebSocket
  // WebSocket 打开时触发
  socket.onopen = () => {
    console.log('主界面:WebSocket 连接已建立');
  };

  // 接收 WebSocket 消息时触发
  socket.onmessage = (event: MessageEvent) => {
    const message = JSON.parse(event.data);
    const { source, action, data } = message;

    if (source === "signalSource" && action === "updateFrequency") {
      paneldata.value[0].value = data.frequency;
    }
    console.log('主界面:WebSocket 对话已建立');
    console.log('主界面:接收到信息 '+data)
  };

  // WebSocket 关闭时触发
  socket.onclose = () => {
    console.log('主界面:WebSocket 连接已关闭');
  };

  // WebSocket 出现错误时触发
  socket.onerror = (error) => {
    console.error('主界面:WebSocket 错误:', error);
  };
};

仪器A代码,在需要改变数据的时候通过发送信息的方式让所有连接WebSocket的客户端收到信息 

        const message = {
          source: "signalSource",  // 来源:信号源
          action: "updateFrequency",  // 操作:更新频率
          data: {
            frequency: formattedNumber+"GHz",
          }
        };

主界面传参给仪器B、C

    <el-dialog
        v-model="DialogVisible"
        :title="DialogTitle"
        center
        :close-icon="CircleCloseFilled"
        style="height: 80%; width: 80%; overflow: hidden"
    >
      <keep-alive>
        <component :is="currentPage"  :transferData="transferData"/>
      </keep-alive>
    </el-dialog>



    if(node.id=='接收机'){
      transferData.value = paneldata.value[0].value
      DialogVisible.value = true
      currentPage.value = Experiment
      DialogTitle.value = "接收机操作"
    }

仪器B、C接收(传参要定义在onMounted外面,否则会报错)但是目前只能传递一次,因为使用了keep-alive,后续可用仪器B、C也连接WebSocket,或者用pinia进行管理

const props = defineProps<{
  transferData: string; // 根据实际数据类型定义
}>();
onMounted(()=>{
  console.log(props)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Thymeleaf】spring boot模板引擎thymeleaf用法详解

快速入门Thymeleaf 1️⃣ 什么是Thymeleaf&#xff1f;1️⃣ 模板入门2️⃣ 创建测试工程2️⃣ 配置文件2️⃣ 创建controller2️⃣ 写一个html页面2️⃣ 启动测试 1️⃣ Thymeleaf基础2️⃣ 实体类2️⃣ 增加接口2️⃣ $符号使用2️⃣ *符号的使用2️⃣ 符号的使用2️⃣ #符号…

一文掌握异步web框架FastAPI(五)-- 中间件(测试环境、访问速率限制、请求体解析、自定义认证、重试机制、请求频率统计、路径重写)

接上篇:一文掌握异步web框架FastAPI(四)-CSDN博客 目录 七、中间件 15、测试环境中间件 16、访问速率限制中间件,即限制每个IP特定时间内的请求数(基于内存,生产上要使用数据库) 1)限制单ip访问速率 2)增加限制单ip并发(跟上面的一样,也是限制每个IP特定时间内的请…

??? 命令行形式的简单功能的计算器的Shell脚本

文章目录 需求编码Way1Way2&#xff1a; 测试 需求 需求分析&#xff1a; 支持浮点型&#xff1a;使用let命令 编码 Way1 用下循环吧&#xff01; #!/bin/bash # Author: # Date: # Description:# functions defines: input_check_to_startup() {num1$1num2$2isNum_statu…

Node版本管理nvm

公司项目比较多&#xff0c;且有历史包袱&#xff0c;没时间升级&#xff0c;高版本的node无法在低版本项目中打包编译&#xff1b; 下载地址 gitHub地址 nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 nvm-setup.exe 常用指令 // 查看版本信息 nvm -v // 查看能安装…

《线下学习受局限,知识付费小程序开启新篇》

在知识大爆炸的时代&#xff0c;人们对知识的渴望从未如此强烈。然而&#xff0c;传统的线下学习方式却逐渐显露出诸多局限。 线下学习往往受到时间和空间的严格限制。为了参加一场培训课程或者讲座&#xff0c;你可能需要在特定的时间赶到特定的地点&#xff0c;这对于忙碌的…

大数据-188 Elasticsearch - ELK 家族 Logstash Output 插件

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码

目录 前言 1.下载官方协议包 2.解压 3.自定义主题 4.重写解码方法 5.以下是我解析后接收到的数据 前言 最近这段时间&#xff0c;一直在用开源的Jetlinks物联网平台在学习&#xff0c;偶尔有一次机会接触到物联网设备对接&#xff0c;在协议对接的时候&#xff0c;遇到了…

400行程序写一个实时操作系统(十):用面向对象思想构建抢占式内核

前言 通过前几章的学习&#xff0c;我们学会了如何为RTOS设计一个合理的内存管理算法。现在&#xff0c;是时候学习设计RTOS内核了。 关于RTOS内核的文章也有很多&#xff0c;但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几&#xff0c;要么是要先怎么样再怎么…

【星闪开发连载】WS63E模块连接华为IoT云

目录 引言 WS63E对MQTT的支持 程序修改 测试结果 结语 引言 在上一篇博文中已经介绍了WiFi的使用。今天介绍一下如何使用MQTT协议连接到华为云上。 WS63E对MQTT的支持 WS63E的代码参考直接提供了MQTT的支持&#xff0c;文档介绍见docs/board/WS63V100 MQTT 开发指南.pd…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【DSP指令加速篇】 一、前文回顾二、CMSIS-NN简介2.1 为什么介绍CMSIS-NN&#xff1f;2.2 CMSIS-NN是什么&#xff1f;2.3 CMSIS-NN核心特性2.4 CMSIS-NN算子支持 三、TFLMCMSIS-NN集成3.1 包含TFLM的STM32项目3.2 理解TFLM…

如何在Windows平台下基于Whisper来训练自己的数据

0. 简介 最近快到1024程序员节了&#xff0c;再给大家上点干活。Whisper是openai开源的一个语音转文字模型。也是现在识别效果最好的离线数据模型&#xff0c;但是我们发现我们在完成一些中英文或者专业术语对话的时候。这时候表现的效果就比较差了。而这一步就得用微调的方式…

EM算法(期望最大算法、Expectation Maximization Algorithm)

EM算法&#xff08;期望最大算法、Expectation Maximization Algorithm) 引言 EM算法&#xff0c;全称为期望最大&#xff08;Expectation Maximization&#xff09;算法&#xff0c;是一种从不完全数据或有数据丢失的数据集&#xff08;存在隐含变量&#xff09;中求解概率模…

Oracle单实例静默安装

oracle 11g单实例静默安装 在CentOS上静默安装Oracle数据库 引言 在企业环境中&#xff0c;自动化和标准化是提高效率的关键。静默安装&#xff08;也称为无人值守安装&#xff09;是一种无需人工干预的安装方法&#xff0c;适用于大规模部署或需要重复安装的场景。本文将介…

【redis】初识非关系型数据库——redis

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 初识 Redis Redis是⼀种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis 中的值可以是由string&#xff08;字符串&#xff09;、hash&#xff0…

【Python爬虫实战】多进程结合 BeautifulSoup 与 Scrapy 构建爬虫项目

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 前言 在大数据时代&#xff0c;爬虫技术是获取和处理网络数据的利器。面对需要处理大…

ChatGPT实现旅游推荐微信小程序

随着旅游行业的快速发展&#xff0c;个性化推荐已成为提升用户体验的重要手段。通过AI技术&#xff0c;提供一个智能旅游推荐小程序&#xff0c;使用户能够轻松获取定制化的旅行建议。 项目概述 项目目标 开发一个AI旅游推荐小程序&#xff0c;基于用户输入的旅行偏好&#…

Visual Studio安装图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE&#xff0c;可用于创…

【WPF】中Dispatcher的DispatcherPriority参数使用

在 WPF 中&#xff0c;DispatcherPriority 参数用于指定通过 Dispatcher 调度的操作的执行优先级。加入 DispatcherPriority 参数的情况通常取决于你希望操作何时以及如何被执行。 1.Dispatcher的DispatcherPriority参数使用 以下是几种情况和示例说明&#xff1a; 1.1 需要…

【STM32 Blue Pill编程实例】-控制步进电机(ULN2003+28BYJ-48)

控制步进电机(ULN2003+28BYJ-48) 文章目录 控制步进电机(ULN2003+28BYJ-48)1、步进电机介绍2、ULN2003步进电机驱动模块3、硬件准备及接线4、模块配置3.1 定时器配置3.2 ULN2003输入引脚配置4、代码实现在本文中,我们将介使用 STM32Cube IDE 使用 ULN2003 电机驱动器来控制28B…

自由学习记录(14)

unity操作问题 位置&#xff1a;子物体的位置是相对于父物体的。如果你移动父物体&#xff0c;子物体会保持相对于父物体的相对位置&#xff0c;跟着一起移动。 旋转&#xff1a;子物体的旋转也是相对于父物体的。旋转父物体会导致子物体围绕父物体的原点旋转。 缩放&#xf…