2. 设备数据采集方案设计

任务定义

针对旋转机械(如电机、风机)与液压系统两类典型设备,设计一套可落地的多传感器数据采集方案。方案需明确传感器选型、安装位置、采样频率设定依据,并给出可执行的配置代码与验证方法。本案例聚焦于采集层设计,不涉及后续信号处理与故障诊断算法。

1. 传感器选型与安装位置

旋转机械主要监测振动与转速,液压系统主要监测压力、流量与油液温度。选型原则:振动传感器选用IEPE型加速度计(量程±50g,灵敏度100mV/g),转速采用磁电式接近开关,压力选用扩散硅压力变送器(4-20mA输出),流量选用涡轮流量计,温度选用PT100铂电阻。安装位置需遵循以下规则:

  • 振动传感器:安装于轴承座垂直与水平方向(测点1、2),以及设备基座(测点3),使用磁座或螺纹安装,确保接触面平整;
  • 转速传感器:安装于转轴附近,间隙1-2mm,对准键相标记;
  • 压力传感器:安装于液压泵出口主管路(测点P1)与执行器入口(测点P2),使用三通接头接入;
  • 流量传感器:串联于回油管路(测点F1);
  • 温度传感器:插入液压油箱内部(测点T1),浸没深度≥100mm。

2. 采样频率设定

采样频率依据被测信号最高频率分量确定。旋转机械振动信号关注至10倍转频(假设最高转速3000rpm即50Hz),则最高分析频率500Hz,按抗混叠要求采样率≥2.56×500=1280Hz,取整为2048Hz。液压系统压力脉动主要能量集中在100Hz以内,采样率设为512Hz;流量与温度为缓变信号,采样率设为10Hz。所有通道同步采集,避免相位偏差。

3. 数据采集配置实现

以下代码基于Python与NI-DAQmx驱动,实现多通道同步采集配置。硬件假设为NI USB-6343(32路AI,16位,2MS/s),通过接线盒连接上述传感器。

import nidaqmx
from nidaqmx.constants import (
    TerminalConfiguration, Edge, AcquisitionType, VoltageUnits, CurrentUnits
)
import numpy as np
import time

# 通道配置参数
VIB_SENSITIVITY = 0.1  # 100mV/g → 0.1 V/g
VIB_SAMPLE_RATE = 2048.0
VIB_SAMPLES = 2048 * 2  # 采集2秒

PRESS_SAMPLE_RATE = 512.0
PRESS_SAMPLES = 512 * 2

SLOW_SAMPLE_RATE = 10.0
SLOW_SAMPLES = 10 * 2

def configure_task():
    """创建并配置多通道采集任务"""
    task = nidaqmx.Task()
    
    # 振动通道(3路,IEPE需启用激励电流)
    for i, ch in enumerate(["Dev1/ai0", "Dev1/ai1", "Dev1/ai2"]):
        task.ai_channels.add_ai_accel_chan(
            ch, name_to_assign_to_channel=f"vib_{i+1}",
            terminal_config=TerminalConfiguration.DIFFERENTIAL,
            sensitivity=VIB_SENSITIVITY, sensitivity_units=VoltageUnits.VOLTS_PER_G,
            current_excit_source=nidaqmx.constants.ExcitationSource.INTERNAL,
            current_excit_val=0.004  # 4mA IEPE激励
        )
    
    # 压力通道(2路,4-20mA需外接250Ω电阻转为1-5V)
    for i, ch in enumerate(["Dev1/ai3", "Dev1/ai4"]):
        task.ai_channels.add_ai_voltage_chan(
            ch, name_to_assign_to_channel=f"press_{i+1}",
            terminal_config=TerminalConfiguration.DIFFERENTIAL,
            min_val=0.0, max_val=5.0, units=VoltageUnits.VOLTS
        )
    
    # 流量通道(1路,4-20mA经250Ω电阻)
    task.ai_channels.add_ai_voltage_chan(
        "Dev1/ai5", name_to_assign_to_channel="flow",
        terminal_config=TerminalConfiguration.DIFFERENTIAL,
        min_val=0.0, max_val=5.0, units=VoltageUnits.VOLTS
    )
    
    # 温度通道(1路,PT100经变送器输出4-20mA)
    task.ai_channels.add_ai_voltage_chan(
        "Dev1/ai6", name_to_assign_to_channel="temp",
        terminal_config=TerminalConfiguration.DIFFERENTIAL,
        min_val=0.0, max_val=5.0, units=VoltageUnits.VOLTS
    )
    
    # 转速通道(1路,数字输入)
    task.di_channels.add_di_chan("Dev1/port0/line0", name_to_assign_to_channel="tacho")
    
    # 设置采样时钟(所有AI通道统一采样率,此处以振动采样率为基准)
    task.timing.cfg_samp_clk_timing(
        rate=VIB_SAMPLE_RATE,
        sample_mode=AcquisitionType.FINITE,
        samps_per_chan=VIB_SAMPLES
    )
    return task

def read_data(task):
    """读取一次采集数据,返回字典"""
    data = task.read(number_of_samples_per_channel=VIB_SAMPLES)
    # data为二维列表:行=通道,列=采样点
    result = {
        "vib_1": np.array(data[0]) / 0.1,  # 转换为g
        "vib_2": np.array(data[1]) / 0.1,
        "vib_3": np.array(data[2]) / 0.1,
        "press_1": (np.array(data[3]) / 5.0) * 20.0,  # 0-5V → 0-20MPa
        "press_2": (np.array(data[4]) / 5.0) * 20.0,
        "flow": (np.array(data[5]) / 5.0) * 100.0,    # 0-5V → 0-100L/min
        "temp": (np.array(data[6]) / 5.0) * 150.0     # 0-5V → 0-150℃
    }
    return result

if __name__ == "__main__":
    task = configure_task()
    try:
        task.start()
        # 等待转速信号触发(简单轮询,实际可用硬件触发)
        time.sleep(0.5)
        data = read_data(task)
        task.stop()
        # 输出关键统计值(仅作示例,非实测结果)
        print(f"振动1 RMS: {np.sqrt(np.mean(data['vib_1']**2)):.3f} g")
        print(f"压力1 均值: {np.mean(data['press_1']):.2f} MPa")
        print(f"温度: {np.mean(data['temp']):.1f} ℃")
    finally:
        task.close()

4. 通道标定与量程映射

代码中已包含传感器灵敏度与量程换算:振动通道通过DAQmx加速度计通道直接设置灵敏度,返回值为g;压力、流量、温度通道通过电压-物理量线性映射(0-5V对应0-20MPa、0-100L/min、0-150℃)。实际使用时需根据传感器具体量程修改映射系数。

5. 验证方法与判定标准

硬件连接验证:启动设备后,在NI MAX中检查所有通道是否识别,手动施加已知激励(如敲击振动传感器),观察对应通道波形是否变化。

采样率验证:运行上述代码,采集已知频率信号(如使用信号发生器输入50Hz正弦波至振动通道),对采集数据做FFT,频谱峰值应出现在50Hz±1Hz处,且无混叠分量。

同步性验证:同时给两个压力通道施加同一阶跃压力,比较两通道数据上升沿时间差,应小于1个采样周期(1/512s≈2ms)。

判定标准:以上三项验证全部通过,且代码能连续稳定运行30分钟无报错,即判定采集方案合格。

旋转机械与液压系统多传感器采集拓扑 旋转机械(电机/风机) 电机 V1 V2 轴承座垂直 轴承座水平 V3 基座 T 转速(键相) 液压系统 液压泵 P1 泵出口 执行器 P2 执行器入口 F1 回油流量 T1 油箱温度 NI USB-6343 数据采集卡 32路AI / 16位 / 2MS/s / IEPE激励 / 数字IO ai0-ai2: 振动(IEPE) ai3-ai4: 压力(4-20mA→250Ω) ai5: 流量 ai6: 温度 port0/line0: 转速(数字) 采样率配置 振动: 2048 Hz 压力: 512 Hz 流量: 10 Hz 温度: 10 Hz