From 60f9187b5750ebee24f4348f77e6c25eaa1b9a8e Mon Sep 17 00:00:00 2001 From: aleksey_k Date: Wed, 15 Nov 2023 23:40:35 +0900 Subject: [PATCH] main branch --- rolling bearing/defects/rb-def-inring.js | 26 + rolling bearing/defects/rb-def-shaft.js | 32 ++ rolling bearing/rolling bearing.js | 249 +++++++++ solid/belt.js | 530 ------------------- solid/gear transmission.js | 441 --------------- solid/master_script.js | 52 -- solid/planetary gear.js | 459 ---------------- solid/rolling bearing.js | 521 ------------------ solid/user-functions.js => user-functions.js | 0 9 files changed, 307 insertions(+), 2003 deletions(-) create mode 100644 rolling bearing/defects/rb-def-inring.js create mode 100644 rolling bearing/defects/rb-def-shaft.js create mode 100644 rolling bearing/rolling bearing.js delete mode 100644 solid/belt.js delete mode 100644 solid/gear transmission.js delete mode 100644 solid/master_script.js delete mode 100644 solid/planetary gear.js delete mode 100644 solid/rolling bearing.js rename solid/user-functions.js => user-functions.js (100%) diff --git a/rolling bearing/defects/rb-def-inring.js b/rolling bearing/defects/rb-def-inring.js new file mode 100644 index 0000000..273409e --- /dev/null +++ b/rolling bearing/defects/rb-def-inring.js @@ -0,0 +1,26 @@ +"use strict"; + +var imp = gtl.import("user-functions.js"); + +export function vk() { + var spen_BPFI2 = spen.add_harms_set(imp.BPFI(), spen.frequency / imp.BPFI(), 0xff990090, 1); //раковины на внутреннем кольце "фиолетовый" + for (let i = 0; i <= 2; i++) { spen_BPFI2.harms[i].tolerance = (1 + i) * imp.BPFI() * imp.tolerance() }; + spen_BPFI2.name = 'Раковины на внутреннем кольце'; + + var Defect = false; + + //биение вала + if ( + spen.harms_sets[1].get_count(0, 1) >= 1 + ) { + Defect = true; + for (let i = 0; i <= 2; 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)); + } + } + else + gtl.log.info("Раковины на внутреннем кольце", "Признаков дефекта не обнаружено"); + + return Defect; +} diff --git a/rolling bearing/defects/rb-def-shaft.js b/rolling bearing/defects/rb-def-shaft.js new file mode 100644 index 0000000..e4c5569 --- /dev/null +++ b/rolling bearing/defects/rb-def-shaft.js @@ -0,0 +1,32 @@ +"use strict"; + +var imp = gtl.import("user-functions.js"); + +export function val() { + 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 Defect = false; + + //биение вала + 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 && harms_sets[0].get_count(0, 2) <= 10 + ) { + Defect = true; + 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(rb.spen_f0.harms[i].amplitude, rb.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("Биение вала", "Признаков дефекта не обнаружено"); + + return Defect; +} diff --git a/rolling bearing/rolling bearing.js b/rolling bearing/rolling bearing.js new file mode 100644 index 0000000..7944da9 --- /dev/null +++ b/rolling bearing/rolling bearing.js @@ -0,0 +1,249 @@ +"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("user-functions.js"); +var val = gtl.import("rb-def-inring.js"); +var vk = gtl.import("rb-def-shaft.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()); + }; + + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //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: //частота вращения фиксированная + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //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 (виброметр) + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //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(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency); + + 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_width().es); + gtl.log.info("Расчетное количество линий", imp.spec_lines()); + gtl.log.info("Расчетное разрешение спектра", imp.spec_resolution()); + gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100); + gtl.log.info("Стандартная граничная частота", spen.frequency); + gtl.log.info("Стандартное кол-во линий", 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); + + let res = {}; + res["Биение вала"] = val.val(); + res["Раковины на внутреннем кольце"] = vk.vk(); + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/solid/belt.js b/solid/belt.js deleted file mode 100644 index d1e5c0a..0000000 --- a/solid/belt.js +++ /dev/null @@ -1,530 +0,0 @@ -"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; - } -} \ No newline at end of file diff --git a/solid/gear transmission.js b/solid/gear transmission.js deleted file mode 100644 index 1ddac8d..0000000 --- a/solid/gear transmission.js +++ /dev/null @@ -1,441 +0,0 @@ -"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 = 0x0000ff; //цвет линии спектра -//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 = 8000; //центральная частота полосового фильтра -//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 = 0x00ffaa00; //цвет линии спектра огибающей -//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; - }; - - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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: //частота вращения фиксированная - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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 (виброметр) - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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_f1 = ausp.add_harms_set(imp.FREQ(), 10, 0xff0000f0, 1); //биение вала (шестерни) - for (let i = 0; i <= 9; i++) { ausp_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник - ausp_f1.name = 'Биение вала (шестерни)'; - - var ausp_f2 = ausp.add_harms_set(imp.GTF2(), 10, 0xff009000, 1); //биение вала (зубчатого колеса) - for (let i = 0; i <= 9; i++) { ausp_f2.harms[i].tolerance = (1 + i) * imp.GTF2() * imp.tolerance() }; - ausp_f2.name = 'Биение вала (зубчатого колеса)'; - - var ausp_fz1 = ausp.add_harms_set(imp.GTFZ(), 5, 0xff990090, 1); //дефект зубьев шестерни - for (let i = 0; i <= 4; i++) { ausp_fz1.harms[i].tolerance = (1 + i) * imp.GTFZ() * imp.tolerance() }; - ausp_fz1.name = 'Дефект зубьев шестерни'; - - var ausp_fz2 = ausp.add_harms_set(imp.GTFZ(), 5, 0xff994000, 1); //Дефект зубьев зубчатого колеса - for (let i = 0; i <= 4; i++) { ausp_fz2.harms[i].tolerance = (1 + i) * imp.GTFZ() * imp.tolerance() }; - ausp_fz2.name = 'Дефект зубьев зубчатого колеса'; - - //добавляем модулирующие гармоники: частота, кол-во, цвет, вес - ausp.harms_sets[2].modulate(imp.FREQ(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр1 - ausp.harms_sets[3].modulate(imp.GTF2(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр2 - - //при необходимости можно изменить параметры каждой гармоники индивидуально - /* - 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_f1 = spen.add_harms_set(imp.FREQ(), 10, 0xff0000f0, 1); //биение вала (шестерни) - for (let i = 0; i <= 9; i++) { spen_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; - spen_f1.name = 'Биение вала (шестерни)'; - - var spen_f2 = spen.add_harms_set(imp.GTF2(), 10, 0xff009000, 1); //биение вала (зубчатого колеса) - for (let i = 0; i <= 9; i++) { spen_f2.harms[i].tolerance = (1 + i) * imp.GTF2() * imp.tolerance() }; - spen_f2.name = 'Биение вала (зубчатого колеса)'; - - var spen_fz1 = spen.add_harms_set(imp.GTFZ(), 5, 0xff990090, 1); //дефект зубьев шестерни - for (let i = 0; i <= 4; i++) { spen_fz1.harms[i].tolerance = (1 + i) * imp.GTFZ() * imp.tolerance() }; - spen_fz1.name = 'Дефект зубьев шестерни'; - - var spen_fz2 = spen.add_harms_set(imp.GTFZ(), 5, 0xff994000, 1); //дефект зубьев зубчатого колеса - for (let i = 0; i <= 4; i++) { spen_fz2.harms[i].tolerance = (1 + i) * imp.GTFZ() * imp.tolerance() }; - spen_fz2.name = 'Дефект зубьев зубчатого колеса'; - - //добавляем модулирующие гармоники: частота, кол-во, цвет, вес - spen.harms_sets[2].modulate(imp.FREQ(), 2, 0xff0000f0, 1); //модуляция Fz +/- Fвр1 - spen.harms_sets[3].modulate(imp.GTF2(), 2, 0xff009000, 1); //модуляция Fz +/- Fвр2 - - //при необходимости можно изменить параметры каждой гармоники индивидуально - /* - 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.ausp_square(ausp2.data, 800, ausp2.frequency); - - //[Блок диагностики] - //вывод информации в лог - //gtl.log.info("description", function) - - gtl.log.info("Минимально необходимая длительность сигнала", acq_time); - gtl.log.info("FREQ", imp.FREQ()); - gtl.log.info("FZ", imp.GTFZ()); - gtl.log.info("F2", imp.GTF2()); - gtl.log.info("Граничная частота спектра", imp.spen_frequency()); - gtl.log.info("Расчетное разрешение спектра", imp.spen_resolution()); - gtl.log.info("Расчетное количество линий", imp.spen_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("ПФ(F) в УВЧ диапазоне", 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(1, 2) >= 3 & spen.harms_sets[0].get_count(1, 2) <= 5 & - ausp.harms_sets[0].get_count(1, 2) >= 3 & ausp.harms_sets[0].get_count(1, 2) <= 5 & - spen.harms_sets[2].get_count(1, 1, 1) >= 1 & spen.harms_sets[2].get_count(1, 1, 1) <= 3 & - ausp.harms_sets[2].get_count(1, 1, 1) >= 1 & ausp.harms_sets[2].get_count(1, 1, 1) <= 3 - ) { - Defect = true; - Defect_type.push("Биение вала шестрени"); - for (let i = 0; i <= 9; i++) { - if (spen_f1.harms[i].is_present == true) - gtl.log.info("Биение вала шестерни. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_f1.harms[i].amplitude, spen_f1.harms[i].base)); - } - for (let i = 0; i <= 4; i++) { - if (spen_fz1.harms[i].is_present == true) - gtl.log.info("Биение вала шестерни. Признаки в ES " + (i + 1) + "Fz1", imp.deep_factor(spen_fz1.harms[i].amplitude, spen_fz1.harms[i].base)); - } - for (let i = 0; i <= 9; i++) { - if (ausp_f1.harms[i].is_present == true) - gtl.log.info("Биение вала шестерни. Признаки в AS " + (i + 1) + "Fвр1", ausp_f1.harms[i].amplitude); - } - for (let i = 0; i <= 4; i++) { - if (ausp_fz1.harms[i].is_present == true) - gtl.log.info("Биение вала шестерни. Признаки в AS " + (i + 1) + "Fz1", ausp_fz1.harms[i].amplitude); - } - } - else - gtl.log.info("Биение вала шестерни", "Признаков дефекта не обнаружено"); - - //биение вала зубчатого колеса - if ( - spen.harms_sets[1].get_count(1, 2) >= 3 & spen.harms_sets[1].get_count(1, 2) <= 5 & - ausp.harms_sets[1].get_count(1, 2) >= 3 & ausp.harms_sets[1].get_count(1, 2) <= 5 & - spen.harms_sets[3].get_count(1, 1, 1) >= 1 & spen.harms_sets[3].get_count(1, 1, 1) <= 3 & - ausp.harms_sets[3].get_count(1, 1, 1) >= 1 & ausp.harms_sets[3].get_count(1, 1, 1) <= 3 - ) { - Defect = true; - Defect_type.push("Биение вала зубчатого колеса"); - for (let i = 0; i <= 9; i++) { - if (spen_f2.harms[i].is_present == true) - gtl.log.info("Биение вала зубчатого колеса. Признаки в ES " + (i + 1) + "Fвр2", imp.deep_factor(spen_f2.harms[i].amplitude, spen_f2.harms[i].base)); - } - for (let i = 0; i <= 4; i++) { - if (spen_fz2.harms[i].is_present == true) - gtl.log.info("Биение вала зубчатого колеса. Признаки в ES " + (i + 1) + "Fz2", imp.deep_factor(spen_fz2.harms[i].amplitude, spen_fz2.harms[i].base)); - } - for (let i = 0; i <= 9; i++) { - if (ausp_f2.harms[i].is_present == true) - gtl.log.info("Биение вала зубчатого колеса. Признаки в AS " + (i + 1) + "Fвр2", ausp_f2.harms[i].amplitude); - } - for (let i = 0; i <= 4; i++) { - if (ausp_fz2.harms[i].is_present == true) - gtl.log.info("Биение вала зубчатого колеса. Признаки в AS " + (i + 1) + "Fz2", ausp_fz2.harms[i].amplitude); - } - } else - gtl.log.info("Биение вала зубчатого колеса", "Признаков дефекта не обнаружено"); - - //дефект зубьев шестерни - if ( - spen.harms_sets[0].get_count(1, 2) >= 5 & ausp.harms_sets[0].get_count(1, 2) >= 5 & - spen.harms_sets[2].get_count(1, 1, 1) >= 3 & spen.harms_sets[2].get_count(1, 1, 1) <= 5 & - ausp.harms_sets[2].get_count(1, 1, 1) >= 3 & ausp.harms_sets[2].get_count(1, 1, 1) <= 5 - ) { - Defect = true; - Defect_type.push("Дефект зубьев шестерни"); - for (let i = 0; i <= 9; i++) { - if (spen_f1.harms[i].is_present == true) - gtl.log.info("Дефект зубьев шестерни. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_f1.harms[i].amplitude, spen_f1.harms[i].base)); - } - for (let i = 0; i <= 4; i++) { - if (spen_fz1.harms[i].is_present == true) - gtl.log.info("Дефект зубьев шестерни. Признаки в ES " + (i + 1) + "Fz1", imp.deep_factor(spen_fz1.harms[i].amplitude, spen_fz1.harms[i].base)); - } - for (let i = 0; i <= 9; i++) { - if (ausp_f1.harms[i].is_present == true) - gtl.log.info("Дефект зубьев шестерни. Признаки в AS " + (i + 1) + "Fвр1", ausp_f1.harms[i].amplitude); - } - for (let i = 0; i <= 4; i++) { - if (ausp_fz1.harms[i].is_present == true) - gtl.log.info("Дефект зубьев шестерни. Признаки в AS " + (i + 1) + "Fz1", ausp_fz1.harms[i].amplitude); - } - } - else - gtl.log.info("Дефект зубьев шестерни", "Признаков дефекта не обнаружено"); - - //дефект зубьев зубчатого колеса - if ( - spen.harms_sets[1].get_count(1, 2) >= 5 & ausp.harms_sets[1].get_count(1, 2) >= 5 & - spen.harms_sets[3].get_count(1, 1, 1) >= 3 & spen.harms_sets[3].get_count(1, 1, 1) <= 5 & - ausp.harms_sets[3].get_count(1, 1, 1) >= 3 & ausp.harms_sets[3].get_count(1, 1, 1) <= 5 - ) { - Defect = true; - Defect_type.push("Дефект зубьев зубчатого колеса"); - for (let i = 0; i <= 9; i++) { - if (spen_f2.harms[i].is_present == true) - gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в ES " + (i + 1) + "Fвр2", inp.deep_factor(spen_f2.harms[i].amplitude, spen_f2.harms[i].base)); - } - for (let i = 0; i <= 4; i++) { - if (spen_fz2.harms[i].is_present == true) - gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в ES " + (i + 1) + "Fz2", imp.deep_factor(spen_fz2.harms[i].amplitude, spen_fz2.harms[i].base)); - } - for (let i = 0; i <= 9; i++) { - if (ausp_f2.harms[i].is_present == true) - gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в AS " + (i + 1) + "Fвр2", ausp_f2.harms[i].amplitude); - } - for (let i = 0; i <= 4; i++) { - if (ausp_fz2.harms[i].is_present == true) - gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в AS " + (i + 1) + "Fz2", ausp_fz2.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; - } -} \ No newline at end of file diff --git a/solid/master_script.js b/solid/master_script.js deleted file mode 100644 index f3238a5..0000000 --- a/solid/master_script.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; - -//gtl.results = { "Diagnostic results": gtl.options }; - -gtl.results = { - "Results 0": gtl.options['Sensor1'][0].resultJSON, - "Results 1": gtl.options['Sensor1'][1].resultJSON, - "Results 2": gtl.options['Sensor1'][2].resultJSON -}; //+ - - -//gtl.results = { "Diagnostic results": gtl.options['NKD'][0].resultJSON.RMS }; //+ -//gtl.results = { "Diagnostic results": gtld.node.options }; //+ -//gtl.results = { "Diagnostic results": gtld.node.getDiagnosticResult() }; //+ -//gtl.results = { "Diagnostic results": gtld.node.name }; //+ -//gtl.results = { "Diagnostic results": gtld.node.uuid.toString() }; //+ -//gtl.results = { "Diagnostic results": gtld.node.parent }; //+ - -/*gtl.results = { - "Diagnostic results": gtld.storage.selectLastPointMasterValue( - { - count: 1, - pointUUID: gtld.node.uuid.toString(), - objectUUID: gtld.node.parent.uuid.toString(), - tag: "0", - masterValueAddress: gtld.node.options["masterValueAddress"] - }) -};*/ - -/*gtl.results = { - "Diagnostic results": gtld.storage.selectLastObjectResults( - { - count: 3, - //pointUUID: gtld.node.uuid.toString(), - objectUUID: gtld.node.uuid.toString(), - tag: "0" - }) -};*/ - -/*gtl.results = { - "Diagnostic results": gtld.storage.selectLastPointMasterValue( - { - count: 3, - pointUUID: gtld.node.uuid.toString(), - objectUUID: gtld.node.parent.uuid.toString(), - tag: "0", - masterValueAddress: gtld.node.options["RMS"] - }) -};*/ - - - diff --git a/solid/planetary gear.js b/solid/planetary gear.js deleted file mode 100644 index ac6ddd5..0000000 --- a/solid/planetary gear.js +++ /dev/null @@ -1,459 +0,0 @@ -"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 = 0x00008500; //цвет линии спектра -//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 = 8000; //центральная частота полосового фильтра -//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 = 0x00ff7373; //цвет линии спектра огибающей -//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; - }; - - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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: //частота вращения фиксированная - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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 (виброметр) - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(); - spen.lines = imp.standart_lines(); - //filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); - 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 Nsat = options.pgN; - - var ausp_f1 = ausp.add_harms_set(imp.FREQ(), 10, 0xff004dff, 1); //биение ведущего вала - for (let i = 0; i <= 9; i++) { ausp_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник - ausp_f1.name = 'Биение ведущего вала'; - - var ausp_f2 = ausp.add_harms_set(imp.PGF2(), 10, 0xff004dff, 1); //биение ведомого вала - for (let i = 0; i <= 9; i++) { ausp_f2.harms[i].tolerance = (1 + i) * imp.PGF2() * imp.tolerance() }; - ausp_f2.name = 'Биение ведомого вала'; - - var ausp_fz1 = ausp.add_harms_set(Nsat * (imp.FREQ() - imp.PGF2()), 5, 0xff004dff, 1); //дефект ведущей шестерни - for (let i = 0; i <= 4; i++) { ausp_fz1.harms[i].tolerance = (1 + i) * Nsat * (imp.FREQ() - imp.PGF2()) * imp.tolerance() }; - ausp_fz1.name = 'Дефект ведущей шестерни'; - - var ausp_fsat = ausp.add_harms_set(2 * imp.PGFSAT(), 5, 0xff004dff, 1); //Дефекты сателлита - for (let i = 0; i <= 4; i++) { ausp_fsat.harms[i].tolerance = (1 + i) * imp.PGFSAT() * imp.tolerance() }; - ausp_fsat.name = 'Дефекты сателлита'; - - var ausp_fcrown = ausp.add_harms_set(Nsat * imp.PGF2(), 5, 0xff004dff, 1); //Дефекты короны - for (let i = 0; i <= 4; i++) { ausp_fcrown.harms[i].tolerance = (1 + i) * Nsat * imp.PGF2() * imp.tolerance() }; - ausp_fcrown.name = 'Дефекты короны'; - - var ausp_fz2 = ausp.add_harms_set(imp.PGFZ(), 5, 0xff004dff, 1); //Дефекты зубчатого зацепления - for (let i = 0; i <= 4; i++) { ausp_fz2.harms[i].tolerance = (1 + i) * imp.PGFZ() * imp.tolerance() }; - ausp_fz2.name = 'Дефекты зубчатого зацепления'; - - //добавляем модулирующие гармоники: частота, кол-во, цвет, вес - //ausp.harms_sets[2].modulate(imp.FREQ(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр1 - //ausp.harms_sets[3].modulate(imp.GTF2(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр2 - - //при необходимости можно изменить параметры каждой гармоники индивидуально - /* - 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_f1 = spen.add_harms_set(imp.FREQ(), 10, 0xff004dff, 1); //биение ведущего вала - for (let i = 0; i <= 9; i++) { spen_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник - spen_f1.name = 'Биение ведущего вала'; - - var spen_f2 = spen.add_harms_set(imp.PGF2(), 10, 0xff004dff, 1); //биение ведомого вала - for (let i = 0; i <= 9; i++) { spen_f2.harms[i].tolerance = (1 + i) * imp.PGF2() * imp.tolerance() }; - spen_f2.name = 'Биение ведомого вала'; - - var spen_fz1 = spen.add_harms_set(Nsat * (imp.FREQ() - imp.PGF2()), 5, 0xff004dff, 1); //дефект ведущей шестерни - for (let i = 0; i <= 4; i++) { spen_fz1.harms[i].tolerance = (1 + i) * Nsat * (imp.FREQ() - imp.PGF2()) * imp.tolerance() }; - spen_fz1.name = 'Дефект ведущей шестерни'; - - var spen_fsat = spen.add_harms_set(2 * imp.PGFSAT(), 5, 0xff004dff, 1); //Дефекты сателлита - for (let i = 0; i <= 4; i++) { spen_fsat.harms[i].tolerance = (1 + i) * imp.PGFSAT() * imp.tolerance() }; - spen_fsat.name = 'Дефекты сателлита'; - - var spen_fcrown = spen.add_harms_set(Nsat * imp.PGF2(), 5, 0xff004dff, 1); //Дефекты короны - for (let i = 0; i <= 4; i++) { spen_fcrown.harms[i].tolerance = (1 + i) * Nsat * imp.PGF2() * imp.tolerance() }; - spen_fcrown.name = 'Дефекты короны'; - - var spen_fz2 = spen.add_harms_set(imp.PGFZ(), 3, 0xff004dff, 1); //Дефекты зубчатого зацепления - for (let i = 0; i <= 2; i++) { spen_fz2.harms[i].tolerance = (1 + i) * imp.PGFZ() * imp.tolerance() }; - spen_fz2.name = 'Дефекты зубчатого зацепления'; - - //добавляем модулирующие гармоники: частота, кол-во, цвет, вес - //spen.harms_sets[2].modulate(imp.FREQ(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр1 - //spen.harms_sets[3].modulate(imp.GTF2(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр2 - - //при необходимости можно изменить параметры каждой гармоники индивидуально - /* - 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.ausp_square(ausp2.data, 800, ausp2.frequency); - - //[Блок диагностики] - //вывод информации в лог - //gtl.log.info("description", function) - - gtl.log.info("Минимально необходимая длительность сигнала", acq_time); - gtl.log.info("FREQ", imp.FREQ()); - gtl.log.info("FZ", imp.PGFZ()); - gtl.log.info("F2", imp.PGF2()); - gtl.log.info("Граничная частота спектра", imp.spen_frequency()); - gtl.log.info("Расчетное разрешение спектра", imp.spen_resolution()); - gtl.log.info("Расчетное количество линий", imp.spen_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(1, 2) >= 3 & - ausp.harms_sets[0].get_count(1, 2) >= 3 - ) { - Defect = true; - Defect_type.push("Биение ведущего вала"); - for (i = 0; i <= 9; i++) { - if (spen_f1.harms[i].is_present == true) - gtl.log.info("Биение ведущего вала. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_f1.harms[i].amplitude, spen_f1.harms[i].base)); - } - for (i = 0; i <= 9; i++) { - if (ausp_f1.harms[i].is_present == true) - gtl.log.info("Биение ведущего вала. Признаки в AS " + (i + 1) + "Fвр1", ausp_f1.harms[i].amplitude); - } - } - else - gtl.log.info("Биение ведущего вала", "Признаков дефекта не обнаружено"); - - //биение ведомого вала - if ( - spen.harms_sets[1].get_count(1, 2) >= 3 & - ausp.harms_sets[1].get_count(1, 2) >= 3 - ) { - Defect = true; - Defect_type.push("Биение ведомого вала"); - for (i = 0; i <= 9; i++) { - if (spen_f2.harms[i].is_present == true) - gtl.log.info("Биение ведомого вала. Признаки в ES " + (i + 1) + "Fвр2", imp.deep_factor(spen_f2.harms[i].amplitude, spen_f2.harms[i].base)); - } - for (i = 0; i <= 9; i++) { - if (ausp_f2.harms[i].is_present == true) - gtl.log.info("Биение ведомого вала. Признаки в ES " + (i + 1) + "Fвр2", ausp_f2.harms[i].amplitude); - } - } else - gtl.log.info("Биение ведомого вала", "Признаков дефекта не обнаружено"); - - //дефект ведущей шестерни - if ( - spen.harms_sets[2].get_count(1, 1) > 2 & - ausp.harms_sets[2].get_count(1, 1) > 2 - ) { - Defect = true; - Defect_type.push("Дефект ведущей шестерни"); - for (i = 0; i <= 4; i++) { - if (spen_fz1.harms[i].is_present == true) - gtl.log.info("Дефект ведущей шестерни. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_fz1.harms[i].amplitude, spen_fz1.harms[i].base)); - } - for (i = 0; i <= 4; i++) { - if (ausp_fz1.harms[i].is_present == true) - gtl.log.info("Дефект ведущей шестерни. Признаки в AS " + (i + 1) + "Fz1", ausp_fz1.harms[i].amplitude); - } - } - else - gtl.log.info("Дефект ведущей шестерни", "Признаков дефекта не обнаружено"); - - //дефект сателлита - if ( - spen.harms_sets[3].get_count(1, 1) > 2 & - ausp.harms_sets[3].get_count(1, 1) > 2 - ) { - Defect = true; - Defect_type.push("Дефект сателлита"); - for (i = 0; i <= 4; i++) { - if (spen_fsat.harms[i].is_present == true) - gtl.log.info("Дефект сателлита. Признаки в ES " + (i + 1) + "Fсат", imp.deep_factor(spen_fsat.harms[i].amplitude, spen_fsat.harms[i].base)); - } - for (i = 0; i <= 4; i++) { - if (ausp_fsat.harms[i].is_present == true) - gtl.log.info("Дефект сателлита. Признаки в AS " + (i + 1) + "Fсат", ausp_fsat.harms[i].amplitude); - } - } - else - gtl.log.info("Дефект сателлита", "Признаков дефекта не обнаружено"); - - //дефект короны - if ( - spen.harms_sets[4].get_count(1, 1) > 2 & - ausp.harms_sets[4].get_count(1, 1) > 2 - ) { - Defect = true; - Defect_type.push("Дефект короны"); - for (i = 0; i <= 4; i++) { - if (spen_fcrown.harms[i].is_present == true) - gtl.log.info("Дефект короны. Признаки в ES " + (i + 1) + "Fвр2", imp.deep_factor(spen_fcrown.harms[i].amplitude, spen_fcrown.harms[i].base)); - } - for (i = 0; i <= 4; i++) { - if (ausp_fcrown.harms[i].is_present == true) - gtl.log.info("Дефект короны. Признаки в AS " + (i + 1) + "Fвр2", ausp_fcrown.harms[i].amplitude); - } - } - else - gtl.log.info("Дефект короны", "Признаков дефекта не обнаружено"); - - //дефекты зубчатого зацепления - if ( - spen.harms_sets[5].get_count(1, 1) > 2 & - ausp.harms_sets[5].get_count(1, 1) > 2 - ) { - Defect = true; - Defect_type.push("Дефекты зубчатого зацепления"); - for (i = 0; i <= 4; i++) { - if (spen_fz2.harms[i].is_present == true) - gtl.log.info("Дефекты зубчатого зацепления. Признаки в ES " + (i + 1) + "Fz", imp.deep_factor(spen_fz2.harms[i].amplitude, spen_fz2.harms[i].base)); - } - for (i = 0; i <= 4; i++) { - if (ausp_fz2.harms[i].is_present == true) - gtl.log.info("Дефекты зубчатого зацепления. Признаки в AS " + (i + 1) + "Fz", ausp_fz2.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; - } -} \ No newline at end of file diff --git a/solid/rolling bearing.js b/solid/rolling bearing.js deleted file mode 100644 index 5b2fc1f..0000000 --- a/solid/rolling bearing.js +++ /dev/null @@ -1,521 +0,0 @@ -"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()); - }; - - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(imp.spec_width().es); - spen.lines = imp.standart_lines(imp.spec_lines()); - filter_spen.frequency = imp.filter_frequency(); - ausp.frequency = imp.standart_width(imp.spec_width().as1); - //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: //частота вращения фиксированная - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(imp.spec_width().es); - spen.lines = imp.standart_lines(imp.spec_lines()); - filter_spen.frequency = imp.filter_frequency(); - ausp.frequency = imp.standart_width(imp.spec_width().as1); - //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 (виброметр) - //установка стандартной ширины спектра огибающей и количества линий спектра - spen.frequency = imp.standart_width(imp.spec_width().es); - spen.lines = imp.standart_lines(imp.spec_lines()); - filter_spen.frequency = imp.filter_frequency(); - ausp.frequency = imp.standart_width(imp.spec_width().as1); - //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_width().es); - gtl.log.info("Расчетное количество линий", imp.spec_lines()); - gtl.log.info("Расчетное разрешение спектра", imp.spec_resolution()); - gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100); - gtl.log.info("Стандартная граничная частота", spen.frequency); - gtl.log.info("Стандартное кол-во линий", 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; - } -} \ No newline at end of file diff --git a/solid/user-functions.js b/user-functions.js similarity index 100% rename from solid/user-functions.js rename to user-functions.js