gtld2-diag-scripts/user-functions.js

246 lines
13 KiB
JavaScript

//параметры подшипника качения
var rbModelName = options.rbModelName || "No Name";
var rbVendor = options.rbVendor || "No Vendor";
var rb_inner = options.rbInnerD || 0; //диаметр внутреннего кольца
var rb_outer = options.rbOuterD || 0; //диаметр наружного кольца
var rb_roller = options.rbRollerD || 0; //диаметр тела качения
var rb_rollerCount = options.rbRollerCount || 0; //количество тел качения
var rb_angle = (options.rbAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.)
var rb_cage = (rb_inner + rb_outer) / 2; //диаметр сепаратора (средний диаметр)
//параметры ШВП
var bsModelName = options.bsModelName || "No Name";
var bsVendor = options.bsVendor || "No Vendor";
var bs_inner = options.bsInnerD || 0; //диаметр внутреннего кольца
var bs_outer = options.bsOuterD || 0; //диаметр наружного кольца
var bs_roller = options.bsRollerD || 0; //диаметр тела качения
var bs_rollerCount = options.bsRollerCount || 0; //количество тел качения
var bs_angle = (options.bsAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.)
var bs_cage = (bs_inner + bs_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; //количество лопастей крыльчатки турбины
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;
}; //определение частоты вращения в зависимости от источника тахо сигнала (FREQ)
export function INSTABILITY() {
let freq_max = Math.max(...freq.values);
let freq_min = Math.min(...freq.values);
let instability = (freq_max - freq_min) / freq.value;
return instability;
}; //нестабильность частоты вращения в %
//определение вспомогательных коэффициентов k1 и k2 для подшипников качения и ШВП
var rb_k1 = 0.5 * (1 - (rb_roller / rb_cage) * Math.cos(rb_angle));
var rb_k2 = 0.5 * (1 + (rb_roller / rb_cage) * Math.cos(rb_angle));
var bs_k1 = 0.5 * (1 - (bs_roller / bs_cage) * Math.cos(bs_angle));
var bs_k2 = 0.5 * (1 + (bs_roller / bs_cage) * Math.cos(bs_angle));
export function FREQNESS() {
let R = (rb_inner / 2) + (rb_roller / 2); //расстояние до центра тяжести тела качения
let freqness = (Math.sqrt(9.81 / (4 * (Math.PI ** 2) * R / 1000))) / rb_k1;
return freqness;
}; //минимально необходимая частота вращения для компенсации силы тяжести центробежной силой
export function FTF() { return rb_k1 * FREQ(); }; //частота вращения сепаратора (FTF)
export function BPFO() { return rb_k1 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по наружному кольцу (BPFO)
export function BPFI() { return rb_k2 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по внутреннему кольцу (BPFI)
export function BSF() { return 2 * FREQ() * (rb_cage / rb_roller) * rb_k1 * rb_k2; }; //частота вращения (контакта) тел качения (BSF)
export function BSFTF() { return bs_k1 * FREQ(); }; //частота вращения сепаратора (перемещения тел качения)
export function BSNUT() { return bs_k1 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по гайке
export function BSSCR() { return bs_k2 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по винту
export function BSBAL() { return 2 * FREQ() * (bs_cage / bs_roller) * bs_k1 * bs_k2; }; //частота вращения (контакта) тел качения
export function BDF2() { return FREQ() * (bdD1 / bdD2) }; //частота вращения ведомого шкива
export function BDFB() { return FREQ() * (Math.PI * bdD1 / bdL) }; //частота вращения ремня
export function CBFZ() { return FREQ() * cbdZ1; }; //зубцовая частота
export function CBDF2() { return FREQ() * (cbdZ1 / cbdZ2) }; //частота вращения ведомого шкива
export function CBDFB() { return FREQ() * (cbdZ1 / cbdZ3) }; //частота вращения ремня
export function PMFBLD() { return FREQ() * pmBlades; }; //лопастная частота
export function GTFZ() { return FREQ() * gtZ1; }; //зубцовая частота
export function GTF2() { return FREQ() * (gtZ1 / gtZ2); }; //частота вращения второго вала редуктора
export function PGF2() { return (0.5 * FREQ() * pgZ1) / (pgZ1 + pgZ2); }; //частота вращения выходного вала планетарной передачи
export function PGFSAT() { return (0.5 * FREQ()) * (pgZ1 / pgZ2) * ((pgZ1 + 2 * pgZ2) / (pgZ1 + pgZ2)); }; //частота вращения саттелита
export function PGFZ() { return pgZ2 * PGFSAT() }; //зубцовая частота
export function TRFBLD() { return FREQ() * trBlades; }; //лопастная частота
export function filter_frequency() {
let filter = 6013.41 * Math.log(0.266935 * FREQ() + 1.1201);
return filter;
}; //расчетная центральная частота полосового фильтра для спектра огибающей
export function filter_width(number) {
let n = 3;
if (number != null) { n = number };
let kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2)); //коэффициент для полосового фильтра
let width = kf * filter_frequency();
return width;
}; //ширина фильтра спектра огибающей
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: //ШВП
tol = (2 * BSFTF()) / (5 * BSNUT());
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;
}; //максимальный коридор обнаружения гармоник (tolerance)
export function spec_params() {
let frq = 200; //ширина спектра
let res = 400; //частотное разрешение
function getStandart(value) {
let arr = [50, 100, 200, 400, 800, 1600, 3200, 6400, 12800]; //массив стандартных величин
let t = arr[0];
if (value >= arr[arr.length - 1]) { t = arr[arr.length - 1] } else {
for (let i = 0; i <= arr.length - 1; i++) {
if (value > arr[i]) { t = arr[i + 1] };
};
}; return t
};
switch (options.objectType) {
case 0: //объект не выбран
break;
case 1: //подшипник скольжения
frq = 20 * FREQ();
res = FREQ() / 8;
break;
case 2: //подшипник качения
frq = 5 * BPFI() + 4 * FREQ();
res = FREQ() / 8;
break;
case 3: //ШВП
frq = 5 * BSSCR() + 4 * FREQ();
res = FREQ() / 8;
break;
case 4: //редуктор
frq = 3 * GTFZ() + 4 * FREQ();
res = FREQ() / 8;
break;
case 5: //ременная передача
frq = 400;
res = BDFB() / 4;
break;
case 6: //зубчатый ремень
frq = 400;
res = CBDFB() / 4;
break;
case 7: //помпа
frq = 3 * PMFBLD() + 4 * FREQ();
res = FREQ() / 8;
break;
case 8: //планетарый редуктор
frq = 3 * PGFZ() + 4 * FREQ();
res = PGF2() / 8;
break;
case 9: //турбина
frq = 3 * TRFBLD() + 4 * FREQ();
res = FREQ() / 8;
break;
case 10: //электродвигатель
frq = 400;
res = FREQ() / 8;
break;
}; return {
frequency: getStandart(frq),
lines: getStandart(getStandart(frq) / res),
resolution: getStandart(frq) / getStandart(getStandart(frq) / res)
};
};
export function spec_square(data, bnd, frq) {
let lines = data.length; //определение количества линий спектра вибрации
let res = frq / lines; //определение частотного разрешения спектра вибрации (основание прямоугольной трапеции)
let start = 1; //переменная для определения стартового индекса в массиве
let S = 0; //переменная расчетной площади спектра вибрации
if (bnd !== 0) { start = lines - Math.round((frq - bnd) / res) }; //начальная точка отсчета в массиве (стартовый индекс)
for (let i = start - 1; i <= lines - 2; i++) { S = S + res * ((data[i] + data[i + 1]) / 2) }; //вычисляем площадь спектра вибрации
return S;
}; //определение площади спектра
export function mod_factor(ampl, base) {
let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации
let df = spec_params().resolution / filter_width(); //отношение частотному разрешению спектра к ширине фильтра
let mod = Math.sqrt((10 ** (dl / 10) - 1) * df);
return mod;
}; //определение условной глубины модуляции
export function deep_factor(ampl, base) {
let deep = (ampl - base) / (ampl + base) * 100;
return deep;
}; //определение условной глубины модуляции
export function ampl_factor(ampl, base) {
let crest = (ampl / base);
return crest;
}; //определение амплитудного коэффициента