"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("Расположение дисбаланса"); // объект для дисбаланса // gtl.log.info("размер массива AUSPv_pl", AUSPv_pl.data.length); // gtl.log.info("размер массива pfc_pl", pfc_pl.data.length); // Переменные основные // параметр вибрации (модуль вектора) - виброскорость (мм/с) // угол (фаза) вектора - градусы // масса груза (модуль ветора) - граммы // 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 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 dA; // модуль вектора дельты вибрации после установки пробного груза *** let dA_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 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 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() { // РАСЧЁТЫ (балансировочный калькулятор) // ШАГ 4 - отчёт о проведённых операциях: // из предыдущих шагов переносится: // амплитуда и фаза начальной вибрации A0, // вибрации после установки балансировочного груза A2, // масса и угол расположения дисбаланса Mdisb // масса и угол расположения расчётного балансировочного груза Mb_calc // масса и угол расположения выбранного балансировочного груза Mb // масса и угол расположения остаточного дисбаланса Mdisb2 // построение графика вибрации: A0, A2 и dA2 // построение графиков расположения дисбалансов и балансировочных грузов: 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; // определение угла наклона вектора 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} // определение координат точек окружности графика для отображения векторов вибрации 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,A2,dA2)+Math.max(A0,A2,dA2)*0.1) * (Math.sin((i) * Math.PI / 180))); yV_array.push(y0V + (Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.1) * (Math.cos((i) * Math.PI / 180)));} // Дисбаланс и балансировочный груз ДО балансировки (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, 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)} // Координаты масс для визуализации // определение координат точек окружности обозначения массы балансировочного груза 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)*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)*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)*0.1 * (Math.sin((i) * Math.PI / 180)))); y_Mb_array.push(y0_Mb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*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)*0.1 * (Math.sin((i) * Math.PI / 180)))); y_Mdisb_array.push(y0_Mdisb + (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*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)*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)*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)*0.1 * (Math.sin((i) * Math.PI / 180)))); y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2)*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)+Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2)*0.1) * (Math.sin((i) * Math.PI / 180))); yD_array.push(y0D + (Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb_calc,Mb,Mdisb,Mb2_calc,Mdisb2)*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: 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: 0x00ffffff, name: "График векторов вибрации", x: xV_array, y: yV_array, }); plot_vibr.add( { color: 0x00ffffff, name: "границы", x: [-(Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), -(Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), (Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), (Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2)], y: [(Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), -(Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), -(Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2), (Math.max(A0,A2,dA2)+Math.max(A0,A2,dA2)*0.2)] }); 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)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2)], y: [(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), -(Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*0.2), (Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)+Math.max(Mb,Mb_calc,Mdisb,Mb2_calc,Mdisb2)*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("A0",A0); gtl.log.info("A0_phase",A0_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_Ампл_вибр_пуска_A2: A2, _005_Фаза_вибр_пуска_A2: A2_phase, _006_Масса_дисбаланса: Mdisb, _007_Угол_дисбаланса: Mdisb_corner, _008_Масса_баланс_груза: Mb, _009_Угол_баланс_груза: Mb_corner, _010_Масса_баланс_груза_расч: Mb_calc, _011_Угол_баланс_груза_расч: Mb_corner_calc, _012_Масса_дисбаланса_2: Mdisb2, _013_Угол_дисбаланса_2: Mdisb2_corner, _014_Масса_баланс_груза_2: Mb2_calc, _015_Угол_баланс_груза_2: Mb2_corner_calc, _016_Модуль_ДКВ: DCI, _017_Фаза_ДКВ: DCI_phase, _018_Допуст_ост_дисб_г_мм: U_per, _019_Остат_дисб_после_г_мм: U_res2 }; gtl.results = {"result": __result}; gtl.diagnostic.stop(); // break; // default: // break; // } }