247 lines
13 KiB
JavaScript
247 lines
13 KiB
JavaScript
// Дополнительные функции
|
||
|
||
// Параметры подшипника подгружаемые из база данных из скады
|
||
var rbModelName = gtl.options.rbModelName || "No Name";
|
||
var rbVendor = gtl.options.rbVendor || "No Vendor";
|
||
var d_outer = gtl.options.rbOuterD || 0;
|
||
var d_inner = gtl.options.rbInnerD || 0;
|
||
var d_roller = gtl.options.rbRollerD || 0;
|
||
var z = gtl.options.rbRollerCount || 0;
|
||
var angle = ((gtl.options.rbAngle || 0) * 3.1415926) / 180;
|
||
var d_cage = (d_inner + d_outer) / 2; // диаметр сепаратора (средний диаметр)
|
||
|
||
// Параметры редуктора
|
||
var gtZ1 = options.gtZ1 || 0; //количество зубьев шестерни
|
||
var gtZ2 = options.gtZ2 || 0; //количество зубьев зубчатого колеса
|
||
|
||
// Параметры ременной передачи
|
||
var bdD1 = options.bdD1 || 0; //диаметр ведущего шкива
|
||
var bdD2 = options.bdD2 || 0; //диаметр ведомого шкива
|
||
var bdL = options.bdL || 0; //длинна ремня
|
||
|
||
// Параметры зубчатой ременной передачи
|
||
var cbdZ1 = options.cbdZ1 || 0; //количество зубьев ведущего шкива
|
||
var cbdZ2 = options.cbdZ2 || 0; //количество зубьев ведомого шкива
|
||
var cbdZ3 = options.cbdZ3 || 0; //количество зубьев ремня
|
||
|
||
// Параметры насоса
|
||
var pmBlades = options.pmBlades || 0; //количество лопастей насосного колеса
|
||
|
||
// Параметры планетарной передачи
|
||
var pgZ1 = options.pgZ1 || 0; //количество зубьев солнца
|
||
var pgZ2 = options.pgZ2 || 0; //количество зубьев саттелитов
|
||
var pgZ3 = options.pgZ3 || 0; //количество зубьев короны
|
||
var pgN = options.pgN || 0; //количество саттелитов
|
||
|
||
// Параметры турбины
|
||
var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины
|
||
|
||
// Параметры электродвигателя
|
||
// var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины
|
||
|
||
|
||
// 1. Получение данных о частоте вращения
|
||
// Определение частоты вращения в зависимости от источника тахо сигнала (FREQ)
|
||
export function FREQ() {
|
||
let FR = 0;
|
||
switch (record.tachoOptions.tachoState) {
|
||
case 0:
|
||
FR = freq.value * options.tachoRatio;
|
||
break;
|
||
case 1:
|
||
FR = record.tachoOptions.tachoValue * options.tachoRatio;
|
||
break;
|
||
case 2:
|
||
FR = record.tachoOptions.tachoFromInfo * options.tachoRatio;
|
||
break;
|
||
}; return FR;
|
||
};
|
||
|
||
// Минимально необходимая частота вращения для компенсации силы тяжести центробежной силой
|
||
export function FREQNESS() {
|
||
let R = (d_inner / 2) + (d_roller / 2); //расстояние до центра тяжести тела качения
|
||
let freqness = (Math.sqrt(9.81 / (4 * (Math.PI ** 2) * R / 1000))) / k1;
|
||
return freqness;
|
||
};
|
||
|
||
// 2. Частоты подшипника качения
|
||
// kFREQ - коэффициент для диагностики на выбеге
|
||
export function k1() { return 0.5 * (1 - (d_roller / d_cage) * Math.cos(angle)); }; // вспомогательный коэффициент k1
|
||
export function k2() { return 0.5 * (1 + (d_roller / d_cage) * Math.cos(angle)); }; // вспомогательный коэффициент k2
|
||
export function FTF() { return k1() * FREQ(); }; // частота вращения сепаратора (FTF)
|
||
export function BPFO() { return k1() * FREQ() * z; }; // частота перекатывания тел качения по наружному кольцу (BPFO)
|
||
export function BPFI() { return k2() * FREQ() * z; }; // частота перекатывания тел качения по внутреннему кольцу (BPFI)
|
||
export function BSF() { return 2 * FREQ() * (d_cage / d_roller) * k1() * k2(); }; // частота вращения (контакта) тел качения (BSF)
|
||
|
||
// 3. Настройки спектра огибающей
|
||
// Ширина спектра огибающей
|
||
export function spen_frequency() {
|
||
let flim = 0;
|
||
switch (options.objectType) {
|
||
case 0: //объект не выбран
|
||
break;
|
||
case 1: //подшипник скольжения
|
||
flim = 20 * FREQ();
|
||
break;
|
||
case 2: //подшипник качения
|
||
flim = 5 * BPFI() + 4 * FREQ();
|
||
break;
|
||
case 3: //ШВП
|
||
break;
|
||
case 4: //редуктор
|
||
flim = 5 * GTFZ() + 4 * FREQ();
|
||
break;
|
||
case 5: //ременная передача
|
||
break;
|
||
case 6: //зубчатый ремень
|
||
break;
|
||
case 7: //помпа
|
||
break;
|
||
case 8: //планетарый редуктор
|
||
flim = 3 * PGFZ() + 4 * FREQ();
|
||
break;
|
||
case 9: //турбина
|
||
break;
|
||
case 10: //электродвигатель
|
||
break;
|
||
}; return flim;
|
||
};
|
||
|
||
// Частотное разрешение (разделение двух гармоник с минимальной частотой)
|
||
export function spen_resolution() {
|
||
let res = 0;
|
||
switch (options.objectType) {
|
||
case 0: //объект не выбран
|
||
break;
|
||
case 1: //подшипник скольжения
|
||
res = FREQ() / 8;
|
||
break;
|
||
case 2: //подшипник качения
|
||
res = FREQ() / 8;
|
||
break;
|
||
case 3: //ШВП
|
||
break;
|
||
case 4: //редуктор
|
||
res = FREQ() / 8;
|
||
break;
|
||
case 5: //ременная передача
|
||
break;
|
||
case 6: //зубчатый ремень
|
||
break;
|
||
case 7: //помпа
|
||
break;
|
||
case 8: //планетарый редуктор
|
||
res = PGF2() / 8;
|
||
break;
|
||
case 9: //турбина
|
||
break;
|
||
case 10: //электродвигатель
|
||
break;
|
||
}; return res;
|
||
};
|
||
|
||
// Минимальное количество линий спектра
|
||
export function spen_lines() { return spen_frequency() / spen_resolution(); };
|
||
|
||
// Максимальный коридор обнаружения гармоник (tolerance)
|
||
export function tolerance() {
|
||
let tol = 0;
|
||
switch (options.objectType) {
|
||
case 0: // объект не выбран
|
||
break;
|
||
case 1: // подшипник скольжения
|
||
break;
|
||
case 2: // подшипник качения
|
||
tol = (2 * FTF()) / (5 * BPFO());
|
||
break;
|
||
case 3: // ШВП
|
||
break;
|
||
case 4: // редуктор
|
||
tol = (2 * FREQ()) / (5 * GTFZ());
|
||
break;
|
||
case 5: // ременная передача
|
||
break;
|
||
case 6: // зубчатый ремень
|
||
break;
|
||
case 7: // помпа
|
||
break;
|
||
case 8: // планетарый редуктор
|
||
tol = (2 * PGF2()) / (5 * PGFZ());
|
||
break;
|
||
case 9: // турбина
|
||
break;
|
||
case 10: // электродвигатель
|
||
break;
|
||
}; return tol;
|
||
};
|
||
|
||
// Стандартная ширина спектра
|
||
export function standart_width() {
|
||
let STFRQ = 0;
|
||
if (spen_frequency() <= 50) { STFRQ = 50 } else
|
||
if (spen_frequency() > 50 && spen_frequency() <= 100) { STFRQ = 100 } else
|
||
if (spen_frequency() > 100 && spen_frequency() <= 200) { STFRQ = 200 } else
|
||
if (spen_frequency() > 200 && spen_frequency() <= 400) { STFRQ = 400 } else
|
||
if (spen_frequency() > 400 && spen_frequency() <= 800) { STFRQ = 800 } else { STFRQ = 1600 }; return STFRQ
|
||
};
|
||
|
||
// Стандартное количество линий спектра
|
||
export function standart_lines() {
|
||
let STLNS = 0;
|
||
if (spen_lines() <= 200) { STLNS = 200 } else
|
||
if (spen_lines() > 200 && spen_lines() <= 400) { STLNS = 400 } else
|
||
if (spen_lines() > 400 && spen_lines() <= 800) { STLNS = 800 } else
|
||
if (spen_lines() > 800 && spen_lines() <= 1600) { STLNS = 1600 } else { STLNS = 3200 }; return STLNS
|
||
};
|
||
|
||
// 5. Расчёт площади под спектром до средней линии
|
||
export function delta_square (data, base, band, freq, level) {
|
||
let lines = data.length; // определение количества линий спектра
|
||
let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции)
|
||
let start = 1; // переменная для определения стартового индекса в массиве
|
||
let S_data = 0; // переменная расчетной площади спектра
|
||
let S_base = 0; // переменная расчетной площади под средней линией
|
||
let S_delta = 0;
|
||
let new_data = []; // нормализованный массив спектра
|
||
if (band != 0) { start = lines - Math.round((freq - band) / res) }; // начальная точка отсчета в массиве (стартовый индекс)
|
||
for (let i = 0; i <= lines - 1; i++) {
|
||
if (data[i] - base[i] > 0) { new_data[i] = data[i];
|
||
} else { new_data[i] = base[i]; } }; // нормализуем массив спектра
|
||
for (let i = start - 1; i <= lines - 2; i++) {
|
||
S_data = S_data + res * ((new_data[i] + level + new_data[i+1] + level) / 2) }; //вычисляем площадь спектра
|
||
for (let i = start - 1; i <= lines - 2; i++) {
|
||
S_base = S_base + res * ((base[i] + level + base[i+1] + level) / 2) }; //вычисляем площадь под средней линией
|
||
return S_delta = S_data - S_base;
|
||
};
|
||
|
||
// 6. Расчёт площади под спектром
|
||
export function spectr_square (data, band, freq, level) {
|
||
// data - массив амплитуд
|
||
// band - начало вычисления площади (фильтр)
|
||
// freq - конец вычисления площади (фильтр)
|
||
let lines = data.length; // определение количества линий спектра
|
||
let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции)
|
||
let start = 1; // переменная для определения стартового индекса в массиве
|
||
let S_data = 0; // переменная расчетной площади под спектром
|
||
if (band != 0) {start = lines - Math.round((freq - band) / res)}; // начальная точка отсчета в массиве (стартовый индекс)
|
||
for (let i = start - 1; i <= lines - 2; i++)
|
||
{ S_data = S_data + res * ((data[i] + level + data[i+1] + level) / 2) }; // вычисляем площадь спектра
|
||
return S_data;
|
||
};
|
||
|
||
// 7. Расчёт площади под средней линией
|
||
export function smoothed_line_square (base, band, freq, level) {
|
||
// base - массив амплитуд средней линии спектра
|
||
// band - начало вычисления площади (фильтр)
|
||
// freq - конец вычисления площади (фильтр)
|
||
let lines = base.length; // определение количества линий спектра
|
||
let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции)
|
||
let start = 1; // переменная для определения стартового индекса в массиве
|
||
let S_base = 0; // переменная расчетной площади под средней линией спектра
|
||
if (band != 0) {start = lines - Math.round((freq - band) / res)}; // начальная точка отсчета в массиве (стартовый индекс)
|
||
for (let i = start - 1; i <= lines - 2; i++)
|
||
{ S_base = S_base + res * ((base[i] + level + base[i+1] + level) / 2) }; // вычисляем площадь средней линии спектра
|
||
return S_base;
|
||
};
|
||
|