diff --git a/matrix/defects/spen_mtx.js b/matrix/defects/spen_mtx.js deleted file mode 100644 index bc32d11..0000000 --- a/matrix/defects/spen_mtx.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; - -var imp = gtl.import("user-functions.js"); - -export function spen_mtx() { - var num = 6; //глубина матрицы (количество гармоник) - var res = {}; //результат - var deep = 0; //глубина модуляции ВЧ составляющих - - var set = { - "FTF": imp.FTF(), - "FREQ": imp.FREQ(), - "BSF": imp.BSF(), - "BPFO": imp.BPFO(), - "BPFI": imp.BPFI() - }; //набор функциональных частот - - var rows = Object.keys(set); //массив наборов гармонических рядов - var color = [0xffff0000, 0xff0000f0, 0xff994000, 0xff009000, 0xff990090]; //массив предустановленных цветов для гармонических рядов - - //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. - //var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей - for (let i = 0; i <= rows.length - 1; i++) { - let lines = rows[i]; - let frq = set[lines]; - lines = spen.add_harms_set(frq, num, color[i], 1); //строим набор частот - lines.name = rows[i]; - let arr = []; //массив обнаруженных гармоник - - for (let j = 0; j <= num - 1; j++) { - lines.harms[j].tolerance = (j + 1) * frq * imp.tolerance(); //устанавливаем коридор обнаружения гармоники - if (lines.harms[j].is_present == true) { - deep = Math.round(imp.mod_factor(lines.harms[j].amplitude, lines.harms[j].base) * 100); - gtl.log.info("deep", deep); - arr.push(deep); - } else { arr.push(0) }; - res[lines.name] = arr; - }; - }; - - return res; -}; - diff --git a/matrix/matrix.js b/matrix/matrix.js deleted file mode 100644 index 4ce9c56..0000000 --- a/matrix/matrix.js +++ /dev/null @@ -1,201 +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("user-functions.js"); -var mtx = gtl.import("spen_mtx.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 = 800; //граничная частота спектра -ausp.lines = 800; //разрешение спектра (количество линий) -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 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.color = 255; -filter_spen.width = 1482; //ширина полосы фильтра - -//спектр огибающей -var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей -spen.name = "SPEN"; //присвоение имени спектра огибающей -spen.color = 0x00ff0000; //цвет линии спектра огибающей -spen.frequency = 400; //граничная частота спектра огибающей -spen.lines = 400; //разрешение спектра огибающей (количество линий) -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) - -//[Диагностика] -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) в ВЧ диапазоне", ampl_spen.value / rms_spen.value); - - let def = {}; - def["spen"] = mtx.spen_mtx(); - - var res = { - RMSA: rms_spen.value, - PF: ampl_spen.value / rms_spen.value, - SQR: AQ, - matrix: def - }; - - gtl.results = res; - gtl.diagnostic.stop(); - break; - - default: - break; - } -} \ No newline at end of file diff --git a/user-functions.js b/user-functions.js index c3becca..6df9e50 100644 --- a/user-functions.js +++ b/user-functions.js @@ -74,6 +74,11 @@ export function BPFO() { return k1 * FREQ() * z; }; //частота перек export function BPFI() { return k2 * FREQ() * z; }; //частота перекатывания тел качения по внутреннему кольцу (BPFI) export function BSF() { return 2 * FREQ() * (d_cage / d_roller) * k1 * k2; }; //частота вращения (контакта) тел качения (BSF) +export function BSFTF() { return k1 * FREQ(); }; //частота вращения сепаратора (перемещения тел качения) +export function BSNUT() { return k1 * FREQ() * z; }; //частота перекатявания тел качения по гайке +export function BSSCR() { return k2 * FREQ() * z; }; //частота перекатявания тел качения по винту +export function BSBAL() { return 2 * FREQ() * (d_cage / d_roller) * k1 * k2; }; //частота вращения (контакта) тел качения + export function BDF2() { return FREQ() * (bdD1 / bdD2) }; //частота вращения ведомого шкива export function BDFB() { return FREQ() * (Math.PI * bdD1 / bdL) }; //частота вращения ремня @@ -99,7 +104,7 @@ export function filter_frequency() { export function filter_width(number) { let n = 3; - if (number != null) {n = number}; + if (number != null) { n = number }; let kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2)); //коэффициент для полосового фильтра let width = kf * filter_frequency(); return width; @@ -111,52 +116,29 @@ export function spec_width() { case 0: //объект не выбран break; case 1: //подшипник скольжения - flim = { - as0: 1600, - as1: 800, - es: 20 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 20 * FREQ() }; break; case 2: //подшипник качения - flim = { - as0: 1600, - as1: 800, - es: 3 * BPFI() + 4 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 3 * BPFI() + 4 * FREQ() }; break; case 3: //ШВП + flim = { as0: 1600, as1: 800, es: 3 * BPFI() + 4 * FREQ() }; break; case 4: //редуктор - flim = { - as0: 1600, - as1: 800, - es: 3 * GTFZ() + 4 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 3 * GTFZ() + 4 * FREQ() }; break; case 5: //ременная передача break; case 6: //зубчатый ремень break; case 7: //помпа - flim = { - as0: 1600, - as1: 800, - es: 3 * PMFBLD() + 4 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 3 * PMFBLD() + 4 * FREQ() }; break; case 8: //планетарый редуктор - flim = { - as0: 1600, - as1: 800, - es: 3 * PGFZ() + 4 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 3 * PGFZ() + 4 * FREQ() }; break; case 9: //турбина - flim = { - as0: 1600, - as1: 800, - es: 3 * TRFBLD() + 4 * FREQ() - }; + flim = { as0: 1600, as1: 800, es: 3 * TRFBLD() + 4 * FREQ() }; break; case 10: //электродвигатель break;