"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(); }