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

181 lines
11 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 m_test_ = gtl.options.customOptions.m_test; // масса пробного груза **
let m_test; // масса пробного груза ** (конечное значение)
let m_test_corner_ = gtl.options.customOptions.m_test_corner; // угол установки пробного груза **
let m_test_corner = m_test_corner_; // угол установки пробного груза ** (конечное значение)
let m_test_calc; // масса пробного груза расчётная ***
let n = gtl.options.customOptions.n; // частота вращения, об/мин */** (для вычисления массы пробного груза)
let R_ = gtl.options.customOptions.R; // радиус установки грузов, мм ** (для вычисления массы пробного груза)
let R = R_; // радиус установки грузов, мм ** (для вычисления массы пробного груза) (конечное значение)
let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза)
let P = P_; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение)
let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */**
let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение)
let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */**
let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение)
// Переменные вспомогательные необходимые для расчётов
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 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
// ***** РАСЧЁТЫ *****
// gtl.diagnostic.interval = 15;
gtl.diagnostic.interval = gtl.acq_time + 1;
function diagnose() {
// РАСЧЁТЫ (балансировочный калькулятор)
// ШАГ 2 - выбор массы и положения пробного груза:
// вычисление рекомендуемой массы пробного груза m_test_calc
// ввод пользователем массы пробного груза и угла его установки m_test
// построение графика расположения массы пробного груза m_test
// из предыдущих шагов переносятся: частота вращения freq, радиус установки грузов R,
// масса ротора P, уровень начальной вибрации A0
// Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы)
// m_test масса пробного груза
if (P != 0 && R != 0)
{m_test_calc = 804 * ((P * A0) / (R/10 * n)); // R/10 - перевод мм в см
} else {m_test_calc = 0}
if (m_test_ != 0) {m_test = m_test_} // принимает значение из опций
else {m_test = 0} // значение не введено
// определение угла наклона вектора 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 * 3.1415/180)) * m_test * (-1)
} else {m_test_2_X = Math.abs(Math.cos(m_test_corner_X * 3.1415/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 * 3.1415/180)) * m_test
} else {m_test_2_Y = Math.abs(Math.cos(m_test_corner_Y * 3.1415/180)) * m_test * (-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(m_test)*0.1 * (Math.sin((i) * Math.PI / 180))));
y_m_test_array.push(y0_m_test + (Math.max(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(m_test)+Math.max(m_test)*0.1) * (Math.sin((i) * Math.PI / 180)));
yD_array.push(y0D + (Math.max(m_test)+Math.max(m_test)*0.1) * (Math.cos((i) * Math.PI / 180)));}
plot_disb.add(
{
color: 0x0000ff,
name: "Пробный груз",
x: x_m_test_array,
y: y_m_test_array,
});
plot_disb.add(
{
color: 0x00ffffff,
name: "График расположения дисбаланса",
x: xD_array,
y: yD_array,
});
plot_disb.add(
{
color: 0x00ffffff,
name: "границы",
x: [-(Math.max(m_test)+Math.max(m_test)*0.2), -(Math.max(m_test)+Math.max(m_test)*0.2), (Math.max(m_test)+Math.max(m_test)*0.2), (Math.max(m_test)+Math.max(m_test)*0.2)],
y: [(Math.max(m_test)+Math.max(m_test)*0.2), -(Math.max(m_test)+Math.max(m_test)*0.2), -(Math.max(m_test)+Math.max(m_test)*0.2), (Math.max(m_test)+Math.max(m_test)*0.2)]
});
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("Масса ротора, кг", P);
gtl.log.info("Радиус установки грузов, мм", R);
gtl.log.info("Начальная вибрация A0",A0);
gtl.log.info("Частота вращения, об/мин", n);
// Выдача результата (results)
let __result = {
_001римен_пробный_груз: m_test,
_002_Угол_устан_пробн_груза: m_test_corner,
_003_Расч_пробный_груз: m_test_calc,
_004астращ_обмин: n
};
gtl.results = {"result": __result};
gtl.diagnostic.stop();
}