4. 趋势分析基础:趋势图的绘制、时域指标与预警线设定
各位同行,大家好。今天我们来聊聊趋势分析。说实话,很多搞振动的新手容易犯一个毛病——拿到数据就急着做FFT、看频谱。但我个人习惯是,先看趋势图。为什么?因为趋势图能告诉你设备状态在时间轴上的变化,这是频谱图给不了的全局感。
我记得刚入行那会儿,跟着老师傅去现场测一台风机。他看了一眼趋势图就说:“这台机子撑不过三个月。”我当时半信半疑,结果两个月零二十天,轴承果然烧了。从那以后,我对趋势分析就格外重视。
4.1 趋势图——设备状态的“心电图”
趋势图,说白了就是把振动数据按时间顺序画出来。横轴是时间,纵轴是振动值。就这么简单?嗯,但简单的东西往往最有用。
你想想看,一台风机从健康到故障,振动值不会突然飙升(除非是突发性故障)。大多数情况下,它会慢慢爬升。趋势图就是捕捉这种“慢慢爬升”的最佳工具。
我在项目中遇到过一台离心风机,振动值一直在4.5mm/s左右,看起来挺正常。但趋势图显示,这个值在三个月内从3.2mm/s涨到了4.5mm/s,斜率明显在增大。我建议客户安排检修,拆开一看,轴承保持架已经裂了。
绘制趋势图,我一般用Python的Matplotlib库。下面给个简单的示例:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 模拟振动数据(每天采集一次,共90天)
dates = pd.date_range('2024-01-01', periods=90, freq='D')
vibration = 3.2 + 0.015 * np.arange(90) + np.random.normal(0, 0.2, 90)
plt.figure(figsize=(12, 5))
plt.plot(dates, vibration, 'b-', linewidth=1.5, label='振动速度 (mm/s)')
plt.xlabel('日期')
plt.ylabel('振动速度 (mm/s)')
plt.title('风机轴承振动趋势图')
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()
这段代码生成的就是最基础的时域趋势图。实际工作中,我还会叠加报警线、预警线,后面会讲到。
4.2 时域指标——三个核心参数
趋势图上画什么?不是随便画个原始波形就完事了。我们需要提取有意义的时域指标。常用的有三个:峰值、有效值、峭度。
| 指标 | 物理含义 | 适用场景 | 我的经验值 |
|---|---|---|---|
| 峰值 (Peak) | 振动波形的最大幅值 | 冲击类故障(如轴承点蚀) | 峰值突然翻倍,大概率有冲击 |
| 有效值 (RMS) | 振动能量的统计平均值 | 磨损类故障、整体状态评估 | RMS缓慢上升,典型磨损特征 |
| 峭度 (Kurtosis) | 波形分布的陡峭程度 | 早期故障检测 | 峭度>4,要警惕;>8,基本确认故障 |
峰值,就是波形里最大的那个值。我习惯用峰值来捕捉突发性冲击。比如轴承滚道出现点蚀,每次滚珠滚过缺陷位置,就会产生一个冲击,峰值会明显升高。
有效值,也叫RMS。这个指标反映的是振动的“能量大小”。一台正常运转的风机,RMS值通常比较稳定。如果RMS值持续上升,说明设备在慢慢恶化。我曾经监测过一台引风机,RMS值从2.8mm/s涨到4.2mm/s用了半年,最后发现是叶轮积灰导致的不平衡。
峭度,这个指标有点意思。它衡量的是波形分布的“尖峰程度”。正态分布的峭度是3。如果峭度大于3,说明波形里有更多的冲击成分。我在做轴承早期故障诊断时,峭度往往比峰值更敏感。有时候峰值还没明显变化,峭度已经先报警了。
4.3 趋势预警线——给设备画条“红线”
趋势图有了,指标也有了,接下来就是设定预警线。预警线不是随便画的,得有依据。
我一般分三步走:
- 收集历史数据——至少要有设备正常运行3个月以上的数据
- 计算基线值——取正常运行期间数据的平均值作为基线
- 设定阈值——基线值 × 安全系数
安全系数怎么定?我个人的经验:
- 对于关键设备(如主风机),安全系数取1.5~2.0
- 对于一般设备,安全系数取2.0~3.0
- 如果设备本身振动就偏大,建议用统计方法(如均值+3σ)
下面是一个带预警线的趋势图绘制代码:
import matplotlib.pyplot as plt
import numpy as np
# 模拟数据
days = np.arange(1, 91)
vibration = 3.2 + 0.02 * days + np.random.normal(0, 0.3, 90)
# 计算基线(取前30天)
baseline = np.mean(vibration[:30])
warning_line = baseline * 2.0 # 预警线
alarm_line = baseline * 2.5 # 报警线
plt.figure(figsize=(12, 6))
plt.plot(days, vibration, 'b-', label='振动值', linewidth=1.5)
plt.axhline(y=warning_line, color='orange', linestyle='--',
linewidth=2, label=f'预警线 ({warning_line:.2f} mm/s)')
plt.axhline(y=alarm_line, color='red', linestyle='--',
linewidth=2, label=f'报警线 ({alarm_line:.2f} mm/s)')
plt.axhline(y=baseline, color='green', linestyle=':',
linewidth=1.5, label=f'基线 ({baseline:.2f} mm/s)')
plt.xlabel('运行天数')
plt.ylabel('振动速度 (mm/s)')
plt.title('风机振动趋势与预警线')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
这段代码画出了三条线:基线(绿色虚线)、预警线(橙色虚线)、报警线(红色虚线)。当振动值突破预警线时,我会安排检查;突破报警线时,必须停机处理。
4.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图:
这张图把本章的核心内容串起来了。趋势图是基础,时域指标是工具,预警线是标准,三者结合才能做好设备状态评估。
好了,关于趋势分析的基础内容就讲到这里。记住一句话:趋势图是设备状态的“心电图”,时域指标是“诊断参数”,预警线是“生死线”。把这三点吃透了,你就能从振动数据里读出设备的“健康状况”。