balancer_calc/scripts/1 пл - шаг 6.js

740 lines
43 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 - салатовый
// #0fae1a - зелёный
// #0000ff - синий
// #00ddff - голубой
// #ff3dcc - фиолетовый
// #ffff00 - жёлтый
// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой *****
// ***************************************************************
// Объявление графических плоскостей для построения графиков
let plot_pfc = gtl.plots.add("ФЧХ"); // фазо-частотная характеристика
let plot_ausp = gtl.plots.add("Спектр виброскорости"); // объект для спектра
let plot_vibr = gtl.plots.add("Векторы вибрации"); // объект для векторов вибрации
let plot_disb = gtl.plots.add("Расположение дисбаланса"); // объект для дисбаланса
// Переменные основные
// параметр вибрации (модуль вектора) - виброскорость (мм/с)
// угол (фаза) вектора - градусы
// масса груза (модуль ветора) - граммы
// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния)
// * - значение получаем из измерительного блока при нажатии кнопки
// ** - значение вводится пользователем
// *** - значение получаем в результате расчёта программы балансировки
// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте
let R = gtl.options.customOptions.R;// радиус установки грузов ** (для вычисления массы пробного груза)
let P = gtl.options.customOptions.P;// масса ротора, грамм ** (для вычисления массы пробного груза)
let G = gtl.options.customOptions.G;// класс точности балансировки, мм/с ** (ГОСТ 1940)
let n = gtl.options.customOptions.n;// скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса)
let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940)
let U_res2; // остаточный дисбаланс (после балансировки) *** (ГОСТ 1940)
let m_test_ = gtl.options.customOptions.m_test; // масса пробного груза **
let m_test = m_test_; // масса пробного груза ** (конечное значение)
let m_test_corner_ = gtl.options.customOptions.m_test_corner; // угол установки пробного груза **
let m_test_corner = m_test_corner_; // угол установки пробного груза ** (конечное значение)
let m_test_calc_ = gtl.options.customOptions.m_test_calc; // масса пробного груза расчётная ***
let m_test_calc = m_test_calc_; // масса пробного груза расчётная ** (конечное значение)
let freq = gtl.options.customOptions.freq; // частота вращения, Гц */** (для вычисления массы пробного груза)
let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */**
let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение)
let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */**
let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение)
let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации после установки пробного груза */**
let A1 = A1_; // модуль вектора вибрации после установки пробного груза */** (конечное значение)
let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации после установки пробного груза */**
let A1_phase = A1_phase_; // фаза вектора вибрации после установки пробного груза */** (конечное значение)
let dA1; // модуль вектора дельты вибрации после установки пробного груза ***
let dA1_phase; // фаза вектора дельты вибрации после установки пробного груза ***
let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации после установки балансировочного груза */**
let A2 = A2_; // модуль вектора вибрации после установки балансировочного груза */** (конечное значение)
let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации после установки балансировочного груза */**
let A2_phase = A2_phase_; // фаза вектора вибрации после установки балансировочного груза */** (конечное значение)
let dA2; // модуль вектора дельты вибрации после установки балансировочного груза ***
let dA2_phase; // фаза вектора дельты вибрации после установки балансировочного груза ***
let DCI_ = gtl.options.customOptions.DCI; // модуль (мм/с/граммы) динамического коэффициента влияния **/***
let DCI = DCI_; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** (конечное значение)
let DCI_phase_ = gtl.options.customOptions.DCI_phase; // фаза динамического коэффициента влияния **/***
let DCI_phase = DCI_phase_; // фаза динамического коэффициента влияния **/*** (конечное значение)
let Mb_calc = gtl.options.customOptions.Mb_calc; // масса расчётного балансировочного груза **/*** (конечное значение)
let Mb_corner_calc = gtl.options.customOptions.Mb_corner_calc; // угол расчётного балансировочного груза **/*** (конечное значение)
let Mb = gtl.options.customOptions.Mb; // масса применённого балансировочного груза **/*** (конечное значение)
let Mb_corner = gtl.options.customOptions.Mb_corner; // угол применённого балансировочного груза **/*** (конечное значение)
let Mdisb = gtl.options.customOptions.Mdisb; // масса дисбаланса **/*** (конечное значение)
let Mdisb_corner = gtl.options.customOptions.Mdisb_corner; // угол дисбаланса **/*** (конечное значение)
let Mb2_calc; // модуль расчётного вектора балансировочного груза для добалансировки **/*** (конечное значение)
let Mb2_corner_calc; // угол расчётного вектора балансировочного груза для добалансировки **/*** (конечное значение)
let Mdisb2; // масса остаточного дисбаланса **/***
let Mdisb2_corner; // угол расположения остаточного дисбаланса **/***
// Переменные вспомогательные необходимые для расчётов и визуализации
let A0_phase_X; // угол наклона вектора A0 к оси X
let A0_phase_Y; // угол наклона вектора A0 к оси Y
let A0_1_X; // начальная координата вектора A0 по оси X
let A0_2_X; // конечная координата вектора A0 по оси X
let A0_1_Y; // начальная координата вектора A0 по оси Y
let A0_2_Y; // конечная координата вектора A0 по оси Y
let A1_phase_X; // угол наклона вектора A1 к оси X
let A1_phase_Y; // угол наклона вектора A1 к оси Y
let A1_1_X; // начальная координата вектора A1 по оси X
let A1_2_X; // конечная координата вектора A1 по оси X
let A1_1_Y; // начальная координата вектора A1 по оси Y
let A1_2_Y; // конечная координата вектора A1 по оси Y
let dA1_1_X; // начальная координата вектора dA1 по оси X
let dA1_2_X; // конечная координата вектора dA1 по оси X
let dA1_1_Y; // начальная координата вектора dA1 по оси Y
let dA1_2_Y; // конечная координата вектора dA1 по оси Y
let dA2_1_X; // начальная координата вектора dA2 по оси X
let dA2_2_X; // конечная координата вектора dA2 по оси X
let dA2_1_Y; // начальная координата вектора dA2 по оси Y
let dA2_2_Y; // конечная координата вектора dA2 по оси Y
let A2_phase_X; // угол наклона вектора A2 к оси X
let A2_phase_Y; // угол наклона вектора A2 к оси Y
let A2_1_X; // начальная координата вектора A2 по оси X
let A2_2_X; // конечная координата вектора A2 по оси X
let A2_1_Y; // начальная координата вектора A2 по оси Y
let A2_2_Y; // конечная координата вектора A2 по оси Y
let m_test_corner_X;// угол наклона вектора m_test к оси X
let m_test_corner_Y;// угол наклона вектора m_test к оси Y
let m_test_1_X; // начальная координата вектора m_test по оси X
let m_test_2_X; // конечная координата вектора m_test по оси X
let m_test_1_Y; // начальная координата вектора m_test по оси Y
let m_test_2_Y; // конечная координата вектора m_test по оси Y
let Mb_corner_calc_X; // угол наклона расчётного вектора Mb_calc к оси X
let Mb_corner_calc_Y; // угол наклона расчётного вектора Mb_calc к оси Y
let Mb_1_calc_X; // начальная координата расчётного вектора Mb_calc по оси X
let Mb_2_calc_X; // конечная координата расчётного вектора Mb_calc по оси X
let Mb_1_calc_Y; // начальная координата расчётного вектора Mb_calc по оси Y
let Mb_2_calc_Y; // конечная координата расчётного вектора Mb_calc по оси Y
let Mb_corner_X; // угол наклона вектора Mb к оси X
let Mb_corner_Y; // угол наклона вектора Mb к оси Y
let Mb_1_X; // начальная координата вектора Mb по оси X
let Mb_2_X; // конечная координата вектора Mb по оси X
let Mb_1_Y; // начальная координата вектора Mb по оси Y
let Mb_2_Y; // конечная координата вектора Mb по оси Y
let Mdisb_corner_X;// угол наклона вектора Mdisb к оси X
let Mdisb_corner_Y;// угол наклона вектора Mdisb к оси Y
let Mdisb_1_X; // начальная координата вектора Mdisb по оси X
let Mdisb_2_X; // конечная координата вектора Mdisb по оси X
let Mdisb_1_Y; // начальная координата вектора Mdisb по оси Y
let Mdisb_2_Y; // конечная координата вектора Mdisb по оси Y
let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2 к оси X
let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2 к оси Y
let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2 по оси X
let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2 по оси X
let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2 по оси Y
let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2 по оси Y
let Mdisb2_corner_X;// угол наклона вектора Mdisb2 к оси X
let Mdisb2_corner_Y;// угол наклона вектора Mdisb2 к оси Y
let Mdisb2_1_X; // начальная координата вектора Mdisb2 по оси X
let Mdisb2_2_X; // конечная координата вектора Mdisb2 по оси X
let Mdisb2_1_Y; // начальная координата вектора Mdisb2 по оси Y
let Mdisb2_2_Y; // конечная координата вектора Mdisb2 по оси Y
// ***** РАСЧЁТЫ *****
// gtl.diagnostic.interval = 15;
// gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1;
gtl.diagnostic.interval = gtl.acq_time + 1;
// let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала
function diagnose() {
// РАСЧЁТЫ (балансировочный калькулятор)
// ШАГ 6 - отчёт о проведённых операциях:
// из предыдущих шагов переносится:
// начальная вибрация A0,
// вибрации после установки пробного груза A1,
// вибрации после установки балансировочного груза A2,
// расчётный пробный груз m_test_calc
// масса и угол установки выбранного пробного груза m_test
// масса и угол расположения дисбаланса Mdisb
// масса и угол расположения расчётного балансировочного груза Mb_calc
// масса и угол расположения выбранного балансировочного груза Mb
// масса и угол расположения остаточного дисбаланса Mdisb2
// масса и угол расположения груза для добалансировки Mb2_calc
// построение графика вибрации: A0, A1, dA, A2 и dA2
// построение графиков расположения дисбалансов и балансировочных грузов: m_test, Mb_calc, Mb, Mdisb, Mb2_calc, Mdisb2
// определение угла наклона вектора A0 к осям X и Y
if (A0_phase <= 90) {
A0_phase_X = 90 - A0_phase}
if (A0_phase <= 180) {
A0_phase_X = A0_phase - 90}
if (A0_phase <= 270) {
A0_phase_X = 270 - A0_phase}
if (A0_phase <= 360) {
A0_phase_X = A0_phase - 270}
if (A0_phase <= 90) {
A0_phase_Y = A0_phase}
if (A0_phase <= 180) {
A0_phase_Y = 180 - A0_phase}
if (A0_phase <= 270) {
A0_phase_Y = A0_phase - 180}
if (A0_phase <= 360) {
A0_phase_Y = 360 - A0_phase}
// определение координат вектора A0
var xA0_array = []; // массив координат точек вектора A0 по оси X
var yA0_array = []; // массив координат точек вектора A0 по оси Y
A0_1_X = 0;
if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * Math.PI/180)) * A0
} else {A0_2_X = Math.abs(Math.cos(A0_phase_X * Math.PI/180)) * A0 * (-1)}
A0_1_Y = 0;
if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * Math.PI/180)) * A0
} else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * Math.PI/180)) * A0 * (-1)}
xA0_array[0] = A0_1_X;
xA0_array[1] = A0_2_X;
yA0_array[0] = A0_1_Y;
yA0_array[1] = A0_2_Y;
// определение угла наклона вектора A1 к осям X и Y
if (A1_phase <= 90) {
A1_phase_X = 90 - A1_phase}
if (A1_phase <= 180) {
A1_phase_X = A1_phase - 90}
if (A1_phase <= 270) {
A1_phase_X = 270 - A1_phase}
if (A1_phase <= 360) {
A1_phase_X = A1_phase - 270}
if (A1_phase <= 90) {
A1_phase_Y = A1_phase}
if (A1_phase <= 180) {
A1_phase_Y = 180 - A1_phase}
if (A1_phase <= 270) {
A1_phase_Y = A1_phase - 180}
if (A1_phase <= 360) {
A1_phase_Y = 360 - A1_phase}
// определение координат вектора A1
var xA1_array = []; // массив координат точек вектора A1 по оси X
var yA1_array = []; // массив координат точек вектора A1 по оси Y
A1_1_X = 0;
if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * Math.PI/180)) * A1
} else {A1_2_X = Math.abs(Math.cos(A1_phase_X * Math.PI/180)) * A1 * (-1)}
A1_1_Y = 0;
if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * Math.PI/180)) * A1
} else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * Math.PI/180)) * A1 * (-1)}
xA1_array[0] = A1_1_X;
xA1_array[1] = A1_2_X;
yA1_array[0] = A1_1_Y;
yA1_array[1] = A1_2_Y;
// определение угла наклона вектора A2 к осям X и Y
if (A2_phase <= 90) {
A2_phase_X = 90 - A2_phase}
if (A2_phase <= 180) {
A2_phase_X = A2_phase - 90}
if (A2_phase <= 270) {
A2_phase_X = 270 - A2_phase}
if (A2_phase <= 360) {
A2_phase_X = A2_phase - 270}
if (A2_phase <= 90) {
A2_phase_Y = A2_phase}
if (A2_phase <= 180) {
A2_phase_Y = 180 - A2_phase}
if (A2_phase <= 270) {
A2_phase_Y = A2_phase - 180}
if (A2_phase <= 360) {
A2_phase_Y = 360 - A2_phase}
// определение координат вектора A2
var xA2_array = []; // массив координат точек вектора A2 по оси X
var yA2_array = []; // массив координат точек вектора A2 по оси Y
A2_1_X = 0;
if (A2_phase <= 180) {A2_2_X = Math.abs(Math.cos(A2_phase_X * Math.PI/180)) * A2
} else {A2_2_X = Math.abs(Math.cos(A2_phase_X * Math.PI/180)) * A2 * (-1)}
A2_1_Y = 0;
if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * Math.PI/180)) * A2
} else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * Math.PI/180)) * A2 * (-1)}
xA2_array[0] = A2_1_X;
xA2_array[1] = A2_2_X;
yA2_array[0] = A2_1_Y;
yA2_array[1] = A2_2_Y;
// определение модуля вектора dA2
var xdA2_array = []; // массив координат точек вектора dA2 по оси X
var ydA2_array = []; // массив координат точек вектора dA2 по оси Y
dA2_1_X = A0_2_X;
dA2_2_X = A2_2_X;
dA2_1_Y = A0_2_Y;
dA2_2_Y = A2_2_Y;
dA2 = Math.sqrt(Math.pow(dA2_2_X - dA2_1_X, 2) + Math.pow(dA2_2_Y - dA2_1_Y, 2))
xdA2_array[0] = dA2_1_X;
xdA2_array[1] = dA2_2_X;
ydA2_array[0] = dA2_1_Y;
ydA2_array[1] = dA2_2_Y;
// определение фазы вектора dA2
if ((dA2_2_Y < dA2_1_Y) && (dA2_2_X < dA2_1_X)) {
dA2_phase = 180 + (((Math.acos((Math.abs(dA2_2_Y - dA2_1_Y)) / dA2)) * 180 ) / Math.PI)}
if ((dA2_2_Y > dA2_1_Y) && (dA2_2_X > dA2_1_X)) {
dA2_phase = (((Math.acos((Math.abs(dA2_2_Y - dA2_1_Y)) / dA2)) * 180 ) / Math.PI)}
if ((dA2_2_Y > dA2_1_Y) && (dA2_2_X < dA2_1_X)) {
dA2_phase = 360 - (((Math.acos((Math.abs(dA2_2_Y - dA2_1_Y)) / dA2)) * 180 ) / Math.PI)}
if ((dA2_2_Y < dA2_1_Y) && (dA2_2_X > dA2_1_X)) {
dA2_phase = 180 - (((Math.acos((Math.abs(dA2_2_Y - dA2_1_Y)) / dA2)) * 180 ) / Math.PI)}
if (dA2_phase > 360) {dA2_phase = dA2_phase - 360}
// определение модуля вектора dA1
var xdA1_array = []; // массив координат точек вектора dA1 по оси X
var ydA1_array = []; // массив координат точек вектора dA1 по оси Y
dA1_1_X = A0_2_X;
dA1_2_X = A1_2_X;
dA1_1_Y = A0_2_Y;
dA1_2_Y = A1_2_Y;
dA1 = Math.sqrt(Math.pow(dA1_2_X - dA1_1_X, 2) + Math.pow(dA1_2_Y - dA1_1_Y, 2))
xdA1_array[0] = dA1_1_X;
xdA1_array[1] = dA1_2_X;
ydA1_array[0] = dA1_1_Y;
ydA1_array[1] = dA1_2_Y;
// определение фазы вектора dA1
if ((dA1_2_Y < dA1_1_Y) && (dA1_2_X < dA1_1_X)) {
dA1_phase = 180 + (((Math.acos((Math.abs(dA1_2_Y - dA1_1_Y)) / dA1)) * 180 ) / Math.PI)}
if ((dA1_2_Y > dA1_1_Y) && (dA1_2_X > dA1_1_X)) {
dA1_phase = (((Math.acos((Math.abs(dA1_2_Y - dA1_1_Y)) / dA1)) * 180 ) / Math.PI)}
if ((dA1_2_Y > dA1_1_Y) && (dA1_2_X < dA1_1_X)) {
dA1_phase = 360 - (((Math.acos((Math.abs(dA1_2_Y - dA1_1_Y)) / dA1)) * 180 ) / Math.PI)}
if ((dA1_2_Y < dA1_1_Y) && (dA1_2_X > dA1_1_X)) {
dA1_phase = 180 - (((Math.acos((Math.abs(dA1_2_Y - dA1_1_Y)) / dA1)) * 180 ) / Math.PI)}
if (dA1_phase > 360) {dA1_phase = dA1_phase - 360}
// определение координат точек окружности графика для отображения векторов вибрации
var xV_array = []; // массив координат точек окружности V по оси X
var yV_array = []; // массив координат точек окружности V по оси Y
var x0V = 0; // центр в начале координат
var y0V = 0; // центр в начале координат
for (let i=0; i<=359; i++ ) {
xV_array.push(x0V + (Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,A2,dA1,dA2)*0.1) * (Math.sin((i) * Math.PI / 180)));
yV_array.push(y0V + (Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,A2,dA1,dA2)*0.1) * (Math.cos((i) * Math.PI / 180)));}
// определение угла наклона вектора m_test к осям X и Y
if (m_test_corner <= 90) {
m_test_corner_X = 90 - m_test_corner}
if (m_test_corner <= 180) {
m_test_corner_X = m_test_corner - 90}
if (m_test_corner <= 270) {
m_test_corner_X = 270 - m_test_corner}
if (m_test_corner <= 360) {
m_test_corner_X = m_test_corner - 270}
if (m_test_corner <= 90) {
m_test_corner_Y = m_test_corner}
if (m_test_corner <= 180) {
m_test_corner_Y = 180 - m_test_corner}
if (m_test_corner <= 270) {
m_test_corner_Y = m_test_corner - 180}
if (m_test_corner <= 360) {
m_test_corner_Y = 360 - m_test_corner}
// определение координат вектора m_test
m_test_1_X = 0;
if (m_test_corner <= 180) {m_test_2_X = Math.abs(Math.cos(m_test_corner_X * Math.PI/180)) * m_test * (-1)
} else {m_test_2_X = Math.abs(Math.cos(m_test_corner_X * Math.PI/180)) * m_test}
m_test_1_Y = 0;
if (m_test_corner <= 90 || m_test_corner >= 270) {m_test_2_Y = Math.abs(Math.cos(m_test_corner_Y * Math.PI/180)) * m_test
} else {m_test_2_Y = Math.abs(Math.cos(m_test_corner_Y * Math.PI/180)) * m_test * (-1)}
// Дисбаланс и балансировочный груз ДО балансировки (Mb,Mb_calc,Mdisb)
// определение угла наклона вектора балансировочного груза Mb_calc к осям X и Y
if (Mb_corner_calc <= 90) {
Mb_corner_calc_X = 90 - Mb_corner_calc}
if (Mb_corner_calc <= 180) {
Mb_corner_calc_X = Mb_corner_calc - 90}
if (Mb_corner_calc <= 270) {
Mb_corner_calc_X = 270 - Mb_corner_calc}
if (Mb_corner_calc <= 360) {
Mb_corner_calc_X = Mb_corner_calc - 270}
if (Mb_corner_calc <= 90) {
Mb_corner_calc_Y = Mb_corner_calc}
if (Mb_corner_calc <= 180) {
Mb_corner_calc_Y = 180 - Mb_corner_calc}
if (Mb_corner_calc <= 270) {
Mb_corner_calc_Y = Mb_corner_calc - 180}
if (Mb_corner_calc <= 360) {
Mb_corner_calc_Y = 360 - Mb_corner_calc}
// определение координат вектора балансировочного груза Mb_calc
Mb_1_calc_X = 0;
if (Mb_corner_calc <= 180) {Mb_2_calc_X = Math.abs(Math.cos(Mb_corner_calc_X * Math.PI/180)) * Mb_calc * (-1)
} else {Mb_2_calc_X = Math.abs(Math.cos(Mb_corner_calc_X * Math.PI/180)) * Mb_calc}
Mb_1_calc_Y = 0;
if (Mb_corner_calc <= 90 || Mb_corner_calc >= 270) {Mb_2_calc_Y = Math.abs(Math.cos(Mb_corner_calc_Y * Math.PI/180)) * Mb_calc
} else {Mb_2_calc_Y = Math.abs(Math.cos(Mb_corner_calc_Y * Math.PI/180)) * Mb_calc * (-1)}
// определение угла наклона вектора балансировочного груза Mb к осям X и Y
if (Mb_corner <= 90) {
Mb_corner_X = 90 - Mb_corner}
if (Mb_corner <= 180) {
Mb_corner_X = Mb_corner - 90}
if (Mb_corner <= 270) {
Mb_corner_X = 270 - Mb_corner}
if (Mb_corner <= 360) {
Mb_corner_X = Mb_corner - 270}
if (Mb_corner <= 90) {
Mb_corner_Y = Mb_corner}
if (Mb_corner <= 180) {
Mb_corner_Y = 180 - Mb_corner}
if (Mb_corner <= 270) {
Mb_corner_Y = Mb_corner - 180}
if (Mb_corner <= 360) {
Mb_corner_Y = 360 - Mb_corner}
// определение координат вектора балансировочного груза Mb
Mb_1_X = 0;
if (Mb_corner <= 180) {Mb_2_X = Math.abs(Math.cos(Mb_corner_X * Math.PI/180)) * Mb * (-1)
} else {Mb_2_X = Math.abs(Math.cos(Mb_corner_X * Math.PI/180)) * Mb}
Mb_1_Y = 0;
if (Mb_corner <= 90 || Mb_corner >= 270) {Mb_2_Y = Math.abs(Math.cos(Mb_corner_Y * Math.PI/180)) * Mb
} else {Mb_2_Y = Math.abs(Math.cos(Mb_corner_Y * Math.PI/180)) * Mb * (-1)}
// определение угла наклона вектора дисбаланса Mdisb к осям X и Y
if (Mdisb_corner <= 90) {
Mdisb_corner_X = 90 - Mdisb_corner}
if (Mdisb_corner <= 180) {
Mdisb_corner_X = Mdisb_corner - 90}
if (Mdisb_corner <= 270) {
Mdisb_corner_X = 270 - Mdisb_corner}
if (Mdisb_corner <= 360) {
Mdisb_corner_X = Mdisb_corner - 270}
if (Mdisb_corner <= 90) {
Mdisb_corner_Y = Mdisb_corner}
if (Mdisb_corner <= 180) {
Mdisb_corner_Y = 180 - Mdisb_corner}
if (Mdisb_corner <= 270) {
Mdisb_corner_Y = Mdisb_corner - 180}
if (Mdisb_corner <= 360) {
Mdisb_corner_Y = 360 - Mdisb_corner}
// определение координат вектора дисбаланса Mdisb
Mdisb_1_X = 0;
if (Mdisb_corner <= 180) {Mdisb_2_X = Math.abs(Math.cos(Mdisb_corner_X * Math.PI/180)) * Mdisb * (-1)
} else {Mdisb_2_X = Math.abs(Math.cos(Mdisb_corner_X * Math.PI/180)) * Mdisb}
Mdisb_1_Y = 0;
if (Mdisb_corner <= 90 || Mdisb_corner >= 270) {Mdisb_2_Y = Math.abs(Math.cos(Mdisb_corner_Y * Math.PI/180)) * Mdisb
} else {Mdisb_2_Y = Math.abs(Math.cos(Mdisb_corner_Y * Math.PI/180)) * Mdisb * (-1)}
// Дисбаланс и балансировочный груз ПОСЛЕ балансировки (Mb2_calc, Mdisb2)
// определение модуля вектора Mb2
Mb2_calc = A2 / DCI;
// определение угла вектора Mb
if ((A2_phase - DCI_phase + 180) < 360) {
Mb2_corner_calc = (A2_phase - DCI_phase + 180)
} else {Mb2_corner_calc = (A2_phase - DCI_phase + 180) - 360}
// определение угла наклона вектора балансировочного груза Mb2 к осям X и Y
if (Mb2_corner_calc <= 90) {
Mb2_corner_calc_X = 90 - Mb2_corner_calc}
if (Mb2_corner_calc <= 180) {
Mb2_corner_calc_X = Mb2_corner_calc - 90}
if (Mb2_corner_calc <= 270) {
Mb2_corner_calc_X = 270 - Mb2_corner_calc}
if (Mb2_corner_calc <= 360) {
Mb2_corner_calc_X = Mb2_corner_calc - 270}
if (Mb2_corner_calc <= 90) {
Mb2_corner_calc_Y = Mb2_corner_calc}
if (Mb2_corner_calc <= 180) {
Mb2_corner_calc_Y = 180 - Mb2_corner_calc}
if (Mb2_corner_calc <= 270) {
Mb2_corner_calc_Y = Mb2_corner_calc - 180}
if (Mb2_corner_calc <= 360) {
Mb2_corner_calc_Y = 360 - Mb2_corner_calc}
// определение координат вектора балансировочного груза Mb2
Mb2_1_calc_X = 0;
if (Mb2_corner_calc <= 180) {Mb2_2_calc_X = Math.abs(Math.cos(Mb2_corner_calc_X * Math.PI/180)) * Mb2_calc * (-1)
} else {Mb2_2_calc_X = Math.abs(Math.cos(Mb2_corner_calc_X * Math.PI/180)) * Mb2_calc}
Mb2_1_calc_Y = 0;
if (Mb2_corner_calc <= 90 || Mb2_corner_calc >= 270) {Mb2_2_calc_Y = Math.abs(Math.cos(Mb2_corner_calc_Y * Math.PI/180)) * Mb2_calc
} else {Mb2_2_calc_Y = Math.abs(Math.cos(Mb2_corner_calc_Y * Math.PI/180)) * Mb2_calc * (-1)}
// определение массы дисбаланса 2
Mdisb2 = Mb2_calc; // равен массе балансировочного груз
// определение угла расположения дисбаланса 2
if ((Mb2_corner_calc + 180) > 360) {
Mdisb2_corner = (Mb2_corner_calc + 180) - 360}
else if ((Mb2_corner_calc + 180) < 0) {
Mdisb2_corner = (Mb2_corner_calc + 180) + 360}
else {Mdisb2_corner = (Mb2_corner_calc + 180)}
// определение угла наклона вектора дисбаланса Mdisb2 к осям X и Y
if (Mdisb2_corner <= 90) {
Mdisb2_corner_X = 90 - Mdisb2_corner}
if (Mdisb2_corner <= 180) {
Mdisb2_corner_X = Mdisb2_corner - 90}
if (Mdisb2_corner <= 270) {
Mdisb2_corner_X = 270 - Mdisb2_corner}
if (Mdisb2_corner <= 360) {
Mdisb2_corner_X = Mdisb2_corner - 270}
if (Mdisb2_corner <= 90) {
Mdisb2_corner_Y = Mdisb2_corner}
if (Mdisb2_corner <= 180) {
Mdisb2_corner_Y = 180 - Mdisb2_corner}
if (Mdisb2_corner <= 270) {
Mdisb2_corner_Y = Mdisb2_corner - 180}
if (Mdisb2_corner <= 360) {
Mdisb2_corner_Y = 360 - Mdisb2_corner}
// определение координат вектора дисбаланса Mdisb2
Mdisb2_1_X = 0;
if (Mdisb2_corner <= 180) {Mdisb2_2_X = Math.abs(Math.cos(Mdisb2_corner_X * Math.PI/180)) * Mdisb2 * (-1)
} else {Mdisb2_2_X = Math.abs(Math.cos(Mdisb2_corner_X * Math.PI/180)) * Mdisb2}
Mdisb2_1_Y = 0;
if (Mdisb2_corner <= 90 || Mdisb2_corner >= 270) {Mdisb2_2_Y = Math.abs(Math.cos(Mdisb2_corner_Y * Math.PI/180)) * Mdisb2
} else {Mdisb2_2_Y = Math.abs(Math.cos(Mdisb2_corner_Y * Math.PI/180)) * Mdisb2 * (-1)}
// Координаты масс для визуализации
// определение координат точек окружности обозначения массы пробного груза
var x_m_test_array = []; // массив координат точек окружности m_test по оси X
var y_m_test_array = []; // массив координат точек окружности m_test по оси Y
var x0_m_test = m_test_2_X; // центр по X
var y0_m_test = m_test_2_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_m_test_array.push(x0_m_test + (Math.max(Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_m_test_array.push(y0_m_test + (Math.max(Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности обозначения массы балансировочного груза Mb_calc
var x_Mb_calc_array = []; // массив координат точек окружности Mb_calc по оси X
var y_Mb_calc_array = []; // массив координат точек окружности Mb_calc по оси Y
var x0_Mb_calc = Mb_2_calc_X; // центр по X
var y0_Mb_calc = Mb_2_calc_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_Mb_calc_array.push(x0_Mb_calc + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_Mb_calc_array.push(y0_Mb_calc + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности обозначения массы балансировочного груза Mb
var x_Mb_array = []; // массив координат точек окружности Mb по оси X
var y_Mb_array = []; // массив координат точек окружности Mb по оси Y
var x0_Mb = Mb_2_X; // центр по X
var y0_Mb = Mb_2_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_Mb_array.push(x0_Mb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_Mb_array.push(y0_Mb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности обозначения массы дисбаланса Mdisb
var x_Mdisb_array = []; // массив координат точек окружности Mdisb по оси X
var y_Mdisb_array = []; // массив координат точек окружности Mdisb по оси Y
var x0_Mdisb = Mdisb_2_X; // центр по X
var y0_Mdisb = Mdisb_2_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_Mdisb_array.push(x0_Mdisb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_Mdisb_array.push(y0_Mdisb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности обозначения массы балансировочного груза Mb2
var x_Mb2_calc_array = []; // массив координат точек окружности Mb2 по оси X
var y_Mb2_calc_array = []; // массив координат точек окружности Mb2 по оси Y
var x0_Mb2_calc = Mb2_2_calc_X; // центр по X
var y0_Mb2_calc = Mb2_2_calc_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_Mb2_calc_array.push(x0_Mb2_calc + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности обозначения массы дисбаланса Mdisb2
var x_Mdisb2_array = []; // массив координат точек окружности Mdisb2 по оси X
var y_Mdisb2_array = []; // массив координат точек окружности Mdisb2 по оси Y
var x0_Mdisb2 = Mdisb2_2_X; // центр по X
var y0_Mdisb2 = Mdisb2_2_Y; // центр по Y
for (let i=0; i<=359; i++ ) {
x_Mdisb2_array.push(x0_Mdisb2 + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1 * (Math.cos((i) * Math.PI / 180))));}
// определение координат точек окружности графика для отображения расположения дисбаланса
var xD_array = []; // массив координат точек окружности D по оси X
var yD_array = []; // массив координат точек окружности D по оси Y
var x0D = 0; // центр в начале координат
var y0D = 0; // центр в начале координат
for (let i=0; i<=359; i++ ) {
xD_array.push(x0D + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1) * (Math.sin((i) * Math.PI / 180)));
yD_array.push(y0D + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2,m_test)*0.1) * (Math.cos((i) * Math.PI / 180)));}
// Вычисление допустимого остаточного дисбаланса
U_per = (1000 * (G * P)) / (Math.PI * n / 30);
// Остаточный дисбаланс
U_res2 = Mdisb2 * R;
// Графики вибрации
plot_vibr.add(
{
color: 0x0000ff,
name: "Вибрация_A0",
x: xA0_array,
y: yA0_array,
});
plot_vibr.add(
{
color: 0x00ff00,
name: "Вибрация_A1",
x: xA1_array,
y: yA1_array,
});
plot_vibr.add(
{
color: 0x0000ff,
name: "Вибрация_A2",
x: xA2_array,
y: yA2_array,
});
plot_vibr.add(
{
color: 0xff0000,
name: "Вибрация_dA2",
x: xdA2_array,
y: ydA2_array,
});
plot_vibr.add(
{
color: 0xff0000,
name: "Вибрация_dA1",
x: xdA1_array,
y: ydA1_array,
});
plot_vibr.add(
{
color: 0x00ffffff,
name: "График векторов вибрации",
x: xV_array,
y: yV_array,
});
plot_vibr.add(
{
color: 0x00ffffff,
name: "границы",
x: [-(Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), (Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), (Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2)],
y: [(Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2), (Math.max(A0,A1,dA1,A2,dA2)+Math.max(A0,A1,dA1,A2,dA2)*0.2)]
});
plot_disb.add(
{
color: 0x0000ff,
name: "Пробный груз",
x: x_m_test_array,
y: y_m_test_array,
});
plot_disb.add(
{
color: 0x0fae1a,
name: "Балансировочный груз расчёт",
x: x_Mb_calc_array,
y: y_Mb_calc_array,
});
plot_disb.add(
{
color: 0x00ff00,
name: "Балансировочный груз",
x: x_Mb_array,
y: y_Mb_array,
});
plot_disb.add(
{
color: 0xff0000,
name: "Дисбаланс",
x: x_Mdisb_array,
y: y_Mdisb_array,
});
plot_disb.add(
{
color: 0x00ddff,
name: "Балансировочный груз для добалансировки",
x: x_Mb2_calc_array,
y: y_Mb2_calc_array,
});
plot_disb.add(
{
color: 0xff3dcc,
name: "Дисбаланс остаточный после балансировки",
x: x_Mdisb2_array,
y: y_Mdisb2_array,
});
plot_disb.add(
{
color: 0x00ffffff,
name: "График расположения дисбаланса",
x: xD_array,
y: yD_array,
});
plot_disb.add(
{
color: 0x00ffffff,
name: "границы",
x: [-(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2)],
y: [(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2,m_test)*0.2)]
});
gtl.log.info("Mb (балансировочный груз)",Mb);
gtl.log.info("Mb_corner (угол установки груза)",Mb_corner);
gtl.log.info("Mb_calc (балансировочный груз расчёт)",Mb_calc);
gtl.log.info("Mb_corner_calc (угол установки груза расчёт)",Mb_corner_calc);
gtl.log.info("Mdisb (дисбаланс)",Mdisb);
gtl.log.info("Mdisb_corner (угол расположения дисбаланса)",Mdisb_corner);
gtl.log.info("Mb2_calc (балансировочный груз 2)",Mb2_calc);
gtl.log.info("Mb2_corner_calc (угол установки груза 2)",Mb2_corner_calc);
gtl.log.info("Mdisb2 (дисбаланс 2)",Mdisb2);
gtl.log.info("Mdisb2_corner (угол расположения дисбаланса 2)",Mdisb2_corner);
gtl.log.info("m_test (пробный груз введёный)",m_test);
gtl.log.info("m_test_corner (угол установки пробного груза)",m_test_corner);
gtl.log.info("m_test_calc (пробный груз расчётный)",m_test_calc);
gtl.log.info("A0",A0);
gtl.log.info("A0_phase",A0_phase);
gtl.log.info("A1",A1);
gtl.log.info("A1_phase",A1_phase);
gtl.log.info("A2",A2);
gtl.log.info("A2_phase",A2_phase);
gtl.log.info("Допустимый остаточный дисбаланс", U_per);
gtl.log.info("Остаточный дисбаланс (после балансировки)", U_res2);
// Выдача результата (results)
let __result = {
_001астращ_обмин: n,
_002_Ампл_вибр_пуска_A0: A0,
_003аза_вибр_пуска_A0: A0_phase,
_004_Ампл_вибр_пуска_A1: A1,
_005аза_вибр_пуска_A1: A1_phase,
_006_Ампл_вибр_пуска_A2: A2,
_007аза_вибр_пуска_A2: A2_phase,
_008_Масса_дисбаланса: Mdisb,
_009_Угол_дисбаланса: Mdisb_corner,
_010_Масса_баланс_груза: Mb,
_011_Угол_баланс_груза: Mb_corner,
_012_Масса_баланс_груза_расч: Mb_calc,
_013_Угол_баланс_груза_расч: Mb_corner_calc,
_014_Масса_дисбаланса_2: Mdisb2,
_015_Угол_дисбаланса_2: Mdisb2_corner,
_016_Масса_баланс_груза_2: Mb2_calc,
_017_Угол_баланс_груза_2: Mb2_corner_calc,
_018_Масса_пробн_груза_расч: m_test_calc,
_019_Масса_пробн_груза: m_test,
_020_Угол_пробн_груза: m_test_corner,
_021_МодульКВ: DCI,
_022азаКВ: DCI_phase,
_023опуст_ост_дисб_г_мм: U_per,
_024_Остат_дисб_после_г_мм: U_res2
};
gtl.results = {"result": __result};
gtl.diagnostic.stop();
// break;
// default:
// break;
// }
}