"use strict"; var signals = gtl.options.record.signalsModel; var options = gtl.options; var record = gtl.options.record; var point = gtl.options.point; var fnc = gtl.import("user-functions.js"); var mtx = gtl.import("kn_mtx.js"); var def = gtl.import("kn_defs.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 ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации ausp.name = "AUSP"; //присвоение имени спектра 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].portNumber]); //назначение переменной фильтра filter_spen.kind = gtl.filter_iir.butterworth; //тип окна filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) filter_spen.order = 10; //порядок фильтра filter_spen.frequency = 6400; //центральная частота полосового фильтра filter_spen.width = 1482; //ширина полосы фильтра filter_spen.color = 255; //спектр огибающей var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей spen.name = "SPEN"; //присвоение имени спектра огибающей spen.color = 0x00ff0000; //цвет линии спектра огибающей spen.frequency = 200; //граничная частота спектра огибающей spen.lines = 200; //разрешение спектра огибающей (количество линий) 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 виброскорости в диапазоне 10-1000 Гц. var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование) //фильтрация сигнала в диапазоне var filter = gtl.add_filter_iir(int); //объявление переменной фильтра filter.kind = gtl.filter_iir.butterworth; //тип окна filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) filter.order = 10; //порядок фильтра filter.frequency = 505; //центральная частота полосового фильтра filter.width = 990; //ширина полосы фильтра //определение среднего квадратического значения виброскорости var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ rms_v.time = 0.5; //время выборки rms_v.avg_cnt = 4; //количество усреднений //[Диагностика] gtl.diagnostic.interval = freq.time * freq.avg_cnt; let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала function diagnose() { switch (state) { case 0: // считаем частоту вращения и настраиваем спектры if (fnc.INSTABILITY() > fnc.tolerance()) { gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100); gtl.log.info("Результат:", "Диагностика прервана"); //gtl.diagnostic.stop(); //принудительная остановка диагностики let __result = { Result: false }; gtl.results = __result; }; if (fnc.FREQ() <= fnc.FREQNESS()) { gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS()); }; case 1: //частота вращения фиксированная case 2: //частота вращения из поля INFO (виброметр) filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей filter_spen.width = fnc.filter_width(); //определяем ширину фильтра spen.frequency = fnc.spec_params().frequency; spen.lines = fnc.spec_params().lines; //определение минимально необходимой длительности сигнала для проведения диагностики let time = []; //массив по времени набора данных time.push(ausp.acq_time); time.push(spen.acq_time); let max_acq = Math.max(...time); gtl.diagnostic.interval = max_acq; state = 3; break; case 3: //выполняем анализ спектов ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей //Вывод информации в лог //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency); gtl.log.info("Объект диагностики", + options.rbModelName); gtl.log.info("Минимально необходимая частота вращения", fnc.FREQNESS()); gtl.log.info("FREQ", fnc.FREQ()); gtl.log.info("FTF", fnc.FTF()); gtl.log.info("BPFO", fnc.BPFO()); gtl.log.info("BPFI", fnc.BPFI()); gtl.log.info("BSF", fnc.BSF()); gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance()); gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency); gtl.log.info("Ширина фильтра", filter_spen.width); gtl.log.info("Граничная частота SPEN", spen.frequency); gtl.log.info("Количество линий SPEN", spen.lines); gtl.log.info("Разрешение SPEN", spen.resolution); gtl.log.info("Ширина AUSP", ausp.frequency); let spen_mx = mtx.kn_mtx(spen, filter_spen, true); let spen_df = def.kn_defs(spen_mx, true); var res = { RMSA: rms_spen.value, RMSV: rms_v.value, PF: ampl_spen.value / rms_spen.value, SQR: AQ, matrix: spen_mx, defs: spen_df }; gtl.results = res; gtl.diagnostic.stop(); break; default: break; } }