news 2026/10/3 13:19:49

vue展示node express调用python解析tdms

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue展示node express调用python解析tdms

python解析的代码:

import sys import json import numpy as np from nptdms import TdmsFile def parse_tdms_file(file_path, group_name): """ 解析TDMS文件并返回指定通道的数据 """ try: # 读取TDMS文件 tdms_file = TdmsFile.read(file_path) # 获取指定组和通道 group = tdms_file[group_name] # channel = group[channel_name] channel_ia = group["Ia"] channel_ib = group["Ib"] channel_ic = group["Ic"] channel_uab = group["Uab"] channel_ubc = group["Ubc"] channel_uca = group["Uca"] channel_ua = group["Ua"] channel_ub = group["Ub"] channel_uc = group["Uc"] # 获取数据 data_ia = channel_ia[:] data_ib = channel_ib[:] data_ic = channel_ic[:] data_uab = channel_uab[:] data_ubc = channel_ubc[:] data_uca = channel_uca[:] data_ua = channel_ua[:] data_ub = channel_ub[:] data_uc = channel_uc[:] # 如果数据太大,可以采样 # if len(data) > 10000: # indices = np.linspace(0, len(data)-1, 10000, dtype=int) # data = data[indices] if len(data_ia) > 10000: indices = np.linspace(0, len(data_ia)-1, 10000, dtype=int) data_ia = data_ia[indices] if len(data_ib) > 10000: indices = np.linspace(0, len(data_ib)-1, 10000, dtype=int) data_ib = data_ib[indices] if len(data_ic) > 10000: indices = np.linspace(0, len(data_ic)-1, 10000, dtype=int) data_ic = data_ic[indices] if len(data_uab) > 10000: indices = np.linspace(0, len(data_uab)-1, 10000, dtype=int) data_uab = data_uab[indices] if len(data_ubc) > 10000: indices = np.linspace(0, len(data_ubc)-1, 10000, dtype=int) data_ubc = data_ubc[indices] if len(data_uca) > 10000: indices = np.linspace(0, len(data_uca)-1, 10000, dtype=int) data_uca = data_uca[indices] if len(data_ua) > 10000: indices = np.linspace(0, len(data_ua)-1, 10000, dtype=int) data_ua = data_ua[indices] if len(data_ub) > 10000: indices = np.linspace(0, len(data_ub)-1, 10000, dtype=int) data_ub = data_ub[indices] if len(data_uc) > 10000: indices = np.linspace(0, len(data_uc)-1, 10000, dtype=int) data_uc = data_uc[indices] # 转换为Python列表 data_list_ia = data_ia.tolist() if isinstance(data_ia, np.ndarray) else list(data_ia) data_list_ib = data_ib.tolist() if isinstance(data_ib, np.ndarray) else list(data_ib) data_list_ic = data_ic.tolist() if isinstance(data_ic, np.ndarray) else list(data_ic) data_list_uab = data_uab.tolist() if isinstance(data_uab, np.ndarray) else list(data_uab) data_list_ubc = data_ubc.tolist() if isinstance(data_ubc, np.ndarray) else list(data_ubc) data_list_uca = data_uca.tolist() if isinstance(data_uca, np.ndarray) else list(data_uca) data_list_ua = data_ua.tolist() if isinstance(data_ua, np.ndarray) else list(data_ua) data_list_ub = data_ub.tolist() if isinstance(data_ub, np.ndarray) else list(data_ub) data_list_uc = data_uc.tolist() if isinstance(data_uc, np.ndarray) else list(data_uc) # 转换为Python列表 # data_list = data_ib.tolist() if isinstance(data_ib, np.ndarray) else list(data_ib) return { "success": True, "data_ia": data_list_ia, "data_ib": data_list_ib, "data_ic": data_list_ic, "data_uab": data_list_uab, "data_ubc": data_list_ubc, "data_uca": data_list_uca, "data_ua": data_list_ua, "data_ub": data_list_ub, "data_uc": data_list_uc, "length": len(data_list_ia), "min": float(np.min(data_ia)), "max": float(np.max(data_ia)), "mean": float(np.mean(data_ia)) } except Exception as e: return { "success": False, "error": str(e) } if __name__ == "__main__": # 从命令行参数获取输入 if len(sys.argv) >= 4: file_path = sys.argv[1] group_name = sys.argv[2] # channel_name = sys.argv[3] result = parse_tdms_file(file_path, group_name) print(json.dumps(result, ensure_ascii=False)) else: print(json.dumps({ "success": False, "error": "参数不足,需要文件路径、组名和通道名" }))

node代码:

const path = require("path"); const { spawn } = require("child_process"); // 解析TDMS文件 // 解析TDMS文件的API router.get("/tdms_data", async (req, res) => { try { const { group = "采集数据" } = req.query; // 调用Python脚本 const pythonProcess = spawn("python", [ "E:\\project\\***\\***\\parse_tdms.py", "E:\\project\\***\\***\\test_ac.tdms", group, ]); let output = ""; let errorOutput = ""; // 收集标准输出 pythonProcess.stdout.on("data", (data) => { output += data.toString(); }); // 收集错误输出 pythonProcess.stderr.on("data", (data) => { errorOutput += data.toString(); }); // 处理进程结束 pythonProcess.on("close", (code) => { if (code === 0) { try { const result = JSON.parse(output); res.json({ success: true, code: 20000, data: result, message: "解析TDMS文件成功", }); } catch (parseError) { res.status(500).json({ code:20001, success: false, error: `解析Python输出失败: ${parseError.message}`, rawOutput: output, }); } } else { res.status(500).json({ code:20001, success: false, error: `Python脚本执行失败 (退出码: ${code})`, pythonError: errorOutput, }); } }); } catch (error) { res.status(500).json({ code:20001, success: false, error: error.message, }); } });

vue代码:

parseTdms() { this.listLoading = true parseTdmsDo(this.device_name).then(response => { if(response.success&&response.data.success){ const llength=response.data.length; this.timeData = Array.from({ length: llength }, (_, i) => i) this.iaData =response.data.data_ia; this.ibData =response.data.data_ib; this.icData =response.data.data_ic; this.uabData =response.data.data_uab; this.ubcData =response.data.data_ubc; this.ucaData =response.data.data_uca; this.uaData =response.data.data_ua; this.ubData =response.data.data_ub; this.ucData =response.data.data_uc; console.log("更新了数据!!") this.updateChartIa() this.updateChartIb() this.updateChartIc() this.updateChartUab() this.updateChartUbc() this.updateChartUca() this.updateChartUa() this.updateChartUb() this.updateChartUc() } this.listLoading = false }).catch(error => { console.error('API调用失败:', error) this.listLoading = false this.$message({ message: 'API调用失败,请检查网络连接', type: 'error', duration: 5 * 1000 }) }) },

vue的api:

// 获取tdms数据 export function parseTdmsDo(device_name) { return request({ url: '/vue-element-admin/device/tdms_data', method: 'get', params: { device_name } }) }

展示:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 15:28:02

安捷伦 Keysight 16195B 是德 16195B 校准套件

是德科技 16195B校准套件‌主要用于高频阻抗测量仪的校准,特别是在7 mm接头平面上进行校准。该套件包含以下组件: E4991-60021 (SHORT)、 E4991-60022 (OPEN)以及一个50欧姆的负载,频率范围为DC…

作者头像 李华
网站建设 2026/10/2 0:38:11

力科Teledyne LeCroy PP024 示波器探头 PP024-2

力科PP024探头 是一款无源衰减探头,适用于示波器,具有10:1的衰减值和500MHz的带宽。‌ 该探头的输入电阻为10MΩ,最大电压值为CAT I 500V和CAT II 400V,输入电容为10pF,电缆长度为51.181英寸(约1300毫米&am…

作者头像 李华
网站建设 2026/9/30 7:27:01

springboot旅游旅行攻略网站的设计与实现vue

目录系统架构设计核心功能模块技术实现要点扩展功能设计部署方案开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统架构设计 SpringBoot旅游旅行攻略网站采用前后端分离架构,后端使用SpringBoot框架提供RESTful A…

作者头像 李华
网站建设 2026/10/1 4:20:26

【dz-670】基于单片机的智能化光伏发电监控与管理系统设计

基于单片机的智能化光伏发电监控与管理系统 摘要:当前全球能源需求持续增长,同时对环境保护的重视程度也日益提高,光伏发电作为一种有清洁、可再生特性的能源技术,已获得广泛应用,本文设计了一种以单片机为基础的智能化…

作者头像 李华
网站建设 2026/10/1 18:33:15

ZUI15 平板充电样式怎么改?个性化设置教程来了!

对于使用联想 ZUI15 系统平板的用户来说,细节处的个性化定制总能让设备更具专属感。充电时的显示样式看似是小细节,却能在日常使用中带来不一样的仪式感 —— 单调的默认样式看久了难免乏味,不少小伙伴都在寻找更改充电样式的方法&#xff0c…

作者头像 李华
网站建设 2026/10/2 13:16:41

计算机毕设Java基于微信小程序的社区志愿者服务管理系统 基于微信小程序的社区志愿服务管理平台的Java开发实践 微信小程序环境下Java实现的社区志愿者服务管理系统设计

计算机毕设Java基于微信小程序的社区志愿者服务管理系统76x8l9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着社会的快速发展,社区志愿服务在促进社区和谐与提…

作者头像 李华