balancer_calc/scripts/functions.js

247 lines
13 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Дополнительные функции
// Параметры подшипника подгружаемые из база данных из скады
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;
};