Gtl.trendspec var: различия между версиями

Материал из GTL-wiki
Перейти к навигации Перейти к поиску
(Новая страница: «== Построение тренда изменения СКЗ виброскорости в диапазоне 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++;
};