update neural
parent
ebc47e0cce
commit
10913c4bd6
|
@ -0,0 +1,82 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var imp = gtl.import("user-functions.js");
|
||||||
|
|
||||||
|
export function spen_mtx() {
|
||||||
|
let num = 6; //глубина матрицы (количество гармоник)
|
||||||
|
var res = {}; //результат
|
||||||
|
var deep = 0; //глубина модуляции ВЧ составляющих
|
||||||
|
|
||||||
|
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
||||||
|
//var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
||||||
|
var ftf = spen.add_harms_set(imp.FTF(), num, 0xffff0000, 1); //частота вращения сепаратора
|
||||||
|
for (let i = 0; i <= num - 1; i++) { ftf.harms[i].tolerance = (1 + i) * imp.FTF() * imp.tolerance(); };
|
||||||
|
ftf.name = 'FTF';
|
||||||
|
|
||||||
|
var freq = spen.add_harms_set(imp.FREQ(), num, 0xff0000f0, 1); //частота вращения
|
||||||
|
for (let i = 0; i <= num - 1; i++) { freq.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance(); };
|
||||||
|
freq.name = 'FREQ';
|
||||||
|
|
||||||
|
var bsf = spen.add_harms_set(imp.BSF(), num, 0xff994000, 1); //частота контакта тел качения
|
||||||
|
for (let i = 0; i <= num - 1; i++) { bsf.harms[i].tolerance = (1 + i) * imp.BSF() * imp.tolerance(); };
|
||||||
|
bsf.name = 'BSF';
|
||||||
|
|
||||||
|
var bpfo = spen.add_harms_set(imp.BPFO(), num, 0xff009000, 1); //частота перекатывания тел качения по наружному кольцу
|
||||||
|
for (let i = 0; i <= num - 1; i++) { bpfo.harms[i].tolerance = (1 + i) * imp.BPFO() * imp.tolerance(); };
|
||||||
|
bpfo.name = 'BPFO';
|
||||||
|
|
||||||
|
var bpfi = spen.add_harms_set(imp.BPFI(), num, 0xff990090, 1); //частота перекатывания тел качения по внутреннему кольцу
|
||||||
|
for (let i = 0; i <= num - 1; i++) { bpfi.harms[i].tolerance = (1 + i) * imp.BPFI() * imp.tolerance(); }
|
||||||
|
bpfi.name = 'BPFI';
|
||||||
|
|
||||||
|
//формируем результат
|
||||||
|
var ftf_arr = [];
|
||||||
|
for (let i = 0; i <= num - 1; i++) {
|
||||||
|
if (ftf.harms[i].is_present == true) {
|
||||||
|
deep = Math.round(imp.mod_factor(ftf.harms[i].amplitude, ftf.harms[i].base) * 100);
|
||||||
|
ftf_arr.push(deep);
|
||||||
|
} else { ftf_arr.push(0) };
|
||||||
|
};
|
||||||
|
|
||||||
|
var freq_arr = [];
|
||||||
|
for (let i = 0; i <= num - 1; i++) {
|
||||||
|
if (freq.harms[i].is_present == true) {
|
||||||
|
deep = Math.round(imp.mod_factor(freq.harms[i].amplitude, freq.harms[i].base) * 100);
|
||||||
|
freq_arr.push(deep);
|
||||||
|
} else { freq_arr.push(0) };
|
||||||
|
};
|
||||||
|
|
||||||
|
var bsf_arr = [];
|
||||||
|
for (let i = 0; i <= num - 1; i++) {
|
||||||
|
if (bsf.harms[i].is_present == true) {
|
||||||
|
deep = Math.round(imp.mod_factor(bsf.harms[i].amplitude, bsf.harms[i].base) * 100);
|
||||||
|
bsf_arr.push(deep);
|
||||||
|
} else { bsf_arr.push(0) };
|
||||||
|
};
|
||||||
|
|
||||||
|
var bpfo_arr = [];
|
||||||
|
for (let i = 0; i <= num - 1; i++) {
|
||||||
|
if (bpfo.harms[i].is_present == true) {
|
||||||
|
deep = Math.round(imp.mod_factor(bpfo.harms[i].amplitude, bpfo.harms[i].base) * 100);
|
||||||
|
bpfo_arr.push(deep);
|
||||||
|
} else { bpfo_arr.push(0) };
|
||||||
|
};
|
||||||
|
|
||||||
|
var bpfi_arr = [];
|
||||||
|
for (let i = 0; i <= num - 1; i++) {
|
||||||
|
if (bpfi.harms[i].is_present == true) {
|
||||||
|
deep = Math.round(imp.mod_factor(bpfi.harms[i].amplitude, bpfi.harms[i].base) * 100);
|
||||||
|
bpfi_arr.push(deep);
|
||||||
|
} else { bpfi_arr.push(0) };
|
||||||
|
};
|
||||||
|
|
||||||
|
//формируем объект
|
||||||
|
res[ftf.name] = ftf_arr;
|
||||||
|
res[freq.name] = freq_arr;
|
||||||
|
res[bsf.name] = bsf_arr;
|
||||||
|
res[bpfo.name] = bpfo_arr;
|
||||||
|
res[bpfi.name] = bpfi_arr;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,201 @@
|
||||||
|
"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 spen_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"] = spen_mtx.spen();
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue