2. 基于历史故障记录的过流发生时段与负载关联分析
把“跳机时刻”还原成“工况时刻”
过流故障记录本身只给出时间戳、故障代码和动作值,单看这些数据无法判断诱因。分析的关键是把每条过流记录与同一时间窗内的负载数据对齐,看跳机前数秒到数十秒内电流、频率、转矩、给定信号的变化形态,再按形态归类到启动冲击、负载突变、堵转、加减速过流等工况。下面以一台矿用变频器(示例:额定 315 kW,驱动带式输送机电机)连续 30 天的记录为对象,说明提取、对齐、归类、排序的完整做法。
一、记录提取与字段约定
从变频器事件记录中导出过流类事件(示例代码 OC-1 加速过流、OC-2 恒速过流、OC-3 减速过流、OC-S 短路型过流),同时导出同一时段的运行数据。为保证后续可对齐,两类数据必须使用同一时钟源,时间戳统一到秒,并明确电流参照:本文所有电流均为变频器输出侧三相有效值,以电机额定电流 Ie 为基准的标幺值表示(I/Ie),过流动作阈值示例取 180% Ie。
| 数据源 | 关键字段 | 采样/记录方式 | 用途 |
|---|---|---|---|
| 故障记录 | 时间戳、故障代码、动作时输出电流、输出频率、直流母线电压 | 事件触发,秒级 | 确定跳机时刻与动作值 |
| 运行趋势 | 时间戳、输出电流、输出频率、转矩给定、运行/停止状态、外部联锁信号 | 1 s 周期录波 | 还原跳机前工况形态 |
| 工况台账 | 班次、给煤机启停、输送机启停、清煤/检修记录 | 人工登记 | 交叉验证负载突变来源 |
二、时间窗对齐与形态判据
对每条过流记录取跳机前 T-30 s 至跳机时刻 T 的窗口,计算三个特征量:电流上升斜率(跳机前 5 s 内 dI/dt)、频率变化方向(升频/恒频/降频)、电流峰值与持续时间。据此建立判据表,把记录归入四类工况。判据中的数值为示例阈值,实际使用时应按本机电机参数与工艺节拍标定。
| 工况类别 | 频率特征 | 电流特征 | 典型持续时间 | 关联信号 |
|---|---|---|---|---|
| 启动冲击 | 0→低频爬升,处于加速段 | 峰值 ≥180% Ie,斜率大 | <3 s | 启动指令刚发出 |
| 负载突变 | 恒频或轻微降频 | 由 60%~90% Ie 阶跃至 ≥180% Ie | 1~5 s | 给煤机加量、落煤点冲击 |
| 堵转 | 频率被压住,转速接近 0 | 持续 ≥150% Ie 且不回落 | >5 s 后跳机 | 输送带卡阻、滚筒抱死 |
| 加减速过流 | 加速或减速过程中 | 120%~180% Ie 波动上升 | 数秒 | 加减速时间设置偏短 |
三、统计归类与诱因排序
把 30 天内全部过流记录逐条按上表归类,统计各类次数、占比与平均动作电流,再结合工况台账核对时间吻合度。示例统计结果如下(教学示例数据,非实测):
| 工况类别 | 次数 | 占比 | 平均动作电流 | 台账吻合 | 排序 |
|---|---|---|---|---|---|
| 负载突变 | 11 | 45.8% | 196% Ie | 9/11 与给煤机加量时间吻合 | 1 |
| 启动冲击 | 6 | 25.0% | 188% Ie | 6/6 发生在启动后 2 s 内 | 2 |
| 堵转 | 4 | 16.7% | 172% Ie(持续型) | 3/4 有卡阻或清煤记录 | 3 |
| 加减速过流 | 3 | 12.5% | 165% Ie | 加速时间设为 8 s,偏短 | 4 |
排序依据不是单纯次数,而是“次数 × 时间吻合度 × 可干预性”。负载突变次数最多且与给煤节拍高度吻合,属于可通过调整给煤量、加装落煤缓冲或优化转矩限幅来干预的诱因,因此列为第一优先;启动冲击可通过延长启动加速时间、启用启动转矩提升曲线缓解;堵转需结合机械检查;加减速过流则先核对加减速时间参数。
四、分析脚本(可运行示例)
下面用 Python 对导出的两份 CSV 做窗口对齐与归类,输出统计表。字段名与上文表格一致,时间戳为 YYYY-MM-DD HH:MM:SS。脚本只依赖标准库,可直接运行。
import csv
from datetime import datetime, timedelta
def load(path):
rows = []
with open(path, newline='', encoding='utf-8') as f:
for r in csv.DictReader(f):
r['ts'] = datetime.strptime(r['ts'], '%Y-%m-%d %H:%M:%S')
for k in ('I_pu', 'freq', 'torque_ref'):
if k in r and r[k] != '':
r[k] = float(r[k])
rows.append(r)
return rows
faults = load('oc_events.csv') # ts, code, I_pu, freq
trend = load('run_trend.csv') # ts, I_pu, freq, torque_ref, run
def window(ts, sec=30):
lo = ts - timedelta(seconds=sec)
return [r for r in trend if lo <= r['ts'] <= ts]
def classify(ev):
w = window(ev['ts'])
if len(w) < 5:
return '数据不足'
i0, i1 = w[0]['I_pu'], w[-1]['I_pu']
f0, f1 = w[0]['freq'], w[-1]['freq']
slope = (i1 - i0) / max(len(w) - 1, 1)
if f0 < 5 and f1 > f0: # 启动加速段
return '启动冲击'
if abs(f1 - f0) < 2 and slope > 8: # 恒频电流阶跃
return '负载突变'
if i1 >= 1.5 and abs(f1 - f0) < 2 and slope < 2:
return '堵转'
if abs(f1 - f0) >= 2:
return '加减速过流'
return '待人工复核'
stat = {}
for ev in faults:
c = classify(ev)
s = stat.setdefault(c, {'n': 0, 'sumI': 0.0})
s['n'] += 1
s['sumI'] += ev['I_pu']
total = sum(v['n'] for v in stat.values())
for c, v in sorted(stat.items(), key=lambda x: -x[1]['n']):
print(f"{c}: {v['n']} 次, 占比 {v['n']/total:.1%}, 平均动作电流 {v['sumI']/v['n']:.2f} pu")
运行后输出各类次数与平均动作电流,与上文统计表对照即可。若某类“待人工复核”占比偏高,说明窗口内数据缺失或采样周期不一致,应先检查录波是否连续,而不是直接下结论。