170 lines
9.9 KiB
JavaScript
170 lines
9.9 KiB
JavaScript
"use strict";
|
||
var signals = gtl.options.record.signalsModel;
|
||
var options = gtl.options;
|
||
var record = gtl.options.record;
|
||
var point = gtl.options.point;
|
||
|
||
var fnc = gtl.import("user-functions.js");
|
||
var mtx = gtl.import("gt_mtx.js");
|
||
var def = gtl.import("gt_defs.js");
|
||
|
||
//настройки для датчика оборотов
|
||
var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра
|
||
filter_freq.kind = gtl.filter_iir.butterworth; //тип окна
|
||
filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ)
|
||
filter_freq.order = 8; //порядок фильтра
|
||
filter_freq.frequency = 10; //граничная частота фильтра
|
||
|
||
//определение частоты вращения
|
||
var freq = gtl.add_value_freq(filter_freq);
|
||
freq.time = 1;
|
||
freq.avg_cnt = 6;
|
||
//gtl.diagnostic.interval = /*1*/10;
|
||
|
||
//[Блок настройки параметров измерений]
|
||
//мониторинговый спектр вибрации
|
||
var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||
ausp2.name = "AUSPm"; //присвоение имени спектра
|
||
ausp2.color = 0x0000ffff; //цвет линии спектра
|
||
ausp2.frequency = 1600; //граничная частота спектра
|
||
ausp2.lines = 1600; //разрешение спектра (количество линий)
|
||
ausp2.average = 6; //количество усреднений
|
||
ausp2.unit = gtl.spec.db; //отображение в дБ
|
||
|
||
//спектр вибрации
|
||
var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации
|
||
ausp.name = "AUSPd"; //присвоение имени спектра
|
||
ausp.color = 0x0000ff00; //цвет линии спектра
|
||
ausp.frequency = 800; //граничная частота спектра
|
||
ausp.lines = 800; //разрешение спектра (количество линий)
|
||
ausp.average = 6; //количество усреднений
|
||
ausp.unit = gtl.spec.db; //отображение в дБ
|
||
ausp.smoothing_factor = 50; //коэффициент сглаживания спектра
|
||
ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии)
|
||
ausp.peak_level = 20; //порог обнаружения гармоник
|
||
ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/-
|
||
|
||
//фильтр для формирования спектра огибающей
|
||
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра
|
||
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
|
||
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||
filter_spen.order = 10; //порядок фильтра
|
||
filter_spen.frequency = 6400; //центральная частота полосового фильтра
|
||
filter_spen.color = 255;
|
||
filter_spen.width = 1482; //ширина полосы фильтра
|
||
|
||
//спектр огибающей
|
||
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
|
||
spen.name = "SPEN"; //присвоение имени спектра огибающей
|
||
spen.color = 0x00ff0000; //цвет линии спектра огибающей
|
||
spen.frequency = 200; //граничная частота спектра огибающей
|
||
spen.lines = 200; //разрешение спектра огибающей (количество линий)
|
||
spen.average = 8; //количество усреднений
|
||
spen.unit = gtl.spec.db; //отображение в дБ
|
||
spen.window = gtl.spec.hann; //окно
|
||
spen.smoothing_factor = 100; //коэффициент сглаживания спектра
|
||
spen.smoothed_line_color = 0xff004dff; //цвет средней линии
|
||
spen.peak_level = 10; //порог обнаружения гармоник
|
||
spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/-
|
||
|
||
//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения)
|
||
var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen)
|
||
var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen)
|
||
rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen)
|
||
rms_spen.time = 0.5; //интервал расчета RMS (spen)
|
||
ampl_spen.time = 0.5; //интервал расчета Amplitude (spen)
|
||
rms_spen.avg_cnt = 4; //количество усреднений RMS (spen)
|
||
ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen)
|
||
|
||
//RMS виброскорости в диапазоне 10-1000 Гц.
|
||
var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения
|
||
int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование)
|
||
//фильтрация сигнала в диапазоне
|
||
var filter = gtl.add_filter_iir(int); //объявление переменной фильтра
|
||
filter.kind = gtl.filter_iir.butterworth; //тип окна
|
||
filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
|
||
filter.order = 10; //порядок фильтра
|
||
filter.frequency = 505; //центральная частота полосового фильтра
|
||
filter.width = 990; //ширина полосы фильтра
|
||
//определение среднего квадратического значения виброскорости
|
||
var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ
|
||
rms_v.time = 0.5; //время выборки
|
||
rms_v.avg_cnt = 4; //количество усреднений
|
||
|
||
//[Диагностика]
|
||
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
|
||
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
|
||
|
||
function diagnose() {
|
||
switch (state) {
|
||
case 0: // считаем частоту вращения и настраиваем спектры
|
||
if (fnc.INSTABILITY() > fnc.tolerance()) {
|
||
gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100);
|
||
gtl.log.info("Результат:", "Диагностика прервана");
|
||
//gtl.diagnostic.stop(); //принудительная остановка диагностики
|
||
|
||
let __result = {
|
||
Result: false
|
||
};
|
||
gtl.results = __result;
|
||
};
|
||
|
||
if (fnc.FREQ() <= fnc.FREQNESS()) {
|
||
gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS());
|
||
};
|
||
|
||
case 1: //частота вращения фиксированная
|
||
case 2: //частота вращения из поля INFO (виброметр)
|
||
filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей
|
||
filter_spen.width = fnc.filter_width(); //определяем ширину фильтра
|
||
spen.frequency = fnc.spec_params().frequency;
|
||
spen.lines = fnc.spec_params().lines;
|
||
|
||
//определение минимально необходимой длительности сигнала для проведения диагностики
|
||
let time = []; //массив по времени набора данных
|
||
time.push(ausp.acq_time);
|
||
time.push(spen.acq_time);
|
||
let max_acq = Math.max(...time);
|
||
gtl.diagnostic.interval = max_acq;
|
||
state = 3;
|
||
break;
|
||
|
||
case 3: //выполняем анализ спектов
|
||
ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации
|
||
spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей
|
||
|
||
//Вывод информации в лог
|
||
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
|
||
var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency);
|
||
|
||
gtl.log.info("Объект диагностики", options.rbModelName);
|
||
gtl.log.info("FREQ", fnc.FREQ());
|
||
gtl.log.info("FTF", fnc.GTF2());
|
||
gtl.log.info("BPFO", fnc.GTFZ());
|
||
gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance());
|
||
gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency);
|
||
gtl.log.info("Граничная частота SPEN", spen.frequency);
|
||
gtl.log.info("Количество линий SPEN", spen.lines);
|
||
gtl.log.info("Ширина AUSP", ausp.frequency);
|
||
|
||
let spen_mx = mtx.gt_mtx(spen, true);
|
||
let spen_df = def.gt_defs(spen_mx, true);
|
||
let ausp_mx = mtx.gt_mtx(ausp, false);
|
||
|
||
var res = {
|
||
RMSA: rms_spen.value,
|
||
RMSV: rms_v.value,
|
||
PF: ampl_spen.value / rms_spen.value,
|
||
SQR: AQ,
|
||
matrix: spen_mx,
|
||
defs: spen_df
|
||
};
|
||
|
||
gtl.results = res;
|
||
gtl.diagnostic.stop();
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
} |