Gtl.triggers var
Перейти к навигации
Перейти к поиску
Определение направления вращения по сдвигу фазы двух источников импульсов с использованием триггера
"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()
};