178 lines
8.4 KiB
JavaScript
178 lines
8.4 KiB
JavaScript
"use strict";
|
|
|
|
let signals = gtl.options.record.signalsModel;
|
|
let options = gtl.options;
|
|
let record = gtl.options.record;
|
|
let point = gtl.options.point;
|
|
|
|
// let fnc = gtl.import("user-functions.js"); // используемые функции
|
|
|
|
let plot_ausp_vibr = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
|
let plot_FreqResp_ampl_j = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
|
let plot_FreqResp_phase_j = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
|
|
|
|
|
|
|
// Алгоритм
|
|
// 1. Получить спектры ускорения и силы в комплексном виде (вибропреобразователь и молоток).
|
|
// 2. Преобразовать спектр силы (молотка) в комплексно-сопряжённый вид.
|
|
// 3. Получить кросс-спектр (перекрёстный) между ускорением и силой.
|
|
// 4. Вычислить деление кросс-спектра на спектр силы.
|
|
|
|
|
|
// ОБРАБОТКА СИГНАЛОВ
|
|
// ФИЛЬТРЫ
|
|
// Входной сигнал - виброускорение
|
|
|
|
// Файл импорта функций
|
|
// var imp = gtl.import("...");
|
|
|
|
// ПАРАМЕТРЫ и их ПОРОГОВЫЕ ЗНАЧЕНИЯ (уставки)
|
|
|
|
// Настройки спектров
|
|
// Цвета
|
|
// #ff0000 - красный
|
|
// #00ff00 - зелёный
|
|
// #0000ff - синий
|
|
// #00ddff - голубой
|
|
// #ff3dcc - фиолетовый
|
|
// #ffff00 - жёлтый
|
|
|
|
|
|
|
|
// *** Формирование спектров сигналов ***
|
|
|
|
// Настройки для спектров и АФЧХ
|
|
let frequency = gtl.options.customOptions.frequency; // граничная частота
|
|
let resolution = gtl.options.customOptions.resolution; // частотное разрешение
|
|
let lines = 1 / resolution; // количество линий
|
|
let average = gtl.options.customOptions.average; // количество усреднений
|
|
let overlap = gtl.options.customOptions.overlap; // наложение
|
|
let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра db / unit (1 / 0)
|
|
let view = gtl.spec.unit; // значение view по умолчанию
|
|
let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0)
|
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
|
let ausp_vibr = []; // массив объектов спектров вибрации
|
|
let ausp_force = []; // массив объектов спектров силы по диапазонам [k]
|
|
let counter = 1; // счётчик для цикла по каналам вибрации
|
|
let counter_ranges = 0; // счётчик для цикла по выделенным диапазонам сигналов записи
|
|
let ausp_cross_real = []; // массив объектов действительной части кросс-спектров канала силы [0] и канала вибрации [j]
|
|
let ausp_cross_imag = []; // массив объектов мнимой части кросс-спектров канала силы [0] и канала вибрации [j]
|
|
let freq_resp_real = []; // действительная часть частотного отклика между каналом силы [0] и каналом вибрации [j]
|
|
let freq_resp_imag = []; // мнимая часть частотного отклика между каналом силы [0] и каналом вибрации [j]
|
|
let freq_resp_ampl = []; // амплитуда частотного отклика между каналом силы [0] и каналом вибрации [j]
|
|
let freq_resp_phase = []; // фаза частотного отклика между каналом силы [0] и каналом вибрации [j]
|
|
|
|
// Задание диапазона сигнала для анализа
|
|
// let ranges = gtl.player.custom_ranges;
|
|
// ranges.custom_ranges = [{min : 0.0172949, max: 0.4528125}, ranges[0]];
|
|
// gtl.player.custom_ranges = [gtl.player.stored_ranges[1,2,3]];
|
|
gtl.log.info("Количество выделенных диапазонов", gtl.player.stored_ranges.length);
|
|
|
|
|
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
|
gtl.log.info("Количество каналов кроме силы", signals.length - 1);
|
|
|
|
// Условие отображения спектров в дБ или линейном виде
|
|
if (view_ == 1) {view = gtl.spec.db}
|
|
else if (view_ == 0) {view = gtl.spec.unit}
|
|
|
|
|
|
for (let k = 0; k < gtl.player.stored_ranges.length; k++) { // цикл по диапазонам
|
|
ausp_vibr[k] = [];
|
|
for (let j = 1; j < signals.length; j++) { // цикл по каналам
|
|
|
|
|
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
|
ausp_vibr.push(
|
|
gtl.create_ausp(
|
|
{
|
|
"src": gtl.analog_inputs[signals[j].portNumber], // сигнал вибрации
|
|
"frequency": frequency,
|
|
"resolution": resolution,
|
|
"average": average,
|
|
"overlap": overlap,
|
|
"window": gtl.spec.rectangular,
|
|
"view": view
|
|
}
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
for (let k = 0; k < gtl.player.stored_ranges.length; k++) { // цикл по диапазонам
|
|
// Спектр силы (канал сигнала молотка) канал [0]
|
|
ausp_force.push(
|
|
gtl.create_ausp(
|
|
{
|
|
"src": gtl.analog_inputs[signals[0].portNumber], // сигнал силы
|
|
"frequency": frequency,
|
|
"resolution": resolution,
|
|
"average": average,
|
|
"overlap": overlap,
|
|
"window": gtl.spec.rectangular,
|
|
"view": view
|
|
}
|
|
)
|
|
);
|
|
}
|
|
|
|
|
|
gtl.log.info("Количество спектров вибрации", ausp_vibr.length);
|
|
gtl.log.info("Количество спектров силы", ausp_force.length);
|
|
|
|
//*******************ДИАГНОСТИКА*********************
|
|
//***************************************************
|
|
|
|
// Задаем период проведения диагностики в секундах
|
|
var acq_time = Math.max(ausp_force[0].acq_time) + 0.3;
|
|
gtl.diagnostic.interval = acq_time;
|
|
gtl.log.info("acq_time", acq_time);
|
|
// gtl.diagnostic.interval = 10; // время в секундах (константа)
|
|
// примечание: наблюдается зависимость результатов АФЧХ от времени диагностики
|
|
|
|
function diagnose() {
|
|
|
|
// gtl.log.info("ranges", JSON.stringify(ranges));
|
|
// gtl.log.info("ranges", JSON.stringify(gtl.player.stored_ranges));
|
|
|
|
|
|
|
|
// Графики амплитудных спектров вибрации
|
|
for (let k = 0; k < gtl.player.stored_ranges.length; k++) {
|
|
if (counter_ranges > 0) {
|
|
for (let j = 0; j < ausp_vibr.length; j++) {
|
|
if (counter > 0) {
|
|
|
|
// plot_ausp_vibr.add(
|
|
// {
|
|
// color: 0x34C924,
|
|
// name: `Спектр канала ${j+1} диапазона ${k}, g`,
|
|
// x: ausp_vibr[k][j].resolution,
|
|
// y: ausp_vibr[k][j].data,
|
|
// tags: ["Амплитудный спектр вибрации, g"]
|
|
// }
|
|
// );
|
|
|
|
|
|
}
|
|
};
|
|
counter += 1;
|
|
gtl.log.info("ausp_force[k].length", ausp_force[0].length);
|
|
plot_ausp_vibr.add(
|
|
{
|
|
color: 0xff00f7,
|
|
name: "Спектр силы (канал [0]), N",
|
|
x: 1/lines,
|
|
y: ausp_force[k].data,
|
|
tags: ["Спектр силы (канал [0]), N"]
|
|
});
|
|
}
|
|
};
|
|
counter_ranges += 1;
|
|
|
|
gtl.diagnostic.stop();
|
|
|
|
}
|
|
|