AI-предиктивное обслуживание оборудования химического завода
Химический завод — среда с высокими рисками и дорогостоящими простоями. Незапланированная остановка реактора или компрессорного узла стоит $50,000-$500,000 в сутки потерянного производства. ML-предиктивное обслуживание снижает частоту незапланированных остановок на 30-50% за счёт раннего обнаружения деградации оборудования.
Критическое оборудование и риски
Ротационное оборудование:
- Компрессоры (центробежные, поршневые): самое критичное — останавливает производство
- Насосы: сотни единиц, потеря одного насоса → перераспределение потоков
- Мешалки (агитаторы): забивание, вибрация подшипников
- Турбины: паровые, газовые
Теплообменники: Fouling (загрязнение) — постепенное снижение теплопередачи. Влияет на эффективность реакции и потребление энергии.
Реакторы:
- Catalyst deactivation: снижение активности катализатора → падение конверсии
- Hotspot formation: опасные локальные перегревы (для экзотермических реакций)
Колонны дистилляции: Flooding, weeping — нарушения гидравлики тарелок → резкое падение разделения.
Мониторинг вибрации ротационного оборудования
Виброметрия — основной метод:
from scipy.fft import fft, fftfreq
from scipy.signal import welch
import numpy as np
def vibration_analysis(vibration_signal, sampling_rate=25600):
"""
Анализ вибрации: временная область + спектральный анализ
"""
# Временные статистики
time_features = {
'rms': np.sqrt(np.mean(vibration_signal**2)),
'peak': np.max(np.abs(vibration_signal)),
'crest_factor': np.max(np.abs(vibration_signal)) / np.sqrt(np.mean(vibration_signal**2)),
'kurtosis': scipy.stats.kurtosis(vibration_signal), # > 3 = дефект подшипника
'skewness': scipy.stats.skew(vibration_signal)
}
# Спектральный анализ (Welch PSD)
freqs, psd = welch(vibration_signal, fs=sampling_rate, nperseg=4096)
# Envelope анализ для подшипниковых дефектов (BPFO, BPFI, BSF, FTF)
analytic_signal = scipy.signal.hilbert(vibration_signal)
envelope = np.abs(analytic_signal)
env_freqs, env_psd = welch(envelope, fs=sampling_rate)
return time_features, (freqs, psd), (env_freqs, env_psd)
Характерные дефектные частоты подшипника:
def bearing_defect_frequencies(shaft_rpm, n_balls, contact_angle_deg,
pitch_diameter, ball_diameter):
"""
BPFO (Ball Pass Frequency Outer race) — дефект внешнего кольца
BPFI (Ball Pass Frequency Inner race) — дефект внутреннего кольца
BSF (Ball Spin Frequency) — дефект тела качения
FTF (Fundamental Train Frequency) — сепаратор
"""
f_r = shaft_rpm / 60 # частота вращения вала
cos_angle = np.cos(np.radians(contact_angle_deg))
bd_over_pd = ball_diameter / pitch_diameter
bpfo = (n_balls / 2) * f_r * (1 - bd_over_pd * cos_angle)
bpfi = (n_balls / 2) * f_r * (1 + bd_over_pd * cos_angle)
bsf = (pitch_diameter / (2 * ball_diameter)) * f_r * (1 - (bd_over_pd * cos_angle)**2)
ftf = (f_r / 2) * (1 - bd_over_pd * cos_angle)
return {'bpfo': bpfo, 'bpfi': bpfi, 'bsf': bsf, 'ftf': ftf}
Диагностика теплообменников
Fouling Monitoring:
def calculate_fouling_factor(U_clean, U_current):
"""
Общее сопротивление теплопередаче: 1/U = 1/U_clean + R_fouling
R_fouling = fouling resistance (м²·К/Вт)
Рост R_fouling → нужна очистка
"""
R_fouling = 1/U_current - 1/U_clean
return R_fouling
def estimate_U_from_operating_data(Q_duty, A_area, LMTD):
"""
Из оперативных данных: тепловой поток, площадь, средняя логарифмическая разность температур
"""
return Q_duty / (A_area * LMTD)
def predict_fouling_progression(fouling_history, cleaning_intervals):
"""
LSTM прогноз накопления fouling: когда R_fouling достигнет критического значения?
"""
model = lstm_fouling_model.predict(fouling_history)
days_to_clean_threshold = model['days_to_threshold']
return days_to_clean_threshold
ML-модели деградации
LSTM для прогноза RUL компрессора:
import torch.nn as nn
class CompressorHealthLSTM(nn.Module):
def __init__(self, n_features, hidden_size=128):
super().__init__()
self.lstm = nn.LSTM(n_features, hidden_size, num_layers=2,
dropout=0.2, batch_first=True)
self.attention = nn.MultiheadAttention(hidden_size, num_heads=4, batch_first=True)
self.fc = nn.Sequential(
nn.Linear(hidden_size, 64),
nn.ReLU(),
nn.Linear(64, 1) # дни до следующего отказа
)
def forward(self, x):
lstm_out, _ = self.lstm(x)
attn_out, _ = self.attention(lstm_out, lstm_out, lstm_out)
return self.fc(attn_out[:, -1, :])
# Входные фичи: вибрация (RMS, kurtosis, bearing freqs), температура,
# давление нагнетания/всасывания, мощность, расход, масло
Catalyst Activity Monitoring:
def monitor_catalyst_activity(reactor_data):
"""
Нормализованная конверсия при стандартных условиях
Снижение vs. fresh catalyst baseline → деактивация
"""
# Коррекция на температуру, давление, состав питания
normalized_conversion = correct_to_standard_conditions(
reactor_data['measured_conversion'],
reactor_data['temperature'],
reactor_data['pressure'],
reactor_data['feed_composition']
)
# Тренд деактивации (линейный или экспоненциальный)
activity_trend = fit_deactivation_model(normalized_conversion)
# Прогноз: когда конверсия упадёт ниже приемлемого уровня?
days_to_regeneration = predict_regeneration_time(activity_trend, min_acceptable_conversion)
return days_to_regeneration
Интеграция с CMMS и ERP
Автоматическое создание нарядов на работу:
def auto_generate_work_order(equipment_id, predicted_failure_days, failure_type, cmms_api):
"""
При RUL < threshold → создание Work Order в CMMS
"""
wo_data = {
'equipment': equipment_id,
'predicted_failure': datetime.now() + timedelta(days=predicted_failure_days),
'failure_mode': failure_type,
'priority': 'urgent' if predicted_failure_days < 7 else 'planned',
'recommended_parts': get_spare_parts(equipment_id, failure_type),
'estimated_labor_hours': labor_time_db.get(failure_type)
}
return cmms_api.create_work_order(wo_data)
Spare Parts Pre-positioning: На основе агрегированного прогноза по всему оборудованию — автоматический заказ запасных частей: подшипники, уплотнения, клапаны.
SAP PM (Plant Maintenance) интеграция: SAP PM → Notification → Work Order → Confirmation — весь цикл автоматизирован через RFC/BAPI.
Безопасность и SIL
Safety Instrumented System (SIS): Предиктивное обслуживание не заменяет SIS. Но ML-мониторинг добавляет слой раннего предупреждения до срабатывания safety interlock.
HAZOP и MOC: Любые изменения в управлении процессом → Management of Change + HAZOP review. ML-система документирует рекомендации, финальное решение — Process Engineer.
Сроки: OPC-UA коннектор + вибрационный анализ FFT/kurtosis + базовые алерты + CMMS интеграция — 5-6 недель. LSTM RUL для компрессоров, fouling прогноз, catalyst monitoring, автоматические Work Orders, spare parts planning — 3-4 месяца.







