Gtl.triggers var

Материал из GTL-wiki
Перейти к навигации Перейти к поиску

Определение направления вращения по сдвигу фазы двух источников импульсов с использованием триггера

"use strict";
let time = 0.5; //время записи для анализа
let src1 = gtl.analog_inputs[0]; //первый источник сигнала
src1.history = time; //выборка для построения графика первого сигнала импульсов

//Искусственный сдвиг фазы с применением фильтра для реализации примера
let src2 = gtl.add_filter_iir(src1); //источник второго сигнала
src2.kind = gtl.filter_iir.bessel; //тип оконной функции
src2.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ)
src2.order = 12; //порядок фильтра
src2.frequency = 30; //граничная частота фильтра
src2.history = time; //выборка для построения графика второгосигнала импульсов
 
let time_window = 0.02 //временное окно наблюдения для срабатывания триггера
let arr1 = []; //массив отсчетов триггера 1
let arr2 = []; //массив отсчетов триггера 2
gtl.diagnostic.interval = time; //интервал запуска функции диагностики

let thresh1 = gtl.create_moving_thresh({
  src: src1, //источник сигнала
  name: "thresh1", //наименивание
  time: time_window, //временное окно наблюдения
  level: 0 //уровень срабатывания триггера
}); //триггер 1

let thresh2 = gtl.create_moving_thresh({
  src: src2, //источник сигнала
  name: "thresh2", //наименивание
  time: time_window, //временное окно наблюдения
  level: 0 //уровень срабатывания триггера
}); //триггер 2

thresh1.triggered.connect(thresh_triggered_event1);
thresh2.triggered.connect(thresh_triggered_event2);

//функция обработки события при срабатывании триггера 1
function thresh_triggered_event1(flag, sample) {
  if (flag) {
    let start1 = sample / thresh1.rate; //время срабатывания триггера1
    arr1.push(start1);
    gtl.log.info(`trigger1 on time`, start1);
  };
};

//функция обработки события при срабатывании триггера 1
function thresh_triggered_event2(flag, sample) {
  if (flag) {
    let start2 = sample / thresh2.rate; //время срабатывания триггера2
    arr2.push(start2);
    gtl.log.info(`trigger2 on time`, start2);
  };
};


let plot = gtl.plots.add("Impulses"); //создаем координатную плоскость
function diagnose() {
  // Вычисляем разницу среднюю разницу фаз
  let difference = arr1.reduce((sum, item) => sum + item, 0) - arr2.reduce((sum, item) => sum + item, 0); 
  
  // Определяем направление вращения
  let d = "Не определено";
  if (difference < 0) { d = "Прямое" } else { d = "Обратное" };

  plot.add({
    color: 0x0000ff, //цвет графика
    name: "src1", //наименование графика
    x: 1 / src1.rate, //частотное разрешение
    y: src1.getHistoryArray() //получение данных выборки
  }); //рисуем сигнал 1 для контроля

  plot.add({
    color: 0xff00ff, //цвет графика
    name: "src2", //наименование графика
    x: 1 / src2.rate, //частотное разрешение
    y: src2.getHistoryArray() //получение данных выборки
  }); //рисуем сигнал 2 для контроля

  // Добавляем данные в блок результата
  gtl.results = {
    arr1: arr1,
    arr2: arr2,
    dir: d
  }
  
  gtl.log.info("Diagnostic", 'stop');
  gtl.diagnostic.stop()
};