gtld2-diag-scripts/sliding bearing/sliding_bearing.js

266 lines
15 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
var signals = gtl.options.record.signalsModel;
var options = gtl.options;
var record = gtl.options.record;
var point = gtl.options.point;
var fnc = gtl.import("userFunctions.js");
var def = gtl.import("sbDefs.js");
//настройки для датчика оборотов
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
filter_freq.kind = gtl.filter_iir.butterworth; //тип окна
filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ)
filter_freq.order = 8; //порядок фильтра
filter_freq.frequency = 10; //граничная частота фильтра
//определение частоты вращения
var freq = gtl.add_value_freq(filter_freq);
freq.time = 1;
freq.avg_cnt = 6;
//gtl.diagnostic.interval = /*1*/10;
//[Блок настройки фильтрации]
//фильтр для формирования спектра огибающей
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_spen.order = 4; //порядок фильтра
filter_spen.frequency = 8000; //центральная частота полосового фильтра
filter_spen.width = 1840; //ширина полосы фильтра
//полосовой фильтр 10-10000 Гц
var band10_10k = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
band10_10k.kind = gtl.filter_iir.butterworth; //тип окна
band10_10k.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
band10_10k.order = 10; //порядок фильтра
band10_10k.frequency = 5005; //центральная частота полосового фильтра
band10_10k.width = 9990; //ширина полосы фильтра
//полосовой фильтр 10-1000 Гц
var band10_1k = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
band10_1k.kind = gtl.filter_iir.butterworth; //тип окна
band10_1k.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
band10_1k.order = 10; //порядок фильтра
band10_1k.frequency = 505; //центральная частота полосового фильтра
band10_1k.width = 990; //ширина полосы фильтра
//интегратор
var int = gtl.add_intg(band10_1k); //интегрирование сигнала виброускорения
int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование)
//дополнительный ФВЧ от 10 Гц
var hpf10 = gtl.add_filter_iir(int); //назначение переменной фильтра
hpf10.kind = gtl.filter_iir.butterworth; //тип окна
hpf10.type = gtl.filter_iir.highpass; //тип фильтра (полосовой)
hpf10.order = 10; //порядок фильтра
hpf10.frequency = 10; //граничная частота полосового фильтра
//ФВЧ от 5000 Гц (эксцесс)
var hpf5 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
hpf5.kind = gtl.filter_iir.butterworth; //тип окна
hpf5.type = gtl.filter_iir.highpass; //тип фильтра (полосовой)
hpf5.order = 10; //порядок фильтра
hpf5.frequency = 5000; //граничная частота полосового фильтра
//[Блок настройки спектров]
//мониторинговый спектр виброускорения
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
ausp2.name = "AUSP[mon]"; //присвоение имени спектра
ausp2.color = 0x0000ffff; //цвет линии спектра
ausp2.frequency = 25600; //граничная частота спектра
ausp2.lines = 1600; //разрешение спектра (количество линий)
ausp2.average = 6; //количество усреднений
//ausp2.overlap = 30; //коэффициент перекрытия
ausp2.unit = gtl.spec.db; //отображение в дБ
gtl.log.info("AUSP[mon]: время", ausp2.acq_time + " сек.");
//спектр виброускорения
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
ausp.name = "AUSP[A]"; //присвоение имени спектра
ausp.color = 0x0000ff00; //цвет линии спектра
ausp.frequency = 400; //граничная частота спектра
ausp.lines = 400; //разрешение спектра (количество линий)
ausp.average = 6; //количество усреднений
ausp.overlap = .30; //коэффициент перекрытия
ausp.unit = gtl.spec.db; //отображение в дБ
ausp.smoothing_factor = 50; //коэффициент сглаживания (средней линии)
ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии)
ausp.peak_level = 20; //порог обнаружения гармоник
ausp.harm_tolerance = ausp.resolution * 4; //диапазон поиска гармоник +/-
gtl.log.info("AUSP[A]: время", ausp.acq_time + " сек.");
//спектр огибающей виброускорения
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
spen.name = "SPEN[A]"; //присвоение имени спектра огибающей
spen.color = 0x00ff0000; //цвет линии спектра огибающей
spen.frequency = 400; //граничная частота спектра огибающей
spen.lines = 400; //разрешение спектра огибающей (количество линий)
spen.average = 8; //количество усреднений
spen.overlap = .30; //коэффициент перекрытия
spen.unit = gtl.spec.db; //отображение в дБ
spen.window = gtl.spec.hann; //окно
spen.smoothing_factor = 50; //коэффициент сглаживания (средней линии)
spen.smoothed_line_color = 0x000000ff; //цвет средней линии
spen.peak_level = 10; //порог обнаружения гармоник
spen.harm_tolerance = spen.resolution * 4; //диапазон поиска гармоник +/-
gtl.log.info("SPEN[A]: время", spen.acq_time + " сек.");
//спектр виброскорости
var ausp_v = gtl.add_ausp(hpf10); //назначение переменной спектра вибрации
ausp_v.name = "AUSP[V]"; //присвоение имени спектра
ausp_v.color = 0x6A5ACD; //цвет линии спектра
ausp_v.frequency = 1000; //граничная частота спектра
ausp_v.lines = 500; //разрешение спектра (количество линий)
ausp_v.average = 6; //количество усреднений
//ausp_v.overlap = 30; //коэффициент перекрытия
ausp_v.unit = gtl.spec.unit; //отображение в дБ
ausp_v.smoothing_factor = 50; //коэффициент сглаживания (средней линии)
ausp_v.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии)
ausp_v.peak_level = 0.0005; //порог обнаружения гармоник
ausp_v.harm_tolerance = ausp_v.resolution * 4; //диапазон поиска гармоник +/-
gtl.log.info("AUSP[V]: время", ausp_v.acq_time + " сек.");
//RMS виброускорения в диапазоне спектра огибающей (контроль работы сил трения)
var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen)
rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen)
rms_spen.time = 0.5; //интервал расчета RMS (spen)
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
//RMS виброускорения в диапазоне 10-1000 Гц
var rms_a = gtl.add_value_rms(band10_10k); //назначение переменной RMS (spen)
rms_a.name = "RMS (a)" //присвоение имени RMS (spen)
rms_a.time = 0.5; //интервал расчета RMS (spen)
rms_a.avg_cnt = 4; //количество усреднений RMS (spen)
//RMS виброскорости в диапазоне 10-1000 Гц
var rms_v = gtl.add_value_rms(hpf10); //объявление переменной СКЗ
rms_v.time = 0.5; //время выборки
rms_v.avg_cnt = 4; //количество усреднений
//коэффициент эксцесса в диапазоне от 5000 Гц
var kurt = gtl.add_value_kurt(hpf5); //объявление переменной частоты вращения
kurt.time = 0.5; //время выборки
kurt.avg_cnt = 4; //количество усреднений
//коэффициент эксцесса огибающей сигнала
var kurt_spen = gtl.get_kurt_value(spen.env);
//[Диагностика]
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
let canvas = gtl.plots.add("specs(A) dB");
let canvas2 = gtl.plots.add("specs(V) мм/с");
function diagnose() {
switch (state) {
case 0: // считаем частоту вращения и настраиваем спектры
if (fnc.INSTABILITY() > fnc.tolerance()) {
gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100);
gtl.log.info("Результат:", "Диагностика прервана");
//gtl.diagnostic.stop(); //принудительная остановка диагностики
let __result = {
Result: false
};
gtl.results = __result;
};
if (fnc.FREQ() <= fnc.FREQNESS()) {
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS());
};
case 1: //частота вращения фиксированная
case 2: //частота вращения из поля INFO (виброметр)
filter_spen.frequency = fnc.bpFreq(); //считаем фильтр для огибающей
filter_spen.width = fnc.bpWidth(); //определяем ширину фильтра
spen.frequency = fnc.specParams().frequency;
spen.lines = fnc.specParams().lines * 2;
ausp.frequency = fnc.specParams().frequency;
ausp.lines = fnc.specParams().lines * 2;
ausp_v.frequency = fnc.specParams().frequency;
ausp_v.lines = fnc.specParams().lines * 2;
//определение минимально необходимой длительности сигнала для проведения диагностики
let time = []; //массив времени набора данных
time.push(ausp2.acq_time);
time.push(ausp.acq_time);
time.push(spen.acq_time);
time.push(ausp_v.acq_time);
let max_acq = Math.max(...time);
gtl.diagnostic.interval = max_acq;
gtl.log.info("Массив времени набора данных:", time);
state = 3;
break;
case 3: //выполняем анализ спектов
ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации
spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей
//Вывод информации в лог
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
var SQR_spen = fnc.specSquare(spen.base, 0, spen.frequency);
gtl.log.info("Объект диагностики", options.rbModelName);
gtl.log.info("SPEN: Расчетная частота полосового фильтра", filter_spen.frequency);
gtl.log.info("SPEN: Ширина фильтра", filter_spen.width);
gtl.log.info("SPEN: Граничная частота", spen.frequency);
gtl.log.info("SPEN: Количество линий", spen.lines);
gtl.log.info("SPEN: Разрешение", spen.resolution);
gtl.log.info("AUSP: Граничная частота", ausp.frequency);
gtl.log.info("AUSP: Количество линий", ausp.lines);
gtl.log.info("AUSP: Разрешение", ausp.resolution);
gtl.log.info("RMS виброускорения в диапазоне огибающей", rms_spen.value);
gtl.log.info("RMS виброускорения в диапазоне 10-10000 Гц", rms_a.value);
gtl.log.info("RMS виброскорости в диапазоне 10-1000 Гц", 1000 * rms_v.value);
gtl.log.info("Площадь под огибающей", SQR_spen);
gtl.log.info("Эксцесс от 5 кГц", kurt.value);
gtl.log.info("Эксцесс по огибающей сигнала", kurt_spen.value);
var defects = def.defects();
canvas.add(
{
color: ausp.color,
name: ausp.name,
x: ausp.resolution,
y: ausp.data
}
); //рисуем спектр вибрации на плоскости
canvas.add(
{
color: spen.color,
name: spen.name,
x: spen.resolution,
y: spen.data
}
); //рисуем спектр огибающей на плоскости
canvas2.add(
{
color: ausp_v.color,
name: ausp_v.name,
x: ausp_v.resolution,
y: ausp_v.data
}
); //рисуем спектр виброскорости на плоскости
let __result = {
RMS: rms_spen.value,
RMSA: rms_a.value,
RMSV: 1000 * rms_v.value,
SQR: SQR_spen,
Kurt: kurt.value,
Kurt_spen: "Нет данных"
};
gtl.results = __result;
gtl.diagnostic.stop();
break;
default:
break;
}
}