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

展示:

相关推荐
zjy277776 分钟前
Layui tab选项卡如何动态根据ID值进行程序化切换
jvm·数据库·python
m0_602857769 分钟前
Redis如何修复槽位分配重叠的脏状态_使用redis-cli --cluster fix工具扫描并修复不一致的Slot
jvm·数据库·python
2301_7662834423 分钟前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
tang7778929 分钟前
代理IP质量检测实战:Python实现IP可用性、延迟、匿名度自动测试脚本
大数据·爬虫·python·网络协议·tcp/ip
郝亚军32 分钟前
ubuntu 22.04如何安装libmodbus
运维·服务器·ubuntu
李日灐37 分钟前
< 6 > Linux 自动化构建工具:makefile 详解 + 进度条实战小项目
linux·运维·服务器·后端·自动化·进度条·makefile
2501_9216494939 分钟前
企业定制金融数据 API:从架构设计到 Python 接入实战
大数据·开发语言·python·websocket·金融·量化
2601_956139421 小时前
政府事业机构品牌策划公司哪家专业
大数据·人工智能·python
Jmayday1 小时前
Pytorch:AI歌词生成器
人工智能·pytorch·python
枫叶林FYL1 小时前
项目八 云资源成本优化与治理平台
后端·python·自然语言处理·flask