当前位置: 首页 > news >正文

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 } }) }

展示:

http://www.cnnetsun.cn/news/835935.html

相关文章:

  • 2026年CMDB选型对比指南:哪款产品能在复杂运维需求中脱颖而出?
  • leetcode 3650. 边反转的最小路径总成本 中等
  • 文化认同的生成论重构:从实体归属到矩阵调谐的范式转换
  • 基于java的信访管理系统(11815)
  • 解决场馆运营困难!多功能预订管理系统的优势一览
  • 静压式水位计
  • 【dz-663】基于单片机的语音识别灯光控制系统设计
  • 【dz-669】基于32单片机的智能化应急救援头盔的系统设计
  • 基于 Roboflow 洪水检测数据集(`FLOOD SEPTEMBER 23 DATASET`)训练目标检测模型的完整代码
  • 拯救者屏幕突现中间黑点?竟是这个功能在 “搞鬼”!
  • JBoltAI框架:Java大模型开发的架构、方案与范例
  • NFPA 855-2026关于气体探测的指引
  • FaceRecon-3D实测:如何获得最佳3D重建效果
  • 基于Springboot+Vue的结合人脸识别和实名认证的校园论坛系统源码文档部署文档代码讲解等
  • 揭秘干法刻蚀机的内核奥秘:通过3D动画解析微观工艺的宏观呈现
  • 计算机毕设java高校评优管理系统 基于Java的高校优秀评选管理平台设计与实现 Java技术驱动的高校评优信息化管理系统
  • 计算机毕设java高校疫情防控系统的设计与实现 基于Java的高校疫情防控管理平台开发与应用 高校疫情防控信息化系统的设计与实现
  • 与学习相关的技巧(参数的更新)
  • 身份权限欺诈:撕开企业内网防御的隐形利刃,比漏洞利用更致命的核心威胁
  • SeqGPT-560M参数详解:Tokenizer选择、中文分词策略、标点符号处理机制解析
  • 【爆火】比ChatGPT还火?Clawdbot开启AI代理新纪元,小白程序员也能上手!
  • 告别繁琐配置!ms-swift让大模型训练开箱即用
  • CVE-2009-0556:一个拒绝消逝的PowerPoint漏洞
  • Flowise可视化AI助手搭建:无需编程的本地部署全攻略
  • ChatGLM3-6B-128K入门指南:长文本模型选型建议解析
  • VibeVoice适合团队协作吗?使用场景分析
  • 个人开发者福音:低成本AI编程助手实测推荐
  • AI 净界-RMBG-1.4 参数说明:影响抠图质量的关键设置解析
  • AcousticSense AI音乐分类实战:从入门到精通
  • 避坑指南:Live Avatar部署常见问题全解,少走弯路