Gtl.trendspec var: различия между версиями
Перейти к навигации
Перейти к поиску
(Новая страница: «== Построение тренда изменения СКЗ виброскорости в диапазоне 40-400 Гц и построение спектра вибрации при превышении порогового значения СКЗ== <pre> "use strict"; let signals = gtl.options.record.signalsModel; let record_time = gtl.options.record.playerTime; //указанная длительность записи или полная длина g...») |
|||
| Строка 1: | Строка 1: | ||
== Построение тренда изменения СКЗ виброскорости в диапазоне 40-400 Гц и построение спектра вибрации при превышении порогового значения СКЗ== | == Построение тренда изменения СКЗ виброскорости в диапазоне 40-400 Гц по всем каналам записи и построение спектра вибрации при превышении порогового значения СКЗ== | ||
<pre> | <pre> | ||
"use strict"; | "use strict"; | ||
Текущая версия от 01:14, 9 апреля 2026
Построение тренда изменения СКЗ виброскорости в диапазоне 40-400 Гц по всем каналам записи и построение спектра вибрации при превышении порогового значения СКЗ
"use strict";
let signals = gtl.options.record.signalsModel;
let record_time = gtl.options.record.playerTime; //указанная длительность записи или полная длина gtl.options.record.playerTime;
let time = 1; //период расчета СКЗ
let counter = 0; //счетчик
let thres = 14; //предельный уровень СКЗ
let rms_arr = []; //массив значений СКЗ
for (let i = 0; i < signals.length; i++) { rms_arr.push([]) }; //формируем вложенные массивы по количеству каналов
function create_rms(src) {
// Фильтр ФНЧ
let __lpf = gtl.add_filter_iir(src); //объявление переменной фильтра
__lpf.kind = gtl.filter_iir.butterworth; //тип окна
__lpf.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ)
__lpf.order = 6; //порядок фильтра
__lpf.frequency = 400; //граничная частота фильтра
// Интегрирование сигнала виброускорения (преобразуем в виброскорость)
let __int = gtl.add_intg(__lpf); //интегрирование
__int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование)
__int.scale = 1000; //переводим метры в миллиметры
// Фильтр ФВЧ
let __hpf = gtl.add_filter_iir(__int); //объявление переменной фильтра
__hpf.kind = gtl.filter_iir.butterworth; //тип окна
__hpf.type = gtl.filter_iir.highpass; //тип фильтра (ФВЧ)
__hpf.order = 6; //порядок фильтра
__hpf.frequency = 40; //граничная частота фильтра
let __rms = gtl.add_value_rms(__hpf); //объявление переменной СКЗ
__rms.time = time; //время выборки
return __rms
}
let rmss = []; //массив объектов СКЗ
let specs = []; //массив объектов спектра
//формируем объекты для расчета СКЗ и построения спектров
for (let i = 0; i < signals.length; i++) {
let __rmsv = create_rms(gtl.analog_inputs[signals[i].portNumber]); //формируем объект СКЗ по каждому каналу
let __ausp = gtl.create_ausp({
src: gtl.analog_inputs[signals[i].portNumber], //источник сигнала
frequency: 40000, //граничная частота
resolution: 10, //частотное разрешение
average: 1, //количество усреднений
overlap: 0, //коэффициент перекрытия
window: gtl.spec.hann, //оконная функция
view: gtl.spec.unit //единицы отображения амплитуды
});
rmss.push(__rmsv); //добавляем объект RMS в массив
specs.push(__ausp); //добавляем объект спектра в массив
}
let plot0 = gtl.plots.add("Тренды СКЗ");
let plot2 = gtl.plots.add("Спектры");
let __result = {}; //результат анализа составляющих спектра
gtl.diagnostic.interval = gtl.acq_time; //интервал запуска функции диагностики
gtl.log.info("Интервал запуска диагностики", gtl.diagnostic.interval);
gtl.log.info("Длительность сигнала", gtl.options.record.playerTime);
gtl.log.info('Количество каналов в записи', signals.length);
function diagnose() {
for (let i = 0; i < signals.length; i++) {
let value = rmss[i].value;
rms_arr[i].push(value);
gtl.log.info(`${signals[i].name} - RMS`, value);
if (value >= thres) {
gtl.log.info("Внимание! Превышение порога по СКЗ(V)", `В канале ${signals[i].name} на ${counter} секунде записи`)
plot2.add({
color: 0x55aa00,
name: `${signals[i].name} - AUSP`,
x: specs[i].resolution,
y: specs[i].data
}); //рисуем тренд СКЗ виброскорости на plot для каждого канала
}
};
//отображаем накопленные данные на plot
if (counter >= Math.round(record_time / gtl.diagnostic.interval)) {
for (let i = 0; i < signals.length; i++) {
plot0.add({
color: 0x55aaff,
name: `${signals[i].name} - RMS`,
x: gtl.diagnostic.interval,
y: rms_arr[i]
}); //рисуем тренд СКЗ виброскорости на plot для каждого канала
}
gtl.results = __result;
gtl.diagnostic.stop()
}
// gtl.log.info('Счетчик', counter);
counter++;
};