gtld2-diag-scripts/solid/belt.js

530 lines
35 KiB
JavaScript
Raw 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 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;
}
}