gtld2-diag-scripts/spmVM.js

134 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = {
dBi: __dBi,
dBc: __dBc,
dBm: __dBm,
dBn: __dBn,
HR: __HR,
LR: __LR,
state: __state
};
return __result;
}; //оценка состояния методом spmVM