add ballscrew to user functions

develop
aleksey_k 2024-04-06 17:52:39 +09:00
parent 4007b07f5e
commit f95eedbc49
3 changed files with 13 additions and 275 deletions

View File

@ -1,43 +0,0 @@
"use strict";
var imp = gtl.import("user-functions.js");
export function spen_mtx() {
var num = 6; //глубина матрицы (количество гармоник)
var res = {}; //результат
var deep = 0; //глубина модуляции ВЧ составляющих
var set = {
"FTF": imp.FTF(),
"FREQ": imp.FREQ(),
"BSF": imp.BSF(),
"BPFO": imp.BPFO(),
"BPFI": imp.BPFI()
}; //набор функциональных частот
var rows = Object.keys(set); //массив наборов гармонических рядов
var color = [0xffff0000, 0xff0000f0, 0xff994000, 0xff009000, 0xff990090]; //массив предустановленных цветов для гармонических рядов
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
//var spen_index = spen.index_of_harms_set(spen_set); //индекс набора гармоник в спектре огибающей
for (let i = 0; i <= rows.length - 1; i++) {
let lines = rows[i];
let frq = set[lines];
lines = spen.add_harms_set(frq, num, color[i], 1); //строим набор частот
lines.name = rows[i];
let arr = []; //массив обнаруженных гармоник
for (let j = 0; j <= num - 1; j++) {
lines.harms[j].tolerance = (j + 1) * frq * imp.tolerance(); //устанавливаем коридор обнаружения гармоники
if (lines.harms[j].is_present == true) {
deep = Math.round(imp.mod_factor(lines.harms[j].amplitude, lines.harms[j].base) * 100);
gtl.log.info("deep", deep);
arr.push(deep);
} else { arr.push(0) };
res[lines.name] = arr;
};
};
return res;
};

View File

@ -1,201 +0,0 @@
"use strict";
var signals = gtl.options.record.signalsModel;
var options = gtl.options;
var record = gtl.options.record;
var point = gtl.options.point;
var imp = gtl.import("user-functions.js");
var mtx = gtl.import("spen_mtx.js");
//настройки для датчика оборотов
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
filter_freq.kind = gtl.filter_iir.butterworth; //тип окна
filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ)
filter_freq.order = 8; //порядок фильтра
filter_freq.frequency = 10; //граничная частота фильтра
//определение частоты вращения
var freq = gtl.add_value_freq(filter_freq);
freq.time = 1;
freq.avg_cnt = 6;
//gtl.diagnostic.interval = /*1*/10;
//[Блок настройки параметров измерений]
//мониторинговый спектр вибрации
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
ausp2.name = "AUSPm"; //присвоение имени спектра
ausp2.color = 0x0000ffff; //цвет линии спектра
ausp2.frequency = 1600; //граничная частота спектра
ausp2.lines = 1600; //разрешение спектра (количество линий)
ausp2.average = 6; //количество усреднений
ausp2.unit = gtl.spec.db; //отображение в дБ
//спектр вибрации
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации
ausp.name = "AUSPd"; //присвоение имени спектра
ausp.color = 0x0000ff00; //цвет линии спектра
ausp.frequency = 800; //граничная частота спектра
ausp.lines = 800; //разрешение спектра (количество линий)
ausp.average = 6; //количество усреднений
ausp.unit = gtl.spec.db; //отображение в дБ
ausp.smoothing_factor = 50; //коэффициент сглаживания спектра
ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии)
ausp.peak_level = 20; //порог обнаружения гармоник
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
//фильтр для формирования спектра огибающей
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_spen.order = 10; //порядок фильтра
filter_spen.frequency = 6400; //центральная частота полосового фильтра
filter_spen.color = 255;
filter_spen.width = 1482; //ширина полосы фильтра
//спектр огибающей
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
spen.name = "SPEN"; //присвоение имени спектра огибающей
spen.color = 0x00ff0000; //цвет линии спектра огибающей
spen.frequency = 400; //граничная частота спектра огибающей
spen.lines = 400; //разрешение спектра огибающей (количество линий)
spen.average = 8; //количество усреднений
spen.unit = gtl.spec.db; //отображение в дБ
spen.window = gtl.spec.hann; //окно
spen.smoothing_factor = 100; //коэффициент сглаживания спектра
spen.smoothed_line_color = 0xff004dff; //цвет средней линии
spen.peak_level = 10; //порог обнаружения гармоник
spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/-
//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения)
var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen)
var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen)
rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen)
rms_spen.time = 0.5; //интервал расчета RMS (spen)
ampl_spen.time = 0.5; //интервал расчета Amplitude (spen)
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
//[Диагностика]
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
let acq_time = 0;
function diagnose() {
switch (state) {
case 0: // считаем частоту вращения и настраиваем спектры
if (imp.INSTABILITY() > imp.tolerance()) {
gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
gtl.log.info("Результат:", "Диагностика прервана");
//gtl.diagnostic.stop(); //принудительная остановка диагностики
let __result = {
Result: false
};
gtl.results = __result;
};
if (imp.FREQ() <= imp.FREQNESS()) {
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + imp.FREQNESS());
};
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width(imp.spec_width().es);
spen.lines = imp.standart_lines(imp.spec_lines());
filter_spen.frequency = imp.filter_frequency();
ausp.frequency = imp.standart_width(imp.spec_width().as1);
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 1: //частота вращения фиксированная
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width(imp.spec_width().es);
spen.lines = imp.standart_lines(imp.spec_lines());
filter_spen.frequency = imp.filter_frequency();
ausp.frequency = imp.standart_width(imp.spec_width().as1);
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 2: //частота вращения из поля INFO (виброметр)
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width(imp.spec_width().es);
spen.lines = imp.standart_lines(imp.spec_lines());
filter_spen.frequency = imp.filter_frequency();
ausp.frequency = imp.standart_width(imp.spec_width().as1);
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 3: //выполняем анализ спектов
ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации
spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей
//Вывод информации в лог
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency);
gtl.log.info("Объект диагностики", "Подшипник качения " + options.rbModelName);
gtl.log.info("Минимально необходимая длительность сигнала", acq_time);
gtl.log.info("FREQ", imp.FREQ());
gtl.log.info("Минимально необходимая частота вращения", imp.FREQNESS());
gtl.log.info("Площадь спектра", AQ);
gtl.log.info("Нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
gtl.log.info("FTF", imp.FTF());
gtl.log.info("BPFO", imp.BPFO());
gtl.log.info("BPFI", imp.BPFI());
gtl.log.info("BSF", imp.BSF());
gtl.log.info("Центральная частота полосового фильтра", filter_spen.frequency);
gtl.log.info("Количество долей октавного фильтра", n);
gtl.log.info("Коэффициент для октавного фильтра", kf);
gtl.log.info("Граничная частота спектра", imp.spec_width().es);
gtl.log.info("Расчетное количество линий", imp.spec_lines());
gtl.log.info("Расчетное разрешение спектра", imp.spec_resolution());
gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100);
gtl.log.info("Стандартная граничная частота", spen.frequency);
gtl.log.info("Стандартное кол-во линий", spen.lines);
gtl.log.info("СКЗ(A) ВЧ вибрации", rms_spen.value);
gtl.log.info("ПФ(A) в ВЧ диапазоне", ampl_spen.value / rms_spen.value);
let def = {};
def["spen"] = mtx.spen_mtx();
var res = {
RMSA: rms_spen.value,
PF: ampl_spen.value / rms_spen.value,
SQR: AQ,
matrix: def
};
gtl.results = res;
gtl.diagnostic.stop();
break;
default:
break;
}
}

View File

@ -74,6 +74,11 @@ export function BPFO() { return k1 * FREQ() * z; }; //частота перек
export function BPFI() { return k2 * FREQ() * z; }; //частота перекатывания тел качения по внутреннему кольцу (BPFI)
export function BSF() { return 2 * FREQ() * (d_cage / d_roller) * k1 * k2; }; //частота вращения (контакта) тел качения (BSF)
export function BSFTF() { return k1 * FREQ(); }; //частота вращения сепаратора (перемещения тел качения)
export function BSNUT() { return k1 * FREQ() * z; }; //частота перекатявания тел качения по гайке
export function BSSCR() { return k2 * FREQ() * z; }; //частота перекатявания тел качения по винту
export function BSBAL() { return 2 * FREQ() * (d_cage / d_roller) * k1 * k2; }; //частота вращения (контакта) тел качения
export function BDF2() { return FREQ() * (bdD1 / bdD2) }; //частота вращения ведомого шкива
export function BDFB() { return FREQ() * (Math.PI * bdD1 / bdL) }; //частота вращения ремня
@ -111,52 +116,29 @@ export function spec_width() {
case 0: //объект не выбран
break;
case 1: //подшипник скольжения
flim = {
as0: 1600,
as1: 800,
es: 20 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 20 * FREQ() };
break;
case 2: //подшипник качения
flim = {
as0: 1600,
as1: 800,
es: 3 * BPFI() + 4 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 3 * BPFI() + 4 * FREQ() };
break;
case 3: //ШВП
flim = { as0: 1600, as1: 800, es: 3 * BPFI() + 4 * FREQ() };
break;
case 4: //редуктор
flim = {
as0: 1600,
as1: 800,
es: 3 * GTFZ() + 4 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 3 * GTFZ() + 4 * FREQ() };
break;
case 5: //ременная передача
break;
case 6: //зубчатый ремень
break;
case 7: //помпа
flim = {
as0: 1600,
as1: 800,
es: 3 * PMFBLD() + 4 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 3 * PMFBLD() + 4 * FREQ() };
break;
case 8: //планетарый редуктор
flim = {
as0: 1600,
as1: 800,
es: 3 * PGFZ() + 4 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 3 * PGFZ() + 4 * FREQ() };
break;
case 9: //турбина
flim = {
as0: 1600,
as1: 800,
es: 3 * TRFBLD() + 4 * FREQ()
};
flim = { as0: 1600, as1: 800, es: 3 * TRFBLD() + 4 * FREQ() };
break;
case 10: //электродвигатель
break;