gtld2-diag-scripts/solid/planetary gear.js

459 lines
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
var signals = gtl.options.record.signalsModel;
var options = gtl.options;
var record = gtl.options.record;
var point = gtl.options.point;
var imp = gtl.import("unimodule.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].signalChannel]); //назначение переменной спектра вибрации
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].signalChannel]); //назначение переменной спектра вибрации
ausp.name = "AUSPd"; //присвоение имени спектра
ausp.color = 0x00008500; //цвет линии спектра
//ausp.frequency = 1600; //граничная частота спектра
ausp.lines = 1600; //разрешение спектра (количество линий)
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 n = 3; //количество долей октавного фильтра
var kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2));//коэффициент для полосового фильтра
var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра
filter_spen.kind = gtl.filter_iir.butterworth; //тип окна
filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_spen.order = 10; //порядок фильтра
filter_spen.frequency = 8000; //центральная частота полосового фильтра
//filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201); //расчетная центральная частота полосового фильтра
filter_spen.color = 255;
filter_spen.width = kf * filter_spen.frequency; //ширина полосы фильтра
//спектр огибающей
var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей
spen.name = "SPEN"; //присвоение имени спектра огибающей
spen.color = 0x00ff7373; //цвет линии спектра огибающей
//spen.frequency = spen_frequency(); //граничная частота спектра огибающей
//spen.lines = spen_lines(); //разрешение спектра огибающей (количество линий)
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 и Amplitude в УВЧ диапазоне 10-25 кГц (контроль разрыва масляной пленки)
var filter_uhf = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter_uhf.kind = gtl.filter_iir.butterworth; //тип окна
filter_uhf.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter_uhf.order = 10; //порядок фильтра
filter_uhf.frequency = 17500; //центральная частота полосового фильтра
filter_uhf.width = 15000; //ширина полосы фильтра
var rms_uhf = gtl.add_value_rms(filter_uhf); //назначение переменной RMS
var ampl_uhf = gtl.add_value_ampl(filter_uhf); //назначение переменной Amplitude
rms_uhf.name = "RMS (uhf)" //присвоение имени RMS (uhf)
rms_uhf.time = 0.5; //интервал расчета RMS (uhf)
ampl_uhf.time = 0.5; //интервал расчета Amplitude (uhf)
rms_uhf.avg_cnt = 4; //количество усреднений RMS (uhf)
ampl_uhf.avg_cnt = 4; //количество усреднений Amplitude (uhf)
//Виброскорость в дипазоне 2-1000 Гц (вибромониторинг)
var filter2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter2_1000.kind = gtl.filter_iir.butterworth; //тип окна
filter2_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter2_1000.order = 10; //порядок фильтра
filter2_1000.frequency = 501; //центральная частота полосового фильтра
filter2_1000.width = 998; //ширина полосы фильтра
var filter2_1000v = gtl.add_intg(filter2_1000); // интегрирование
filter2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное)
var rms_v2 = gtl.add_value_rms(filter2_1000v); //назначение переменной RMS(V)
rms_v2.name = "RMS(V) 2-1000 Гц" //присвоение имени RMS(V)
rms_v2.time = 0.5; //интервал расчета RMS(V)
rms_v2.avg_cnt = 4; //количество усреднений RMS(V)
//Виброскорость в дипазоне 10-1000 Гц (вибромониторинг)
var filter10_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный)
filter10_1000.kind = gtl.filter_iir.butterworth; //тип окна
filter10_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой)
filter10_1000.order = 10; //порядок фильтра
filter10_1000.frequency = 505; //центральная частота полосового фильтра
filter10_1000.width = 990; //ширина полосы фильтра
var filter10_1000v = gtl.add_intg(filter10_1000); // интегрирование
filter10_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное)
var rms_v10 = gtl.add_value_rms(filter10_1000v); //назначение переменной RMS(V)
rms_v10.name = "RMS(V) 10-1000 Гц" //присвоение имени RMS(V)
rms_v10.time = 0.5; //интервал расчета RMS(V)
rms_v10.avg_cnt = 4; //количество усреднений RMS(V)
//[Диагностика]
gtl.diagnostic.interval = freq.time * freq.avg_cnt;
let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала
let acq_time = 0;
function diagnose() {
switch (state) {
case 0: // считаем частоту вращения и настраиваем спектры
if (imp.INSTABILITY() > imp.tolerance()) {
gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100);
gtl.log.info("Результат:", "Диагностика прервана");
//gtl.diagnostic.stop(); //принудительная остановка диагностики
let __result = {
Result: false
};
gtl.results = __result;
};
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201);
ausp.frequency = imp.standart_width();
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 1: //частота вращения фиксированная
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201);
ausp.frequency = imp.standart_width();
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 2: //частота вращения из поля INFO (виброметр)
//установка стандартной ширины спектра огибающей и количества линий спектра
spen.frequency = imp.standart_width();
spen.lines = imp.standart_lines();
//filter_spen.frequency = 6013.41 * Math.log(0.266935 * imp.FREQ() + 1.1201);
ausp.frequency = imp.standart_width();
//ausp.lines = imp.standart_lines();
//определение минимально необходимой длительности сигнала для проведения диагностики
var acq_times = [];
acq_times.push(ausp.acq_time);
acq_times.push(spen.acq_time);
acq_time = Math.max(...acq_times);
gtl.diagnostic.interval = acq_time;
state = 3;
break;
case 3: //выполняем анализ спектов
ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации
spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей
//[Блок настройки определения гармоник в спектрах]
//AUSP
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
var Nsat = options.pgN;
var ausp_f1 = ausp.add_harms_set(imp.FREQ(), 10, 0xff004dff, 1); //биение ведущего вала
for (let i = 0; i <= 9; i++) { ausp_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник
ausp_f1.name = 'Биение ведущего вала';
var ausp_f2 = ausp.add_harms_set(imp.PGF2(), 10, 0xff004dff, 1); //биение ведомого вала
for (let i = 0; i <= 9; i++) { ausp_f2.harms[i].tolerance = (1 + i) * imp.PGF2() * imp.tolerance() };
ausp_f2.name = 'Биение ведомого вала';
var ausp_fz1 = ausp.add_harms_set(Nsat * (imp.FREQ() - imp.PGF2()), 5, 0xff004dff, 1); //дефект ведущей шестерни
for (let i = 0; i <= 4; i++) { ausp_fz1.harms[i].tolerance = (1 + i) * Nsat * (imp.FREQ() - imp.PGF2()) * imp.tolerance() };
ausp_fz1.name = 'Дефект ведущей шестерни';
var ausp_fsat = ausp.add_harms_set(2 * imp.PGFSAT(), 5, 0xff004dff, 1); //Дефекты сателлита
for (let i = 0; i <= 4; i++) { ausp_fsat.harms[i].tolerance = (1 + i) * imp.PGFSAT() * imp.tolerance() };
ausp_fsat.name = 'Дефекты сателлита';
var ausp_fcrown = ausp.add_harms_set(Nsat * imp.PGF2(), 5, 0xff004dff, 1); //Дефекты короны
for (let i = 0; i <= 4; i++) { ausp_fcrown.harms[i].tolerance = (1 + i) * Nsat * imp.PGF2() * imp.tolerance() };
ausp_fcrown.name = 'Дефекты короны';
var ausp_fz2 = ausp.add_harms_set(imp.PGFZ(), 5, 0xff004dff, 1); //Дефекты зубчатого зацепления
for (let i = 0; i <= 4; i++) { ausp_fz2.harms[i].tolerance = (1 + i) * imp.PGFZ() * imp.tolerance() };
ausp_fz2.name = 'Дефекты зубчатого зацепления';
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
//ausp.harms_sets[2].modulate(imp.FREQ(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр1
//ausp.harms_sets[3].modulate(imp.GTF2(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр2
//при необходимости можно изменить параметры каждой гармоники индивидуально
/*
ausp.harms_sets[0].harms[0].color = 0x0000ffff;
ausp.harms_sets[0].harms[0].weight = 1;
ausp.harms_sets[0].harms[2].color = 0x0000ff00;
ausp.harms_sets[0].harms[0].weight = 0.5;
ausp.harms_sets[0].modulating[0].harms[0].color = 0x00ffff00;
ausp.harms_sets[0].modulating[0].harms[0].weight = 5;
*/
//SPEN
//присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес.
var spen_f1 = spen.add_harms_set(imp.FREQ(), 10, 0xff004dff, 1); //биение ведущего вала
for (let i = 0; i <= 9; i++) { spen_f1.harms[i].tolerance = (1 + i) * imp.FREQ() * imp.tolerance() }; //коридор обнаружения гармоник
spen_f1.name = 'Биение ведущего вала';
var spen_f2 = spen.add_harms_set(imp.PGF2(), 10, 0xff004dff, 1); //биение ведомого вала
for (let i = 0; i <= 9; i++) { spen_f2.harms[i].tolerance = (1 + i) * imp.PGF2() * imp.tolerance() };
spen_f2.name = 'Биение ведомого вала';
var spen_fz1 = spen.add_harms_set(Nsat * (imp.FREQ() - imp.PGF2()), 5, 0xff004dff, 1); //дефект ведущей шестерни
for (let i = 0; i <= 4; i++) { spen_fz1.harms[i].tolerance = (1 + i) * Nsat * (imp.FREQ() - imp.PGF2()) * imp.tolerance() };
spen_fz1.name = 'Дефект ведущей шестерни';
var spen_fsat = spen.add_harms_set(2 * imp.PGFSAT(), 5, 0xff004dff, 1); //Дефекты сателлита
for (let i = 0; i <= 4; i++) { spen_fsat.harms[i].tolerance = (1 + i) * imp.PGFSAT() * imp.tolerance() };
spen_fsat.name = 'Дефекты сателлита';
var spen_fcrown = spen.add_harms_set(Nsat * imp.PGF2(), 5, 0xff004dff, 1); //Дефекты короны
for (let i = 0; i <= 4; i++) { spen_fcrown.harms[i].tolerance = (1 + i) * Nsat * imp.PGF2() * imp.tolerance() };
spen_fcrown.name = 'Дефекты короны';
var spen_fz2 = spen.add_harms_set(imp.PGFZ(), 3, 0xff004dff, 1); //Дефекты зубчатого зацепления
for (let i = 0; i <= 2; i++) { spen_fz2.harms[i].tolerance = (1 + i) * imp.PGFZ() * imp.tolerance() };
spen_fz2.name = 'Дефекты зубчатого зацепления';
//добавляем модулирующие гармоники: частота, кол-во, цвет, вес
//spen.harms_sets[2].modulate(imp.FREQ(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр1
//spen.harms_sets[3].modulate(imp.GTF2(), 2, 0x000000ff, 1); //модуляция Fн +/- Fвр2
//при необходимости можно изменить параметры каждой гармоники индивидуально
/*
spen.harms_sets[0].harms[0].color = 0x0000ffff;
spen.harms_sets[0].harms[0].weight = 1;
spen.harms_sets[0].harms[2].color = 0x0000ff00;
spen.harms_sets[0].harms[0].weight = 0.5;
spen.harms_sets[0].modulating[0].harms[0].color = 0x00ffff00;
spen.harms_sets[0].modulating[0].harms[0].weight = 5;
*/
//Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра
var AQ = imp.ausp_square(ausp2.data, 800, ausp2.frequency);
//[Блок диагностики]
//вывод информации в лог
//gtl.log.info("description", function)
gtl.log.info("Минимально необходимая длительность сигнала", acq_time);
gtl.log.info("FREQ", imp.FREQ());
gtl.log.info("FZ", imp.PGFZ());
gtl.log.info("F2", imp.PGF2());
gtl.log.info("Граничная частота спектра", imp.spen_frequency());
gtl.log.info("Расчетное разрешение спектра", imp.spen_resolution());
gtl.log.info("Расчетное количество линий", imp.spen_lines());
gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100);
gtl.log.info("spen.frequency", spen.frequency);
gtl.log.info("spen.lines", spen.lines);
gtl.log.info("СКЗ(A) ВЧ вибрации", rms_spen.value);
gtl.log.info("СКЗ(A) УВЧ вибрации", rms_uhf.value);
gtl.log.info("ПФ(A) в ВЧ диапазоне", ampl_spen.value / rms_spen.value);
gtl.log.info("ПФ(A) в УВЧ диапазоне", ampl_uhf.value / rms_uhf.value);
gtl.log.info("СКЗ(V) 2-1000 Гц", rms_v2.value);
gtl.log.info("СКЗ(V) 10-1000 Гц", rms_v10.value);
//вывод количества гармоник
//ausp.harms_sets[0].get_count(1, 2, 1, true);
//1 - начало отсчета гармоники;
//2 - допуситмое количество пропущенных в ряду;
//3 - количество модулирующих с одной стороны;
//4 - модулирующие с двух сторон (true);
//вывод параметров гармоник
//ausp_set0.harms[1].is_present); //гармоника есть (есть превышение на порогом)
//ausp_set0.harms[1].amplitude); //амплитуда
//ausp_set0.harms[1].level); //превышении над средней
//ausp_set0.harms[1].base); //уровень фона под гармоникой
//ausp_set0.harms[1].tolerance; //коридор обнаружения гармоники
var Defect = false;
var Defect_type = [];
//биение ведущего вала
if (
spen.harms_sets[0].get_count(1, 2) >= 3 &
ausp.harms_sets[0].get_count(1, 2) >= 3
) {
Defect = true;
Defect_type.push("Биение ведущего вала");
for (i = 0; i <= 9; i++) {
if (spen_f1.harms[i].is_present == true)
gtl.log.info("Биение ведущего вала. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_f1.harms[i].amplitude, spen_f1.harms[i].base));
}
for (i = 0; i <= 9; i++) {
if (ausp_f1.harms[i].is_present == true)
gtl.log.info("Биение ведущего вала. Признаки в AS " + (i + 1) + "Fвр1", ausp_f1.harms[i].amplitude);
}
}
else
gtl.log.info("Биение ведущего вала", "Признаков дефекта не обнаружено");
//биение ведомого вала
if (
spen.harms_sets[1].get_count(1, 2) >= 3 &
ausp.harms_sets[1].get_count(1, 2) >= 3
) {
Defect = true;
Defect_type.push("Биение ведомого вала");
for (i = 0; i <= 9; i++) {
if (spen_f2.harms[i].is_present == true)
gtl.log.info("Биение ведомого вала. Признаки в ES " + (i + 1) + "Fвр2", imp.deep_factor(spen_f2.harms[i].amplitude, spen_f2.harms[i].base));
}
for (i = 0; i <= 9; i++) {
if (ausp_f2.harms[i].is_present == true)
gtl.log.info("Биение ведомого вала. Признаки в ES " + (i + 1) + "Fвр2", ausp_f2.harms[i].amplitude);
}
} else
gtl.log.info("Биение ведомого вала", "Признаков дефекта не обнаружено");
//дефект ведущей шестерни
if (
spen.harms_sets[2].get_count(1, 1) > 2 &
ausp.harms_sets[2].get_count(1, 1) > 2
) {
Defect = true;
Defect_type.push("Дефект ведущей шестерни");
for (i = 0; i <= 4; i++) {
if (spen_fz1.harms[i].is_present == true)
gtl.log.info("Дефект ведущей шестерни. Признаки в ES " + (i + 1) + "Fвр1", imp.deep_factor(spen_fz1.harms[i].amplitude, spen_fz1.harms[i].base));
}
for (i = 0; i <= 4; i++) {
if (ausp_fz1.harms[i].is_present == true)
gtl.log.info("Дефект ведущей шестерни. Признаки в AS " + (i + 1) + "Fz1", ausp_fz1.harms[i].amplitude);
}
}
else
gtl.log.info("Дефект ведущей шестерни", "Признаков дефекта не обнаружено");
//дефект сателлита
if (
spen.harms_sets[3].get_count(1, 1) > 2 &
ausp.harms_sets[3].get_count(1, 1) > 2
) {
Defect = true;
Defect_type.push("Дефект сателлита");
for (i = 0; i <= 4; i++) {
if (spen_fsat.harms[i].is_present == true)
gtl.log.info("Дефект сателлита. Признаки в ES " + (i + 1) + "Fсат", imp.deep_factor(spen_fsat.harms[i].amplitude, spen_fsat.harms[i].base));
}
for (i = 0; i <= 4; i++) {
if (ausp_fsat.harms[i].is_present == true)
gtl.log.info("Дефект сателлита. Признаки в AS " + (i + 1) + "Fсат", ausp_fsat.harms[i].amplitude);
}
}
else
gtl.log.info("Дефект сателлита", "Признаков дефекта не обнаружено");
//дефект короны
if (
spen.harms_sets[4].get_count(1, 1) > 2 &
ausp.harms_sets[4].get_count(1, 1) > 2
) {
Defect = true;
Defect_type.push("Дефект короны");
for (i = 0; i <= 4; i++) {
if (spen_fcrown.harms[i].is_present == true)
gtl.log.info("Дефект короны. Признаки в ES " + (i + 1) + "Fвр2", imp.deep_factor(spen_fcrown.harms[i].amplitude, spen_fcrown.harms[i].base));
}
for (i = 0; i <= 4; i++) {
if (ausp_fcrown.harms[i].is_present == true)
gtl.log.info("Дефект короны. Признаки в AS " + (i + 1) + "Fвр2", ausp_fcrown.harms[i].amplitude);
}
}
else
gtl.log.info("Дефект короны", "Признаков дефекта не обнаружено");
//дефекты зубчатого зацепления
if (
spen.harms_sets[5].get_count(1, 1) > 2 &
ausp.harms_sets[5].get_count(1, 1) > 2
) {
Defect = true;
Defect_type.push("Дефекты зубчатого зацепления");
for (i = 0; i <= 4; i++) {
if (spen_fz2.harms[i].is_present == true)
gtl.log.info("Дефекты зубчатого зацепления. Признаки в ES " + (i + 1) + "Fz", imp.deep_factor(spen_fz2.harms[i].amplitude, spen_fz2.harms[i].base));
}
for (i = 0; i <= 4; i++) {
if (ausp_fz2.harms[i].is_present == true)
gtl.log.info("Дефекты зубчатого зацепления. Признаки в AS " + (i + 1) + "Fz", ausp_fz2.harms[i].amplitude);
}
}
else
gtl.log.info("Дефекты зубчатого зацепления", "Признаков дефекта не обнаружено");
let __result = {
"Result": true,
"RMS(A)": rms_spen.value,
"RMS_UHF(A)": rms_uhf.value,
"PF(A)": ampl_spen.value / rms_spen.value,
"PF_UHF(A)": ampl_uhf.value / rms_uhf.value,
"RMS(V) 2-1000 Гц": rms_v2.value,
"RMS(V) 10-1000 Гц": rms_v10.value,
"Square": AQ,
"Defects": Defect,
"Types": Defect_type
};
gtl.results = __result;
gtl.diagnostic.stop();
break;
default:
break;
}
}