Построение круговой диаграммы временного сигнала вибрации
"use strict";
let signals = gtl.options.record.signalsModel;
let tacho = gtl.options.record.tachoOptions;
let __src = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала
let __frq = tacho.tachoValue; //частота вращения
let __prd = 1 / __frq //период колебаний
__src.history = __prd; //размер сохраняемых данных (время запроса) для сигнала, сек;
function create_round(data) {
let x_array = []; // массив координат точек по оси X
let y_array = []; // массив координат точек по оси Y
let x0_stat = 0; // координата x центра окружности
let y0_stat = 0; // координата y центра окружности
let r0 = 40 // радиус
const { sin, cos, PI } = Math; //разложение объекта Math только для удобства
const length = data.length; //длина массива данных
const factor = 2 * PI / length; //выведено за цикл, чтобы не считать каждый раз
for (let i = 0; i < length; i++) {
const angle = i * factor; //расчет угла
const radius = r0 + data[i]; //натягиваем амплитуду сигнала на радиус окружности
x_array.push(x0_stat + radius * sin(angle));
y_array.push(y0_stat + radius * cos(angle));
}
return {
x_data: x_array,
y_data: y_array
}
}
let round_plot = gtl.plots.add("Round Diagram"); // объект для визуализации зазоров
let wave_plot = gtl.plots.add("Waveworm"); // объект для визуализации зазоров
gtl.diagnostic.interval = gtl.acq_time
//[Диагностика]
function diagnose() {
let __src_data = __src.getHistoryArray(); //получение массива значений
let __rnd = create_round(__src_data); //строим круговую диаграмму
//круговая диаграмма
round_plot.add({
color: 0x55ff7f,
name: "Signal",
x: __rnd.x_data,
y: __rnd.y_data
});
//временной сигнал
wave_plot.add({
color: 0x2B6CC4,
name: "Signal",
x: 1 / __src.rate,
y: __src_data
})
//рамка для отображения границ осей
round_plot.add({
color: 0x00ffffff,
name: "frame",
x: [-100, -100, 100, 100],
y: [100, -100, -100, 100]
})
// Добавляем в блок результата
gtl.results = {
'freq': __frq,
'period': __prd,
'data array': __src_data.length,
'sample rate': __src.rate
}
gtl.diagnostic.stop();
};