3、数据采集硬件搭建:PLC与上位机通信、NI DAQmx驱动配置、基于树莓派的边缘采集方案

好,咱们进入第三章。这一章讲的是硬件搭建,说白了就是怎么把传感器、采集卡、控制器这些铁疙瘩连起来,让它们乖乖听话。我做了十几年可靠性测试,见过太多「软件写得飞起,一接硬件就冒烟」的案例。所以这一章,咱们不光讲原理,我还会把那些年踩过的坑、流过的汗,一并倒给你。

3.1 PLC与上位机通信:别让握手变成掰手腕

PLC(可编程逻辑控制器)在主轴可靠性测试里,主要干两件事:一是控制主轴启停、变速,二是把转速、温度、振动这些信号传给上位机。通信方式嘛,最常见的就是Modbus TCP和OPC UA。

Modbus TCP,说白了就是「你问我答」的协议。上位机发一个请求,PLC回一个数据。简单、稳定,但效率不高。我习惯用它做低速信号采集,比如温度、压力,每秒几十个点就够了。

OPC UA就高级一些,它支持订阅模式——PLC主动把数据推给上位机,不用你一遍遍去问。适合高速采集,比如振动信号,每秒几千甚至几万个点。

核心要点:

  • Modbus TCP:适合低速、点对点通信,配置简单
  • OPC UA:适合高速、多客户端场景,安全性更好
  • 两者都支持以太网,布线比串口方便得多

我在项目里遇到过一个问题:PLC和上位机明明连上了,但数据就是不对。查了半天,发现是字节顺序搞反了——Modbus默认是大端模式,但有些PLC用的是小端。嗯,这里要注意,通信前一定要确认字节序,不然你读到的转速可能是负数。

3.2 NI DAQmx驱动配置:别让驱动成为你的噩梦

NI的采集卡,比如PCIe-6363、USB-6210,在主轴测试里用得很多。驱动配置这块,我建议直接用NI MAX(Measurement & Automation Explorer)来搞定。

步骤其实不复杂:

  1. 插上采集卡,打开NI MAX,设备会自动识别
  2. 右键点击设备,选择「自检」,确保硬件没问题
  3. 创建虚拟通道,设置量程、采样率、接线方式
  4. 测试一下,看波形对不对

但这里有个坑——采样率设置。我曾经有个项目,采集主轴振动信号,采样率设了10 kHz,结果频谱分析时发现高频成分全没了。后来才意识到,主轴转速6000 rpm,基频才100 Hz,但轴承故障频率可能到几千赫兹。采样率至少要设到最高频率的2.56倍,这是工程上的经验值。

我的小技巧:

用NI DAQmx做振动采集时,我习惯把采样率设为最高分析频率的5倍。比如你要分析到5 kHz,采样率就设25 kHz。这样既保证精度,又不会数据量太大。

代码方面,用C#或者Python调用NI DAQmx的API都行。我个人偏爱Python,因为调试快。下面是一个简单的采集示例:

import nidaqmx
from nidaqmx.constants import TerminalConfiguration

with nidaqmx.Task() as task:
    task.ai_channels.add_ai_voltage_chan(
        "Dev1/ai0",
        terminal_config=TerminalConfiguration.RSE,
        min_val=-10.0,
        max_val=10.0
    )
    task.timing.cfg_samp_clk_timing(
        rate=25000,  # 采样率 25 kHz
        sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS
    )
    data = task.read(number_of_samples_per_channel=1000)
    print(data[:10])  # 打印前10个点

这段代码看着简单,但实际用的时候要注意:接线方式。RSE(参考单端)适合信号源和采集卡共地的情况;如果信号源是浮地的,要用差分输入,不然噪声会很大。我吃过这个亏,后来每次接线前都先用万用表测一下地电位。

3.3 基于树莓派的边缘采集方案:便宜、灵活、但别太贪心

树莓派做边缘采集,这几年越来越流行。原因很简单:便宜(几百块)、体积小、能跑Linux。对于主轴可靠性测试,如果现场没有工控机,或者不想拉长线,树莓派是个不错的选择。

我常用的方案是:树莓派4B + ADS1256(24位ADC) + 传感器。ADS1256有8个通道,精度高,适合慢速信号采集,比如温度、压力、低速振动。

配置步骤:

  1. 安装Raspbian系统,启用SPI接口
  2. 连接ADS1256模块,注意电源和信号线的屏蔽
  3. 用Python的spidev库读取数据
  4. 数据通过MQTT或HTTP上传到上位机

警告:

树莓派的GPIO电平是3.3V,而很多工业传感器输出是5V或24V。直接连接会烧坏树莓派!一定要用电平转换模块或光耦隔离。我曾经亲眼见过一个同事,把24V信号直接怼到树莓派上,结果板子当场冒烟。

下面是一个简单的Python采集代码:

import spidev
import time

spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1000000

def read_adc(channel):
    # ADS1256 读取单通道
    cmd = [0x01, (0x10 + channel) << 4, 0x00]
    resp = spi.xfer2(cmd)
    value = (resp[1] << 8) | resp[2]
    return value

while True:
    val = read_adc(0)
    voltage = val * 5.0 / 65535  # 假设参考电压5V
    print(f"通道0电压: {voltage:.3f} V")
    time.sleep(0.1)

你想想看,树莓派做边缘采集,最大的优势是什么?是本地预处理。比如你可以在树莓派上跑一个简单的FFT,只把频谱特征值上传,而不是把原始波形全传上去。这样网络压力小,上位机也轻松。

但别太贪心。树莓派的CPU和内存有限,别指望它做实时高速采集。我试过用树莓派采集100 kHz的振动信号,结果CPU直接跑满,数据还丢包。后来老老实实换成了NI的采集卡。

3.4 三种方案的对比与选择

说了这么多,到底该用哪种?我整理了一个表格,方便你对比:

方案 适用场景 采样率上限 成本 可靠性
PLC + 上位机 低速信号(温度、压力、转速) ~100 Hz
NI DAQmx 高速信号(振动、噪声、电流) ~1 MHz 极高
树莓派 + ADC 低速、低成本、边缘预处理 ~10 kHz

我个人习惯是:关键通道用NI,辅助通道用PLC,边缘节点用树莓派。比如主轴振动信号,必须用NI采集卡,因为精度和实时性要求高;而环境温度、冷却液流量这些,走PLC就够了;如果现场有多个分散的测点,比如轴承座温度,用树莓派做边缘采集,再汇总到上位机,既省钱又灵活。

3.5 知识体系总览

下面这张图,是我自己画的,把本章的核心逻辑串起来了。你看一眼,心里就有数了。

数据采集硬件搭建知识体系 PLC + 上位机 • Modbus TCP / OPC UA • 低速信号采集 • 控制与状态监测 • 字节序注意 • 适合温度/压力 NI DAQmx • NI MAX 驱动配置 • 高速信号采集 • 采样率设置技巧 • 接线方式选择 • 适合振动/噪声 树莓派边缘采集 • ADS1256 + SPI • 本地预处理 • MQTT/HTTP上传 • 电平转换必须 • 适合低成本场景 选择策略 关键通道(振动、噪声)→ NI DAQmx,精度和实时性第一 辅助通道(温度、压力)→ PLC,稳定可靠成本适中 分散测点(边缘节点)→ 树莓派,本地预处理减少网络压力 三者可混合使用,通过以太网或现场总线互联 ⚠ 注意:信号隔离、接地、屏蔽,一个都不能少

这张图把三种方案的特点和适用场景都标清楚了。你以后做方案选型时,对着这张图看,基本不会跑偏。

好了,这一章的内容就到这儿。硬件搭建这块,说白了就是「选对方案、接对线、配好参数」。别嫌麻烦,前期多花点时间在硬件上,后期调试能省一半的功夫。我当年就是吃了这个亏,后来学乖了——每次搭建前,先画好接线图,再动手。


专注资料整理