gtld2-diag-scripts/solid/belt.js

530 lines
35 KiB
JavaScript
Raw Normal View History

2023-11-15 16:06:15 +03:00
"use strict";
var signals = gtl.options.record.signalsModel;
var options = gtl.options;
var record = gtl.options.record;
var point = gtl.options.point;
var imp = gtl.import("unimodule.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 ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
ausp2.name = "AUSPm"; //присвоение имени спектра
ausp2.color = 0x0000ffff; //цвет линии спектра
ausp2.frequency = 1600; //граничная частота спектра
ausp2.lines = 1600; //разрешение спектра (количество линий)
ausp2.average = 6; //количество усреднений
ausp2.unit = gtl.spec.db; //отображение в дБ
//спектр вибрации
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
ausp.name = "AUSPd"; //присвоение имени спектра
ausp.color = 0x0000ff00; //цвет линии спектра
//ausp.frequency = 1600; //граничная частота спектра
ausp.lines = 1600; //разрешение спектра (количество линий)
ausp.average = 6; //количество усреднений
ausp.unit = gtl.spec.db; //отображение в дБ
ausp.smoothing_factor = 50; //коэффициент сглаживания спектра
ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии)
ausp.peak_level = 20; //порог обнаружения гармоник
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
//фильтр для формирования спектра огибающей
var n = 3; //количество долей октавного фильтра
var kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2));//коэффициент для полосового фильтра
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_spen.order = 10; //порядок фильтра
filter_spen.frequency = 6400; //центральная частота полосового фильтра
//filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); //расчетная центральная частота полосового фильтра
filter_spen.color = 255;
filter_spen.width = kf * filter_spen.frequency; //ширина полосы фильтра
//спектр огибающей
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
spen.name = "SPEN"; //присвоение имени спектра огибающей
spen.color = 0x00ff0000; //цвет линии спектра огибающей
//spen.frequency = spen_frequency(); //граничная частота спектра огибающей
//spen.lines = spen_lines(); //разрешение спектра огибающей (количество линий)
spen.average = 8; //количество усреднений
spen.unit = gtl.spec.db; //отображение в дБ
spen.window = gtl.spec.hann; //окно
spen.smoothing_factor = 100; //коэффициент сглаживания спектра
spen.smoothed_line_color = 0xff004dff; //цвет средней линии
spen.peak_level = 10; //порог обнаружения гармоник
spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/-
//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения)
var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen)
var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen)
rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen)
rms_spen.time = 0.5; //интервал расчета RMS (spen)
ampl_spen.time = 0.5; //интервал расчета Amplitude (spen)
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
//RMS и Amplitude в УВЧ диапазоне 10-25 кГц (контроль разрыва масляной пленки)
var filter_uhf = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter_uhf.kind = gtl.filter_iir.butterworth; //тип окна
filter_uhf.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_uhf.order = 10; //порядок фильтра
filter_uhf.frequency = 17500; //центральная частота полосового фильтра
filter_uhf.width = 15000; //ширина полосы фильтра
var rms_uhf = gtl.add_value_rms(filter_uhf); //назначение переменной RMS
var ampl_uhf = gtl.add_value_ampl(filter_uhf); //назначение переменной Amplitude
rms_uhf.name = "RMS (uhf)" //присвоение имени RMS (uhf)
rms_uhf.time = 0.5; //интервал расчета RMS (uhf)
ampl_uhf.time = 0.5; //интервал расчета Amplitude (uhf)
rms_uhf.avg_cnt = 4; //количество усреднений RMS (uhf)
ampl_uhf.avg_cnt = 4; //количество усреднений Amplitude (uhf)
//Виброскорость в дипазоне 2-1000 Гц (вибромониторинг)
var filter2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter2_1000.kind = gtl.filter_iir.butterworth; //тип окна
filter2_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter2_1000.order = 10; //порядок фильтра
filter2_1000.frequency = 501; //центральная частота полосового фильтра
filter2_1000.width = 998; //ширина полосы фильтра
var filter2_1000v = gtl.add_intg(filter2_1000); // интегрирование
filter2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное)
var rms_v2 = gtl.add_value_rms(filter2_1000v); //назначение переменной RMS(V)
rms_v2.name = "RMS(V) 2-1000 Гц" //присвоение имени RMS(V)
rms_v2.time = 0.5; //интервал расчета RMS(V)
rms_v2.avg_cnt = 4; //количество усреднений RMS(V)
//Виброскорость в дипазоне 10-1000 Гц (вибромониторинг)
var filter10_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter10_1000.kind = gtl.filter_iir.butterworth; //тип окна
filter10_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter10_1000.order = 10; //порядок фильтра
filter10_1000.frequency = 505; //центральная частота полосового фильтра
filter10_1000.width = 990; //ширина полосы фильтра
var filter10_1000v = gtl.add_intg(filter10_1000); // интегрирование
filter10_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное)
var rms_v10 = gtl.add_value_rms(filter10_1000v); //назначение переменной RMS(V)
rms_v10.name = "RMS(V) 10-1000 Гц" //присвоение имени RMS(V)
rms_v10.time = 0.5; //интервал расчета RMS(V)
rms_v10.avg_cnt = 4; //количество усреднений RMS(V)
//[Диагностика]
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
let acq_time = 0;
function diagnose() {
switch (state) {
case 0: // считаем частоту вращения и настраиваем спектры
if (imp.INSTABILITY() > imp.tolerance()) {
gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
gtl.log.info("Результат:", "Диагностика прервана");
//gtl.diagnostic.stop(); //принудительная остановка диагностики
let __result = {
Result: false
};
gtl.results = __result;
};
if (imp.FREQ() <= imp.FREQNESS()) {
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + imp.FREQNESS());
};
//установка стандартной ширины спектра огибающей и количества линий спектра
filter_spen.frequency = imp.filter_frequency();
filter_spen.width = imp.filter_width();
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
ausp.frequency = imp.standart_width();
ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 1: //частота вращения фиксированная
//установка стандартной ширины спектра огибающей и количества линий спектра
filter_spen.frequency = imp.filter_frequency();
filter_spen.width = imp.filter_width();
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
ausp.frequency = imp.standart_width();
ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 2: //частота вращения из поля INFO (виброметр)
//установка стандартной ширины спектра огибающей и количества линий спектра
filter_spen.frequency = imp.filter_frequency();
filter_spen.width = imp.filter_width();
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
ausp.frequency = imp.standart_width();
ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 3: //выполняем анализ спектов
ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации
spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей
//[Блок настройки определения гармоник в спектрах]
//AUSP
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
var ausp_f0 = ausp.add_harms_set(imp.FREQ(), 10, 0xff0000f0, 2); //биение вала "синий"
for (let i = 0; i <= 9; i++) { ausp_f0.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник
ausp_f0.name = 'Биение вала';
var ausp_BPFO2 = ausp.add_harms_set(imp.BPFO(), 10, 0xff009000, 2); //раковины на наружном кольце "зелёный"
for (let i = 0; i <= 9; i++) { ausp_BPFO2.harms[i].tolerance = (1 + i) * imp.BPFO() * imp.tolerance() };
ausp_BPFO2.name = 'Раковины на наружном кольце';
var ausp_BPFI2 = ausp.add_harms_set(imp.BPFI(), 10, 0xff990090, 2); //раковины на внутреннем кольце "фиолетовый"
for (let i = 0; i <= 9; i++) { ausp_BPFI2.harms[i].tolerance = (1 + i) * imp.BPFI() * imp.tolerance() };
ausp_BPFI2.name = 'Раковины на внутреннем кольце';
var ausp_BSF0 = ausp.add_harms_set(imp.BSF(), 20, 0xff994000, 2); //раковины и сколы на телах качения "оранжевый"
for (let i = 0; i <= 19; i++) { ausp_BSF0.harms[i].tolerance = (1 + i) * imp.BSF() * imp.tolerance() };
ausp_BSF0.name = 'Раковины и сколы на телах качения';
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
ausp.harms_sets[1].modulate(imp.FTF(), 2, 0xff009030, 1); //модуляция Fн +/- Fс "зелёный"
ausp.harms_sets[1].modulate(imp.FREQ(), 2, 0xff009030, 1); //модуляция Fн +/- Fвр "зелёный"
ausp.harms_sets[2].modulate(imp.FREQ(), 2, 0xff923090, 1); //модуляция Fв +/- Fвр "фиолетовый"
ausp.harms_sets[3].modulate(imp.FTF(), 2, 0xff996000, 1); //модуляция Fтк +/- Fс "горчичный"
//при необходимости можно изменить параметры каждой гармоники индивидуально
/*
ausp.harms_sets[0].harms[0].color = 0x0000ffff;
ausp.harms_sets[0].harms[0].weight = 1;
ausp.harms_sets[0].harms[2].color = 0x0000ff00;
ausp.harms_sets[0].harms[0].weight = 0.5;
ausp.harms_sets[0].modulating[0].harms[0].color = 0x00ffff00;
ausp.harms_sets[0].modulating[0].harms[0].weight = 5;
*/
//SPEN
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
var spen_f0 = spen.add_harms_set(imp.FREQ(), 10, 0xff0000f0, 1); //биение вала - "синий"
for (let i = 0; i <= 9; i++) { spen_f0.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник
spen_f0.name = 'Биение вала';
var spen_f1 = spen.add_harms_set(2 * imp.FREQ(), 5, 0xff009ff0, 2); //неоднородный радиальный натяг "голубой"
for (let i = 0; i <= 4; i++) { spen_f1.harms[i].tolerance = 2 * (1 + i) * imp.FREQ() * imp.tolerance() };
spen_f1.name = 'Неоднородный радиальный натяг';
var spen_BPFO0 = spen.add_harms_set(imp.BPFO(), 5, 0xff009000, 1); //износ дорожки качения наружного кольца "зелёный"
for (let i = 0; i <= 4; i++) { spen_BPFO0.harms[i].tolerance = (1 + i) * imp.BPFO() * imp.tolerance() };
spen_BPFO0.name = 'Износ дорожки качения наружного кольца';
var spen_BPFO1 = spen.add_harms_set(2 * imp.BPFO(), spen.frequency / (2 * imp.BPFO()), 0xff009000, 2); //перекос наружного кольца "зелёный"
for (let i = 0; i <= (spen.frequency / (2 * imp.BPFO())) - 1; i++) { spen_BPFO1.harms[i].tolerance = 2 * (1 + i) * imp.BPFO() * imp.tolerance() };
spen_BPFO1.name = 'Перекос наружного кольца';
var spen_BPFO2 = spen.add_harms_set(imp.BPFO(), spen.frequency / imp.BPFO(), 0xff009000, 1); //раковины на наружном кольце "зелёный"
for (let i = 0; i <= (spen.frequency / imp.BPFO()) - 1; i++) { spen_BPFO2.harms[i].tolerance = (1 + i) * imp.BPFO() * imp.tolerance() };
spen_BPFO2.name = 'Раковины на наружном кольце';
var spen_BPFI0 = spen.add_harms_set(imp.FREQ(), 5, 0xff0000f0, 1); //износ дорожки качения внутреннего кольца "синий"
for (let i = 0; i <= 4; i++) { spen_BPFI0.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() };
spen_BPFI0.name = 'Износ дорожки качения внутреннего кольца';
var spen_BPFI1 = spen.add_harms_set(imp.BPFI(), 5, 0xff990090, 1); //износ дорожки качения внутреннего кольца "фиолетовый"
for (let i = 0; i <= 4; i++) { spen_BPFI1.harms[i].tolerance = (1 + i) * imp.BPFI() * imp.tolerance() };
spen_BPFI1.name = 'Износ дорожки качения внутреннего кольца (вторичный признак)';
var spen_BPFI2 = spen.add_harms_set(imp.BPFI(), spen.frequency / imp.BPFI(), 0xff990090, 1); //раковины на внутреннем кольце "фиолетовый"
for (let i = 0; i <= (spen.frequency / imp.BPFI()) - 1; i++) { spen_BPFI2.harms[i].tolerance = (1 + i) * imp.BPFI() * imp.tolerance() };
spen_BPFI2.name = 'Раковины на внутреннем кольце';
var spen_FTF0 = spen.add_harms_set(imp.FTF(), 10, 0xffff0000, 2); //износ тел качения и сепаратора "красный"
for (let i = 0; i <= 9; i++) { spen_FTF0.harms[i].tolerance = (1 + i) * imp.FTF() * imp.tolerance() };
spen_FTF0.name = 'Износ тел качения и сепаратора';
var spen_BSF0 = spen.add_harms_set(imp.BSF(), 10, 0xff994000, 1); //раковины и сколы на телах качения "оранжевый"
for (let i = 0; i <= 9; i++) { spen_BSF0.harms[i].tolerance = (1 + i) * imp.BSF() * imp.tolerance() };
spen_BSF0.name = 'Раковины и сколы на телах качения';
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
spen.harms_sets[4].modulate(imp.FTF(), 2, 0xff009030, 1); //модуляция Fн +/- Fс "зелёный"
spen.harms_sets[4].modulate(imp.FREQ(), 2, 0xff009030, 1); //модуляция Fн +/- Fвр "зелёный"
spen.harms_sets[7].modulate(imp.FREQ(), 2, 0xff923090, 1); //модуляция Fв +/- Fвр "фиолетовый"
spen.harms_sets[9].modulate(imp.FTF(), 3, 0xff996000, 1); //модуляция Fтк +/- Fс "горчичный"
//при необходимости можно изменить параметры каждой гармоники индивидуально
/*
spen.harms_sets[0].harms[0].color = 0x0000ffff;
spen.harms_sets[0].harms[0].weight = 1;
spen.harms_sets[0].harms[2].color = 0x0000ff00;
spen.harms_sets[0].harms[0].weight = 0.5;
spen.harms_sets[0].modulating[0].harms[0].color = 0x00ffff00;
spen.harms_sets[0].modulating[0].harms[0].weight = 5;
*/
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency);
//[Блок диагностики]
//вывод информации в лог
//gtl.log.info("description", function)
gtl.log.info("Объект диагностики", "Подшипник качения " + options.rbModelName);
gtl.log.info("Минимально необходимая длительность сигнала", acq_time);
gtl.log.info("FREQ", imp.FREQ());
gtl.log.info("Минимально необходимая частота вращения", imp.FREQNESS());
gtl.log.info("Площадь спектра", AQ);
gtl.log.info("Нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
gtl.log.info("FTF", imp.FTF());
gtl.log.info("BPFO", imp.BPFO());
gtl.log.info("BPFI", imp.BPFI());
gtl.log.info("BSF", imp.BSF());
gtl.log.info("Центральная частота полосового фильтра", filter_spen.frequency);
gtl.log.info("Количество долей октавного фильтра", n);
gtl.log.info("Коэффициент для октавного фильтра", kf);
gtl.log.info("Граничная частота спектра", imp.spec_frequency());
gtl.log.info("Расчетное разрешение спектра", imp.spec_resolution());
gtl.log.info("Расчетное количество линий", imp.spec_lines());
gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100);
gtl.log.info("spen.frequency", spen.frequency);
gtl.log.info("spen.lines", spen.lines);
gtl.log.info("СКЗ(A) ВЧ вибрации", rms_spen.value);
gtl.log.info("СКЗ(A) УВЧ вибрации", rms_uhf.value);
gtl.log.info("ПФ(A) в ВЧ диапазоне", ampl_spen.value / rms_spen.value);
gtl.log.info("ПФ(A) в УВЧ диапазоне", ampl_uhf.value / rms_uhf.value);
gtl.log.info("СКЗ(V) 2-1000 Гц", rms_v2.value);
gtl.log.info("СКЗ(V) 10-1000 Гц", rms_v10.value);
//вывод количества гармоник
//ausp.harms_sets[0].get_count(1, 2, 1, true);
//1 - начало отсчета гармоники;
//2 - допуситмое количество пропущенных в ряду;
//3 - количество модулирующих с одной стороны;
//4 - модулирующие с двух сторон (true);
//вывод параметров гармоник
//ausp_set0.harms[1].is_present); //гармоника есть (есть превышение на порогом)
//ausp_set0.harms[1].amplitude); //амплитуда
//ausp_set0.harms[1].level); //превышении над средней
//ausp_set0.harms[1].base); //уровень фона под гармоникой
//ausp_set0.harms[1].tolerance; //коридор обнаружения гармоники
var Defect = false;
var Defect_type = [];
//биение вала
if (
spen.harms_sets[0].get_count(0, 2) >= 1 && spen.harms_sets[0].get_count(0, 2) <= 10 &&
ausp.harms_sets[0].get_count(0, 2) >= 0 && ausp.harms_sets[0].get_count(0, 2) <= 10
) {
Defect = true;
Defect_type.push("Биение вала");
for (let i = 0; i <= 9; i++) {
if (spen_f0.harms[i].is_present == true)
gtl.log.info("Биение вала. Признаки в ES " + (i + 1) + "Fвр", imp.deep_factor(spen_f0.harms[i].amplitude, spen_f0.harms[i].base));
}
for (let i = 0; i <= 9; i++) {
if (ausp_f0.harms[i].is_present == true)
gtl.log.info("Биение вала. Признаки в AS " + (i + 1) + "Fвр", ausp_f0.harms[i].amplitude);
}
}
else
gtl.log.info("Биение вала", "Признаков дефекта не обнаружено");
//неоднородный радиальный натяг
if (
spen_f1.harms[0].level >= spen_f0.harms[0].level &&
spen.harms_sets[1].get_count(0) >= 1 && spen.harms_sets[1].get_count(0) <= 5
) {
Defect = true;
Defect_type.push("Неоднородный радиальный натяг");
for (let i = 0; i <= 4; i++) {
if (spen_f1.harms[i].is_present == true)
gtl.log.info("Неоднородный радиальный натяг. Признаки в ES " + (i + 1) + "Fвр[x2]", imp.deep_factor(spen_f1.harms[i].amplitude, spen_f1.harms[i].base));
}
}
else
gtl.log.info("Неоднородный радиальный натяг", "Признаков дефекта не обнаружено");
//износ дорожки качения наружного кольца
if (spen.harms_sets[2].get_count(0, 1) >= 1 && spen.harms_sets[2].get_count(0, 1) <= 5) {
Defect = true;
Defect_type.push("Износ дорожки качения наружного кольца");
for (let i = 0; i <= 4; i++) {
if (spen_BPFO0.harms[i].is_present == true)
gtl.log.info("Износ дорожки качения наружного кольца. Признаки в ES " + (i + 1) + "Fн", imp.deep_factor(spen_BPFO0.harms[i].amplitude, spen_BPFO0.harms[i].base));
}
}
else
gtl.log.info("Износ дорожки качения наружного кольца", "Признаков дефекта не обнаружено");
//перекос наружного кольца
if (
spen_BPFO1.harms[0].level >= spen_BPFO0.harms[0].level &&
spen.harms_sets[3].get_count(0, 1) >= 1 && spen.harms_sets[3].get_count(0, 1) <= 3
) {
Defect = true;
Defect_type.push("Перекос наружного кольца");
for (let i = 0; i <= spen.frequency / (2 * imp.BPFO()) - 1; i++) {
if (spen_BPFO1.harms[i].is_present == true)
gtl.log.info("Перекос наружного кольца. Признаки в ES " + (i + 1) + "Fн[x2]", imp.deep_factor(spen_BPFO1.harms[i].amplitude, spen_BPFO1.harms[i].base));
}
}
else
gtl.log.info("Перекос наружного кольца", "Признаков дефекта не обнаружено");
//раковины на наружном кольце
if (
spen.harms_sets[4].get_count(0, 1) >= 5 &&
ausp.harms_sets[1].get_count(0, 3) >= 5
) {
Defect = true;
Defect_type.push("Раковины на наружном кольце");
for (let i = 0; i <= (spen.frequency / imp.BPFO()) - 1; i++) {
if (spen_BPFO2.harms[i].is_present == true)
gtl.log.info("Раковины на наружном кольце. Признаки в ES " + (i + 1) + "Fн", imp.deep_factor(spen_BPFO2.harms[i].amplitude, spen_BPFO2.harms[i].base));
}
for (let i = 0; i <= (spen.frequency / imp.BPFO()) - 1; i++) {
if (ausp_BPFO2.harms[i].is_present == true)
gtl.log.info("Раковины на наружном кольце. Признаки в AS " + (i + 1) + "Fн", ausp_BPFO2.harms[i].amplitude);
}
}
else
gtl.log.info("Раковины на наружном кольце", "Признаков дефекта не обнаружено");
//износ дорожки качения внутреннего кольца
if (
(spen.harms_sets[5].get_count(0, 1) >= 1 && spen.harms_sets[5].get_count(0, 1) <= 2) ||
(spen.harms_sets[6].get_count(0, 1) >= 1 && spen.harms_sets[6].get_count(0, 1) <= 2)
) {
Defect = true;
Defect_type.push("Износ дорожки качения внутреннего кольца");
for (let i = 0; i <= 2; i++) {
if (spen_BPFI0.harms[i].is_present == true)
gtl.log.info("Износ дорожки качения внутреннего кольца. Признаки в ES " + (i + 1) + "Fвр", imp.deep_factor(spen_BPFI0.harms[i].amplitude, spen_BPFI0.harms[i].base));
else if (spen_BPFI1.harms[i].is_present == true)
gtl.log.info("Износ дорожки качения внутреннего кольца. Признаки в ES " + (i + 1) + "Fв", imp.deep_factor(spen_BPFI1.harms[i].amplitude, spen_BPFI1.harms[i].base));
}
}
else
gtl.log.info("Износ дорожки качения внутреннего кольца", "Признаков дефекта не обнаружено");
//раковины на внутреннем кольце
if (
spen.harms_sets[7].get_count(0, 0, 1) >= 3 &&
ausp.harms_sets[2].get_count(0, 1, 1) >= 3
) {
Defect = true;
Defect_type.push("Раковины на внутреннем кольце");
for (let i = 0; i <= (spen.frequency / imp.BPFI()) - 1; i++) {
if (spen_BPFI2.harms[i].is_present == true)
gtl.log.info("Раковины на внутреннем кольце. Признаки в ES " + (i + 1) + "Fв +/- Fвр", imp.deep_factor(spen_BPFI2.harms[i].amplitude, spen_BPFI2.harms[i].base));
}
for (let i = 0; i <= (spen.frequency / imp.BPFI()) - 1; i++) {
if (ausp_BPFI2.harms[i].is_present == true)
gtl.log.info("Раковины на внутреннем кольце. Признаки в AS " + (i + 1) + "Fв +/- Fвр", ausp_BPFI2.harms[i].amplitude);
}
}
else
gtl.log.info("Раковины на внутреннем кольце", "Признаков дефекта не обнаружено");
//износ тел качения и сепаратора
if (spen.harms_sets[8].get_count(0, 1) >= 1) {
Defect = true;
Defect_type.push("Износ тел качения и сепаратора");
for (let i = 0; i <= 9; i++) {
if (spen_FTF0.harms[i].is_present == true)
gtl.log.info("Износ тел качения и сепаратора. Признаки в ES " + (i + 1) + "Fс", imp.deep_factor(spen_FTF0.harms[i].amplitude, spen_FTF0.harms[i].base));
}
}
else
gtl.log.info("Износ тел качения и сепаратора", "Признаков дефекта не обнаружено");
//раковины и сколы на телах качения
if (
spen.harms_sets[9].get_count(0, 1, 1) >= 3 &&
ausp.harms_sets[3].get_count(0, 3, 1) >= 3
) {
Defect = true;
Defect_type.push("Раковины и сколы на телах качения");
for (let i = 0; i <= 9; i++) {
if (spen_BSF0.harms[i].is_present == true)
gtl.log.info("Раковины и сколы на телах качения. Признаки в ES " + (i + 1) + "Fтк +/- Fс", imp.deep_factor(spen_BSF0.harms[i].amplitude, spen_BSF0.harms[i].base));
}
for (let i = 0; i <= 29; i++) {
if (ausp_BSF0.harms[i].is_present == true)
gtl.log.info("Раковины и сколы на телах качения. Признаки в AS " + (i + 1) + "Fтк +/- Fс", ausp_BSF0.harms[i].amplitude);
}
}
else
gtl.log.info("Раковины и сколы на телах качения", "Признаков дефекта не обнаружено");
let __result = {
"Result": true,
"RMS(A)": rms_spen.value,
"RMS_UHF(A)": rms_uhf.value,
"PF(A)": ampl_spen.value / rms_spen.value,
"PF_UHF(A)": ampl_uhf.value / rms_uhf.value,
"RMS(V) 2-1000 Гц": rms_v2.value,
"RMS(V) 10-1000 Гц": rms_v10.value,
"Square": AQ,
"Defects": Defect,
"Types": Defect_type
};
gtl.results = __result;
gtl.diagnostic.stop();
break;
default:
break;
}
}