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)来搞定。
步骤其实不复杂:
- 插上采集卡,打开NI MAX,设备会自动识别
- 右键点击设备,选择「自检」,确保硬件没问题
- 创建虚拟通道,设置量程、采样率、接线方式
- 测试一下,看波形对不对
但这里有个坑——采样率设置。我曾经有个项目,采集主轴振动信号,采样率设了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个通道,精度高,适合慢速信号采集,比如温度、压力、低速振动。
配置步骤:
- 安装Raspbian系统,启用SPI接口
- 连接ADS1256模块,注意电源和信号线的屏蔽
- 用Python的spidev库读取数据
- 数据通过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 知识体系总览
下面这张图,是我自己画的,把本章的核心逻辑串起来了。你看一眼,心里就有数了。
这张图把三种方案的特点和适用场景都标清楚了。你以后做方案选型时,对着这张图看,基本不会跑偏。
好了,这一章的内容就到这儿。硬件搭建这块,说白了就是「选对方案、接对线、配好参数」。别嫌麻烦,前期多花点时间在硬件上,后期调试能省一半的功夫。我当年就是吃了这个亏,后来学乖了——每次搭建前,先画好接线图,再动手。