balancer_calc/scripts/1 пл бф - шаг 7.js

173 lines
7.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"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("functions_for_balance.js");
var fnc = gtl.import("user-functions.js");
// Цвета (для справки)
// #ff0000 - красный
// #00ff00 - зелёный
// #0000ff - синий
// #00ddff - голубой
// #ff3dcc - фиолетовый
// #ffff00 - жёлтый
// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ *****
// ****************************************************************
// Получение входных сигналов
// Настройки для спектров и АФЧХ
var frequency = 1000; // граничная частота
var resolution = 0.5; // частотное разрешение
var average = 3; // количество усреднений
var overlap = 0; // наложение
// ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра
var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]);
filter_2_1000.kind = gtl.filter_iir.butterworth;
filter_2_1000.type = gtl.filter_iir.bandpass;
filter_2_1000.order = 6;
filter_2_1000.frequency = 502; // центральная частота полосового фильтра
filter_2_1000.width = 1000; // ширина полосы фильтра
var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование
filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное)
// Спектр виброскорости для получения 1-й гармоники частоты вращения
var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра
AUSPv.color = 0x00ff0000; // цвет спектра
AUSPv.name = "AUSPv"; // имя спектра
AUSPv.frequency = frequency; // граничная частота спектра
AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий)
AUSPv.average = average; // количество усреднений
AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с
AUSPv.smoothing_factor = 100; // усреднение средней линии
AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии
AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный)
AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/-
// СКЗv
var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v);
RMSv_2_1000.time = 1;
RMSv_2_1000.avg_cnt = 3;
// var idx = 1; // индекс канала вибрации (канал 0 - опорный)
// var cnt = record.signalsModel.length; // количество каналов вибрации
// Спектр виброскорости (новый метод)
var AUSPv_pl = gtl.create_ausp(
{
"src" : filter_2_1000v,
"frequency" : frequency,
"resolution" : resolution,
"average" : average,
"overlap" : overlap,
"window" : gtl.spec.rectangular,
"view" : gtl.spec.unit
}
);
// Объявление графических плоскостей для построения графиков
let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра
// Переменные основные
// параметр вибрации (модуль вектора) - виброскорость (мм/с)
// угол (фаза) вектора - градусы
// масса груза (модуль вектора) - граммы
// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния)
// * - значение получаем из измерительного блока при нажатии кнопки
// ** - значение вводится пользователем
// *** - значение получаем в результате расчёта программы балансировки
// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте
let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза)
let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники)
let A; // вибрация контрольного пуска
let A_ = gtl.options.customOptions.A; // модуль вектора вибрации после установки балансировочного груза */**
// ***** РАСЧЁТЫ *****
// gtl.diagnostic.interval = 15;
gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1;
function diagnose() {
AUSPv.clear_harms_sets(); // очистка спектра
let __AUSPv_tools = gtl.create_spec_tools(
{
data: AUSPv_pl.data,
df: AUSPv_pl.resolution,
base: {
factor: 100,
visible: true,
color: 0x00ff00
},
peaks: {
color: 0xff0000,
visible: true,
level: 0.000001
},
harms: {
tolerance: 1
}
});
let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес)
__row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда
// __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес)
plot_ausp.add(
{
color: 0x0000ff,
name: "Спектр виброскорости",
x: AUSPv_pl.resolution,
y: AUSPv_pl.data,
spec_tools: __AUSPv_tools.to_json()
});
let __result1 = __AUSPv_tools.to_json();
// Амплитуда гармонического ряда частоты вращения
var F1_1_a = __result1.harms.rows[0].harms[0].ampl;
// Частота гармонического ряда частоты вращения
var F1_1_f = __result1.harms.rows[0].harms[0].freq;
// Определение конечных значений переменных
// A вибрация контрольного пуска
if (A_ != 0) {A = A_} // принимает значение из опций
else if (FREQ_0 == 0) {A = RMSv_2_1000.value} // принимает СКЗv
else {A = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала
gtl.log.info("RMSv_2_1000",RMSv_2_1000.value);
gtl.log.info("Вибрация контрольного пуска A",A);
gtl.log.info("F1_1_a (ампл)",F1_1_a);
gtl.log.info("F1_1_f (част)",F1_1_f);
gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval);
gtl.log.info("Частота вращения, Гц", FREQ_0);
// Выдача результата (results)
let __result = {
_001_Ампл_гарм_1F1: F1_1_a,
_002_СКЗ_виброскорость: RMSv_2_1000.value,
_003_Вибрацияонтр_пуска_A: A
};
gtl.results = {"result": __result};
gtl.diagnostic.stop();
}