2024-07-23 04:08:35 +03:00
|
|
|
|
export function getdBi(d, rpm) {
|
|
|
|
|
const a = 3.135283064375708;
|
|
|
|
|
const b = 4.999746694992378;
|
|
|
|
|
const k = -58.16048390995372;
|
|
|
|
|
|
|
|
|
|
function getLogUnitValue(lin_unit_value, base, k, c) {
|
|
|
|
|
return c * Math.log(lin_unit_value) / Math.log(base) + k;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function getDLogUnitValue(d) {
|
|
|
|
|
const base = 0.5921510231527015;
|
|
|
|
|
const k = -3.015055963296224;
|
|
|
|
|
const c = -0.9111115009540;
|
|
|
|
|
return getLogUnitValue(d, base, k, c);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function getRpmLogUnitValue(rpm) {
|
|
|
|
|
const base = 6.69896278136537;
|
|
|
|
|
const k = -0.008927920952982967;
|
|
|
|
|
const c = 3.3041976536011;
|
|
|
|
|
return getLogUnitValue(rpm, base, k, c);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return a * getDLogUnitValue(d) + b * getRpmLogUnitValue(rpm) + k;
|
|
|
|
|
}; //расчет естественного уровня вибрации dBi
|
|
|
|
|
|
|
|
|
|
export function todB(arr, type) {
|
|
|
|
|
let __limit = 3e-4; //пороговое значение
|
|
|
|
|
if (type != undefined) {
|
|
|
|
|
switch (type) {
|
|
|
|
|
case 0: __limit = 1e-6; break;
|
|
|
|
|
case 1: __limit = 1e-9; break;
|
|
|
|
|
case 2: __limit = 1e-12; break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let __result = arr.map((item) => (item = 20 * Math.log10(item / __limit)));
|
|
|
|
|
return __result;
|
|
|
|
|
}; //перевод значений массива в дБ
|
|
|
|
|
|
|
|
|
|
export function getSpm(args) {
|
|
|
|
|
let __src1 = args.src1.values; //массив данных амплитуд импульсов для расчета коврового уровня
|
|
|
|
|
let __src2 = args.src2.values; //массив данных амплитуд импульсов для определения максимума
|
|
|
|
|
let __frq = args.freq; //частота вращения
|
|
|
|
|
let __d = args.d_inner; //диаметр внутреннего кольца подшипника
|
|
|
|
|
|
|
|
|
|
let __cpt = todB(__src1); //переводим значения массива в дБ
|
|
|
|
|
let __max = todB(__src2); //переводим значения массива в дБ
|
|
|
|
|
|
|
|
|
|
let __dBi = getdBi(__d, __frq * 60); //вычисляем естественный уровень вибрации нового подшипника
|
|
|
|
|
let __dBc = Math.sqrt(__cpt.reduce((acc, item) => (acc + item ** 2), 0) / __cpt.length); //вычисляем ковровый уровень (СКЗ) в дБ
|
|
|
|
|
let __dBm = Math.max(...__max); //вычисляем максимальную амплитуду импульсов в дБ
|
|
|
|
|
let __dBn = __dBm - __dBi; //нормализованное значение амплитуды
|
|
|
|
|
|
|
|
|
|
let __max0 = __max.slice(0); //делаем копию массива для сортировки
|
|
|
|
|
let __maxSort = __max0.sort((a, b) => (b - a)); //сортируем массив по убыванию
|
|
|
|
|
let __max40 = __maxSort.slice(0, 40); //выделяем 40 первых (максимальных) значений из массива
|
|
|
|
|
let __LR = __max40.reduce((acc, item) => (acc + item), 0) / __max40.length; //определяем LR (среднее из 40 импульсов)
|
|
|
|
|
|
|
|
|
|
let __max1000 = __max.slice(0, __max.length / 2); //выделяем 1000 значений из массива
|
|
|
|
|
let __HR = Math.sqrt(__max1000.reduce((acc, item) => (acc + item ** 2), 0) / __max1000.length); //вычисляем HR (СКЗ) в дБ
|
|
|
|
|
|
|
|
|
|
let __state = "Норма"; //общее состояние
|
|
|
|
|
switch (true) {
|
|
|
|
|
case (__dBn > 20) && (__dBn < 35):
|
|
|
|
|
__state = "Предупреждение";
|
|
|
|
|
break;
|
|
|
|
|
case __dBn >= 35:
|
|
|
|
|
__state = "Опасность";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
args.canvas.add(
|
|
|
|
|
{
|
|
|
|
|
color: args.src2.color,
|
|
|
|
|
name: args.src2.name,
|
|
|
|
|
x: args.src2.time,
|
|
|
|
|
y: __max
|
|
|
|
|
}
|
|
|
|
|
); //рисуем форму импульсов SPM
|
|
|
|
|
|
|
|
|
|
args.canvas.add(
|
|
|
|
|
{
|
|
|
|
|
color: 0xFFFF00,
|
|
|
|
|
name: "dBc",
|
|
|
|
|
x: args.src2.time,
|
|
|
|
|
y: __max.map((item) => (item = __dBc))
|
|
|
|
|
}
|
|
|
|
|
); //рисуем уровень dBc
|
|
|
|
|
|
|
|
|
|
args.canvas.add(
|
|
|
|
|
{
|
|
|
|
|
color: 0xFF0000,
|
|
|
|
|
name: "dBm",
|
|
|
|
|
x: args.src2.time,
|
|
|
|
|
y: __max.map((item) => (item = __dBm))
|
|
|
|
|
}
|
|
|
|
|
); //рисуем уровень dBm
|
|
|
|
|
|
|
|
|
|
args.canvas.add(
|
|
|
|
|
{
|
|
|
|
|
color: 0xFFA500,
|
|
|
|
|
name: "HR",
|
|
|
|
|
x: args.src2.time,
|
|
|
|
|
y: __max.map((item) => (item = __HR))
|
|
|
|
|
}
|
|
|
|
|
); //рисуем уровень HR
|
|
|
|
|
|
|
|
|
|
args.canvas.add(
|
|
|
|
|
{
|
|
|
|
|
color: 0xFF00CC,
|
|
|
|
|
name: "LR",
|
|
|
|
|
x: args.src2.time,
|
|
|
|
|
y: __max.map((item) => (item = __LR))
|
|
|
|
|
}
|
|
|
|
|
); //рисуем уровень LR
|
|
|
|
|
|
|
|
|
|
let __result = {
|
|
|
|
|
values: __max,
|
|
|
|
|
dBi: __dBi,
|
|
|
|
|
dBc: __dBc,
|
|
|
|
|
dBm: __dBm,
|
|
|
|
|
dBn: __dBn,
|
|
|
|
|
HR: __HR,
|
|
|
|
|
LR: __LR,
|
|
|
|
|
state: __state
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return __result;
|
2024-07-23 04:52:25 +03:00
|
|
|
|
}; //оценка состояния методом spmVM
|