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