new version
parent
0b97cb0380
commit
feca9870bc
|
@ -0,0 +1,172 @@
|
||||||
|
"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("bs_mtx.js");
|
||||||
|
var def = gtl.import("bs_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 ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||||||
|
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].portNumber]); //назначение переменной спектра вибрации
|
||||||
|
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].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.color = 255;
|
||||||
|
filter_spen.width = 1482; //ширина полосы фильтра
|
||||||
|
|
||||||
|
//спектр огибающей
|
||||||
|
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("FREQ", fnc.FREQ());
|
||||||
|
gtl.log.info("FTF", fnc.BSFTF());
|
||||||
|
gtl.log.info("BPFO", fnc.BSNUT());
|
||||||
|
gtl.log.info("BPFI", fnc.BSSCR());
|
||||||
|
gtl.log.info("BSF", fnc.BSBAL());
|
||||||
|
gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance());
|
||||||
|
gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency);
|
||||||
|
gtl.log.info("Граничная частота SPEN", spen.frequency);
|
||||||
|
gtl.log.info("Количество линий SPEN", spen.lines);
|
||||||
|
gtl.log.info("Ширина AUSP", ausp.frequency);
|
||||||
|
|
||||||
|
let spen_mx = mtx.bs_mtx(spen, true);
|
||||||
|
let spen_df = def.bs_defs(spen_mx, true);
|
||||||
|
let ausp_mx = mtx.bs_mtx(ausp, false);
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
export function bs_defs(mtx, isDeep) {
|
||||||
|
var res = {}; //результат
|
||||||
|
if (isDeep = true) { var key = "dp" } else { var key = "lv" };
|
||||||
|
var des = {
|
||||||
|
FTF: { ds: "тел качения и сепаратора", dp: 8, lv: 20 },
|
||||||
|
FREQ: { ds: "винта", dp: 13, lv: 20 },
|
||||||
|
BSF: { ds: "тел качения", dp: 10, lv: 20 },
|
||||||
|
BPFO: { ds: "гайки", dp: 15, lv: 20 },
|
||||||
|
BPFI: { ds: "винта", dp: 8, lv: 20 },
|
||||||
|
}; //описание функциональных частот
|
||||||
|
|
||||||
|
function get_note(harmsArr) {
|
||||||
|
let note = "Износ"; //описание характера колебаний
|
||||||
|
let cnt = 0; //количество значений в массиве
|
||||||
|
for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; };
|
||||||
|
if (cnt >= 5) { note = "Дефект" };
|
||||||
|
if (harmsArr[1] > harmsArr[0]) { note = "Перекос" };
|
||||||
|
if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" };
|
||||||
|
return note;
|
||||||
|
};
|
||||||
|
|
||||||
|
function get_level(lvl, thres) {
|
||||||
|
let level = "Сильный";
|
||||||
|
switch (true) {
|
||||||
|
case lvl < 0.5 * thres:
|
||||||
|
level = "Слабый";
|
||||||
|
break;
|
||||||
|
case lvl < thres:
|
||||||
|
level = "Средний";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}; return level;
|
||||||
|
};
|
||||||
|
|
||||||
|
var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник)
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let arr = mtx[rows[i]]; //массив гармоник
|
||||||
|
let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива
|
||||||
|
let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива
|
||||||
|
if (sum > 0) {
|
||||||
|
let note = get_note(arr);
|
||||||
|
res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ufc = gtl.import("user-functions.js");
|
||||||
|
|
||||||
|
export function bs_mtx(spec, isDeep) {
|
||||||
|
var num = 6; //глубина матрицы (количество гармоник)
|
||||||
|
var level = 0; //уровень развития дефекта
|
||||||
|
var res = {}; //результат
|
||||||
|
|
||||||
|
var set = {
|
||||||
|
FTF: { nm: "Частота вращения сепаратора", fn: ufc.BSFTF(), md: 0, cl: 0xffff0000 },
|
||||||
|
FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 },
|
||||||
|
BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSBAL(), md: 0, cl: 0xffFFB841 },
|
||||||
|
BPFO: { nm: "Частота перекатывания тел качения по гайке", fn: ufc.BSNUT(), md: 0, cl: 0xffED3CCA },
|
||||||
|
BPFI: { nm: "Частота перекатывания тел качения по винту", fn: ufc.BSSCR(), md: 0, cl: 0xff990090 }
|
||||||
|
}; //набор функциональных частот
|
||||||
|
|
||||||
|
var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов)
|
||||||
|
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let lines = rows[i];
|
||||||
|
let idx = 0; //индекс гармонического ряда
|
||||||
|
let nms = set[lines].nm; //название гармонического ряда
|
||||||
|
let frq = set[lines].fn; //расчетная частота
|
||||||
|
let mod = set[lines].md; //модулирующая частота
|
||||||
|
let clr = set[lines].cl; //предустановленный цвет
|
||||||
|
let arr = []; //массив обнаруженных гармоник
|
||||||
|
|
||||||
|
lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд)
|
||||||
|
lines.name = nms;
|
||||||
|
idx = spec.index_of_harms_set(lines); //определяем индекс набора частот
|
||||||
|
if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию
|
||||||
|
for (let j = 0; j <= num - 1; j++) {
|
||||||
|
lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники
|
||||||
|
if (lines.harms[j].is_present == true) {
|
||||||
|
switch (isDeep) {
|
||||||
|
case true:
|
||||||
|
level = Math.round(ufc.mod_factor(lines.harms[j].amplitude, lines.harms[j].base));
|
||||||
|
break;
|
||||||
|
case false:
|
||||||
|
level = Math.round(lines.harms[j].amplitude);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
arr.push(level);
|
||||||
|
} else { arr.push(0) };
|
||||||
|
res[rows[i]] = arr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FREQ(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff0000f0, 1); //биение шестерни - "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Биение шестерни';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff0000f0, 2); //биение шестерни "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Биение шестерни';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 2) >= 3 && spen.harms_sets[spen_index].get_count(0, 2) <= 5 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 2) >= 3 && ausp.harms_sets[ausp_index].get_count(0, 2) <= 5
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Биение шестерни. Признаки в ES " + (i + 1) + "Fвр1", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Биение шестерни. Признаки в AS " + (i + 1) + "Fвр1", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Биение шестерни", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.GTFZ(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff990090, 1); //дефект зубьев шестерни
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Дефект зубьев шестерни';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.FREQ(), 2, 0xff0000f0, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff990090, 2); //дефект зубьев шестерни
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Дефект зубьев шестерни';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.FREQ(), 2, 0xff0000f0, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 1, 1) >= 3 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 1, 1) >= 3
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Дефект зубьев шестерни. Признаки в ES " + (i + 1) + "Fz", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Дефект зубьев шестерни. Признаки в AS " + (i + 1) + "Fz", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Дефект зубьев шестерни", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.GTF2(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff009000, 1); //биение зубчатого колеса
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Биение зубчатого колеса';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff009000, 2); //биение зубчатого колеса
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Биение зубчатого колеса';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 2) >= 3 && spen.harms_sets[spen_index].get_count(0, 2) <= 5 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 2) >= 3 && ausp.harms_sets[ausp_index].get_count(0, 2) <= 5
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Биение зубчатого колеса. Признаки в ES " + (i + 1) + "Fвр2", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Биение зубчатого колеса. Признаки в AS " + (i + 1) + "Fвр2", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Биение зубчатого колеса", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.GTFZ(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff994000, 1); //дефект зубьев зубчатого колеса
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Дефект зубьев зубчатого колеса';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.GTF2(), 2, 0xff009000, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff994000, 2); //дефект зубьев зубчатого колеса
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Дефект зубьев зубчатого колеса';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.GTF2(), 2, 0xff009000, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 1, 1) >= 3 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 1, 1) >= 3
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в ES " + (i + 1) + "Fz", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Дефект зубьев зубчатого колеса. Признаки в AS " + (i + 1) + "Fz", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Дефект зубьев зубчатого колеса", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -4,12 +4,9 @@ var options = gtl.options;
|
||||||
var record = gtl.options.record;
|
var record = gtl.options.record;
|
||||||
var point = gtl.options.point;
|
var point = gtl.options.point;
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
var fnc = gtl.import("user-functions.js");
|
||||||
|
var mtx = gtl.import("gt_mtx.js");
|
||||||
var gear0 = gtl.import("gt-gear-beat.js");
|
var def = gtl.import("gt_defs.js");
|
||||||
var wheel0 = gtl.import("gt-wheel-beat.js");
|
|
||||||
var gear1 = gtl.import("gt-gear-fault.js");
|
|
||||||
var wheel1 = gtl.import("gt-wheel-fault.js");
|
|
||||||
|
|
||||||
//настройки для датчика оборотов
|
//настройки для датчика оборотов
|
||||||
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
|
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
|
||||||
|
@ -26,7 +23,7 @@ freq.avg_cnt = 6;
|
||||||
|
|
||||||
//[Блок настройки параметров измерений]
|
//[Блок настройки параметров измерений]
|
||||||
//мониторинговый спектр вибрации
|
//мониторинговый спектр вибрации
|
||||||
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
|
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||||||
ausp2.name = "AUSPm"; //присвоение имени спектра
|
ausp2.name = "AUSPm"; //присвоение имени спектра
|
||||||
ausp2.color = 0x0000ffff; //цвет линии спектра
|
ausp2.color = 0x0000ffff; //цвет линии спектра
|
||||||
ausp2.frequency = 1600; //граничная частота спектра
|
ausp2.frequency = 1600; //граничная частота спектра
|
||||||
|
@ -35,7 +32,7 @@ ausp2.average = 6; //количество усреднений
|
||||||
ausp2.unit = gtl.spec.db; //отображение в дБ
|
ausp2.unit = gtl.spec.db; //отображение в дБ
|
||||||
|
|
||||||
//спектр вибрации
|
//спектр вибрации
|
||||||
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
|
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||||||
ausp.name = "AUSPd"; //присвоение имени спектра
|
ausp.name = "AUSPd"; //присвоение имени спектра
|
||||||
ausp.color = 0x0000ff00; //цвет линии спектра
|
ausp.color = 0x0000ff00; //цвет линии спектра
|
||||||
ausp.frequency = 800; //граничная частота спектра
|
ausp.frequency = 800; //граничная частота спектра
|
||||||
|
@ -48,7 +45,7 @@ ausp.peak_level = 20; //порог обнаружения гармоник
|
||||||
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
|
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
|
||||||
|
|
||||||
//фильтр для формирования спектра огибающей
|
//фильтр для формирования спектра огибающей
|
||||||
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра
|
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
|
||||||
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
|
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
|
||||||
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||||||
filter_spen.order = 10; //порядок фильтра
|
filter_spen.order = 10; //порядок фильтра
|
||||||
|
@ -60,8 +57,8 @@ filter_spen.width = 1482; //ширина полосы фильтра
|
||||||
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
|
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
|
||||||
spen.name = "SPEN"; //присвоение имени спектра огибающей
|
spen.name = "SPEN"; //присвоение имени спектра огибающей
|
||||||
spen.color = 0x00ff0000; //цвет линии спектра огибающей
|
spen.color = 0x00ff0000; //цвет линии спектра огибающей
|
||||||
spen.frequency = 400; //граничная частота спектра огибающей
|
spen.frequency = 200; //граничная частота спектра огибающей
|
||||||
spen.lines = 400; //разрешение спектра огибающей (количество линий)
|
spen.lines = 200; //разрешение спектра огибающей (количество линий)
|
||||||
spen.average = 8; //количество усреднений
|
spen.average = 8; //количество усреднений
|
||||||
spen.unit = gtl.spec.db; //отображение в дБ
|
spen.unit = gtl.spec.db; //отображение в дБ
|
||||||
spen.window = gtl.spec.hann; //окно
|
spen.window = gtl.spec.hann; //окно
|
||||||
|
@ -79,62 +76,30 @@ ampl_spen.time = 0.5; //интервал расчета Amplitude (spen)
|
||||||
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
|
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
|
||||||
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
|
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
|
||||||
|
|
||||||
//RMS и Amplitude в УВЧ диапазоне 10-25 кГц (контроль разрыва масляной пленки)
|
//RMS виброскорости в диапазоне 10-1000 Гц.
|
||||||
var filter_uhf = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
|
var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения
|
||||||
filter_uhf.kind = gtl.filter_iir.butterworth; //тип окна
|
int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование)
|
||||||
filter_uhf.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
//фильтрация сигнала в диапазоне
|
||||||
filter_uhf.order = 10; //порядок фильтра
|
var filter = gtl.add_filter_iir(int); //объявление переменной фильтра
|
||||||
filter_uhf.frequency = 17500; //центральная частота полосового фильтра
|
filter.kind = gtl.filter_iir.butterworth; //тип окна
|
||||||
filter_uhf.width = 15000; //ширина полосы фильтра
|
filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||||||
|
filter.order = 10; //порядок фильтра
|
||||||
var rms_uhf = gtl.add_value_rms(filter_uhf); //назначение переменной RMS
|
filter.frequency = 505; //центральная частота полосового фильтра
|
||||||
var ampl_uhf = gtl.add_value_ampl(filter_uhf); //назначение переменной Amplitude
|
filter.width = 990; //ширина полосы фильтра
|
||||||
rms_uhf.name = "RMS (uhf)" //присвоение имени RMS (uhf)
|
//определение среднего квадратического значения виброскорости
|
||||||
rms_uhf.time = 0.5; //интервал расчета RMS (uhf)
|
var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ
|
||||||
ampl_uhf.time = 0.5; //интервал расчета Amplitude (uhf)
|
rms_v.time = 0.5; //время выборки
|
||||||
rms_uhf.avg_cnt = 4; //количество усреднений RMS (uhf)
|
rms_v.avg_cnt = 4; //количество усреднений
|
||||||
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;
|
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
|
||||||
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
|
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
|
||||||
let acq_time = 0;
|
|
||||||
|
|
||||||
function diagnose() {
|
function diagnose() {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 0: // считаем частоту вращения и настраиваем спектры
|
case 0: // считаем частоту вращения и настраиваем спектры
|
||||||
if (imp.INSTABILITY() > imp.tolerance()) {
|
if (fnc.INSTABILITY() > fnc.tolerance()) {
|
||||||
gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
|
gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100);
|
||||||
gtl.log.info("Результат:", "Диагностика прервана");
|
gtl.log.info("Результат:", "Диагностика прервана");
|
||||||
//gtl.diagnostic.stop(); //принудительная остановка диагностики
|
//gtl.diagnostic.stop(); //принудительная остановка диагностики
|
||||||
|
|
||||||
|
@ -144,60 +109,23 @@ function diagnose() {
|
||||||
gtl.results = __result;
|
gtl.results = __result;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (imp.FREQ() <= imp.FREQNESS()) {
|
if (fnc.FREQ() <= fnc.FREQNESS()) {
|
||||||
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + imp.FREQNESS());
|
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.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: //частота вращения фиксированная
|
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 (виброметр)
|
case 2: //частота вращения из поля INFO (виброметр)
|
||||||
//установка стандартной ширины спектра огибающей и количества линий спектра
|
filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей
|
||||||
spen.frequency = imp.standart_width(imp.spec_width().es);
|
filter_spen.width = fnc.filter_width(); //определяем ширину фильтра
|
||||||
spen.lines = imp.standart_lines(imp.spec_lines());
|
spen.frequency = fnc.spec_params().frequency;
|
||||||
filter_spen.frequency = imp.filter_frequency();
|
spen.lines = fnc.spec_params().lines;
|
||||||
ausp.frequency = imp.standart_width(imp.spec_width().as1);
|
|
||||||
//ausp.lines = imp.standart_lines();
|
|
||||||
|
|
||||||
//определение минимально необходимой длительности сигнала для проведения диагностики
|
//определение минимально необходимой длительности сигнала для проведения диагностики
|
||||||
var acq_times = [];
|
let time = []; //массив по времени набора данных
|
||||||
acq_times.push(ausp.acq_time);
|
time.push(ausp.acq_time);
|
||||||
acq_times.push(spen.acq_time);
|
time.push(spen.acq_time);
|
||||||
acq_time = Math.max(...acq_times);
|
let max_acq = Math.max(...time);
|
||||||
|
gtl.diagnostic.interval = max_acq;
|
||||||
gtl.diagnostic.interval = acq_time;
|
|
||||||
state = 3;
|
state = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -207,48 +135,29 @@ function diagnose() {
|
||||||
|
|
||||||
//Вывод информации в лог
|
//Вывод информации в лог
|
||||||
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
|
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
|
||||||
var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency);
|
var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency);
|
||||||
|
|
||||||
gtl.log.info("Объект диагностики", "Подшипник качения " + options.rbModelName);
|
gtl.log.info("Объект диагностики", options.rbModelName);
|
||||||
gtl.log.info("Минимально необходимая длительность сигнала", acq_time);
|
gtl.log.info("FREQ", fnc.FREQ());
|
||||||
gtl.log.info("FREQ", imp.FREQ());
|
gtl.log.info("FTF", fnc.GTF2());
|
||||||
gtl.log.info("Минимально необходимая частота вращения", imp.FREQNESS());
|
gtl.log.info("BPFO", fnc.GTFZ());
|
||||||
gtl.log.info("Площадь спектра", AQ);
|
gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance());
|
||||||
gtl.log.info("Нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
|
gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency);
|
||||||
gtl.log.info("FTF", imp.FTF());
|
gtl.log.info("Граничная частота SPEN", spen.frequency);
|
||||||
gtl.log.info("BPFO", imp.BPFO());
|
gtl.log.info("Количество линий SPEN", spen.lines);
|
||||||
gtl.log.info("BPFI", imp.BPFI());
|
gtl.log.info("Ширина AUSP", ausp.frequency);
|
||||||
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 def = {};
|
let spen_mx = mtx.gt_mtx(spen, true);
|
||||||
//var indx = 0;
|
let spen_df = def.gt_defs(spen_mx, true);
|
||||||
def["Биение шестерни"] = gear0.defect(); //indx (spen = 0, ausp = 0)
|
let ausp_mx = mtx.gt_mtx(ausp, false);
|
||||||
def["Биение зубчатого колеса"] = wheel0.defect(); //indx (spen = 1, ausp = 1)
|
|
||||||
def["Дефект зубьев шестерни"] = gear1.defect(); //indx (spen = 2, ausp = 2)
|
|
||||||
def["Дефект зубьев зубчатого колеса"] = wheel1.defect(); //indx (spen = 3, ausp = 3)
|
|
||||||
|
|
||||||
var res = {
|
var res = {
|
||||||
RMSA: rms_spen.value,
|
RMSA: rms_spen.value,
|
||||||
|
RMSV: rms_v.value,
|
||||||
PF: ampl_spen.value / rms_spen.value,
|
PF: ampl_spen.value / rms_spen.value,
|
||||||
RMS_V2: rms_v2.value,
|
|
||||||
RMS_V10: rms_v10.value,
|
|
||||||
SQR: AQ,
|
SQR: AQ,
|
||||||
defects: def
|
matrix: spen_mx,
|
||||||
|
defs: spen_df
|
||||||
};
|
};
|
||||||
|
|
||||||
gtl.results = res;
|
gtl.results = res;
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
export function gt_defs(mtx, isDeep) {
|
||||||
|
var res = {}; //результат
|
||||||
|
if (isDeep = true) { var key = "dp" } else { var key = "lv" };
|
||||||
|
var des = {
|
||||||
|
FREQ: { ds: "шестерни", dp: 20, lv: 20 },
|
||||||
|
GTF2: { ds: "зубчатого колеса", dp: 20, lv: 20 },
|
||||||
|
GTFZ: { ds: "зацепления шестерни", dp: 20, lv: 20 },
|
||||||
|
GTFZ2: { ds: "зацепления зубчатого колеса", dp: 20, lv: 20 }
|
||||||
|
}; //описание функциональных частот
|
||||||
|
|
||||||
|
function get_note(harmsArr) {
|
||||||
|
let note = "Биение"; //описание характера колебаний
|
||||||
|
let cnt = 0; //количество значений в массиве
|
||||||
|
for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; };
|
||||||
|
if (cnt >= 5) { note = "Дефект" };
|
||||||
|
if (harmsArr[1] > harmsArr[0]) { note = "Перекос" };
|
||||||
|
if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" };
|
||||||
|
return note;
|
||||||
|
};
|
||||||
|
|
||||||
|
function get_level(lvl, thres) {
|
||||||
|
let level = "Сильный";
|
||||||
|
switch (true) {
|
||||||
|
case lvl < 0.5 * thres:
|
||||||
|
level = "Слабый";
|
||||||
|
break;
|
||||||
|
case lvl < thres:
|
||||||
|
level = "Средний";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}; return level;
|
||||||
|
};
|
||||||
|
|
||||||
|
var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник)
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let arr = mtx[rows[i]]; //массив гармоник
|
||||||
|
let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива
|
||||||
|
let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива
|
||||||
|
if (sum > 0) {
|
||||||
|
let note = get_note(arr);
|
||||||
|
res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ufc = gtl.import("user-functions.js");
|
||||||
|
|
||||||
|
export function gt_mtx(spec, isDeep) {
|
||||||
|
var num = 6; //глубина матрицы (количество гармоник)
|
||||||
|
var level = 0; //уровень развития дефекта
|
||||||
|
var res = {}; //результат
|
||||||
|
|
||||||
|
var set = {
|
||||||
|
FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 },
|
||||||
|
GTF2: { nm: "Частота вращения второго вала", fn: ufc.GTF2(), md: 0, cl: 0xffFFB841 },
|
||||||
|
GTFZ: { nm: "Зубцовая частота по шестерне", fn: ufc.GTFZ(), md: ufc.FREQ(), cl: 0xffED3CCA },
|
||||||
|
GTFZ2: { nm: "Зубцовая частота по второму валу", fn: ufc.GTFZ(), md: ufc.GTF2(), cl: 0xff990090 }
|
||||||
|
}; //набор функциональных частот
|
||||||
|
|
||||||
|
var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов)
|
||||||
|
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let lines = rows[i];
|
||||||
|
let idx = 0; //индекс гармонического ряда
|
||||||
|
let nms = set[lines].nm; //название гармонического ряда
|
||||||
|
let frq = set[lines].fn; //расчетная частота
|
||||||
|
let mod = set[lines].md; //модулирующая частота
|
||||||
|
let clr = set[lines].cl; //предустановленный цвет
|
||||||
|
let arr = []; //массив обнаруженных гармоник
|
||||||
|
|
||||||
|
lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд)
|
||||||
|
lines.name = nms;
|
||||||
|
idx = spec.index_of_harms_set(lines); //определяем индекс набора частот
|
||||||
|
if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию
|
||||||
|
for (let j = 0; j <= num - 1; j++) {
|
||||||
|
lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники
|
||||||
|
if (lines.harms[j].is_present == true) {
|
||||||
|
switch (isDeep) {
|
||||||
|
case true:
|
||||||
|
level = Math.round(ufc.mod_factor(lines.harms[j].amplitude, lines.harms[j].base));
|
||||||
|
break;
|
||||||
|
case false:
|
||||||
|
level = Math.round(lines.harms[j].amplitude);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
arr.push(level);
|
||||||
|
} else { arr.push(0) };
|
||||||
|
res[rows[i]] = arr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
"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("Граничная частота SPEN", spen.frequency);
|
||||||
|
gtl.log.info("Количество линий SPEN", spen.lines);
|
||||||
|
gtl.log.info("Ширина AUSP", ausp.frequency);
|
||||||
|
|
||||||
|
let spen_mx = mtx.kn_mtx(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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
export function kn_defs(mtx, isDeep) {
|
||||||
|
var res = {}; //результат
|
||||||
|
if (isDeep = true) { var key = "dp" } else { var key = "lv" };
|
||||||
|
var des = {
|
||||||
|
FTF: { ds: "Износ тел качения и сепаратора", dp: 8, lv: 20 },
|
||||||
|
FREQ: { ds: "Износ внутреннего кольца", dp: 13, lv: 20 },
|
||||||
|
BSF: { ds: "Дефект тел качения", dp: 10, lv: 20 },
|
||||||
|
BPFO: { ds: "Дефект наружного кольца", dp: 15, lv: 20 },
|
||||||
|
BPFI: { ds: "Дефект внутреннего кольца", dp: 8, lv: 20 },
|
||||||
|
}; //описание функциональных частот
|
||||||
|
|
||||||
|
var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник)
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let arr = mtx[rows[i]]; //массив гармоник
|
||||||
|
let delta = 0; //"расстояние" до дефекта
|
||||||
|
for (let j = 0; j <= arr.length - 1; j++) {
|
||||||
|
let limit = des[rows[i]][key]; //порог для гармоник
|
||||||
|
if (arr[j] / limit >= 1) { limit = arr[j] };
|
||||||
|
delta = delta + Math.pow(1 - arr[j] / limit, 2);
|
||||||
|
};
|
||||||
|
delta = Math.sqrt(delta);
|
||||||
|
res[rows[i]] = delta;
|
||||||
|
};
|
||||||
|
|
||||||
|
let values = Object.values(res); //собираем значения ключей объекта в массив
|
||||||
|
let minValue = Math.min(...values); //определяем минимальное значение
|
||||||
|
let minKey = Object.keys(res).find(minKey => res[minKey] === minValue); //определяем ключ по минимальному значению
|
||||||
|
|
||||||
|
return des[minKey].ds;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ufc = gtl.import("user-functions.js");
|
||||||
|
|
||||||
|
export function kn_mtx(spec, isDeep) {
|
||||||
|
var num = 6; //глубина матрицы (количество гармоник)
|
||||||
|
var level = 0; //уровень развития дефекта
|
||||||
|
var res = {}; //результат
|
||||||
|
|
||||||
|
var set = {
|
||||||
|
FTF: { nm: "Частота вращения сепаратора", fn: ufc.FTF(), md: 0, cl: 0xffff0000 },
|
||||||
|
FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 },
|
||||||
|
BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSF(), md: ufc.FTF(), cl: 0xffFFB841 },
|
||||||
|
BPFO: { nm: "Частота перекатывания тел качения по наружному кольцу", fn: ufc.BPFO(), md: ufc.FTF(), cl: 0xffED3CCA },
|
||||||
|
BPFI: { nm: "Частота перекатывания тел качения по внутреннему кольцу", fn: ufc.BPFI(), md: ufc.FREQ(), cl: 0xff990090 }
|
||||||
|
}; //набор функциональных частот
|
||||||
|
|
||||||
|
var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов)
|
||||||
|
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let lines = rows[i];
|
||||||
|
let idx = 0; //индекс гармонического ряда
|
||||||
|
let nms = set[lines].nm; //название гармонического ряда
|
||||||
|
let frq = set[lines].fn; //расчетная частота
|
||||||
|
let mod = set[lines].md; //модулирующая частота
|
||||||
|
let clr = set[lines].cl; //предустановленный цвет
|
||||||
|
let arr = []; //массив обнаруженных гармоник
|
||||||
|
|
||||||
|
lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд)
|
||||||
|
lines.name = nms;
|
||||||
|
idx = spec.index_of_harms_set(lines); //определяем индекс набора частот
|
||||||
|
if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию
|
||||||
|
for (let j = 0; j <= num - 1; j++) {
|
||||||
|
lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники
|
||||||
|
if (lines.harms[j].is_present == true) {
|
||||||
|
switch (isDeep) {
|
||||||
|
case true:
|
||||||
|
level = Math.round(ufc.mod_factor(lines.harms[j].amplitude, lines.harms[j].base));
|
||||||
|
break;
|
||||||
|
case false:
|
||||||
|
level = Math.round(lines.harms[j].amplitude);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
arr.push(level);
|
||||||
|
} else { arr.push(0) };
|
||||||
|
res[rows[i]] = arr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FREQ(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff0000f0, 1); //биение шестерни - "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Биение шестерни';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff0000f0, 2); //биение шестерни "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Биение шестерни';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 2) >= 3 && spen.harms_sets[spen_index].get_count(0, 2) <= 5 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 2) >= 3 && ausp.harms_sets[ausp_index].get_count(0, 2) <= 5
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Биение шестерни. Признаки в ES " + (i + 1) + "Fвр1", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Биение шестерни. Признаки в AS " + (i + 1) + "Fвр1", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Биение шестерни", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.GTFZ(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff990090, 1); //дефект зубьев шестерни
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Дефект зубьев шестерни';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.FREQ(), 2, 0xff0000f0, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff990090, 2); //дефект зубьев шестерни
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Дефект зубьев шестерни';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.FREQ(), 2, 0xff0000f0, 1); //модуляция Fz +/- Fвр
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектре огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 1, 1) >= 3 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 1, 1) >= 3
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Дефект зубьев шестерни. Признаки в ES " + (i + 1) + "Fz", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Дефект зубьев шестерни. Признаки в AS " + (i + 1) + "Fz", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Дефект зубьев шестерни", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 12:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 20:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 20:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,261 +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 gear0 = gtl.import("gt-gear-beat.js");
|
|
||||||
var wheel0 = gtl.import("gt-wheel-beat.js");
|
|
||||||
var gear1 = gtl.import("gt-gear-fault.js");
|
|
||||||
var wheel1 = gtl.import("gt-wheel-fault.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)
|
|
||||||
|
|
||||||
//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 def = {};
|
|
||||||
//var indx = 0;
|
|
||||||
def["Биение шестерни"] = gear0.defect(); //indx (spen = 0, ausp = 0)
|
|
||||||
def["Биение зубчатого колеса"] = wheel0.defect(); //indx (spen = 1, ausp = 1)
|
|
||||||
def["Дефект зубьев шестерни"] = gear1.defect(); //indx (spen = 2, ausp = 2)
|
|
||||||
def["Дефект зубьев зубчатого колеса"] = wheel1.defect(); //indx (spen = 3, ausp = 3)
|
|
||||||
|
|
||||||
var res = {
|
|
||||||
RMSA: rms_spen.value,
|
|
||||||
PF: ampl_spen.value / rms_spen.value,
|
|
||||||
RMS_V2: rms_v2.value,
|
|
||||||
RMS_V10: rms_v10.value,
|
|
||||||
SQR: AQ,
|
|
||||||
defects: def
|
|
||||||
};
|
|
||||||
|
|
||||||
gtl.results = res;
|
|
||||||
gtl.diagnostic.stop();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,83 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.BPFI(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff990090, 1); //раковины на внутреннем кольце "фиолетовый"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Раковины на внутреннем кольце';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.FREQ(), 2, 0xff923090, 1); //модуляция Fв +/- Fвр "фиолетовый"
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff990090, 2); //раковины на внутреннем кольце "фиолетовый"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
ausp_set.name = 'Раковины на внутреннем кольце';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.FREQ(), 2, 0xff923090, 1); //модуляция Fв +/- Fвр "фиолетовый"
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//раковины на внутреннем кольце
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 0, 1) >= 3 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 1, 1) >= 3
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Раковины на внутреннем кольце. Признаки в ES " + (i + 1) + "Fв +/- Fвр", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Раковины на внутреннем кольце. Признаки в AS " + (i + 1) + "Fв +/- Fвр", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Раковины на внутреннем кольце", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 4:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 8:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 8:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FREQ(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff009ff0, 2); //неоднородный радиальный натяг "голубой"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Неоднородный радиальный натяг';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//неоднородный радиальный натяг
|
|
||||||
if (spen.harms_sets[spen_index].get_count(0) >= 1 && spen.harms_sets[spen_index].get_count(0) <= 5) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Неоднородный радиальный натяг. Признаки в ES " + (i + 1) + "Fвр[x2]", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Неоднородный радиальный натяг", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FREQ(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff0000f0, 1); //износ дорожки качения внутреннего кольца "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Износ внутреннего кольца';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//износ дорожки качения внутреннего кольца
|
|
||||||
if (spen.harms_sets[spen_index].get_count(0, 1) >= 1 && spen.harms_sets[spen_index].get_count(0, 1) <= 2) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Износ внутреннего кольца. Признаки в ES " + (i + 1) + "Fвр", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Износ внутреннего кольца", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.BPFO(); //функциональная чатота
|
|
||||||
let num = 6; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff009000, 2); //перекос наружного кольца "зелёный"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Перекос наружного кольца';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//перекос наружного кольца
|
|
||||||
if (spen.harms_sets[spen_index].get_count(0, 1) >= 1 && spen.harms_sets[spen_index].get_count(0, 1) <= 4) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Перекос наружного кольца. Признаки в ES " + (i + 1) + "Fн[x2]", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Перекос наружного кольца", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.BPFO(); //функциональная чатота
|
|
||||||
let num = 6; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff009000, 1); //раковины на наружном кольце "зелёный"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Раковины на наружном кольце';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.FTF(), 2, 0xff009030, 1); //модуляция Fн +/- Fс "зелёный"
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff009000, 2); //раковины на наружном кольце "зелёный"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
ausp_set.name = 'Раковины на наружном кольце';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.FTF(), 2, 0xff009030, 1); //модуляция Fн +/- Fс "зелёный"
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//раковины на наружном кольце
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 1) >= 5 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 3) >= 5
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Раковины на наружном кольце. Признаки в ES " + (i + 1) + "Fн", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Раковины на наружном кольце. Признаки в AS " + (i + 1) + "Fн", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Раковины на наружном кольце", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.BPFO(); //функциональная чатота
|
|
||||||
let num = 5; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff009000, 1); //износ дорожки качения наружного кольца "зелёный"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Износ наружного кольца';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//износ наружного кольца
|
|
||||||
if (spen.harms_sets[spen_index].get_count(0, 1) >= 1 && spen.harms_sets[spen_index].get_count(0, 1) <= 5) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Износ наружного кольца. Признаки в ES " + (i + 1) + "Fн", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Износ наружного кольца", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,85 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.BSF(); //функциональная чатота
|
|
||||||
let num = 20; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff994000, 1); //раковины и сколы на телах качения "оранжевый"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Раковины и сколы на телах качения';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
spen.harms_sets[spen_index].modulate(imp.FTF(), 2, 0xff996000, 1); //модуляция Fтк +/- Fс "горчичный"
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff994000, 2); //раковины и сколы на телах качения "оранжевый"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
ausp_set.name = 'Раковины и сколы на телах качения';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
|
|
||||||
ausp.harms_sets[ausp_index].modulate(imp.FTF(), 2, 0xff996000, 1); //модуляция Fтк +/- Fс "горчичный"
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//раковины и сколы на телах качения
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 1, 1) >= 3 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 3, 1) >= 3
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
Defect_type.push("Раковины и сколы на телах качения");
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Раковины и сколы на телах качения. Признаки в ES " + (i + 1) + "Fтк +/- Fс", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Раковины и сколы на телах качения. Признаки в AS " + (i + 1) + "Fтк +/- Fс", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
gtl.log.info("Раковины и сколы на телах качения", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FTF(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xffff0000, 2); //износ тел качения и сепаратора "красный"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() };
|
|
||||||
spen_set.name = 'Износ тел качения и сепаратора';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//износ тел качения и сепаратора
|
|
||||||
if (spen.harms_sets[spen_index].get_count(0, 1) >= 1) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Износ тел качения и сепаратора. Признаки в ES " + (i + 1) + "Fс", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Износ тел качения и сепаратора", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 5:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 10:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 10:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
|
||||||
|
|
||||||
export function defect() {
|
|
||||||
let frq = imp.FREQ(); //функциональная чатота
|
|
||||||
let num = 10; //количество отрисованных гармоник
|
|
||||||
|
|
||||||
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
|
||||||
var spen_set = spen.add_harms_set(frq, num, 0xff0000f0, 1); //биение вала - "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { spen_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
spen_set.name = 'Биение вала';
|
|
||||||
var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
|
|
||||||
|
|
||||||
var ausp_set = ausp.add_harms_set(frq, num, 0xff0000f0, 2); //биение вала "синий"
|
|
||||||
for (let i = 0; i <= num - 1; i++) { ausp_set.harms[i].tolerance = (1 + i) * frq * imp.tolerance() }; //коридор обнаружения гармоник
|
|
||||||
ausp_set.name = 'Биение вала';
|
|
||||||
var ausp_index = ausp.index_of_harms_set(ausp_set); //индекс набора гармоник в спектре вибрации
|
|
||||||
|
|
||||||
var defect = false;
|
|
||||||
var spen_signs = []; //массив признаков в спектрк огибающей
|
|
||||||
var ausp_signs = []; //массив признаков в спектре вибрации
|
|
||||||
var deep = 0; //глубина модуляции ВЧ составляющих
|
|
||||||
var ampl = 0; //амплитуда составляющих НЧ вибрации
|
|
||||||
var describe = ''; //описание степени развития дефекта
|
|
||||||
var result = ''; //результат диагностики
|
|
||||||
|
|
||||||
//вывод количества гармоник
|
|
||||||
//spen.harms_sets[0].get_count(1, 2, 1, true);
|
|
||||||
//1 - начало отсчета гармоники;
|
|
||||||
//2 - допуситмое количество пропущенных в ряду;
|
|
||||||
//3 - количество модулирующих с одной стороны;
|
|
||||||
//4 - модулирующие с двух сторон (true);
|
|
||||||
|
|
||||||
//биение вала
|
|
||||||
if (
|
|
||||||
spen.harms_sets[spen_index].get_count(0, 2) >= 1 && spen.harms_sets[spen_index].get_count(0, 2) <= 10 &&
|
|
||||||
ausp.harms_sets[ausp_index].get_count(0, 2) >= 0 && ausp.harms_sets[ausp_index].get_count(0, 2) <= 10
|
|
||||||
) {
|
|
||||||
defect = true;
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (spen_set.harms[i].is_present == true) {
|
|
||||||
deep = imp.mod_factor(spen_set.harms[i].amplitude, spen_set.harms[i].base);
|
|
||||||
spen_signs.push(deep);
|
|
||||||
gtl.log.info("Биение вала. Признаки в ES " + (i + 1) + "Fвр", deep);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let i = 0; i <= num - 1; i++) {
|
|
||||||
if (ausp_set.harms[i].is_present == true) {
|
|
||||||
ampl = ausp_set.harms[i].amplitude;
|
|
||||||
ausp_signs.push(ampl);
|
|
||||||
gtl.log.info("Биение вала. Признаки в AS " + (i + 1) + "Fвр", ampl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gtl.log.info("Биение вала", "Признаков дефекта не обнаружено");
|
|
||||||
|
|
||||||
deep = Math.max(...spen_signs) * 100;
|
|
||||||
switch (true) {
|
|
||||||
case deep <= 7:
|
|
||||||
describe = "Слабый";
|
|
||||||
break;
|
|
||||||
case deep < 13:
|
|
||||||
describe = "Средний";
|
|
||||||
break;
|
|
||||||
case deep >= 13:
|
|
||||||
describe = "Сильный";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
describe = "None";
|
|
||||||
};
|
|
||||||
|
|
||||||
if (defect == true) { result = "(" + deep + "%; " + describe + ")" } else { result = false };
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
export function rb_defs(mtx, isDeep) {
|
||||||
|
var res = {}; //результат
|
||||||
|
if (isDeep = true) { var key = "dp" } else { var key = "lv" };
|
||||||
|
var des = {
|
||||||
|
FTF: { ds: "тел качения и сепаратора", dp: 8, lv: 20 },
|
||||||
|
FREQ: { ds: "внутреннего кольца", dp: 13, lv: 20 },
|
||||||
|
BSF: { ds: "тел качения", dp: 10, lv: 20 },
|
||||||
|
BPFO: { ds: "наружного кольца", dp: 15, lv: 20 },
|
||||||
|
BPFI: { ds: "внутреннего кольца", dp: 8, lv: 20 },
|
||||||
|
}; //описание функциональных частот
|
||||||
|
|
||||||
|
function get_note(harmsArr) {
|
||||||
|
let note = "Износ"; //описание характера колебаний
|
||||||
|
let cnt = 0; //количество значений в массиве
|
||||||
|
for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; };
|
||||||
|
if (cnt >= 5) { note = "Дефект" };
|
||||||
|
if (harmsArr[1] > harmsArr[0]) { note = "Перекос" };
|
||||||
|
if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" };
|
||||||
|
return note;
|
||||||
|
};
|
||||||
|
|
||||||
|
function get_level(lvl, thres) {
|
||||||
|
let level = "Сильный";
|
||||||
|
switch (true) {
|
||||||
|
case lvl < 0.5 * thres:
|
||||||
|
level = "Слабый";
|
||||||
|
break;
|
||||||
|
case lvl < thres:
|
||||||
|
level = "Средний";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}; return level;
|
||||||
|
};
|
||||||
|
|
||||||
|
var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник)
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let arr = mtx[rows[i]]; //массив гармоник
|
||||||
|
let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива
|
||||||
|
let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива
|
||||||
|
if (sum > 0) {
|
||||||
|
let note = get_note(arr);
|
||||||
|
res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ufc = gtl.import("user-functions.js");
|
||||||
|
|
||||||
|
export function rb_mtx(spec, isDeep) {
|
||||||
|
var num = 6; //глубина матрицы (количество гармоник)
|
||||||
|
var level = 0; //уровень развития дефекта
|
||||||
|
var res = {}; //результат
|
||||||
|
|
||||||
|
var set = {
|
||||||
|
FTF: { nm: "Частота вращения сепаратора", fn: ufc.FTF(), md: 0, cl: 0xffff0000 },
|
||||||
|
FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 },
|
||||||
|
BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSF(), md: ufc.FTF(), cl: 0xffFFB841 },
|
||||||
|
BPFO: { nm: "Частота перекатывания тел качения по наружному кольцу", fn: ufc.BPFO(), md: ufc.FTF(), cl: 0xffED3CCA },
|
||||||
|
BPFI: { nm: "Частота перекатывания тел качения по внутреннему кольцу", fn: ufc.BPFI(), md: ufc.FREQ(), cl: 0xff990090 }
|
||||||
|
}; //набор функциональных частот
|
||||||
|
|
||||||
|
var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов)
|
||||||
|
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
|
||||||
|
for (let i = 0; i <= rows.length - 1; i++) {
|
||||||
|
let lines = rows[i];
|
||||||
|
let idx = 0; //индекс гармонического ряда
|
||||||
|
let nms = set[lines].nm; //название гармонического ряда
|
||||||
|
let frq = set[lines].fn; //расчетная частота
|
||||||
|
let mod = set[lines].md; //модулирующая частота
|
||||||
|
let clr = set[lines].cl; //предустановленный цвет
|
||||||
|
let arr = []; //массив обнаруженных гармоник
|
||||||
|
|
||||||
|
lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд)
|
||||||
|
lines.name = nms;
|
||||||
|
idx = spec.index_of_harms_set(lines); //определяем индекс набора частот
|
||||||
|
if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию
|
||||||
|
for (let j = 0; j <= num - 1; j++) {
|
||||||
|
lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники
|
||||||
|
if (lines.harms[j].is_present == true) {
|
||||||
|
switch (isDeep) {
|
||||||
|
case true:
|
||||||
|
level = Math.round(ufc.mod_factor(lines.harms[j].amplitude, lines.harms[j].base));
|
||||||
|
break;
|
||||||
|
case false:
|
||||||
|
level = Math.round(lines.harms[j].amplitude);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
arr.push(level);
|
||||||
|
} else { arr.push(0) };
|
||||||
|
res[rows[i]] = arr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
|
@ -4,17 +4,9 @@ var options = gtl.options;
|
||||||
var record = gtl.options.record;
|
var record = gtl.options.record;
|
||||||
var point = gtl.options.point;
|
var point = gtl.options.point;
|
||||||
|
|
||||||
var imp = gtl.import("user-functions.js");
|
var fnc = gtl.import("user-functions.js");
|
||||||
|
var mtx = gtl.import("rb_mtx.js");
|
||||||
var val = gtl.import("rb-shaft.js");
|
var def = gtl.import("rb_defs.js");
|
||||||
var in0 = gtl.import("rb-inring-tention.js");
|
|
||||||
var out0 = gtl.import("rb-outring-wear.js");
|
|
||||||
var out1 = gtl.import("rb-outring-bias.js");
|
|
||||||
var out2 = gtl.import("rb-outring-fault.js");
|
|
||||||
var in1 = gtl.import("rb-inring-wear.js");
|
|
||||||
var in2 = gtl.import("rb-inring-fault.js");
|
|
||||||
var sep = gtl.import("rb-separator-wear.js");
|
|
||||||
var rol = gtl.import("rb-rollers-fault.js");
|
|
||||||
|
|
||||||
//настройки для датчика оборотов
|
//настройки для датчика оборотов
|
||||||
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
|
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
|
||||||
|
@ -31,7 +23,7 @@ freq.avg_cnt = 6;
|
||||||
|
|
||||||
//[Блок настройки параметров измерений]
|
//[Блок настройки параметров измерений]
|
||||||
//мониторинговый спектр вибрации
|
//мониторинговый спектр вибрации
|
||||||
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
|
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||||||
ausp2.name = "AUSPm"; //присвоение имени спектра
|
ausp2.name = "AUSPm"; //присвоение имени спектра
|
||||||
ausp2.color = 0x0000ffff; //цвет линии спектра
|
ausp2.color = 0x0000ffff; //цвет линии спектра
|
||||||
ausp2.frequency = 1600; //граничная частота спектра
|
ausp2.frequency = 1600; //граничная частота спектра
|
||||||
|
@ -40,7 +32,7 @@ ausp2.average = 6; //количество усреднений
|
||||||
ausp2.unit = gtl.spec.db; //отображение в дБ
|
ausp2.unit = gtl.spec.db; //отображение в дБ
|
||||||
|
|
||||||
//спектр вибрации
|
//спектр вибрации
|
||||||
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
|
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||||||
ausp.name = "AUSPd"; //присвоение имени спектра
|
ausp.name = "AUSPd"; //присвоение имени спектра
|
||||||
ausp.color = 0x0000ff00; //цвет линии спектра
|
ausp.color = 0x0000ff00; //цвет линии спектра
|
||||||
ausp.frequency = 800; //граничная частота спектра
|
ausp.frequency = 800; //граничная частота спектра
|
||||||
|
@ -53,7 +45,7 @@ ausp.peak_level = 20; //порог обнаружения гармоник
|
||||||
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
|
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
|
||||||
|
|
||||||
//фильтр для формирования спектра огибающей
|
//фильтр для формирования спектра огибающей
|
||||||
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра
|
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
|
||||||
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
|
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
|
||||||
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||||||
filter_spen.order = 10; //порядок фильтра
|
filter_spen.order = 10; //порядок фильтра
|
||||||
|
@ -65,8 +57,8 @@ filter_spen.width = 1482; //ширина полосы фильтра
|
||||||
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
|
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
|
||||||
spen.name = "SPEN"; //присвоение имени спектра огибающей
|
spen.name = "SPEN"; //присвоение имени спектра огибающей
|
||||||
spen.color = 0x00ff0000; //цвет линии спектра огибающей
|
spen.color = 0x00ff0000; //цвет линии спектра огибающей
|
||||||
spen.frequency = 400; //граничная частота спектра огибающей
|
spen.frequency = 200; //граничная частота спектра огибающей
|
||||||
spen.lines = 400; //разрешение спектра огибающей (количество линий)
|
spen.lines = 200; //разрешение спектра огибающей (количество линий)
|
||||||
spen.average = 8; //количество усреднений
|
spen.average = 8; //количество усреднений
|
||||||
spen.unit = gtl.spec.db; //отображение в дБ
|
spen.unit = gtl.spec.db; //отображение в дБ
|
||||||
spen.window = gtl.spec.hann; //окно
|
spen.window = gtl.spec.hann; //окно
|
||||||
|
@ -84,62 +76,30 @@ ampl_spen.time = 0.5; //интервал расчета Amplitude (spen)
|
||||||
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
|
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
|
||||||
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
|
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
|
||||||
|
|
||||||
//RMS и Amplitude в УВЧ диапазоне 10-25 кГц (контроль разрыва масляной пленки)
|
//RMS виброскорости в диапазоне 10-1000 Гц.
|
||||||
var filter_uhf = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
|
var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения
|
||||||
filter_uhf.kind = gtl.filter_iir.butterworth; //тип окна
|
int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование)
|
||||||
filter_uhf.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
//фильтрация сигнала в диапазоне
|
||||||
filter_uhf.order = 10; //порядок фильтра
|
var filter = gtl.add_filter_iir(int); //объявление переменной фильтра
|
||||||
filter_uhf.frequency = 17500; //центральная частота полосового фильтра
|
filter.kind = gtl.filter_iir.butterworth; //тип окна
|
||||||
filter_uhf.width = 15000; //ширина полосы фильтра
|
filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||||||
|
filter.order = 10; //порядок фильтра
|
||||||
var rms_uhf = gtl.add_value_rms(filter_uhf); //назначение переменной RMS
|
filter.frequency = 505; //центральная частота полосового фильтра
|
||||||
var ampl_uhf = gtl.add_value_ampl(filter_uhf); //назначение переменной Amplitude
|
filter.width = 990; //ширина полосы фильтра
|
||||||
rms_uhf.name = "RMS (uhf)" //присвоение имени RMS (uhf)
|
//определение среднего квадратического значения виброскорости
|
||||||
rms_uhf.time = 0.5; //интервал расчета RMS (uhf)
|
var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ
|
||||||
ampl_uhf.time = 0.5; //интервал расчета Amplitude (uhf)
|
rms_v.time = 0.5; //время выборки
|
||||||
rms_uhf.avg_cnt = 4; //количество усреднений RMS (uhf)
|
rms_v.avg_cnt = 4; //количество усреднений
|
||||||
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;
|
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
|
||||||
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
|
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
|
||||||
let acq_time = 0;
|
|
||||||
|
|
||||||
function diagnose() {
|
function diagnose() {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case 0: // считаем частоту вращения и настраиваем спектры
|
case 0: // считаем частоту вращения и настраиваем спектры
|
||||||
if (imp.INSTABILITY() > imp.tolerance()) {
|
if (fnc.INSTABILITY() > fnc.tolerance()) {
|
||||||
gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
|
gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100);
|
||||||
gtl.log.info("Результат:", "Диагностика прервана");
|
gtl.log.info("Результат:", "Диагностика прервана");
|
||||||
//gtl.diagnostic.stop(); //принудительная остановка диагностики
|
//gtl.diagnostic.stop(); //принудительная остановка диагностики
|
||||||
|
|
||||||
|
@ -149,60 +109,23 @@ function diagnose() {
|
||||||
gtl.results = __result;
|
gtl.results = __result;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (imp.FREQ() <= imp.FREQNESS()) {
|
if (fnc.FREQ() <= fnc.FREQNESS()) {
|
||||||
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + imp.FREQNESS());
|
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.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: //частота вращения фиксированная
|
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 (виброметр)
|
case 2: //частота вращения из поля INFO (виброметр)
|
||||||
//установка стандартной ширины спектра огибающей и количества линий спектра
|
filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей
|
||||||
spen.frequency = imp.standart_width(imp.spec_width().es);
|
filter_spen.width = fnc.filter_width(); //определяем ширину фильтра
|
||||||
spen.lines = imp.standart_lines(imp.spec_lines());
|
spen.frequency = fnc.spec_params().frequency;
|
||||||
filter_spen.frequency = imp.filter_frequency();
|
spen.lines = fnc.spec_params().lines;
|
||||||
ausp.frequency = imp.standart_width(imp.spec_width().as1);
|
|
||||||
//ausp.lines = imp.standart_lines();
|
|
||||||
|
|
||||||
//определение минимально необходимой длительности сигнала для проведения диагностики
|
//определение минимально необходимой длительности сигнала для проведения диагностики
|
||||||
var acq_times = [];
|
let time = []; //массив времени набора данных
|
||||||
acq_times.push(ausp.acq_time);
|
time.push(ausp.acq_time);
|
||||||
acq_times.push(spen.acq_time);
|
time.push(spen.acq_time);
|
||||||
acq_time = Math.max(...acq_times);
|
let max_acq = Math.max(...time);
|
||||||
|
gtl.diagnostic.interval = max_acq;
|
||||||
gtl.diagnostic.interval = acq_time;
|
|
||||||
state = 3;
|
state = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -212,53 +135,32 @@ function diagnose() {
|
||||||
|
|
||||||
//Вывод информации в лог
|
//Вывод информации в лог
|
||||||
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
|
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
|
||||||
var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency);
|
var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency);
|
||||||
|
|
||||||
gtl.log.info("Объект диагностики", "Подшипник качения " + options.rbModelName);
|
gtl.log.info("Объект диагностики", options.rbModelName);
|
||||||
gtl.log.info("Минимально необходимая длительность сигнала", acq_time);
|
gtl.log.info("Минимально необходимая частота вращения", fnc.FREQNESS());
|
||||||
gtl.log.info("FREQ", imp.FREQ());
|
gtl.log.info("FREQ", fnc.FREQ());
|
||||||
gtl.log.info("Минимально необходимая частота вращения", imp.FREQNESS());
|
gtl.log.info("FTF", fnc.FTF());
|
||||||
gtl.log.info("Площадь спектра", AQ);
|
gtl.log.info("BPFO", fnc.BPFO());
|
||||||
gtl.log.info("Нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
|
gtl.log.info("BPFI", fnc.BPFI());
|
||||||
gtl.log.info("FTF", imp.FTF());
|
gtl.log.info("BSF", fnc.BSF());
|
||||||
gtl.log.info("BPFO", imp.BPFO());
|
gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance());
|
||||||
gtl.log.info("BPFI", imp.BPFI());
|
gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency);
|
||||||
gtl.log.info("BSF", imp.BSF());
|
gtl.log.info("Граничная частота SPEN", spen.frequency);
|
||||||
gtl.log.info("Центральная частота полосового фильтра", filter_spen.frequency);
|
gtl.log.info("Количество линий SPEN", spen.lines);
|
||||||
gtl.log.info("Количество долей октавного фильтра", n);
|
gtl.log.info("Ширина AUSP", ausp.frequency);
|
||||||
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 def = {};
|
let spen_mx = mtx.rb_mtx(spen, true);
|
||||||
//var indx = 0;
|
let spen_df = def.rb_defs(spen_mx, true);
|
||||||
def["Биение вала"] = val.defect(); //indx (spen = 0, ausp = 0)
|
let ausp_mx = mtx.rb_mtx(ausp, true);
|
||||||
def["Неоднородный радиальный натяг"] = in0.defect(); //indx (spen = 1, ausp = X)
|
|
||||||
def["Износ наружного кольца"] = out0.defect(); //indx (spen = 2, ausp = X)
|
|
||||||
def["Перекос наружного кольца"] = out1.defect(); //indx (spen = 3, ausp = X)
|
|
||||||
def["Раковины на наружном кольце"] = out2.defect(); //indx (spen = 4, ausp = 1)
|
|
||||||
def["Износ внутреннего кольца"] = in1.defect(); //indx (spen = 5, ausp = X)
|
|
||||||
def["Раковины на внутреннем кольце"] = in2.defect(); //indx (spen = 6, ausp = 2)
|
|
||||||
def["Износ тел качения и сепаратора"] = sep.defect(); //indx (spen = 7, ausp = X)
|
|
||||||
def["Раковины и сколы на телах качения"] = rol.defect(); //indx (spen = 8, ausp = 3)
|
|
||||||
|
|
||||||
var res = {
|
var res = {
|
||||||
RMSA: rms_spen.value,
|
RMSA: rms_spen.value,
|
||||||
|
RMSV: rms_v.value,
|
||||||
PF: ampl_spen.value / rms_spen.value,
|
PF: ampl_spen.value / rms_spen.value,
|
||||||
RMS_V2: rms_v2.value,
|
|
||||||
RMS_V10: rms_v10.value,
|
|
||||||
SQR: AQ,
|
SQR: AQ,
|
||||||
defects: def
|
matrix: spen_mx,
|
||||||
|
defs: spen_df
|
||||||
};
|
};
|
||||||
|
|
||||||
gtl.results = res;
|
gtl.results = res;
|
||||||
|
|
Loading…
Reference in New Issue