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

406 lines
22 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 - жёлтый
// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ *****
// ****************************************************************
// Объявление графических плоскостей для построения графиков
let plot_balance = gtl.plots.add("Расположение дисбаланса и балансировочного груза"); // создание объекта для спектра
let plot_vibration = gtl.plots.add("Вибрации пробных пусков"); // создание объекта для визуализации вибрации пробных пусков
// Переменные основные
// параметр вибрации (модуль вектора) - виброскорость (мм/с)
// угол (фаза) вектора - градусы
// масса груза (модуль вектора) - граммы
// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния)
// * - значение получаем из измерительного блока при нажатии кнопки
// ** - значение вводится пользователем
// *** - значение получаем в результате расчёта программы балансировки
// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте
let test = ''; // проверка условия корректности данных
let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза)
let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники)
let R_ = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза)
let R = R_; // радиус установки грузов ** (конечное значение)
let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза)
let P = P_; // масса ротора, кг ** (конечное значение)
let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940)
let U_res; // остаточный дисбаланс *** (ГОСТ 1940)
let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940)
let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */**
let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение)
let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации пробного пуска №1 */**
let A1 = A1_; // модуль вектора вибрации пробного пуска №1 */** (конечное значение)
let A1_corner = 0; // угол установки груза пробного пуска №1 (фиксированный параметр, НЕ ИЗМЕНЯТЬ)
let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации пробного пуска №2 */**
let A2 = A2_; // модуль вектора вибрации пробного пуска №2 */** (конечное значение)
let A2_corner = 120; // угол установки груза пробного пуска №2 (фиксированный параметр, НЕ ИЗМЕНЯТЬ)
let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации пробного пуска №3 */**
let A3 = A3_; // модуль вектора вибрации пробного пуска №3 */** (конечное значение)
let A3_corner = 240; // угол установки груза пробного пуска №3 (фиксированный параметр, НЕ ИЗМЕНЯТЬ)
let Mb; // масса балансировочного груза ***
let Mb_corner; // угол установки балансировочного груза ***
let Mdisb; // масса дисбаланса ***
let Mdisb_corner; // угол расположения дисбаланса ***
let m_test_ = gtl.options.customOptions.m_test; // модуль вектора пробного груза **
let m_test = m_test_; // модуль вектора пробного груза ** (конечное значение)
let m_test_calc; // масса пробного груза расчётная ***
// Переменные вспомогательные необходимые для расчётов
var x00 = 0; // координата центра окружности нулевого пуска по оси X
var y00 = 0; // координата центра окружности нулевого пуска по оси Y
var x_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси X
var y_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси Y
// переменные для обозначения пересечения окружностей A1 и A2
var d12; // расстояние между центрами окружностей пробных пусков №1 и 2
var b1; // расстояние от центра окружности A1 до точки пересечения P11 с окружностью A2
var c1; // расстояние от центра окружности A2 до точки пересечения P11 с окружностью A1
// d12 = b1 + c1
var P11; // центральная точка между P21 и P_21 (_ обозначает штрих)
var P21; // точка пересечения окружностей A1 и A2
var P_21; // точка пересечения окружностей A1 и A2
var h1; // расстояние от точки P11 до точки P21 и P_21
var P11_X; // координата точки P11 по оси X
var P11_Y; // координата точки P11 по оси Y
var P21_X; // координата точки P21 по оси X
var P21_Y; // координата точки P21 по оси Y
var P_21_X; // координата точки P_21 по оси X
var P_21_Y; // координата точки P_21 по оси Y
// переменные для обозначения пересечения окружностей A2 и A3
var d23; // расстояние между центрами окружностей пробных пусков №2 и 3
var b2; // расстояние от центра окружности A2 до точки пересечения P12 с окружностью A3
var c2; // расстояние от центра окружности A3 до точки пересечения P12 с окружностью A2
// d23 = b2 + c2
var P12; // центральная точка между P22 и P_22 (_ обозначает штрих)
var P22; // точка пересечения окружностей A2 и A3
var P_22; // точка пересечения окружностей A2 и A3
var h2; // расстояние от точки P12 до точки P22 и P_22
var P12_X; // координата точки P12 по оси X
var P12_Y; // координата точки P12 по оси Y
var P22_X; // координата точки P22 по оси X
var P22_Y; // координата точки P22 по оси Y
var P_22_X; // координата точки P_22 по оси X
var P_22_Y; // координата точки P_22 по оси Y
// переменные для обозначения пересечения окружностей A3 и A1
var d31; // расстояние между центрами окружностей пробных пусков №3 и 1
var b3; // расстояние от центра окружности A3 до точки пересечения P12 с окружностью A1
var c3; // расстояние от центра окружности A1 до точки пересечения P12 с окружностью A3
// d31 = b3 + c3
var P13; // центральная точка между P23 и P_23 (_ обозначает штрих)
var P23; // точка пересечения окружностей A3 и A1
var P_23; // точка пересечения окружностей A3 и A1
var h3; // расстояние от точки P13 до точки P23 и P_23
var P13_X; // координата точки P13 по оси X
var P13_Y; // координата точки P13 по оси Y
var P23_X; // координата точки P23 по оси X
var P23_Y; // координата точки P23 по оси Y
var P_23_X; // координата точки P_23 по оси X
var P_23_Y; // координата точки P_23 по оси Y
// точка пересечения окружностей
var K; // точка пересечения окружностей A1, A2, A3
var K_X; // координата точки K по оси X
var K_Y; // координата точки K по оси Y
var OK; // длина отрезка от центра окружности A0 до точки пересечения окружностей всех пробных пусков
// ***** РАСЧЁТЫ *****
// gtl.diagnostic.interval = 15;
gtl.diagnostic.interval = gtl.acq_time + 1;
function diagnose() {
// РАСЧЁТЫ (балансировочный калькулятор)
// определение координат точек окружности A0
var x0_array = []; // массив координат точек окружности A0 по оси X
var y0_array = []; // массив координат точек окружности A0 по оси Y
for (let i=0; i<=360; i++ ) {
x0_array.push(x00 + A0 * (Math.sin((i) * Math.PI / 180)));
y0_array.push(y00 + A0 * (Math.cos((i) * Math.PI / 180)));}
//gtl.log.info("centr x00",x00);
//gtl.log.info("centr y00",y00);
// определение координат точек окружности A1
var x1_array = []; // массив координат точек окружности A1 по оси X
var y1_array = []; // массив координат точек окружности A1 по оси Y
var x01 = x0_array[0];
var y01 = y0_array[0];
for (let i=0; i<=360; i++ ) {
x1_array.push(x01 + A1 * (Math.sin((i) * Math.PI / 180)));
y1_array.push(y01 + A1 * (Math.cos((i) * Math.PI / 180)));}
// определение координат точек окружности A2
var x2_array = []; // массив координат точек окружности A2 по оси X
var y2_array = []; // массив координат точек окружности A2 по оси Y
var x02 = x0_array[120];
var y02 = y0_array[120];
for (let i=0; i<=360; i++ ) {
x2_array.push(x02 + A2 * (Math.sin((i) * Math.PI / 180)));
y2_array.push(y02 + A2 * (Math.cos((i) * Math.PI / 180)));}
// определение координат точек окружности A3
var x3_array = []; // массив координат точек окружности A3 по оси X
var y3_array = []; // массив координат точек окружности A3 по оси Y
var x03 = x0_array[240];
var y03 = y0_array[240];
for (let i=0; i<=360; i++ ) {
x3_array.push(x03 + A3 * (Math.sin((i) * Math.PI / 180)));
y3_array.push(y03 + A3 * (Math.cos((i) * Math.PI / 180)));}
// определение координат точек окружности R (плоскость установки грузов)
var xR_array = []; // массив координат точек окружности R по оси X
var yR_array = []; // массив координат точек окружности R по оси Y
var x0R = 0; // центр в начале координат
var y0R = 0; // центр в начале координат
for (let i=0; i<=360; i++ ) {
xR_array.push(x0R + R * (Math.sin((i) * Math.PI / 180)));
yR_array.push(y0R + R * (Math.cos((i) * Math.PI / 180)));}
// Непосредственно вычисления для определения величины и угла дисбаланса
// определение вспомогательных переменных
d12 = Math.sqrt(Math.pow(x02 - x01, 2) + Math.pow(y02 - y01, 2));
d23 = d12;
d31 = d12;
c1 = (Math.pow(A1,2) - Math.pow(A2,2) + Math.pow(d12,2)) / (2 * d12);
b1 = d12 - c1;
c2 = (Math.pow(A2,2) - Math.pow(A3,2) + Math.pow(d12,2)) / (2 * d12);
b2 = d12 - c2;
c3 = (Math.pow(A3,2) - Math.pow(A1,2) + Math.pow(d12,2)) / (2 * d12);
b3 = d12 - c3;
h1 = Math.sqrt(Math.pow(A1,2) - Math.pow(c1,2));
h2 = Math.sqrt(Math.pow(A2,2) - Math.pow(c2,2));
h3 = Math.sqrt(Math.pow(A3,2) - Math.pow(c3,2));
P11_X = x01 + ((c1 * (x02 - x01)) / d12);
P11_Y = y01 + ((c1 * (y02 - y01)) / d12);
P21_X = P11_X - ((h1 * (y02 - y01)) / d12);
P21_Y = P11_Y + ((h1 * (x02 - x01)) / d12);
P_21_X = P11_X + ((h1 * (y02 - y01)) / d12);
P_21_Y = P11_Y - ((h1 * (x02 - x01)) / d12);
P12_X = x02 + ((c2 * (x03 - x02)) / d12);
P12_Y = y02 + ((c2 * (y03 - y02)) / d12);
P22_X = P12_X - ((h2 * (y03 - y02)) / d12);
P22_Y = P12_Y + ((h2 * (x03 - x02)) / d12);
P_22_X = P12_X + ((h2 * (y03 - y02)) / d12);
P_22_Y = P12_Y - ((h2 * (x03 - x02)) / d12);
P13_X = x03 + ((c3 * (x01 - x03)) / d12);
P13_Y = y03 + ((c3 * (y01 - y03)) / d12);
P23_X = P13_X - ((h3 * (y01 - y03)) / d12);
P23_Y = P13_Y + ((h3 * (x01 - x03)) / d12);
P_23_X = P13_X + ((h3 * (y01 - y03)) / d12);
P_23_Y = P13_Y - ((h3 * (x01 - x03)) / d12);
K_X = (P_21_X + P_22_X + P_23_X) / 3;
K_Y = (P_21_Y + P_22_Y + P_23_Y) / 3;
OK = Math.sqrt(Math.pow(K_X,2) + Math.pow(K_Y,2));
// определение координат точек отрезка ОК
var xOK_array = []; // массив координат точек отрезка OK по оси X
var yOK_array = []; // массив координат точек отрезка OK по оси Y
var x0_OK = 0; // отрезок OK выходит из начала координат x=0
var y0_OK = 0; // отрезок OK выходит из начала координат y=0
var x_OK = K_X; // конечная координата отрезка OK по X
var y_OK = K_Y; // конечная координата отрезка OK по Y
xOK_array[0] = x0_OK;
xOK_array[1] = x_OK;
yOK_array[0] = y0_OK;
yOK_array[1] = y_OK;
// определение массы балансировочного груза Mb
Mb = (m_test * A0) / OK;
// определение угла установки балансировочного груза Mb_corner
if ((K_X > 0) && (K_Y >= 0)) {
Mb_corner = (Math.acos(Math.abs(K_Y) / OK) * 180 ) / Math.PI}
if ((K_X <= 0) && (K_Y < 0)) {
Mb_corner = 180 + (Math.acos(Math.abs(K_Y) / OK) * 180 ) / Math.PI}
if ((K_X < 0) && (K_Y >= 0)) {
Mb_corner = 360 - (Math.acos(Math.abs(K_Y) / OK) * 180 ) / Math.PI}
if ((K_X >= 0) && (K_Y < 0)) {
Mb_corner = 180 - (Math.acos(Math.abs(K_Y) / OK) * 180 ) / Math.PI}
// определение координат точки установки балансировочного груза Mb
// рисуем круг с радиусом 10% от радиуса R плоскости коррекции
// !!! нужно заменить круг на жирную точку !!!
var xMb_array = []; // массив координат точек Mb по оси X
var yMb_array = []; // массив координат точек Mb по оси Y
var x0_Mb = xR_array[Math.round(Mb_corner)]; // центр на окружности плоскости установки грузов в угле Mb_corner
var y0_Mb = yR_array[Math.round(Mb_corner)]; // центр на окружности плоскости установки грузов в угле Mb_corner
for (let i=0; i<=360; i++ ) {
xMb_array.push(x0_Mb + 0.1*R * (Math.sin((i) * Math.PI / 180)));
yMb_array.push(y0_Mb + 0.1*R * (Math.cos((i) * Math.PI / 180)));}
// определение массы дисбаланса Mdisb
Mdisb = Mb; // равен массе балансировочного груза
// определение угла расположения дисбаланса Mdisb_corner
if ((Mb_corner + 180) > 360) {
Mdisb_corner = (Mb_corner + 180) - 360}
else if ((Mb_corner + 180) < 0) {
Mdisb_corner = (Mb_corner + 180) + 360}
else {Mdisb_corner = (Mb_corner + 180)}
// определение координат точки установки балансировочного груза Mdisb
// рисуем круг с радиусом 10% от радиуса R плоскости коррекции
// !!! нужно заменить круг на жирную точку !!!
var xMdisb_array = []; // массив координат точек Mdisb по оси X
var yMdisb_array = []; // массив координат точек Mdisb по оси Y
var x0_Mdisb = xR_array[Math.round(Mdisb_corner)]; // центр на окружности плоскости установки грузов в угле Mb_corner
var y0_Mdisb = yR_array[Math.round(Mdisb_corner)]; // центр на окружности плоскости установки грузов в угле Mb_corner
for (let i=0; i<=360; i++ ) {
xMdisb_array.push(x0_Mdisb + 0.1*R * (Math.sin((i) * Math.PI / 180)));
yMdisb_array.push(y0_Mdisb + 0.1*R * (Math.cos((i) * Math.PI / 180)));}
gtl.log.info("Начальная вибрация A0",A0);
gtl.log.info("Вибрация пробного пуска №1 A1",A1);
gtl.log.info("Вибрация пробного пуска №2 A2",A2);
gtl.log.info("Вибрация пробного пуска №3 A3",A3);
gtl.log.info("Масса балансировочного груза",Mb);
gtl.log.info("Угол установки балансировочного груза",Mb_corner);
gtl.log.info("Угол расположения дисбаланса",Mdisb_corner);
gtl.log.info("Длина отрезка OK",OK);
// Проверка условия корректности проведения измерений (или ввода значений вибрации)
if (
(((A1 + A2) >= 2*A0*Math.cos(30*Math.PI/180)) ||
((A2 + A3) >= 2*A0*Math.cos(30*Math.PI/180)) ||
((A1 + A3) >= 2*A0*Math.cos(30*Math.PI/180))) &&
(OK > 0)
)
{
test = 'Данные корректны. Вычисления произведены'
} else {
test = 'Проверьте корректность данных. Влияние балансировочного груза недостаточно, или дисбаланс несущественно влияет на вибрацию'
}
gtl.log.info("Корректность данных",test);
// Вычисление допустимого остаточного дисбаланса
U_per = (1000 * (G * P)) / (Math.PI * n / 30);
// Остаточный дисбаланс
U_res = Mdisb * R;
// Графики вибрации
plot_vibration.add(
{
color: 0x0000ff,
name: "Вибрация_A0",
x: x0_array,
y: y0_array,
});
plot_vibration.add(
{
color: 0x00ff00,
name: "Вибрация_A1",
x: x1_array,
y: y1_array,
});
plot_vibration.add(
{
color: 0xff0000,
name: "Вибрация_A2",
x: x2_array,
y: y2_array,
});
plot_vibration.add(
{
color: 0xffff00,
name: "Вибрация_A3",
x: x3_array,
y: y3_array,
});
plot_vibration.add(
{
color: 0x00ddff,
name: "Отрезок ОК",
x: xOK_array,
y: yOK_array,
});
plot_vibration.add(
{
color: 0x00ffffff,
name: "границы",
x: [-((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), -((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), ((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), ((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1)],
y: [((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), -((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), -((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1), ((A0+Math.max(A0,A1,A2,A3))+2*A0*0.1)]
});
// Графики дисбаланса и балансировочного груза
plot_balance.add(
{
color: 0x0000ff,
name: "Плоскость установки грузов",
x: xR_array,
y: yR_array,
});
plot_balance.add(
{
color: 0x00ff00,
name: "Балансировочный груз",
x: xMb_array,
y: yMb_array,
});
plot_balance.add(
{
color: 0xff0000,
name: "Дисбаланс",
x: xMdisb_array,
y: yMdisb_array,
});
plot_balance.add(
{
color: 0x00ffffff,
name: "границы",
x: [-(R+R*0.1), -(R+R*0.1), (R+R*0.1), (R+R*0.1)],
y: [(R+R*0.1), -(R+R*0.1), -(R+R*0.1), (R+R*0.1)]
});
// Выдача результата (results)
let __result = {
_001_Начальная_вибрация_A0: A0,
_002_Вибрация_пробного_пуска_1_A1: A1,
_003_Вибрация_пробного_пуска_2_A2: A2,
_004_Вибрация_пробного_пуска_3_A3: A3,
_005_Вибрация_пробного_пуска_3_A3: A3,
_006_Угол_устан_баланс_груза: Mb_corner,
_007_Угол_расп_дисбаланса: Mdisb_corner,
_008_Масса_баланс_груза: Mb,
_010опуст_ост_дисб_г_мм: U_per,
_011_Остат_дисб_г_мм: U_res
};
gtl.results = {"result": __result};
gtl.diagnostic.stop();
}