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)
相关推荐
上海云盾-小余5 小时前
CDN 加速 + 安全防护:让业务体验与网络安全双向升级
网络·安全·web安全
Sinokap5 小时前
告别“一刀切”防护:如何在安全与效率之间构建智能工作空间
网络
白山云北诗5 小时前
一文读懂什么是DNS解析
网络·安全·解析·dns·dns服务器·cname·加速
s***87275 小时前
深入解析TCP/IP协议栈:从原理到优化
网络
乐迪信息5 小时前
乐迪信息:AI视频分析技术用于船舶倾斜监控
大数据·网络·人工智能·算法·无人机
一颗青果5 小时前
对称加密 | 非对称加密 | HTTPS的加密方式 | CA认证 | 中间人攻击
网络·网络协议·https
Gazer_S5 小时前
【iframe 跨域问题:代理方案与网络基础】
网络
小雨青年5 小时前
鸿蒙 HarmonyOS 6 | 逻辑核心 (04):原生网络库 RCP 高性能实战
网络·华为·harmonyos
企业对冲系统官5 小时前
价格风险管理平台审批角色配置与权限矩阵设计
大数据·运维·开发语言·前端·网络·数据库·矩阵
以太浮标5 小时前
华为eNSP模拟器综合实验之- 端口安全MAC地址表
网络