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)
相关推荐
网络研究院2 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
treesforest2 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
2601_961845152 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
程序员mine2 天前
HTTPS-TLS加密与证书完全指南(中)
网络协议·https·ssl
程序猿阿伟2 天前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
之歆2 天前
现代 HTTP 客户端深度解析:Fetch 与 Axios
chrome·网络协议·http
InHand云飞小白2 天前
无人值守站点网络困境?工业级路由器IR315破解连接难题
网络·物联网·4g·工业路由器·4g路由器·iiot·蜂窝路由器
森G2 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt