commit fa0b01096b7bd21e789972d50d197f2c63c4ff2d Author: s.savelievrem Date: Mon Jun 8 15:59:37 2026 +0300 comment diff --git a/1 пл ДКВ шаг 0 - ввод исходных данных.json b/1 пл ДКВ шаг 0 - ввод исходных данных.json new file mode 100644 index 0000000..67f4b7c --- /dev/null +++ b/1 пл ДКВ шаг 0 - ввод исходных данных.json @@ -0,0 +1,7 @@ +{ + "_001_Радиус_установки_грузов_мм": 2000, + "_002_Масса_ротора_г": 17000, + "_003_ДКВ_модуль_мм_с_г": 0.028, + "_004_ДКВ_фаза_град": -242.6, + "_005_Допуст_ост_дисб_г_мм": 405845.10488433315 +} diff --git a/1 пл ДКВ шаг 2 - расположение дисбаланса.json b/1 пл ДКВ шаг 2 - расположение дисбаланса.json new file mode 100644 index 0000000..702baf0 --- /dev/null +++ b/1 пл ДКВ шаг 2 - расположение дисбаланса.json @@ -0,0 +1,15 @@ +{ + "_001_Част_вращ_обмин": 1000, + "_002_Ампл_вибр_пуска_A0": 9, + "_003_Фаза_вибр_пуска_A0": 40, + "_004_Масса_дисбаланса": 321.42857142857144, + "_005_Угол_дисбаланса": 282.6, + "_006_Масса_баланс_груза_введён": 280, + "_007_Угол_баланс_груза_введён": 210, + "_008_Масса_баланс_груза_расч": 321.42857142857144, + "_009_Угол_баланс_груза_расч": 102.60000000000002, + "_010_Модуль_ДКВ": 0.028, + "_011_Фаза_ДКВ": -242.6, + "_012_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_013_Остат_дисб_г_мм": 642857.1428571428 +} diff --git a/1 пл ДКВ шаг 4 - отчёт о проведённых операциях.json b/1 пл ДКВ шаг 4 - отчёт о проведённых операциях.json new file mode 100644 index 0000000..e776781 --- /dev/null +++ b/1 пл ДКВ шаг 4 - отчёт о проведённых операциях.json @@ -0,0 +1,21 @@ +{ + "_001_Част_вращ_обмин": 1000, + "_002_Ампл_вибр_пуска_A0": 8, + "_003_Фаза_вибр_пуска_A0": 150, + "_004_Ампл_вибр_пуска_A2": 1, + "_005_Фаза_вибр_пуска_A2": 60, + "_006_Масса_дисбаланса": 287, + "_007_Угол_дисбаланса": 32.6, + "_008_Масса_баланс_груза": 280, + "_009_Угол_баланс_груза": 210, + "_010_Масса_баланс_груза_расч": 287, + "_011_Угол_баланс_груза_расч": 212.6, + "_012_Масса_дисбаланса_2": 35.714285714285715, + "_013_Угол_дисбаланса_2": 302.6, + "_014_Масса_баланс_груза_2": 35.714285714285715, + "_015_Угол_баланс_груза_2": 122.60000000000002, + "_016_Модуль_ДКВ": 0.028, + "_017_Фаза_ДКВ": -242.6, + "_018_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_019_Остат_дисб_после_г_мм": 71428.57142857143 +} diff --git a/1 пл бф шаг 0 - ввод исходных данных.json b/1 пл бф шаг 0 - ввод исходных данных.json new file mode 100644 index 0000000..e361e7a --- /dev/null +++ b/1 пл бф шаг 0 - ввод исходных данных.json @@ -0,0 +1,6 @@ +{ + "_001_Частота_вращения_Гц": 16.666666666666668, + "_002_Радиус_установки_грузов_мм": 2000, + "_003_Масса_ротора_кг": 17000, + "_004_Допуст_ост_дисб_г_мм": 405845.10488433315 +} diff --git a/1 пл бф шаг 2 - выбор массы пробного груза.json b/1 пл бф шаг 2 - выбор массы пробного груза.json new file mode 100644 index 0000000..603f9de --- /dev/null +++ b/1 пл бф шаг 2 - выбор массы пробного груза.json @@ -0,0 +1,4 @@ +{ + "_001_Примен_пробный_груз": 150, + "_002_Расч_пробный_груз": 820.08 +} diff --git a/1 пл бф шаг 6 - рекзультаты расчёта.json b/1 пл бф шаг 6 - рекзультаты расчёта.json new file mode 100644 index 0000000..02c1ee0 --- /dev/null +++ b/1 пл бф шаг 6 - рекзультаты расчёта.json @@ -0,0 +1,12 @@ +{ + "_001_Начальная_вибрация_A0": 12, + "_002_Вибрация_пробного_пуска_1_A1": 15, + "_003_Вибрация_пробного_пуска_2_A2": 18, + "_004_Вибрация_пробного_пуска_3_A3": 20, + "_005_Вибрация_пробного_пуска_3_A3": 20, + "_006_Угол_устан_баланс_груза": 23.25507578693725, + "_007_Угол_расп_дисбаланса": 203.25507578693725, + "_008_Масса_баланс_груза": 593.0100269316805, + "_010_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_011_Остат_дисб_г_мм": 1186020.053863361 +} diff --git a/1 пл шаг 0 - ввод исходных данных.json b/1 пл шаг 0 - ввод исходных данных.json new file mode 100644 index 0000000..9a98188 --- /dev/null +++ b/1 пл шаг 0 - ввод исходных данных.json @@ -0,0 +1,6 @@ +{ + "_001_Радиус_установки_грузов_мм": 2000, + "_002_Масса_ротора_г": 17000, + "_003_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_004_Част_вращ_обмин": 1000 +} diff --git a/1 пл шаг 2 - выбор массы и положения пробного груза.json b/1 пл шаг 2 - выбор массы и положения пробного груза.json new file mode 100644 index 0000000..ecd4284 --- /dev/null +++ b/1 пл шаг 2 - выбор массы и положения пробного груза.json @@ -0,0 +1,6 @@ +{ + "_001_Примен_пробный_груз": 500, + "_002_Угол_устан_пробн_груза": 250, + "_003_Расч_пробный_груз": 546.72, + "_004_Част_вращ_обмин": 1000 +} diff --git a/1 пл шаг 4 - расположение дисбаланса.json b/1 пл шаг 4 - расположение дисбаланса.json new file mode 100644 index 0000000..3b291a9 --- /dev/null +++ b/1 пл шаг 4 - расположение дисбаланса.json @@ -0,0 +1,16 @@ +{ + "_001_Ампл_вибр_пуска_A0": 8, + "_002_Фаза_вибр_пуска_A0": 150, + "_003_Ампл_вибр_пуска_A1": 9, + "_004_Фаза_вибр_пуска_A1": 40, + "_005_Масса_дисбаланса": 286.99773600284755, + "_006_Угол_дисбаланса": 32.64139573926241, + "_007_Масса_баланс_груза_расч": 286.99773600284755, + "_008_Угол_баланс_груза_расч": 212.6413957392624, + "_009_Масса_баланс_груза_введён": 280, + "_010_Угол_баланс_груза_введён": 210, + "_011_Модуль_ДКВ": 0.027874784349938654, + "_012_Фаза_ДКВ": -242.64139573926235, + "_013_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_014_Остат_дисб_г_мм": 573995.4720056951 +} diff --git a/1 пл шаг 6 - отчёт о проведённых операциях.json b/1 пл шаг 6 - отчёт о проведённых операциях.json new file mode 100644 index 0000000..fc0ca98 --- /dev/null +++ b/1 пл шаг 6 - отчёт о проведённых операциях.json @@ -0,0 +1,26 @@ +{ + "_001_Част_вращ_обмин": 1000, + "_002_Ампл_вибр_пуска_A0": 8, + "_003_Фаза_вибр_пуска_A0": 150, + "_004_Ампл_вибр_пуска_A1": 9, + "_005_Фаза_вибр_пуска_A1": 40, + "_006_Ампл_вибр_пуска_A2": 1, + "_007_Фаза_вибр_пуска_A2": 60, + "_008_Масса_дисбаланса": 287, + "_009_Угол_дисбаланса": 32.6, + "_010_Масса_баланс_груза": 280, + "_011_Угол_баланс_груза": 210, + "_012_Масса_баланс_груза_расч": 287, + "_013_Угол_баланс_груза_расч": 212.6, + "_014_Масса_дисбаланса_2": 35.874717450725356, + "_015_Угол_дисбаланса_2": 302.6413957, + "_016_Масса_баланс_груза_2": 35.874717450725356, + "_017_Угол_баланс_груза_2": 122.64139569999998, + "_018_Масса_пробн_груза_расч": 546.72, + "_019_Масса_пробн_груза": 500, + "_020_Угол_пробн_груза": 250, + "_021_Модуль_ДКВ": 0.027874784, + "_022_Фаза_ДКВ": -242.6413957, + "_023_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_024_Остат_дисб_после_г_мм": 71749.43490145072 +} diff --git a/2 пл ДКВ шаг 0 - ввод исходных данных.json b/2 пл ДКВ шаг 0 - ввод исходных данных.json new file mode 100644 index 0000000..79f7363 --- /dev/null +++ b/2 пл ДКВ шаг 0 - ввод исходных данных.json @@ -0,0 +1,14 @@ +{ + "_001_Радиус_установки_грузов_пл1_мм": 2000, + "_002_Радиус_установки_грузов_пл2_мм": 2000, + "_003_Масса_ротора_кг": 17000, + "_004_Модуль_ДКВ_DCI_A1": 0.015, + "_005_Фаза_ДКВ_DCI_A1": 168.5, + "_006_Модуль_ДКВ_DCI_A2": 0.025, + "_007_Фаза_ДКВ_DCI_A2": 143.2, + "_008_Модуль_ДКВ_DCI_B1": 0.049, + "_009_Фаза_ДКВ_DCI_B1": 317.3, + "_010_Модуль_ДКВ_DCI_B2": 0.044, + "_011_Фаза_ДКВ_DCI_B2": 308.9, + "_012_Допуст_ост_дисб_г_мм": 405845.10488433315 +} diff --git a/2 пл ДКВ шаг 2 - расположение дисбалансов.json b/2 пл ДКВ шаг 2 - расположение дисбалансов.json new file mode 100644 index 0000000..f1dcb16 --- /dev/null +++ b/2 пл ДКВ шаг 2 - расположение дисбалансов.json @@ -0,0 +1,30 @@ +{ + "_001_Ампл_вибр_пуска_A0": 8, + "_002_Фаза_вибр_пуска_A0": 150, + "_003_Ампл_вибр_пуска_B0": 9, + "_004_Фаза_вибр_пуска_B0": 40, + "_005_Масса_дисбаланса_пл_1": 638.8721369761146, + "_006_Угол_дисбаланса_пл_1": 162.13179602047444, + "_007_Масса_дисбаланса_пл_2": 703.3126789706832, + "_008_Угол_дисбаланса_пл_2": 7.144339980526809, + "_009_Масса_баланс_груза_расч_пл_1": 638.8721369761146, + "_010_Угол_баланс_груза_расч_пл_1": 342.13179602047444, + "_011_Масса_баланс_груза_введён_пл_1": 600, + "_012_Угол_баланс_груза_введён_пл_1": 350, + "_013_Масса_баланс_груза_расч_пл_2": 703.3126789706832, + "_014_Угол_баланс_груза_расч_пл_2": 187.1443399805268, + "_015_Масса_баланс_груза_введён_пл_2": 700, + "_016_Угол_баланс_груза_введён_пл_2": 180, + "_017_Модуль_ДКВ_DCI_A1": 0.015, + "_018_Фаза_ДКВ_DCI_A1": 168.5, + "_019_Модуль_ДКВ_DCI_A2": 0.025, + "_020_Фаза_ДКВ_DCI_A2": 143.2, + "_021_Модуль_ДКВ_DCI_B1": 0.049, + "_022_Фаза_ДКВ_DCI_B1": 317.3, + "_023_Модуль_ДКВ_DCI_B2": 0.044, + "_024_Фаза_ДКВ_DCI_B2": 308.9, + "_025_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_026_Остат_дисб_пл1_г_мм": 1277744.2739522292, + "_027_Остат_дисб_пл2_г_мм": 1406625.3579413665, + "_028_Остат_дисб_сумм_г_мм": 2684369.6318935957 +} diff --git a/2 пл ДКВ шаг 4 - отчёт о проведённых операциях.json b/2 пл ДКВ шаг 4 - отчёт о проведённых операциях.json new file mode 100644 index 0000000..5f49978 --- /dev/null +++ b/2 пл ДКВ шаг 4 - отчёт о проведённых операциях.json @@ -0,0 +1,42 @@ +{ + "_001_Ампл_вибр_пуска_A0": 8, + "_002_Фаза_вибр_пуска_A0": 150, + "_003_Ампл_вибр_пуска_A3": 1, + "_004_Фаза_вибр_пуска_A3": 60, + "_005_Ампл_вибр_пуска_B0": 9, + "_006_Фаза_вибр_пуска_B0": 40, + "_007_Ампл_вибр_пуска_B3": 1, + "_008_Фаза_вибр_пуска_B3": 120, + "_009_Масса_дисбаланса_пл_1": 638, + "_010_Угол_дисбаланса_пл_1": 162.1, + "_011_Масса_дисбаланса_пл_2": 703, + "_012_Угол_дисбаланса_пл_2": 7.1, + "_013_Масса_баланс_груза_расч_пл_1": 638, + "_014_Угол_баланс_груза_расч_пл_1": 342.1, + "_015_Масса_баланс_груза_введён_пл_1": 600, + "_016_Угол_баланс_груза_введён_пл_1": 350, + "_017_Масса_баланс_груза_расч_пл_2": 703, + "_018_Угол_баланс_груза_расч_пл_2": 187.1, + "_019_Масса_баланс_груза_введён_пл_2": 700, + "_020_Угол_баланс_груза_введён_пл_2": 180, + "_021_Масса_остат_дисбаланса_пл_1": 90.07073811703124, + "_022_Угол_остат_дисбаланса_пл_1": 131.67987753466508, + "_023_Масса_остат_дисбаланса_пл_2": 81.67323954345251, + "_024_Угол_остат_дисбаланса_пл_2": 311.83502056566783, + "_025_Масса_груза_добаланс_пл_1": 90.07073811703124, + "_026_Угол_груза_добаланс_пл_1": 311.6798775346651, + "_027_Масса_груза_добаланс_пл_2": 81.67323954345251, + "_028_Угол_груза_добаланс_пл_2": 131.83502056566786, + "_029_Модуль_ДКВ_DCI_A1": 0.015, + "_030_Фаза_ДКВ_DCI_A1": 168.5, + "_031_Модуль_ДКВ_DCI_A2": 0.025, + "_032_Фаза_ДКВ_DCI_A2": 143.2, + "_033_Модуль_ДКВ_DCI_B1": 0.049, + "_034_Фаза_ДКВ_DCI_B1": 317.3, + "_035_Модуль_ДКВ_DCI_B2": 0.044, + "_036_Фаза_ДКВ_DCI_B2": 308.9, + "_037_Допуст_ост_дисб_г_мм": 405845104.88433313, + "_038_Остат_дисб_пл1_после_бал_г_мм": 180141.4762340625, + "_039_Остат_дисб_пл2_после_бал_г_мм": 163346.47908690502, + "_040_Остат_дисб_сумм_после_бал_г_мм": 343487.9553209675 +} diff --git a/2 пл шаг 0 - ввод исходных данных.json b/2 пл шаг 0 - ввод исходных данных.json new file mode 100644 index 0000000..565cc16 --- /dev/null +++ b/2 пл шаг 0 - ввод исходных данных.json @@ -0,0 +1,6 @@ +{ + "_001_Радиус_установки_грузов_пл1_мм": 2000, + "_002_Радиус_установки_грузов_пл2_мм": 2000, + "_003_Масса_ротора_кг": 17000, + "_004_Допуст_ост_дисб_г_мм": 405845.10488433315 +} diff --git a/2 пл шаг 2 - выбор массы и положения пробного груза плоскости 1.json b/2 пл шаг 2 - выбор массы и положения пробного груза плоскости 1.json new file mode 100644 index 0000000..73790c7 --- /dev/null +++ b/2 пл шаг 2 - выбор массы и положения пробного груза плоскости 1.json @@ -0,0 +1,5 @@ +{ + "_001_Примен_пробный_груз_пл_1": 300, + "_002_Угол_устан_пробн_груза_пл_1": 250, + "_003_Расч_пробный_груз_пл_1": 546.72 +} diff --git a/2 пл шаг 6 - расположение дисбалансов.json b/2 пл шаг 6 - расположение дисбалансов.json new file mode 100644 index 0000000..448f816 --- /dev/null +++ b/2 пл шаг 6 - расположение дисбалансов.json @@ -0,0 +1,38 @@ +{ + "_001_Ампл_вибр_пуска_A0": 8, + "_002_Фаза_вибр_пуска_A0": 150, + "_003_Ампл_вибр_пуска_A1": 9.1, + "_004_Фаза_вибр_пуска_A1": 120, + "_005_Ампл_вибр_пуска_A2": 8.1, + "_006_Фаза_вибр_пуска_A2": 95, + "_007_Ампл_вибр_пуска_B0": 9, + "_008_Фаза_вибр_пуска_B0": 40, + "_009_Ампл_вибр_пуска_B1": 6.3, + "_010_Фаза_вибр_пуска_B1": 189, + "_011_Ампл_вибр_пуска_B2": 5.8, + "_012_Фаза_вибр_пуска_B2": 165, + "_013_Масса_дисбаланса_пл_1": 649.7502317203779, + "_014_Угол_дисбаланса_пл_1": 163.05631714463198, + "_015_Масса_дисбаланса_пл_2": 720.5269743990223, + "_015_Угол_дисбаланса_пл_2": 7.67536761444228, + "_016_Масса_баланс_груза_расч_пл_1": 649.7502317203779, + "_017_Угол_баланс_груза_расч_пл_1": 343.05631714463203, + "_018_Масса_баланс_груза_введён_пл_1": 600, + "_019_Угол_баланс_груза_введён_пл_1": 350, + "_020_Масса_баланс_груза_расч_пл_2": 720.5269743990223, + "_021_Угол_баланс_груза_расч_пл_2": 187.67536761444225, + "_022_Масса_баланс_груза_введён_пл_2": 700, + "_023_Угол_баланс_груза_введён_пл_2": 180, + "_024_Модуль_ДКВ_DCI_A1": 0.015171867682943005, + "_025_Фаза_ДКВ_DCI_A1": 168.49971205106888, + "_026_Модуль_ДКВ_DCI_A2": 0.024782272752223607, + "_027_Фаза_ДКВ_DCI_A2": 143.1835959369363, + "_028_Модуль_ДКВ_DCI_B1": 0.049203971373098135, + "_029_Фаза_ДКВ_DCI_B1": 317.3017985641346, + "_030_Модуль_ДКВ_DCI_B2": 0.04403551344023356, + "_031_Фаза_ДКВ_DCI_B2": 308.92190074190114, + "_032_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_033_Остат_дисб_пл1_г_мм": 1299500.4634407558, + "_034_Остат_дисб_пл2_г_мм": 1441053.9487980446, + "_035_Остат_дисб_сумм_г_мм": 2740554.4122388004 +} diff --git a/2 пл шаг 8 - отчёт о проведённых операциях.json b/2 пл шаг 8 - отчёт о проведённых операциях.json new file mode 100644 index 0000000..8273211 --- /dev/null +++ b/2 пл шаг 8 - отчёт о проведённых операциях.json @@ -0,0 +1,50 @@ +{ + "_001_Ампл_вибр_пуска_A0": 8, + "_002_Фаза_вибр_пуска_A0": 150, + "_003_Ампл_вибр_пуска_A1": 9.1, + "_004_Фаза_вибр_пуска_A1": 120, + "_005_Ампл_вибр_пуска_A2": 8.1, + "_006_Фаза_вибр_пуска_A2": 95, + "_007_Ампл_вибр_пуска_A3": 1, + "_008_Фаза_вибр_пуска_A3": 60, + "_009_Ампл_вибр_пуска_B0": 9, + "_010_Фаза_вибр_пуска_B0": 40, + "_011_Ампл_вибр_пуска_B1": 6.3, + "_012_Фаза_вибр_пуска_B1": 189, + "_013_Ампл_вибр_пуска_B2": 5.8, + "_014_Фаза_вибр_пуска_B2": 165, + "_015_Ампл_вибр_пуска_B3": 1, + "_016_Фаза_вибр_пуска_B3": 120, + "_017_Масса_дисбаланса_пл_1": 650, + "_018_Угол_дисбаланса_пл_1": 163.1, + "_019_Масса_дисбаланса_пл_2": 720, + "_020_Угол_дисбаланса_пл_2": 7.7, + "_021_Масса_баланс_груза_расч_пл_1": 650, + "_022_Угол_баланс_груза_расч_пл_1": 343.1, + "_023_Масса_баланс_груза_введён_пл_1": 600, + "_024_Угол_баланс_груза_введён_пл_1": 350, + "_025_Масса_баланс_груза_расч_пл_2": 720, + "_026_Угол_баланс_груза_расч_пл_2": 187.7, + "_027_Масса_баланс_груза_введён_пл_2": 700, + "_028_Угол_баланс_груза_введён_пл_2": 180, + "_029_Масса_остат_дисбаланса_пл_1": 91.6344324012871, + "_030_Угол_остат_дисбаланса_пл_1": 132.14910918667033, + "_031_Масса_остат_дисбаланса_пл_2": 83.63310673236978, + "_032_Угол_остат_дисбаланса_пл_2": 312.5961470829369, + "_033_Масса_груза_добаланс_пл_1": 91.6344324012871, + "_034_Угол_груза_добаланс_пл_1": 312.14910918667033, + "_035_Масса_груза_добаланс_пл_2": 83.63310673236978, + "_036_Угол_груза_добаланс_пл_2": 132.5961470829369, + "_037_Модуль_ДКВ_DCI_A1": 0.015171867, + "_038_Фаза_ДКВ_DCI_A1": 168.49971205, + "_039_Модуль_ДКВ_DCI_A2": 0.02478227, + "_040_Фаза_ДКВ_DCI_A2": 143.1835959, + "_041_Модуль_ДКВ_DCI_B1": 0.04920397, + "_042_Фаза_ДКВ_DCI_B1": 317.301798, + "_043_Модуль_ДКВ_DCI_B2": 0.04403551344, + "_044_Фаза_ДКВ_DCI_B2": 308.9219007, + "_045_Допуст_ост_дисб_г_мм": 405845.10488433315, + "_046_Остат_дисб_пл1_после_бал_г_мм": 183268.8648025742, + "_047_Остат_дисб_пл2_после_бал_г_мм": 167266.21346473956, + "_048_Остат_дисб_сумм_после_бал_г_мм": 350535.0782673138 +} diff --git a/balancing_calculator.gtld b/balancing_calculator.gtld new file mode 100644 index 0000000..185c9de --- /dev/null +++ b/balancing_calculator.gtld @@ -0,0 +1,10 @@ +{ + "autoStartRecorder": false, + "expendTreeOnStart": true, + "lastTag": "шаг 6", + "projectTitle": "Балансировочный калькулятор", + "syncURL": "", + "useSync": false, + "vacuumOnStart": false, + "version": 1 +} diff --git a/balancing_calculator_devices_model.json b/balancing_calculator_devices_model.json new file mode 100644 index 0000000..0d4f101 --- /dev/null +++ b/balancing_calculator_devices_model.json @@ -0,0 +1,2 @@ +[ +] diff --git a/balancing_calculator_local_storage.sqlite b/balancing_calculator_local_storage.sqlite new file mode 100644 index 0000000..a3b617f Binary files /dev/null and b/balancing_calculator_local_storage.sqlite differ diff --git a/balancing_calculator_model.json b/balancing_calculator_model.json new file mode 100644 index 0000000..e828f9c --- /dev/null +++ b/balancing_calculator_model.json @@ -0,0 +1,5618 @@ +[ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"параметры n, R и P для вычисл. реком. массы пробн. гр.\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":3000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":200,\n\"P_comment\":\"масса ротора, г\",\n\"P\":10000,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":50,\n\n\"comment2\":\"груз устан. по очереди в 0, 120 и 240 град (измер. вибр.)\",\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A1_comment\":\"модуль вибр. при уст. пробн. груза в точку 1, мм/с\",\n\"A1\":15,\n\"A2_comment\":\"модуль вибр. при уст. пробн. груза в точку 2, мм/с\",\n\"A2\":18,\n\"A3_comment\":\"модуль вибр. при уст. пробн. груза в точку 3, мм/с\",\n\"A3\":20\n}\n", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "Одна_плоскость_без_фазы.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "master_script.js", + "name": "Одна плоскость без фазы", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "debug.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{053e20d8-1322-4627-b59c-33bd558b9a22}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"параметры n, R и P для вычисл. реком. массы пробн. гр.\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":3000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":200,\n\"P_comment\":\"масса ротора, г\",\n\"P\":10000,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":30,\n\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":50,\n\"m_test_corner_comment\":\"угол уст. массы пробного груза, град\",\n\"m_test_corner\":100,\n\n\"A1_comment\":\"модуль вибр. после уст. пробн. груза, мм/с\",\n\"A1\":25,\n\"A1_phase_comment\":\"фаза вибр. после уст. пробн. груза, град\",\n\"A1_phase\":120,\n\n\"comment2\":\"если ДКВ=0, балансировка идёт по полн. циклу\",\n\"DCI_comment\":\"модуль ДКВ, мм/с/г\",\n\"DCI\":0.5,\n\"DCI_phase_comment\":\"фаза ДКВ, град\",\n\"DCI_phase\":45\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "Одна_плоскость_с_фазой.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "master_script.js", + "name": "Одна плоскость с фазой", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "debug.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{eb26de78-3caf-4fd8-ab60-169b6dc840bd}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"параметры n, R и P для вычисл. реком. массы пробн. гр.\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":3000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":200,\n\"P_comment\":\"масса ротора, г\",\n\"P\":10000,\n\n\"A0_comment\":\"модуль начальной вибрации в точке A, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации в точке A, град\",\n\"A0_phase\":150,\n\n\"B0_comment\":\"модуль начальной вибрации в точке B, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации в точке B, град\",\n\"B0_phase\":40,\n\n\"A1_comment\":\"модуль вибр. в точке A 1-го пробн. пуска (груз в плоск. 1), мм/с\",\n\"A1\":9.1,\n\"A1_phase_comment\":\"фаза вибр. в точке A 1-го пробн. пуска, град (груз в плоск. 1)\",\n\"A1_phase\":120,\n\n\"B1_comment\":\"модуль вибр. в точке B 1-го пробн. пуска (груз в плоск. 1), мм/с\",\n\"B1\":6.3,\n\"B1_phase_comment\":\"фаза вибр. в точке B 1-го пробн. пуска (груз в плоск. 1), град\",\n\"B1_phase\":189,\n\n\"A2_comment\":\"модуль вибр. в точке A 2-го пробн. пуска (груз в плоск. 2), мм/с\",\n\"A2\":8.1,\n\"A2_phase_comment\":\"фаза вибр. в точке A 2-го пробн. пуска, град (груз в плоск. 2)\",\n\"A2_phase\":95,\n\n\"B2_comment\":\"модуль вибр. в точке B 2-го пробн. пуска (груз в плоск. 2), мм/с\",\n\"B2\":5.8,\n\"B2_phase_comment\":\"фаза вибр. в точке B 2-го пробн. пуска (груз в плоск. 2), град\",\n\"B2_phase\":165,\n\n\"m11_test_comment\":\"модуль пробн. груза при 1-м пуске в плоск. 1, г\",\n\"m11_test\":60,\n\"m11_test_corner_comment\":\"угол уст. пробн. груза при 1-м пуске в плоск. 1, град\",\n\"m11_test_corner\":250,\n\n\"m22_test_comment\":\"модуль пробн. груза при 2-м пуске в плоск. 2, г\",\n\"m22_test\":60,\n\"m22_test_corner_comment\":\"угол уст. пробн. груза при 2-м пуске в плоск. 2, град\",\n\"m22_test_corner\":250,\n\n\"comment2\":\"если ДКВ=0, балансировка идёт по полн. циклу\",\n\"DCI_A1_comment\":\"модуль ДКВ груза m11 в плоск. 1 на вибр. в точке A, мм/с/г\",\n\"DCI_A1\":0,\n\"DCI_A1_phase_comment\":\"фаза ДКВ груза m11 в плоск. 1 на вибр. в точке A, град\",\n\"DCI_A1_phase\":0,\n\n\"DCI_B1_comment\":\"модуль ДКВ груза m11 в плоск. 1 на вибр. в точке B, мм/с/г\",\n\"DCI_B1\":0,\n\"DCI_B1_phase_comment\":\"фаза ДКВ груза m11 в плоск. 1 на вибр. в точке B, град\",\n\"DCI_B1_phase\":0,\n\n\"DCI_A2_comment\":\"модуль ДКВ груза m22 в плоск. 2 на вибр. в точке A, мм/с/г\",\n\"DCI_A2\":0,\n\"DCI_A2_phase_comment\":\"фаза ДКВ груза m22 в плоск. 2 на вибр. в точке A, град\",\n\"DCI_A2_phase\":0,\n\n\"DCI_B2_comment\":\"модуль ДКВ груза m22 в плоск. 2 на вибр. в точке B, мм/с/г\",\n\"DCI_B2\":0,\n\"DCI_B2_phase_comment\":\"фаза ДКВ груза m22 в плоск. 2 на вибр. в точке B, град\",\n\"DCI_B2_phase\":0\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "Две_плоскости_с_фазой.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "master_script.js", + "name": "Две плоскости с фазой", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "debug.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{0c1ccad4-e4ff-4fd2-a29a-a36c5677b1af}" + } + ], + "masterScriptName": "master_script.js", + "name": "Балансировка", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "debug.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{8125b749-5842-4b6e-8436-e1405cceb81c}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 0 - ввод исходных данных\",\n\"comment2\":\"параметры n, R и P для вычисл. реком. массы пробн. гр.\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5\n}\n", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 0.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "master_script.js", + "name": "1 пл б/ф: шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{2cb7384a-aada-4720-8c85-02f1230478dc}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 1 - измерение или ввод вручную начальной вибрации A0, построение круга соответствующего начальной вибрации A0\",\n\"comment2\":\"вибрация A0 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12\n}\n", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 1.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 1 - начальная вибрация A0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{b5a02d96-4f59-4535-b937-f2f5a46f9f76}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 2 - вычисление по исходным параметрам или ввод вручную массы пробного груза, визуализации нет\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":150,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 2.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 2 - выбор массы пробного груза", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{7660baa0-286c-4bf0-90d1-2cfc886c9293}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 3 - измерение или ввод вручную вибрации пробного груза №1 A1, построение круга соответствующего начальной вибрации A0 (центральная окружность) и вибрации A1\",\n\"comment2\":\"вибрация A0 переносится как константа с предыдущих шагов\",\n\"comment3\":\"вибрация A1 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment4\":\"пробный пуск 1 - груз устанавливается в 0 градусов\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":15\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 3.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 3 - вибрация пробного пуска A1", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{c92094f4-100b-4c44-9409-0be60fb5e902}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 4 - измерение или ввод вручную вибрации пробного груза №2 A2, построение круга соответствующего начальной вибрации A0 (центральная окружность), вибрации A1 и вибрации A2\",\n\"comment2\":\"вибрации A0 и A1 переносятся как константы с предыдущих шагов\",\n\"comment3\":\"вибрация A2 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment4\":\"пробный пуск 2 - груз устанавливается в 120 градусов\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":15,\n\"A2_comment\":\"модуль вибрации пробного пуска №2, мм/с\",\n\"A2\":18\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 4.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 4 - вибрация пробного пуска A2", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{8d5bc5f2-45b5-47d6-b07f-5439b85c964c}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 5 - измерение или ввод вручную вибрации пробного груза №3 A3, построение круга соответствующего начальной вибрации A0 (центральная окружность), вибрации A1, вибрации A2 и вибрации A3\",\n\"comment2\":\"вибрации A0, A1 и A2 переносятся как константы с предыдущих шагов\",\n\"comment3\":\"вибрация A3 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment4\":\"пробный пуск 3 - груз устанавливается в 240 градусов\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":15,\n\"A2_comment\":\"модуль вибрации пробного пуска №2, мм/с\",\n\"A2\":18,\n\"A3_comment\":\"модуль вибрации пробного пуска №3, мм/с\",\n\"A3\":20\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 5.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 5 - вибрация пробного пуска A3", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{ca5bda43-c6a2-4da6-9228-4c2cab8fc983}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 6 - вычисление массы и угла установки балансировочного груза, построение графиков вибрации и расположения дисбаланса и балансировочного груза\",\n\"comment2\":\"вибрации A0, A1, A2 и A3, масса пробного груза переносятся как константы с предыдущих шагов\",\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":15,\n\"A2_comment\":\"модуль вибрации пробного пуска №2, мм/с\",\n\"A2\":18,\n\"A3_comment\":\"модуль вибрации пробного пуска №3, мм/с\",\n\"A3\":20,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":150,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 6.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 6 - результаты расчёта", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{e5141896-542c-4450-a04e-c015c2d2145a}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 7 - контрольное измерение вибрации A\",\n\"comment2\":\"если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"A_comment\":\"модуль вибрации контрольного пуска, мм/с\",\n\"A\":3\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 7.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 7 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{2b9ed372-d373-4da7-9fed-df72a69c806e}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"comment1\":\"шаг 0 - ввод исходных данных\",\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5,\n\n\"comment2\":\"шаг 1 - измерение или ввод вручную начальной вибрации A0, построение круга соответствующего начальной вибрации A0\",\n\"comment3\":\"вибрация A0 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":12,\n\"comment4\":\"шаг 2 - вычисление по исходным параметрам или ввод вручную массы пробного груза, визуализации нет\",\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":150,\n\"m_test_calc_comment\":\"расчётная масса пробного груза, г\",\n\"m_test_calc\":160.8,\n\n\"comment5\":\"шаг 3 - измерение или ввод вручную вибрации пробного груза №1 A1, построение круга соответствующего начальной вибрации A0 (центральная окружность) и вибрации A1\",\n\"comment6\":\"вибрация A0 переносится как константа с предыдущих шагов\",\n\"comment7\":\"вибрация A1 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment8\":\"пробный пуск 1 - груз устанавливается в 0 градусов\",\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":15,\n\n\"comment9\":\"шаг 4 - измерение или ввод вручную вибрации пробного груза №2 A2, построение круга соответствующего начальной вибрации A0 (центральная окружность), вибрации A1 и вибрации A2\",\n\"comment10\":\"вибрации A0 и A1 переносятся как константы с предыдущих шагов\",\n\"comment11\":\"вибрация A2 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment12\":\"пробный пуск 2 - груз устанавливается в 120 градусов\",\n\"A2_comment\":\"модуль вибрации пробного пуска №2, мм/с\",\n\"A2\":18,\n\n\"comment13\":\"шаг 5 - измерение или ввод вручную вибрации пробного груза №3 A3, построение круга соответствующего начальной вибрации A0 (центральная окружность), вибрации A1, вибрации A2 и вибрации A3\",\n\"comment14\":\"вибрации A0, A1 и A2 переносятся как константы с предыдущих шагов\",\n\"comment15\":\"вибрация A3 может быть вычислена по сигналу датчика или введена вручную, если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"comment16\":\"пробный пуск 3 - груз устанавливается в 240 градусов\",\n\"A3_comment\":\"модуль вибрации пробного пуска №3, мм/с\",\n\"A3\":20,\n\n\"comment17\":\"шаг 6 - вычисление массы и угла установки балансировочного груза, построение графиков вибрации и расположения дисбаланса и балансировочного груза\",\n\"comment18\":\"вибрации A0, A1, A2 и A3, масса пробного груза переносятся как константы с предыдущих шагов\",\n\n\"comment19\":\"шаг 7 - контрольное измерение вибрации A\",\n\"comment20\":\"если частота вращения указана, то в качестве параметра вибрации используется амплитуда 1-й гармоники, иначе - СКЗ виброскорости\",\n\"A_comment\":\"модуль вибрации контрольного пуска, мм/с\",\n\"A\":3,\n\n\"comment20\":\"шаг 8 - вывод информации по всем шагам\",\n\"Mb_comment\":\"масса балансировочного груза, г\",\n\"Mb\":593.01,\n\"Mb_corner_comment\":\"угол установки балансировочного груза, градусы\",\n\"Mb_corner\":23.26,\n\"Mdisb_comment\":\"масса дисбаланса, г\",\n\"Mdisb\":593.01,\n\"Mdisb_corner_comment\":\"угол дисбаланса, градусы\",\n\"Mdisb_corner\":203.26\n\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл бф - шаг 8.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл б/ф: шаг 8 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{c61182a0-196b-4f0b-9981-11c8ee19bfbd}" + } + ], + "masterScriptName": "master_script.js", + "name": "1 плоскость без фазы", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_object.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{656708cd-aa5f-44dd-b06b-c3ddd507dd38}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 0.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{1ff17338-9283-40f3-9bcf-80924d1df801}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}\n", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 1.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 1 - начальная вибрация A0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{589ce51e-9e47-4943-a177-999a99adbe93}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":500,\n\"m_test_corner_comment\":\"угол установки пробного груза, град\",\n\"m_test_corner\":250\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 2.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 2 - выбор массы и положения пробного груза", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{1504cbf7-b0d2-4fa7-9e05-1524ada53ede}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":9,\n\"A1_phase_comment\":\"фаза начальной вибрации, град\",\n\"A1_phase\":40,\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 3.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 3 - вибрация пробного пуска A1", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{21d241a9-73a7-4f60-83a6-69cff5732e51}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":500,\n\"m_test_corner_comment\":\"угол установки пробного груза, град\",\n\"m_test_corner\":250,\n\"Mb_comment\":\"масса введённого балансировочного груза, г\",\n\"Mb\":280,\n\"Mb_corner_comment\":\"угол установки введённого балансировочного груза, град\",\n\"Mb_corner\":210,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":9,\n\"A1_phase_comment\":\"фаза начальной вибрации, град\",\n\"A1_phase\":40\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 4.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 4 - расположение дисбаланса", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{9356d749-c5b9-4e67-98fd-f900e3eac83f}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"A2_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A2\":1,\n\"A2_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A2_phase\":60,\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 5.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 5 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{1e9f5446-3321-437a-a1be-8e0973aef98c}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"DCI_comment\":\"модуль ДКВ, мм/с/г\",\n\"DCI\":0.027874784,\n\"DCI_phase_comment\":\"фаза ДКВ, град\",\n\"DCI_phase\":-242.6413957,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности балансировки\",\n\"G\":2.5,\n\"m_test_comment\":\"модуль массы пробного груза, г\",\n\"m_test\":500,\n\"m_test_corner_comment\":\"угол установки пробного груза, град\",\n\"m_test_corner\":250,\n\"m_test_calc_comment\":\"модуль массы пробного груза расчёт, г\",\n\"m_test_calc\":546.72,\n\"Mdisb_comment\":\"модуль массы дисбаланса, г\",\n\"Mdisb\":287,\n\"Mdisb_corner_comment\":\"угол установки дисбаланса, град\",\n\"Mdisb_corner\":32.6,\n\"Mb_comment\":\"модуль массы балансировочного груза, г\",\n\"Mb\":280,\n\"Mb_corner_comment\":\"угол установки балансировочного груза, град\",\n\"Mb_corner\":210,\n\"Mb_calc_comment\":\"модуль массы балансировочного груза расчёт, г\",\n\"Mb_calc\":287,\n\"Mb_corner_calc_comment\":\"угол установки балансировочного груза расчёт, град\",\n\"Mb_corner_calc\":212.6,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"A1_comment\":\"модуль вибрации пробного пуска №1, мм/с\",\n\"A1\":9,\n\"A1_phase_comment\":\"фаза начальной вибрации, град\",\n\"A1_phase\":40,\n\"A2_comment\":\"модуль вибрации контрольного пуска №2, мм/с\",\n\"A2\":1,\n\"A2_phase_comment\":\"фаза вибрации контрольного пуска, град\",\n\"A2_phase\":60\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл - шаг 6.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл: шаг 6 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{689e6435-4b5a-4008-bcf7-82f6919e3048}" + } + ], + "masterScriptName": "", + "name": "1 плоскость", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{5ab5deb2-8995-4c98-9918-bfb5aa332729}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"DCI_comment\":\"модуль ДКВ, мм/с/г\",\n\"DCI\":0.028,\n\"DCI_phase_comment\":\"фаза ДКВ, град\",\n\"DCI_phase\":-242.6\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл ДКВ - шаг 0.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл ДКВ: шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{d51debb7-bd07-456a-8076-f4e05d7574a3}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл ДКВ - шаг 1.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл ДКВ: шаг 1 - начальная вибрация A0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{62cdf809-e829-47d1-a1c4-9a2a51170567}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"DCI_comment\":\"модуль ДКВ, мм/с/г\",\n\"DCI\":0.028,\n\"DCI_phase_comment\":\"фаза ДКВ, град\",\n\"DCI_phase\":-242.6,\n\"Mb_comment\":\"масса введённого балансировочного груза, г\",\n\"Mb\":280,\n\"Mb_corner_comment\":\"угол установки введённого балансировочного груза, град\",\n\"Mb_corner\":210,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл ДКВ - шаг 2.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл ДКВ: шаг 2 - расположение дисбаланса", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{6e77c5a8-207a-4168-a11a-5c5f5f1d2725}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"A2_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A2\":1,\n\"A2_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A2_phase\":60,\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл ДКВ - шаг 3.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл ДКВ: шаг 3 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{aa5ded3d-de78-4422-b136-e4ee7942c90d}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"DCI_comment\":\"модуль ДКВ, мм/с/г\",\n\"DCI\":0.028,\n\"DCI_phase_comment\":\"фаза ДКВ, град\",\n\"DCI_phase\":-242.6,\n\"R_comment\":\"радиус уст. грузов, мм\",\n\"R\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"Mdisb_comment\":\"модуль массы дисбаланса, г\",\n\"Mdisb\":287,\n\"Mdisb_corner_comment\":\"угол установки дисбаланса, град\",\n\"Mdisb_corner\":32.6,\n\"Mb_comment\":\"модуль массы балансировочного груза, г\",\n\"Mb\":280,\n\"Mb_corner_comment\":\"угол установки балансировочного груза, град\",\n\"Mb_corner\":210,\n\"Mb_calc_comment\":\"модуль массы балансировочного груза расчёт, г\",\n\"Mb_calc\":287,\n\"Mb_corner_calc_comment\":\"угол установки балансировочного груза расчёт, град\",\n\"Mb_corner_calc\":212.6,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"A2_comment\":\"модуль вибрации контрольного пуска №2, мм/с\",\n\"A2\":1,\n\"A2_phase_comment\":\"фаза вибрации контрольного пуска, град\",\n\"A2_phase\":60\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "1 пл ДКВ - шаг 4.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "1 пл ДКВ: шаг 4 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{78de799f-d4e6-4b1a-83ed-ea4966393dc0}" + } + ], + "masterScriptName": "", + "name": "1 плоскость (ДКВ)", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{79f9651b-3e5f-46f3-92db-6634c5d5e4fc}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 0.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{31e09c49-fa26-443f-9c2d-6a1cd95d3647}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 1.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 1 - начальная вибрация A0 и B0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{e98d9628-779a-4aca-b7ad-9a861919f402}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":300,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":250\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 2.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 2 - выбор массы и положения пробного груза плоскости 1", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{bc275ab1-d01d-4376-8cb1-93e30fa1fd0d}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":9.1,\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":120,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":6.3,\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":189,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 3.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 3 - вибрация пробного пуска A1 и B1 (пробный груз в плоскости 1)", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{c40d23e9-2110-4d0a-abcd-b8211de9f63f}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":300,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":250\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 4.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 4 - выбор массы и положения пробного груза плоскости 2", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{e3b6be5e-952c-415c-b223-1080da4b3bca}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":8.1,\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":95,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":5.8,\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":165,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 5.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 5 - вибрация пробного пуска A2 и B2 (пробный груз в плоскости 2)", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{c9220ee5-c72e-4642-b0d7-aa99d50aeada}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":9.1,\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":120,\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":8.1,\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":95,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":6.3,\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":189,\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":5.8,\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":165,\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":300,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":250,\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":300,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":250,\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":600,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":350,\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":700,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":180,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 6.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 6 - расположение дисбалансов", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{0092b133-333a-4dd3-97c7-7986d5e2f574}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":1,\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":60,\n\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":1,\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":120,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 7.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 7 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{b30a463c-7dec-4404-b66e-bfa81b0a8595}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":300,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":250,\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":300,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":250,\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":600,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":350,\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":700,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":180,\n\"Mb1_calc_comment\":\"масса расчётного балансировочного груза плоскости 1, г\",\n\"Mb1_calc\":650,\n\"Mb1_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 1, град\",\n\"Mb1_corner_calc\":343.1,\n\"Mb2_calc_comment\":\"масса расчётного балансировочного груза плоскости 2, г\",\n\"Mb2_calc\":720,\n\"Mb2_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 2, град\",\n\"Mb2_corner_calc\":187.7,\n\"Mdisb1_comment\":\"модуль массы дисбаланса плоскости 1, г\",\n\"Mdisb1\":650,\n\"Mdisb1_corner_comment\":\"угол дисбаланса плоскости 1, град\",\n\"Mdisb1_corner\":163.1,\n\"Mdisb2_comment\":\"модуль массы дисбаланса плоскости 2, г\",\n\"Mdisb2\":720,\n\"Mdisb2_corner_comment\":\"угол дисбаланса плоскости 2, град\",\n\"Mdisb2_corner\":7.7,\n\"DCI_A1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке A, мм/с/г\",\n\"DCI_A1\":0.015171867,\n\"DCI_A1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке A, град\",\n\"DCI_A1_phase\":168.49971205,\n\"DCI_A2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке A, мм/с/г\",\n\"DCI_A2\":0.02478227,\n\"DCI_A2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке A, град\",\n\"DCI_A2_phase\":143.1835959,\n\"DCI_B1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке B, мм/с/г\",\n\"DCI_B1\":0.04920397,\n\"DCI_B1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке B, град\",\n\"DCI_B1_phase\":317.301798,\n\"DCI_B2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке B, мм/с/г\",\n\"DCI_B2\":0.04403551344,\n\"DCI_B2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке B, град\",\n\"DCI_B2_phase\":308.9219007,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":9.1,\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":120,\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":8.1,\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":95,\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":1,\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":60,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":6.3,\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":189,\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":5.8,\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":165,\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":1,\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":120\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 8.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл: шаг 8 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{94d7cf44-ca03-4306-9736-ff525f86931f}" + } + ], + "masterScriptName": "", + "name": "2 плоскости", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{428dda63-3071-4b5b-899d-164e68e8e64a}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"DCI_A1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке A, мм/с/г\",\n\"DCI_A1\":0.015,\n\"DCI_A1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке A, град\",\n\"DCI_A1_phase\":168.5,\n\"DCI_A2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке A, мм/с/г\",\n\"DCI_A2\":0.025,\n\"DCI_A2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке A, град\",\n\"DCI_A2_phase\":143.2,\n\"DCI_B1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке B, мм/с/г\",\n\"DCI_B1\":0.049,\n\"DCI_B1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке B, град\",\n\"DCI_B1_phase\":317.3,\n\"DCI_B2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке B, мм/с/г\",\n\"DCI_B2\":0.044,\n\"DCI_B2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке B, град\",\n\"DCI_B2_phase\":308.9\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл ДКВ - шаг 0.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл ДКВ: шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{18747513-ade4-43cf-a089-a0117fab57bc}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл ДКВ - шаг 1.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл ДКВ: шаг 1 - начальная вибрация A0 и B0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{f323aad3-4874-4d88-b537-4bd4c5072ab2}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":600,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":350,\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":700,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":180,\n\"DCI_A1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке A, мм/с/г\",\n\"DCI_A1\":0.015,\n\"DCI_A1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке A, град\",\n\"DCI_A1_phase\":168.5,\n\"DCI_A2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке A, мм/с/г\",\n\"DCI_A2\":0.025,\n\"DCI_A2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке A, град\",\n\"DCI_A2_phase\":143.2,\n\"DCI_B1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке B, мм/с/г\",\n\"DCI_B1\":0.049,\n\"DCI_B1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке B, град\",\n\"DCI_B1_phase\":317.3,\n\"DCI_B2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке B, мм/с/г\",\n\"DCI_B2\":0.044,\n\"DCI_B2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке B, град\",\n\"DCI_B2_phase\":308.9,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":17000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл ДКВ - шаг 2.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл ДКВ: шаг 2 - расположение дисбалансов", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{882c0814-f93a-4841-8e38-d53983224463}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":1,\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":60,\n\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":1,\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":120,\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл ДКВ - шаг 3.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл ДКВ: шаг 3 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{357f8c9f-5bc5-4154-a081-7a2ea622390e}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":2000,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":2000,\n\"P_comment\":\"масса ротора, г\",\n\"P\":17000000,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":1000,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":600,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":350,\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":700,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":180,\n\"Mb1_calc_comment\":\"масса расчётного балансировочного груза плоскости 1, г\",\n\"Mb1_calc\":638,\n\"Mb1_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 1, град\",\n\"Mb1_corner_calc\":342.1,\n\"Mb2_calc_comment\":\"масса расчётного балансировочного груза плоскости 2, г\",\n\"Mb2_calc\":703,\n\"Mb2_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 2, град\",\n\"Mb2_corner_calc\":187.1,\n\"Mdisb1_comment\":\"модуль массы дисбаланса плоскости 1, г\",\n\"Mdisb1\":638,\n\"Mdisb1_corner_comment\":\"угол дисбаланса плоскости 1, град\",\n\"Mdisb1_corner\":162.1,\n\"Mdisb2_comment\":\"модуль массы дисбаланса плоскости 2, г\",\n\"Mdisb2\":703,\n\"Mdisb2_corner_comment\":\"угол дисбаланса плоскости 2, град\",\n\"Mdisb2_corner\":7.1,\n\"DCI_A1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке A, мм/с/г\",\n\"DCI_A1\":0.015,\n\"DCI_A1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке A, град\",\n\"DCI_A1_phase\":168.5,\n\"DCI_A2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке A, мм/с/г\",\n\"DCI_A2\":0.025,\n\"DCI_A2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке A, град\",\n\"DCI_A2_phase\":143.2,\n\"DCI_B1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке B, мм/с/г\",\n\"DCI_B1\":0.049,\n\"DCI_B1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке B, град\",\n\"DCI_B1_phase\":317.3,\n\"DCI_B2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке B, мм/с/г\",\n\"DCI_B2\":0.044,\n\"DCI_B2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке B, град\",\n\"DCI_B2_phase\":308.9,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":8,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":150,\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":1,\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":60,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":9,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":40,\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":1,\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":120\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "test_balancing (1)", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл ДКВ - шаг 4.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + } + ], + "masterScriptName": "", + "name": "2 пл ДКВ: шаг 4 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{05d154f3-44ac-45db-a1dc-40c211bf1b87}" + } + ], + "masterScriptName": "", + "name": "2 плоскости (ДКВ)", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{67cb2c21-70ea-4828-b8f8-afd0d3f7ce45}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 3, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"freq_dc_comment\":\"уровень, при переходе через который вычисляются периоды\",\n\"freq_dc\":0.5,\n\n\"channel_A_comment\":\"номер канала диагностики A\",\n\"channel_A\":0,\n\"channel_B_comment\":\"номер канала диагностики B\",\n\"channel_B\":2,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":\"-\",\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":\"-\",\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":\"-\",\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":\"-\",\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":1\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - без дисбалансов", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 1 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{6f96cab3-cf28-45ae-b730-1fe3077582e4}" + } + ], + "masterScriptName": "", + "name": "вибрация без дисбалансов", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{56ef6c90-5258-430c-aeee-ef87af1e1d8f}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":250,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":250,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":10,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":500,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 0 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 0 - ввод исходных данных", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{2ef74f46-3cdb-4b13-80f2-ececfeae2ed3}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"freq_dc_comment\":\"уровень, при переходе через который вычисляются периоды\",\n\"freq_dc\":0.5,\n\"freq_time_comment\":\"время вычисления частоты\",\n\"freq_time\":1,\n\"freq_avg_cnt_comment\":\"количество усреднений вычисления частоты\",\n\"freq_avg_cnt\":5,\n\n\"channel_A_comment\":\"номер канала диагностики A\",\n\"channel_A\":6,\n\"channel_B_comment\":\"номер канала диагностики B\",\n\"channel_B\":8,\n\n\"resolution_comment\":\"разрешение спектра\",\n\"resolution\":0.5,\n\"average_comment\":\"количество усреднений\",\n\"average\":1,\n\"overlap_comment\":\"перекрытие\",\n\"overlap\":0,\n\"peak_level_comment\":\"порог обнаружения гармоник\",\n\"peak_level\":0.01,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":\"-\",\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":\"-\",\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":\"-\",\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":\"-\",\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":0\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 1 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 1 - начальная вибрация A0 и B0", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{c5284741-2882-40b7-b050-c5e114d0d2bc}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":500,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":250,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":250,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":10,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":35.4,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":51,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":35.5,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":6,\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":21.7,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":250\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 2 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 2 - выбор массы и положения пробного груза плоскости 1", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{4665bab5-c22a-4376-a03e-fb2120dc83aa}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"freq_dc_comment\":\"уровень, при переходе через который вычисляются периоды\",\n\"freq_dc\":0.5,\n\"freq_time_comment\":\"время вычисления частоты\",\n\"freq_time\":1,\n\"freq_avg_cnt_comment\":\"количество усреднений вычисления частоты\",\n\"freq_avg_cnt\":5,\n\n\"channel_A_comment\":\"номер канала диагностики A\",\n\"channel_A\":6,\n\"channel_B_comment\":\"номер канала диагностики B\",\n\"channel_B\":8,\n\n\"resolution_comment\":\"разрешение спектра\",\n\"resolution\":0.5,\n\"average_comment\":\"количество усреднений\",\n\"average\":1,\n\"overlap_comment\":\"перекрытие\",\n\"overlap\":0,\n\"peak_level_comment\":\"порог обнаружения гармоник\",\n\"peak_level\":0.01,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":35.4,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":51,\n\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":\"-\",\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":\"-\",\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":35.5,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":6,\n\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":\"-\",\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":\"-\",\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":0\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - пробный груз в плоскости 1", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 3 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{f5347cd7-4614-45cf-a6b2-ab59004d230e}" + } + ], + "masterScriptName": "", + "name": "шаг 3 - вибрация пробного пуска A1 и B1 (пробный груз в плоскости 1)", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{24721fdc-2290-41ce-8368-bf3342ff2137}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":500,\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":250,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":250,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":10,\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":35.4,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":51,\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":35.5,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":6,\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":21.7,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":250\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 4 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 4 - выбор массы и положения пробного груза плоскости 2", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{004755d8-d0e4-4b12-aee4-75ca0e9202fd}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"freq_dc_comment\":\"уровень, при переходе через который вычисляются периоды\",\n\"freq_dc\":0.5,\n\"freq_time_comment\":\"время вычисления частоты\",\n\"freq_time\":1,\n\"freq_avg_cnt_comment\":\"количество усреднений вычисления частоты\",\n\"freq_avg_cnt\":5,\n\n\"channel_A_comment\":\"номер канала диагностики A\",\n\"channel_A\":6,\n\"channel_B_comment\":\"номер канала диагностики B\",\n\"channel_B\":8,\n\n\"resolution_comment\":\"разрешение спектра\",\n\"resolution\":0.5,\n\"average_comment\":\"количество усреднений\",\n\"average\":1,\n\"overlap_comment\":\"перекрытие\",\n\"overlap\":0,\n\"peak_level_comment\":\"порог обнаружения гармоник\",\n\"peak_level\":0.01,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":35.4,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":51,\n\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":\"-\",\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":\"-\",\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":35.5,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":6,\n\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":\"-\",\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":\"-\",\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":0\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - пробный груз в плоскости 2", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 5 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{d510a059-a41c-4832-9900-5719d9a54f20}" + } + ], + "masterScriptName": "", + "name": "шаг 5 - вибрация пробного пуска A2 и B2 (пробный груз в плоскости 2)", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{24c6efbc-a849-47d4-832d-0e8c3cd69f98}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":35.4,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":51,\n\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":36,\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":47,\n\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":33.2,\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":36,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":35.5,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":6,\n\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":39.8,\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":7,\n\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":39.8,\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":16,\n\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":20.1,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":250,\n\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":20.1,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":250,\n\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":11.6,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":250,\n\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":4.8,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":190,\n\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":250,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":250,\n\n\"P_comment\":\"масса ротора, кг\",\n\"P\":10,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":500,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 6 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 6 - расположение дисбалансов", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{7d68fd78-d72c-4079-952b-113e869e77a5}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"freq_dc_comment\":\"уровень, при переходе через который вычисляются периоды\",\n\"freq_dc\":0.5,\n\"freq_time_comment\":\"время вычисления частоты\",\n\"freq_time\":1,\n\"freq_avg_cnt_comment\":\"количество усреднений вычисления частоты\",\n\"freq_avg_cnt\":5,\n\n\"channel_A_comment\":\"номер канала диагностики A\",\n\"channel_A\":6,\n\"channel_B_comment\":\"номер канала диагностики B\",\n\"channel_B\":8,\n\n\"resolution_comment\":\"разрешение спектра\",\n\"resolution\":0.5,\n\"average_comment\":\"количество усреднений\",\n\"average\":3,\n\"overlap_comment\":\"перекрытие\",\n\"overlap\":0,\n\"peak_level_comment\":\"порог обнаружения гармоник\",\n\"peak_level\":0.01,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":27.3,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":308,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":26.8,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":353,\n\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":\"-\",\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":\"-\",\n\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":\"-\",\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":\"-\",\n\n\"select_vibr_sign_comment\":\"переключатель источника сигнала вибрации; 0 - относительная вибрация, 1 - абсолютная вибрация\",\n\"select_vibr_sign\":0\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - контрольный пуск", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 7 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}" + } + ], + "masterScriptName": "", + "name": "шаг 7 - контрольный пуск", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{2c52f842-ca6e-4311-a993-6a4a032f364a}" + }, + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{\n\"R1_comment\":\"радиус уст. грузов на плоскости 1, мм\",\n\"R1\":250,\n\"R2_comment\":\"радиус уст. грузов на плоскости 2, мм\",\n\"R2\":250,\n\"P_comment\":\"масса ротора, кг\",\n\"P\":10,\n\"n_comment\":\"скорость вращения, об/мин\",\n\"n\":500,\n\"G_comment\":\"Класс точности баалнсировки\",\n\"G\":2.5,\n\n\"m_test_1_comment\":\"модуль массы пробного груза плоскости 1, г\",\n\"m_test_1\":12.4,\n\"m_test_1_corner_comment\":\"угол установки пробного груза плоскости 1, град\",\n\"m_test_1_corner\":240,\n\n\"m_test_2_comment\":\"модуль массы пробного груза плоскости 2, г\",\n\"m_test_2\":12.4,\n\"m_test_2_corner_comment\":\"угол установки пробного груза плоскости 2, град\",\n\"m_test_2_corner\":190,\n\n\"Mb1_comment\":\"масса введённого балансировочного груза плоскости 1, г\",\n\"Mb1\":10,\n\"Mb1_corner_comment\":\"угол установки введённого балансировочного груза плоскости 1, град\",\n\"Mb1_corner\":350,\n\n\"Mb2_comment\":\"масса введённого балансировочного груза плоскости 2, г\",\n\"Mb2\":6,\n\"Mb2_corner_comment\":\"угол установки введённого балансировочного груза плоскости 2, град\",\n\"Mb2_corner\":20,\n\n\"Mb1_calc_comment\":\"масса расчётного балансировочного груза плоскости 1, г\",\n\"Mb1_calc\":9.8,\n\"Mb1_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 1, град\",\n\"Mb1_corner_calc\":169.5,\n\n\"Mb2_calc_comment\":\"масса расчётного балансировочного груза плоскости 2, г\",\n\"Mb2_calc\":5.9,\n\"Mb2_corner_calc_comment\":\"угол установки расчётного балансировочного груза плоскости 2, град\",\n\"Mb2_corner_calc\":196.5,\n\n\"Mdisb1_comment\":\"модуль массы дисбаланса плоскости 1, г\",\n\"Mdisb1\":9.8,\n\"Mdisb1_corner_comment\":\"угол дисбаланса плоскости 1, град\",\n\"Mdisb1_corner\":349.5,\n\n\"Mdisb2_comment\":\"модуль массы дисбаланса плоскости 2, г\",\n\"Mdisb2\":5.9,\n\"Mdisb2_corner_comment\":\"угол дисбаланса плоскости 2, град\",\n\"Mdisb2_corner\":16.5,\n\n\"DCI_A1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке A, мм/с/г\",\n\"DCI_A1\":3.851,\n\"DCI_A1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке A, град\",\n\"DCI_A1_phase\":264,\n\"DCI_A2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке A, мм/с/г\",\n\"DCI_A2\":1.904,\n\"DCI_A2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке A, град\",\n\"DCI_A2_phase\":333.5,\n\n\"DCI_B1_comment\":\"модуль ДКВ плоскости 1 на вибрацию в точке B, мм/с/г\",\n\"DCI_B1\":0.269,\n\"DCI_B1_phase_comment\":\"фаза ДКВ плоскости 1 на вибрацию в точке B, град\",\n\"DCI_B1_phase\":90.9,\n\"DCI_B2_comment\":\"модуль ДКВ плоскости 2 на вибрацию в точке B, мм/с/г\",\n\"DCI_B2\":5.279,\n\"DCI_B2_phase_comment\":\"фаза ДКВ плоскости 2 на вибрацию в точке B, град\",\n\"DCI_B2_phase\":350.5,\n\n\"A0_comment\":\"модуль начальной вибрации, мм/с\",\n\"A0\":38.2,\n\"A0_phase_comment\":\"фаза начальной вибрации, град\",\n\"A0_phase\":270.5,\n\"A1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"A1\":36.9,\n\"A1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"A1_phase\":194.8,\n\"A2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"A2\":38.6,\n\"A2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"A2_phase\":234.7,\n\"A3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"A3\":10,\n\"A3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"A3_phase\":10,\n\n\"B0_comment\":\"модуль начальной вибрации, мм/с\",\n\"B0\":32,\n\"B0_phase_comment\":\"фаза начальной вибрации, град\",\n\"B0_phase\":11.5,\n\"B1_comment\":\"модуль вибрации пробного пуска 1, мм/с\",\n\"B1\":34.6,\n\"B1_phase_comment\":\"фаза начальной вибрации пробного пуска 1, град\",\n\"B1_phase\":7.9,\n\"B2_comment\":\"модуль вибрации пробного пуска 2, мм/с\",\n\"B2\":34.6,\n\"B2_phase_comment\":\"фаза начальной вибрации пробного пуска 2, град\",\n\"B2_phase\":170.3,\n\"B3_comment\":\"модуль вибрации после установки балансировочного груза, мм/с\",\n\"B3\":10,\n\"B3_phase_comment\":\"фаза вибрации после установки балансировочного груза, град\",\n\"B3_phase\":50\n}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + { + "U_freq": 50, + "async_N_rotor": 0, + "bdD1": 0, + "bdD2": 0, + "bdL": 0, + "bsAngle": 0, + "bsInnerD": 0, + "bsModelName": "", + "bsOuterD": 0, + "bsRollerCount": 0, + "bsRollerD": 0, + "bsVendor": "", + "cbdZ1": 0, + "cbdZ2": 0, + "cbdZ3": 0, + "customOptionsString": "{}", + "dpt_K": 0, + "dpt_M": 0, + "dpt_N": 0, + "dpt_freq": 50, + "elType": 0, + "groupType": 0, + "gtZ1": 0, + "gtZ2": 0, + "isQMLViewActive": false, + "isRouteStarter": false, + "items": [ + ], + "masterScriptName": "", + "name": "8,4Гц - начальная вибрация", + "nodeType": 2, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "default_point.qml", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "2 пл - шаг 8 - стенд.js", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + } + ], + "masterScriptName": "", + "name": "шаг 8 - отчёт о проведённых операциях", + "nodeType": 1, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{2553c932-d33a-4ac0-aa78-4842566efc25}" + } + ], + "masterScriptName": "", + "name": "Ротор", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{4322b63d-aec7-4e48-a809-35bdeb006391}" + } + ], + "masterScriptName": "", + "name": "Стенд", + "nodeType": 0, + "objectType": 0, + "pgN": 0, + "pgZ1": 0, + "pgZ2": 0, + "pgZ3": 0, + "pmBlades": 0, + "pointComment": "", + "qmlScriptName": "", + "rbAngle": 0, + "rbInnerD": 0, + "rbModelName": "", + "rbOuterD": 0, + "rbRollerCount": 0, + "rbRollerD": 0, + "rbVendor": "", + "scriptName": "", + "sync_M_rotor": 0, + "sync_M_stator": 0, + "tachoRatio": 1, + "trBlades": 0, + "uuid": "{4c62d813-f19c-45f9-90cf-1295415016da}" + } +] diff --git a/balancing_calculator_points_model.json b/balancing_calculator_points_model.json new file mode 100644 index 0000000..0714582 --- /dev/null +++ b/balancing_calculator_points_model.json @@ -0,0 +1,182 @@ +[ + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "8,4Гц - начальная вибрация", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{68a06416-a332-435b-a2c7-a9fc0d0ce56a}" + }, + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "8,4Гц - без дисбалансов", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{6f96cab3-cf28-45ae-b730-1fe3077582e4}" + }, + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "8,4Гц - контрольный пуск", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}" + }, + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "8,4Гц - пробный груз в плоскости 2", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{d510a059-a41c-4832-9900-5719d9a54f20}" + }, + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "test_balancing (1)", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}" + }, + { + "RRDSize": 100, + "analizerScriptName": "", + "channelsToWrite": [ + ], + "comment": "", + "daemonConfigName": "", + "daemonScriptName": "", + "defaultRecordTime": 10, + "deviceIndex": -1, + "isDeviceSelected": false, + "isRRDEnabled": false, + "label": "8,4Гц - пробный груз в плоскости 1", + "masterValueModel": [ + ], + "runAnalizer": false, + "stopRecorderFromScript": false, + "tachoOptions": { + "isTachoEnabled": false, + "maxTacho": 1000, + "minTacho": 0, + "recalcTacho": false, + "tachoChannel": 0, + "tachoChannelName": "", + "tachoFromInfo": 0, + "tachoState": 0, + "tachoValue": 0 + }, + "uuid": "{f5347cd7-4614-45cf-a6b2-ab59004d230e}" + } +] diff --git a/qml/default_object.qml b/qml/default_object.qml new file mode 100644 index 0000000..d7bd47c --- /dev/null +++ b/qml/default_object.qml @@ -0,0 +1,103 @@ +import QtQml + +import QtQuick +import QtQuick.Controls + +import QtQuick.Layouts + + +Item { + id: mainWindow + anchors.fill: parent + + SplitView { + id: splitView + orientation: Qt.Horizontal + + anchors.fill: parent + anchors.margins: 2 + + handle: Rectangle { + implicitWidth: 6 + color: "darkgray" + } + + Rectangle { + SplitView.preferredWidth: parent.width/2 + SplitView.maximumWidth: parent.width/100*75 + SplitView.minimumWidth: parent.width/100*25 + color: "gray" + + ColumnLayout { + Text{ + text: "gtld.node.name = " + gtld.node.name + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.node.uuid = " + gtld.node.uuid.toString() + font.pointSize: 18 + color: "white" + } + + + Text{ + text: "gtld.node.lastResult[\"tag\"] = " + gtld.node.lastResult["tag"] || "undefined"; + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.node.lastResult.masterValues[\"skz\"] = " + gtld.node.lastResult.masterValues?.["skz"] || "undefined"; + + font.pointSize: 18 + color: "white" + } + + + Text{ + text: "gtld.storage.selectLastResults({args}).length = " + + gtld.node.selectLastResults( + { + count: 5, + tag: gtld.node.lastResult["tag"] + } + ).length || "undefined"; + + font.pointSize: 18 + color: "white" + } + + } + } + + Rectangle { + SplitView.preferredWidth: parent.width/2 + color: "lightGray" + ListView{ + id: listView + anchors.fill: parent + + spacing: 5 + model: gtld.node.selectLastResults( + { + count: 5, + tag: "tag", + }) + + delegate: Rectangle { + height: 60 + width: ListView.view.width + color: "darkblue" + Text { + anchors.centerIn: parent + color: "white" + text: "skz = " + modelData["masterValues"]?.["skz"] + "; speed = " + modelData["masterValues"]?.["speed"] + font.pointSize: 12 + } + } + } + } + } +} diff --git a/qml/default_point.qml b/qml/default_point.qml new file mode 100644 index 0000000..16ad47b --- /dev/null +++ b/qml/default_point.qml @@ -0,0 +1,104 @@ +import QtQml + +import QtQuick +import QtQuick.Controls + +import QtQuick.Layouts + + +Item { + id: mainWindow + anchors.fill: parent + + SplitView { + id: splitView + orientation: Qt.Horizontal + + anchors.fill: parent + anchors.margins: 2 + + handle: Rectangle { + implicitWidth: 6 + color: "darkgray" + } + + Rectangle { + SplitView.preferredWidth: parent.width/2 + SplitView.maximumWidth: parent.width/100*75 + SplitView.minimumWidth: parent.width/100*25 + color: "gray" + + ColumnLayout { + Text{ + text: "gtld.node.name = " + gtld.node.name + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.node.uuid = " + gtld.node.uuid.toString() + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.node.parent.uuid = " + gtld.node.parent.uuid.toString() + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.node.lastResult[\"tag\"] = " + gtld.node.lastResult?.[0]?.["tag"] || "undefined"; + font.pointSize: 18 + color: "white" + } + + Text{ + text: "gtld.storage.selectLastResults({args}).length = " + + gtld.node.selectLastResults( + { + count: 5, + tag: gtld.node.lastResult?.[0]?.["tag"] || "undefined" + } + ).length || "undefined"; + + font.pointSize: 18 + color: "white" + } + + } + } + + Rectangle { + SplitView.preferredWidth: parent.width/2 + color: "lightGray" + ListView{ + id: listView + anchors.fill: parent + + spacing: 5 + model: gtld.node.selectLastResults( + { + count: 5, + tag: "tag", + } + ) + + delegate: Rectangle { + height: 60 + width: ListView.view.width + color: "darkblue" + Text { + anchors.centerIn: parent + color: "white" + text: "record fileName = " + modelData?.["recordOptions"]?.["recordFileName"] + + "; skz = " + modelData["masterValues"]?.["skz"] + + "; speed = " + modelData["masterValues"]?.["speed"] + font.pointSize: 12 + } + } + } + } + } +} + diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav new file mode 100644 index 0000000..fe1c528 Binary files /dev/null and b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav differ diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav.info b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav.info new file mode 100644 index 0000000..1854612 --- /dev/null +++ b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 начальная вибрация.wav.info @@ -0,0 +1,137 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + }, + "ranges": [ + ] +} diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav new file mode 100644 index 0000000..1eb1f1d Binary files /dev/null and b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav differ diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav.info b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav.info new file mode 100644 index 0000000..858339b --- /dev/null +++ b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0 с дисбалансами (1).wav.info @@ -0,0 +1,137 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 6422272, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65475, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5631, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711917, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16725760, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10616576, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65411, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 21759, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 13631743, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + }, + "ranges": [ + ] +} diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav new file mode 100644 index 0000000..389c6ae Binary files /dev/null and b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav differ diff --git a/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav.info b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav.info new file mode 100644 index 0000000..5fdedba --- /dev/null +++ b/records/{68a06416-a332-435b-a2c7-a9fc0d0ce56a}/Пуск 0.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 16711770, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16763392, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 917248, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 59135, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 4063487, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711834, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16747264, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5111552, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65495, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav b/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav new file mode 100644 index 0000000..42c73ff Binary files /dev/null and b/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav differ diff --git a/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav.info b/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav.info new file mode 100644 index 0000000..858339b --- /dev/null +++ b/records/{6f96cab3-cf28-45ae-b730-1fe3077582e4}/Пуск без дисбалансов.wav.info @@ -0,0 +1,137 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 6422272, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65475, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5631, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711917, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16725760, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10616576, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65411, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 21759, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 13631743, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + }, + "ranges": [ + ] +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav new file mode 100644 index 0000000..9b70d84 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav.info new file mode 100644 index 0000000..5fdedba --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1 (1).wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 16711770, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16763392, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 917248, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 59135, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 4063487, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711834, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16747264, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5111552, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65495, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav new file mode 100644 index 0000000..6503ede Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 1.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav new file mode 100644 index 0000000..23d2744 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav.info new file mode 100644 index 0000000..ea8a179 --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2 (1).wav.info @@ -0,0 +1,137 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 16711770, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16763392, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 917248, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 59135, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 4063487, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711834, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16747264, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5111552, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65495, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + }, + "ranges": [ + ] +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav new file mode 100644 index 0000000..7f2ba75 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 2.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav new file mode 100644 index 0000000..cf74502 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 3.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav new file mode 100644 index 0000000..b7b7759 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Контрольный пуск 4.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav new file mode 100644 index 0000000..b99d1d7 Binary files /dev/null and b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav differ diff --git a/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav.info b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav.info new file mode 100644 index 0000000..08ffca7 --- /dev/null +++ b/records/{bcfb8de2-5680-401c-8665-6ceb4a40d7aa}/Пуск 3 контрольный.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 6422272, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65475, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5631, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711917, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16725760, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10616576, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65411, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 21759, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 13631743, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav new file mode 100644 index 0000000..c855f96 Binary files /dev/null and b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav differ diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav.info b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный в плоскости 2.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav new file mode 100644 index 0000000..5891fff Binary files /dev/null and b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav differ diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav.info b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav.info new file mode 100644 index 0000000..08ffca7 --- /dev/null +++ b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2 пробный груз в плоскости 2.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 6422272, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65475, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5631, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711917, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16725760, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10616576, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65411, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 21759, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 13631743, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav new file mode 100644 index 0000000..034069d Binary files /dev/null and b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav differ diff --git a/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav.info b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav.info new file mode 100644 index 0000000..5fdedba --- /dev/null +++ b/records/{d510a059-a41c-4832-9900-5719d9a54f20}/Пуск 2.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 16711770, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16763392, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 917248, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 59135, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 4063487, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711834, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16747264, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5111552, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65495, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav new file mode 100644 index 0000000..9bbdd5f Binary files /dev/null and b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav differ diff --git a/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.conf b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.conf new file mode 100644 index 0000000..8ae91d6 --- /dev/null +++ b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.conf @@ -0,0 +1,5 @@ + + + + + diff --git a/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.info b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.info new file mode 100644 index 0000000..d5d51e3 --- /dev/null +++ b/records/{dc42d8d0-1a99-48a5-ad83-ff5d5453d9fc}/Тестовый сигнал для балансировки.wav.info @@ -0,0 +1,47 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 0, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "1V202 #123", + "node": "gtl::hw::player_analog_input", + "offset": 0, + "reference": 1, + "sensitivity": 1 + }, + { + "color": 0, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "1V202 #124", + "node": "gtl::hw::player_analog_input", + "offset": 0, + "reference": 1, + "sensitivity": 1 + }, + { + "color": 0, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "8V91D #001", + "node": "gtl::hw::player_analog_input", + "offset": 0, + "reference": 1, + "sensitivity": 1 + } + ], + "name": "player[Лянг вых_тр_букса_ру_пропил__2022_04_12__12_42_49.wav]", + "rate": 128000 + }, + "ranges": [ + ] +} diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav new file mode 100644 index 0000000..a7303a5 Binary files /dev/null and b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav differ diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav.info b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav.info new file mode 100644 index 0000000..ed9e0de --- /dev/null +++ b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный в плоскости 1.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 65365, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 33791, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10551551, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711735, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16772608, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65301, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 50175, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 6357247, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711798, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav new file mode 100644 index 0000000..a1d5286 Binary files /dev/null and b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav differ diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav.info b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav.info new file mode 100644 index 0000000..08ffca7 --- /dev/null +++ b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1 пробный груз в плоскости 1 (1).wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 6422272, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65475, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5631, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711917, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16725760, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 10616576, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65411, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 21759, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 13631743, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav new file mode 100644 index 0000000..6cbe1fe Binary files /dev/null and b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav differ diff --git a/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav.info b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav.info new file mode 100644 index 0000000..5fdedba --- /dev/null +++ b/records/{f5347cd7-4614-45cf-a6b2-ab59004d230e}/Пуск 1.wav.info @@ -0,0 +1,135 @@ +{ + "comment": "", + "hw": { + "channels": [ + { + "color": 16711770, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [0] П_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16763392, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [1] П_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 917248, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [2] З_гориз", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 59135, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [3] 3_верт", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 4063487, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "102 [тахо]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16711834, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [0]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 16747264, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [1]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 5111552, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [2]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + }, + { + "color": 65495, + "gain": 1, + "is_couping": false, + "is_iepe": false, + "is_inverting": false, + "name": "103 [3]", + "node": "gtl::hw::analog_input", + "offset": 0, + "reference": 1, + "scale": 1, + "sensitivity": 1, + "unit": "" + } + ], + "name": "93.120.233.148:7000::0", + "rate": 64000 + } +} diff --git a/scripts/1 пл - шаг 0.js b/scripts/1 пл - шаг 0.js new file mode 100644 index 0000000..e8b349d --- /dev/null +++ b/scripts/1 пл - шаг 0.js @@ -0,0 +1,81 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let R_ = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let R; // радиус установки грузов ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 0 - ввод исходных данных: + // ввод исходных данных: радиус установки грузов, масса ротора + // ввод ДКВ (DCI), если он известен (необязателен для этого алгоритма) + + // R радиус установки грузов, мм + if (R_ != 0) {R = R_} // принимает значение из опций + else {R = false} // принимает значение false + // P масса ротора, г + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Масса ротора", P); +gtl.log.info("Радиус установки грузов", R); +gtl.log.info("Допустимый остаточный дисбаланс", U_per); + + // Выдача результата (results) + let __result = { + _001_Радиус_установки_грузов_мм: R, + _002_Масса_ротора_кг: P, + _003_Допуст_ост_дисб_г_мм: U_per, + _004_Част_вращ_обмин: n + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 1.js b/scripts/1 пл - шаг 1.js new file mode 100644 index 0000000..2db9dbe --- /dev/null +++ b/scripts/1 пл - шаг 1.js @@ -0,0 +1,402 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_2_1000.width = 998; // ширина полосы фильтра + let filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Фильтр для виброперемещения + let filter_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_300s.kind = gtl.filter_iir.butterworth; + filter_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_2_300s.order = 4; + filter_2_300s.frequency = 151; // центральная частота + filter_2_300s.width = 298; // ширина полосы + + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_vibr; // фильтр сигнала вибрации + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_vibr = filter_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_vibr = filter_2_300s; + frequency = 300; + } + + // Спектр для получения 1-й гармоники частоты вращения + var AUSP = gtl.add_ausp(filter_vibr); // объявление переменной спектра + AUSP.color = 0x00ff0000; // цвет спектра + AUSP.name = "AUSP"; // имя спектра + AUSP.frequency = frequency; // граничная частота спектра + AUSP.lines = AUSP.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP.average = average; // количество усреднений + AUSP.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP.smoothing_factor = 100; // усреднение средней линии + AUSP.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP.tolerance = AUSP.resolution; // диапазон поиска гармоник +/- + + // СКЗ + var RMS = gtl.add_value_rms(filter_vibr); + RMS.time = 1; + RMS.avg_cnt = 3; + + // Спектр вибрации + var AUSP_pl = gtl.create_ausp( + { + "src" : filter_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let 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 + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP.clear_harms_sets(); + + + let __AUSP_tools = gtl.create_spec_tools( + { + data: AUSP_pl.data, + df: AUSP_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSP = __AUSP_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP.name = "F1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации", + x: AUSP_pl.resolution, + y: AUSP_pl.data, + spec_tools: __AUSP_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSP_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMS * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 1 - начальная вибрация A0: + // измерение начальной вибрации A0 (или ввод вручную) + // определение целесообразности проведения балансировки + // построение графика вибрации A0 + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение координат точек окружности графика для отображения векторов вибрации + 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)+Math.max(A0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0)+Math.max(A0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)], + y: [(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)] + }); + + +gtl.log.info("RMS",RMS.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_F1: freq.value, + _002_Ампл_гарм_1F1: F1_1_a, + _003_Фаза_част_вращ_F1: F1_1_ph, + _004_Ампл_вибр_пуска_A0: A0, + _005_Фаза_вибр_пуска_A0: A0_phase, + _006_Тестирование: test_balance, + _007_СКЗ_вибрации: RMS.value, + _008_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 2.js b/scripts/1 пл - шаг 2.js new file mode 100644 index 0000000..4bc896f --- /dev/null +++ b/scripts/1 пл - шаг 2.js @@ -0,0 +1,181 @@ +"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(); + +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 3.js b/scripts/1 пл - шаг 3.js new file mode 100644 index 0000000..a54eb4c --- /dev/null +++ b/scripts/1 пл - шаг 3.js @@ -0,0 +1,490 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_2_1000.width = 998; // ширина полосы фильтра + let filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Фильтр для виброперемещения + let filter_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_300s.kind = gtl.filter_iir.butterworth; + filter_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_2_300s.order = 4; + filter_2_300s.frequency = 151; // центральная частота + filter_2_300s.width = 298; // ширина полосы + + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_vibr; // фильтр сигнала вибрации + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_vibr = filter_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_vibr = filter_2_300s; + frequency = 300; + } + + // Спектр для получения 1-й гармоники частоты вращения + var AUSP = gtl.add_ausp(filter_vibr); // объявление переменной спектра + AUSP.color = 0x00ff0000; // цвет спектра + AUSP.name = "AUSP"; // имя спектра + AUSP.frequency = frequency; // граничная частота спектра + AUSP.lines = AUSP.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP.average = average; // количество усреднений + AUSP.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP.smoothing_factor = 100; // усреднение средней линии + AUSP.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP.tolerance = AUSP.resolution; // диапазон поиска гармоник +/- + + // СКЗ + var RMS = gtl.add_value_rms(filter_vibr); + RMS.time = 1; + RMS.avg_cnt = 3; + + // Спектр вибрации + var AUSP_pl = gtl.create_ausp( + { + "src" : filter_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + 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 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; // модуль вектора вибрации после установки пробного груза */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации после установки пробного груза */** +let A1_phase; // фаза вектора вибрации после установки пробного груза */** (конечное значение) +let dA1; // модуль вектора дельты вибрации после установки пробного груза *** +let dA1_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 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 + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP.clear_harms_sets(); + + + let __AUSP_tools = gtl.create_spec_tools( + { + data: AUSP_pl.data, + df: AUSP_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSP = __AUSP_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP.name = "F1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации", + x: AUSP_pl.resolution, + y: AUSP_pl.data, + spec_tools: __AUSP_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSP_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMS * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 3 - вибрация пробного пуска A1: + // измерение начальной вибрации A1 (или ввод вручную) + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0 + // построение графиков вибрации A0, A1 и dA1 + + // Определение конечных значений переменных + // A1 вибрация после установки пробного груза + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_1_a} // принимает значение из спектра сигнала + if (A1_phase_ != 0) {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_1_ph} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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 * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} + A1_1_Y = 0; + if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/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; + // определение модуля вектора d1 + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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)+Math.max(A0,A1,dA1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + 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: 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)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2)], + y: [(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2)] + }); + + +gtl.log.info("RMS",RMS.value); +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("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_F1: freq.value, + _002_Ампл_гарм_1F1: F1_1_a, + _003_Фаза_част_вращ_F1: F1_1_ph, + _004_Ампл_вибр_пуска_A0: A0, + _005_Фаза_вибр_пуска_A0: A0_phase, + _006_Ампл_вибр_пуска_A1: A1, + _007_Фаза_вибр_пуска_A1: A1_phase, + _008_СКЗ_вибрации: RMS.value, + _009_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 4.js b/scripts/1 пл - шаг 4.js new file mode 100644 index 0000000..cac77c6 --- /dev/null +++ b/scripts/1 пл - шаг 4.js @@ -0,0 +1,536 @@ +"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_res; // остаточный дисбаланс *** (ГОСТ 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 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 DCI; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** +let DCI_phase; // фаза динамического коэффициента влияния **/*** +let Mb = gtl.options.customOptions.Mb; // масса применённого балансировочного груза **/*** (конечное значение) +let Mb_corner = gtl.options.customOptions.Mb_corner; // угол применённого балансировочного груза **/*** (конечное значение) +let Mb_calc; // модуль расчётного вектора балансировочного груза *** +let Mb_corner_calc; // угол расчётного вектора балансировочного груза *** +let Mdisb; // модуль вектора дисбаланса *** +let Mdisb_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 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 + + + +// ***** РАСЧЁТЫ ***** +// 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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 4 - расположение дисбаланса: + // вычисление положения дисбаланса Mdisb и рекомендуемого балансировочного груза Mb_calc + // ввод массы и угла установки балансировочного груза Mb + // построение графиков расположения пробного груза m_test, дисбаланса Mdisb, расчётного Mb_calc и введённого Mb балансировочного груза + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0 и A1, масса и угол установки пробного груза + // построение графиков вибрации A0, A1, dA1 + + + // определение угла наклона вектора 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; + + // определение модуля вектора 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)+Math.max(A0,A1,dA1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*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)} + + + // определение модуля вектора DCI (ДКВ) + DCI = dA1 / m_test; // a в экселе + + // определение фазы вектора DCI + DCI_phase = dA1_phase - m_test_corner; + + // определение модуля расчётного вектора Mb + Mb_calc = A0 / DCI; // Pур в экселе + // Mb_calc = (m_test * A0) / dA1; + // определение угла расчётного вектора Mb + if ((A0_phase - DCI_phase + 180) < 360) { + Mb_corner_calc = (A0_phase - DCI_phase + 180) + } else {Mb_corner_calc = (A0_phase - DCI_phase + 180) - 360} + // if ((m_test_corner + A0_phase - dA1_phase + 180) < 360) { + // Mb_corner_calc = (m_test_corner + A0_phase - dA1_phase + 180) + // } else {Mb_corner_calc = (m_test_corner + A0_phase - dA1_phase + 180) - 360} + // определение угла наклона расчётного вектора балансировочного груза 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 = Mb_calc; // равен массе балансировочного груз P в экселе + // определение угла расположения дисбаланса + if ((Mb_corner_calc + 180) > 360) { + Mdisb_corner = (Mb_corner_calc + 180) - 360} + else if ((Mb_corner_calc + 180) < 0) { + Mdisb_corner = (Mb_corner_calc + 180) + 360} + else {Mdisb_corner = (Mb_corner_calc + 180)} + // определение угла наклона вектора дисбаланса 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)} + + +// Координаты масс для визуализации + // определение координат точек окружности обозначения массы дисбаланса 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(m_test,Mb_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb_array.push(y0_Mdisb + (Math.max(m_test,Mb_calc,Mb,Mdisb)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения массы расчётного балансировочного груза Mb_calc + var x_Mb_calc_array = []; // массив координат точек окружности расчётного Mb по оси X + var y_Mb_calc_array = []; // массив координат точек окружности расчётного Mb по оси 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(m_test,Mb_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb_calc_array.push(y0_Mb_calc + (Math.max(m_test,Mb_calc,Mb,Mdisb)*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(m_test,Mb_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb_array.push(y0_Mb + (Math.max(m_test,Mb_calc,Mb,Mdisb)*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,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.1) * (Math.cos((i) * Math.PI / 180)));} + // определение координат точек окружности обозначения массы пробного груза + 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,Mb_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_array.push(y0_m_test + (Math.max(m_test,Mb_calc,Mb,Mdisb)*0.1 * (Math.cos((i) * Math.PI / 180))));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res = Mdisb * 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: 0xff0000, + name: "Вибрация_dA", + 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)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2)], + y: [(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), -(Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2), (Math.max(A0,A1,dA1)+Math.max(A0,A1,dA1)*0.2)] + }); + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз", + x: x_m_test_array, + y: y_m_test_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный", + x: x_Mb_calc_array, + y: y_Mb_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + 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: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), -(Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), (Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), (Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2)], + y: [(Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), -(Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), -(Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2), (Math.max(m_test,Mb_calc,Mb,Mdisb)+Math.max(m_test,Mb_calc,Mb,Mdisb)*0.2)] + }); + +gtl.log.info("Mb_calc (масса балансировочного груза расчёт)",Mb_calc); +gtl.log.info("Mb_corner_calc (угол установки балансировочного груза расчёт)",Mb_corner_calc); +gtl.log.info("Mb (масса балансировочного груза введён)",Mb); +gtl.log.info("Mb_corner (угол установки балансировочного груза введён)",Mb_corner); +gtl.log.info("Mdisb (дисбаланс)",Mdisb); +gtl.log.info("Mdisb_corner (угол расположения дисбаланса)",Mdisb_corner); +gtl.log.info("m_test (пробный груз введёный)",m_test); +gtl.log.info("m_test_corner (угол установки пробного груза)",m_test_corner); +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("модуль ДКВ", DCI); +gtl.log.info("фаза ДКВ", DCI_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс", U_res); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A1: A1, + _004_Фаза_вибр_пуска_A1: A1_phase, + _005_Масса_дисбаланса: Mdisb, + _006_Угол_дисбаланса: Mdisb_corner, + _007_Масса_баланс_груза_расч: Mb_calc, + _008_Угол_баланс_груза_расч: Mb_corner_calc, + _009_Масса_баланс_груза_введён: Mb, + _010_Угол_баланс_груза_введён: Mb_corner, + _011_Модуль_ДКВ: DCI, + _012_Фаза_ДКВ: DCI_phase, + _013_Допуст_ост_дисб_г_мм: U_per, + _014_Остат_дисб_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 5.js b/scripts/1 пл - шаг 5.js new file mode 100644 index 0000000..25c82ee --- /dev/null +++ b/scripts/1 пл - шаг 5.js @@ -0,0 +1,498 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_2_1000.width = 998; // ширина полосы фильтра + let filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Фильтр для виброперемещения + let filter_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_300s.kind = gtl.filter_iir.butterworth; + filter_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_2_300s.order = 4; + filter_2_300s.frequency = 151; // центральная частота + filter_2_300s.width = 298; // ширина полосы + + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_vibr; // фильтр сигнала вибрации + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_vibr = filter_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_vibr = filter_2_300s; + frequency = 300; + } + + // Спектр для получения 1-й гармоники частоты вращения + var AUSP = gtl.add_ausp(filter_vibr); // объявление переменной спектра + AUSP.color = 0x00ff0000; // цвет спектра + AUSP.name = "AUSP"; // имя спектра + AUSP.frequency = frequency; // граничная частота спектра + AUSP.lines = AUSP.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP.average = average; // количество усреднений + AUSP.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP.smoothing_factor = 100; // усреднение средней линии + AUSP.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP.tolerance = AUSP.resolution; // диапазон поиска гармоник +/- + + // СКЗ + var RMS = gtl.add_value_rms(filter_vibr); + RMS.time = 1; + RMS.avg_cnt = 3; + + // Спектр вибрации + var AUSP_pl = gtl.create_ausp( + { + "src" : filter_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let dA2; // модуль вектора дельты вибрации после установки пробного груза *** +let dA2_phase; // фаза вектора дельты вибрации после установки пробного груза *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации после установки балансировочного груза */** +let A2; // модуль вектора вибрации после установки балансировочного груза */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации после установки балансировочного груза */** +let A2_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 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 + + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time) + 0.1; +// gtl.diagnostic.interval = gtl.acq_time + 1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP.clear_harms_sets(); + + + let __AUSP_tools = gtl.create_spec_tools( + { + data: AUSP_pl.data, + df: AUSP_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSP = __AUSP_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP.name = "F1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации", + x: AUSP_pl.resolution, + y: AUSP_pl.data, + spec_tools: __AUSP_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSP_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMS * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 5 - контрольный пуск: + // измерение вибрации A2 после установки балансировочного груза + // определение целесообразности проведения добалансировки + // из предыдущих шагов переносятся: вибрация A0 + // построение графика вибрации A0, A2 и dA2 + + + // Определение конечных значений переменных + + // A2 вибрация после установки балансировочного груза + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_1_a} // принимает значение из спектра сигнала + if (A2_phase_ != 0) {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_1_ph} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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 * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} + A2_1_Y = 0; + if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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)));} + + + +// Графики вибрации + plot_vibr.add( + { + color: 0x00ff00, + 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)] + }); + + +gtl.log.info("RMS",RMS.value); +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("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_F1: freq.value, + _002_Ампл_гарм_1F1: F1_1_a, + _003_Фаза_част_вращ_F1: F1_1_ph, + _004_Ампл_вибр_пуска_A0: A0, + _005_Фаза_вибр_пуска_A0: A0_phase, + _006_Ампл_вибр_пуска_A2: A2, + _007_Фаза_вибр_пуска_A2: A2_phase, + _008_СКЗ_вибрации: RMS.value, + _009_Тестирование: test_balance, + _010_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/1 пл - шаг 6.js b/scripts/1 пл - шаг 6.js new file mode 100644 index 0000000..1413535 --- /dev/null +++ b/scripts/1 пл - шаг 6.js @@ -0,0 +1,740 @@ +"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; +// } +} \ No newline at end of file diff --git a/scripts/1 пл ДКВ - шаг 0.js b/scripts/1 пл ДКВ - шаг 0.js new file mode 100644 index 0000000..48e72f0 --- /dev/null +++ b/scripts/1 пл ДКВ - шаг 0.js @@ -0,0 +1,94 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой (использование ДКВ) ***** +// *********************************************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let R_ = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let R; // радиус установки грузов ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) + +let DCI_ = gtl.options.customOptions.DCI; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** +let DCI = DCI_; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** (конечное значение) +let DCI_phase_ = gtl.options.customOptions.DCI_phase; // фаза динамического коэффициента влияния **/*** +let DCI_phase = DCI_phase_; // фаза динамического коэффициента влияния **/*** (конечное значение) + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 0 - ввод исходных данных: + // ввод исходных данных: радиус установки грузов, масса ротора, ДКВ (DCI) + + // R радиус установки грузов, мм + if (R_ != 0) {R = R_} // принимает значение из опций + else {R = false} // принимает значение false + // P масса ротора, г + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + // DCI (модуль ДКВ), мм/с/г + if (DCI_ != 0) {DCI = DCI_} // принимает значение из опций + else {DCI = false} // принимает значение false + // DCI_corner (фаза ДКВ), град + if (DCI_phase_ != 0) {DCI_phase = DCI_phase_} // принимает значение из опций + else {DCI_phase = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Масса ротора", P); +gtl.log.info("Радиус установки грузов", R); +gtl.log.info("модуль ДКВ", DCI); +gtl.log.info("фаза ДКВ", DCI_phase); +gtl.log.info("Допустимый остаточный дисбаланс", U_per); + + // Выдача результата (results) + let __result = { + _001_Радиус_установки_грузов_мм: R, + _002_Масса_ротора_г: P, + _003_ДКВ_модуль_мм_с_г: DCI, + _004_ДКВ_фаза_град: DCI_phase, + _005_Допуст_ост_дисб_г_мм: U_per + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/1 пл ДКВ - шаг 1.js b/scripts/1 пл ДКВ - шаг 1.js new file mode 100644 index 0000000..5b7ed98 --- /dev/null +++ b/scripts/1 пл ДКВ - шаг 1.js @@ -0,0 +1,404 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой (использование ДКВ) ***** +// *********************************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_2_1000.width = 998; // ширина полосы фильтра + let filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Фильтр для виброперемещения + let filter_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_300s.kind = gtl.filter_iir.butterworth; + filter_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_2_300s.order = 4; + filter_2_300s.frequency = 151; // центральная частота + filter_2_300s.width = 298; // ширина полосы + + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_vibr; // фильтр сигнала вибрации + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_vibr = filter_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_vibr = filter_2_300s; + frequency = 300; + } + + // Спектр для получения 1-й гармоники частоты вращения + var AUSP = gtl.add_ausp(filter_vibr); // объявление переменной спектра + AUSP.color = 0x00ff0000; // цвет спектра + AUSP.name = "AUSP"; // имя спектра + AUSP.frequency = frequency; // граничная частота спектра + AUSP.lines = AUSP.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP.average = average; // количество усреднений + AUSP.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP.smoothing_factor = 100; // усреднение средней линии + AUSP.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP.tolerance = AUSP.resolution; // диапазон поиска гармоник +/- + + // СКЗ + var RMS = gtl.add_value_rms(filter_vibr); + RMS.time = 1; + RMS.avg_cnt = 3; + + // Спектр вибрации + var AUSP_pl = gtl.create_ausp( + { + "src" : filter_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let 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 + + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP.clear_harms_sets(); + + + let __AUSP_tools = gtl.create_spec_tools( + { + data: AUSP_pl.data, + df: AUSP_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSP = __AUSP_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP.name = "F1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации", + x: AUSP_pl.resolution, + y: AUSP_pl.data, + spec_tools: __AUSP_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSP_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMS * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 1 - начальная вибрация A0: + // измерение начальной вибрации A0 (или ввод вручную) + // определение целесообразности проведения балансировки + // построение графика вибрации A0 + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение координат точек окружности графика для отображения векторов вибрации + 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)+Math.max(A0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0)+Math.max(A0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)], + y: [(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)] + }); + + +gtl.log.info("RMS",RMS.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_F1: freq.value, + _002_Ампл_гарм_1F1: F1_1_a, + _003_Фаза_част_вращ_F1: F1_1_ph, + _004_Ампл_вибр_пуска_A0: A0, + _005_Фаза_вибр_пуска_A0: A0_phase, + _006_Тестирование: test_balance, + _007_СКЗ_вибрации: RMS.value, + _008_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/1 пл ДКВ - шаг 2.js b/scripts/1 пл ДКВ - шаг 2.js new file mode 100644 index 0000000..3f43b0a --- /dev/null +++ b/scripts/1 пл ДКВ - шаг 2.js @@ -0,0 +1,386 @@ +"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_res; // остаточный дисбаланс *** (ГОСТ 1940) + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let A0_phase = A0_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 = gtl.options.customOptions.Mb; // масса применённого балансировочного груза **/*** (конечное значение) +let Mb_corner = gtl.options.customOptions.Mb_corner; // угол применённого балансировочного груза **/*** (конечное значение) +let Mb_calc; // модуль расчётного вектора балансировочного груза *** +let Mb_corner_calc; // угол расчётного вектора балансировочного груза *** +let Mdisb; // масса дисбаланса *** +let Mdisb_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 Mb_corner_calc_X; // угол наклона расчётного вектора Mb к оси X +let Mb_corner_calc_Y; // угол наклона расчётного вектора Mb к оси Y +let Mb_1_calc_X; // начальная координата расчётного вектора Mb по оси X +let Mb_2_calc_X; // конечная координата расчётного вектора Mb по оси X +let Mb_1_calc_Y; // начальная координата расчётного вектора Mb по оси Y +let Mb_2_calc_Y; // конечная координата расчётного вектора Mb по оси 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 + +// ***** РАСЧЁТЫ ***** +// 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() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 2 - расположение дисбаланса: + // вычисление положения дисбаланса и рекомендуемого балансировочного груза Mb_calc + // ввод массы и угла установки балансировочного груза Mb + // построение графиков расположения дисбаланса Mdisb, расчётного Mb_calc и введённого Mb балансировочного груза + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0 + // построение графиков вибрации A0 и A2 + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение координат точек окружности графика для отображения векторов вибрации + 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)+Math.max(A0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0)+Math.max(A0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // определение модуля вектора Mb + Mb_calc = A0 / DCI; + // определение угла вектора Mb + if ((A0_phase - DCI_phase + 180) < 360) { + Mb_corner_calc = (A0_phase - DCI_phase + 180) + } else {Mb_corner_calc = (A0_phase - DCI_phase + 180) - 360} + // if ((m_test_corner + A0_phase - dA_phase + 180) < 360) { + // Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) + // } else {Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) - 360} + // определение угла наклона вектора балансировочного груза 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 = Mb_calc; // равен массе балансировочного груза + // определение угла расположения дисбаланса + if ((Mb_corner_calc + 180) > 360) { + Mdisb_corner = (Mb_corner_calc + 180) - 360} + else if ((Mb_corner + 180) < 0) { + Mdisb_corner = (Mb_corner_calc + 180) + 360} + else {Mdisb_corner = (Mb_corner_calc + 180)} + // определение угла наклона вектора дисбаланса 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)} + + +// Координаты масс для визуализации + // определение координат точек окружности обозначения массы введённого балансировочного груза 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_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb_array.push(y0_Mb + (Math.max(Mb_calc,Mb,Mdisb)*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_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb_calc_array.push(y0_Mb_calc + (Math.max(Mb_calc,Mb,Mdisb)*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_calc,Mb,Mdisb)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb_array.push(y0_Mdisb + (Math.max(Mb_calc,Mb,Mdisb)*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)+Math.max(Mb_calc,Mb,Mdisb)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res = Mdisb * R; + + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)], + y: [(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), -(Math.max(A0)+Math.max(A0)*0.2), (Math.max(A0)+Math.max(A0)*0.2)] + }); + + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный", + x: x_Mb_calc_array, + y: y_Mb_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + 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: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), -(Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), (Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), (Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2)], + y: [(Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), -(Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), -(Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2), (Math.max(Mb_calc,Mb,Mdisb)+Math.max(Mb_calc,Mb,Mdisb)*0.2)] + }); + +gtl.log.info("Mb (балансировочный груз расчёт)",Mb_calc); +gtl.log.info("Mb_corner (угол установки груза расчёт)",Mb_corner_calc); +gtl.log.info("Mb (балансировочный груз введён)",Mb); +gtl.log.info("Mb_corner (угол установки груза введён)",Mb_corner); +gtl.log.info("Mdisb (дисбаланс)",Mdisb); +gtl.log.info("Mdisb_corner (угол расположения дисбаланса)",Mdisb_corner); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("модуль ДКВ", DCI); +gtl.log.info("фаза ДКВ", DCI_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс", U_res); + + // Выдача результата (results) + let __result = { + _001_Част_вращ_обмин: n, + _002_Ампл_вибр_пуска_A0: A0, + _003_Фаза_вибр_пуска_A0: A0_phase, + _004_Масса_дисбаланса: Mdisb, + _005_Угол_дисбаланса: Mdisb_corner, + _006_Масса_баланс_груза_введён: Mb, + _007_Угол_баланс_груза_введён: Mb_corner, + _008_Масса_баланс_груза_расч: Mb_calc, + _009_Угол_баланс_груза_расч: Mb_corner_calc, + _010_Модуль_ДКВ: DCI, + _011_Фаза_ДКВ: DCI_phase, + _012_Допуст_ост_дисб_г_мм: U_per, + _013_Остат_дисб_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/1 пл ДКВ - шаг 3.js b/scripts/1 пл ДКВ - шаг 3.js new file mode 100644 index 0000000..e7c9792 --- /dev/null +++ b/scripts/1 пл ДКВ - шаг 3.js @@ -0,0 +1,491 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой (использование ДКВ) ***** +// *********************************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_2_1000.width = 998; // ширина полосы фильтра + let filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Фильтр для виброперемещения + let filter_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_300s.kind = gtl.filter_iir.butterworth; + filter_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_2_300s.order = 4; + filter_2_300s.frequency = 151; // центральная частота + filter_2_300s.width = 298; // ширина полосы + + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_vibr; // фильтр сигнала вибрации + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_vibr = filter_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_vibr = filter_2_300s; + frequency = 300; + } + + // Спектр для получения 1-й гармоники частоты вращения + var AUSP = gtl.add_ausp(filter_vibr); // объявление переменной спектра + AUSP.color = 0x00ff0000; // цвет спектра + AUSP.name = "AUSP"; // имя спектра + AUSP.frequency = frequency; // граничная частота спектра + AUSP.lines = AUSP.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP.average = average; // количество усреднений + AUSP.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP.smoothing_factor = 100; // усреднение средней линии + AUSP.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP.tolerance = AUSP.resolution; // диапазон поиска гармоник +/- + + // СКЗ + var RMS = gtl.add_value_rms(filter_vibr); + RMS.time = 1; + RMS.avg_cnt = 3; + + // Спектр вибрации + var AUSP_pl = gtl.create_ausp( + { + "src" : filter_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let dA2; // модуль вектора дельты вибрации после установки пробного груза *** +let dA2_phase; // фаза вектора дельты вибрации после установки пробного груза *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации после установки балансировочного груза */** +let A2; // модуль вектора вибрации после установки балансировочного груза */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации после установки балансировочного груза */** +let A2_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 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 + + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP.acq_time, AUSP_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP.clear_harms_sets(); + + + let __AUSP_tools = gtl.create_spec_tools( + { + data: AUSP_pl.data, + df: AUSP_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSP = __AUSP_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP.name = "F1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации", + x: AUSP_pl.resolution, + y: AUSP_pl.data, + spec_tools: __AUSP_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSP_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMS * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 3 - контрольный пуск: + // измерение вибрации A2 после установки балансировочного груза + // определение целесообразности проведения добалансировки + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A1 + // построение графика вибрации A1, A2 и dA2 + + // Определение конечных значений переменных + + // A2 вибрация после установки балансировочного груза + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_1_a} // принимает значение из спектра сигнала + if (A2_phase_ != 0) {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_1_ph} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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 * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} + A2_1_Y = 0; + if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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)));} + + +// Графики вибрации + 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)] + }); + + +gtl.log.info("RMS",RMS.value); +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("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_F1: freq.value, + _002_Ампл_вибр_пуска_A0: A0, + _003_Фаза_вибр_пуска_A0: A0_phase, + _004_Ампл_вибр_пуска_A2: A2, + _005_Фаза_вибр_пуска_A2: A2_phase, + _006_СКЗ_вибрации: RMS.value, + _007_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/1 пл ДКВ - шаг 4.js b/scripts/1 пл ДКВ - шаг 4.js new file mode 100644 index 0000000..9fb7247 --- /dev/null +++ b/scripts/1 пл ДКВ - шаг 4.js @@ -0,0 +1,594 @@ +"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; +// } +} \ No newline at end of file diff --git a/scripts/1 пл бф - шаг 0.js b/scripts/1 пл бф - шаг 0.js new file mode 100644 index 0000000..af8526d --- /dev/null +++ b/scripts/1 пл бф - шаг 0.js @@ -0,0 +1,77 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R_ = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let R; // радиус установки грузов ** (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (конечное значение) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) + +// ***** РАСЧЁТЫ ***** +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + + // FREQ_0 введённое значение частоты вращения + if (n != 0) {FREQ_0 = n / 60} // принимает значение из опций + else {FREQ_0 = false} // принимает значение false + // R радиус установки грузов, мм + if (R_ != 0) {R = R_} // принимает значение из опций + else {R = false} // принимает значение false + // P масса ротора, грамм + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Частота вращения, Гц", P); +gtl.log.info("Масса ротора, кг", P); +gtl.log.info("Радиус установки грузов, мм", R); + + // Выдача результата (results) + let __result = { + _001_Частота_вращения_Гц: FREQ_0, + _002_Радиус_установки_грузов_мм: R, + _003_Масса_ротора_кг: P, + _004_Допуст_ост_дисб_г_мм: U_per, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); +} \ No newline at end of file diff --git a/scripts/1 пл бф - шаг 1.js b/scripts/1 пл бф - шаг 1.js new file mode 100644 index 0000000..88cf1b4 --- /dev/null +++ b/scripts/1 пл бф - шаг 1.js @@ -0,0 +1,221 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + let plot_balance = gtl.plots.add("Расположение дисбаланса и балансировочного груза"); // создание объекта для спектра + let plot_vibration = gtl.plots.add("Вибрации пробных пусков"); // создание объекта для визуализации вибрации пробных пусков + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R_ = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let R; // радиус установки грузов ** (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (конечное значение) +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0; // модуль вектора начальной вибрации */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +var x00 = 0; // координата центра окружности нулевого пуска по оси X +var y00 = 0; // координата центра окружности нулевого пуска по оси Y +var x_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси X +var y_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + AUSPv.clear_harms_sets(); // очистка спектра + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + + // Проверка наличия оборотной гармоники и необходимости проведения балансировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (n != 0) // если указна скорость вращения + { + if (F1_1_a >= RMSv_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + } else {test_balance = "невозможно определить необходимость проведения балансировки";} + + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else if (A0_ == 0 && FREQ_0 == 0) {A0 = RMSv_2_1000.value} // принимает СКЗv + else {A0 = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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); + + + plot_vibration.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: x0_array, + y: y0_array, + }); + + plot_vibration.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(A0+A0*0.1), -(A0+A0*0.1), (A0+A0*0.1), (A0+A0*0.1)], + y: [(A0+A0*0.1), -(A0+A0*0.1), -(A0+A0*0.1), (A0+A0*0.1)] + } + ) + +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("Начальная вибрация A0",A0); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Тестирование: test_balance, + _002_Ампл_гарм_1F1: F1_1_a, + _003_СКЗ_виброскорость: RMSv_2_1000.value, + _004_Начальная_вибрация_A0: A0 + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/1 пл бф - шаг 2.js b/scripts/1 пл бф - шаг 2.js new file mode 100644 index 0000000..202b62d --- /dev/null +++ b/scripts/1 пл бф - шаг 2.js @@ -0,0 +1,81 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let m_test_ = gtl.options.customOptions.m_test; // модуль вектора пробного груза ** +let m_test; // модуль вектора пробного груза ** (конечное значение) +var m_test_calc; // масса пробного груза расчётная *** +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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + + // Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + // m_test масса пробного груза + if (P != 0 && R != 0 && n != 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} // значение не введено + + + +gtl.log.info("m_test (пробный груз введёный)",m_test); +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("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Примен_пробный_груз: m_test, + _002_Расч_пробный_груз: m_test_calc + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/1 пл бф - шаг 3.js b/scripts/1 пл бф - шаг 3.js new file mode 100644 index 0000000..bda909f --- /dev/null +++ b/scripts/1 пл бф - шаг 3.js @@ -0,0 +1,230 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + let plot_balance = gtl.plots.add("Расположение дисбаланса и балансировочного груза"); // создание объекта для спектра + let plot_vibration = gtl.plots.add("Вибрации пробных пусков"); // создание объекта для визуализации вибрации пробных пусков + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации пробного пуска №1 */** +let A1; // модуль вектора вибрации пробного пуска №1 */** (конечное значение) +let A1_corner = 0; // угол установки груза пробного пуска №1 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) + +// Переменные вспомогательные необходимые для расчётов +var x00 = 0; // координата центра окружности нулевого пуска по оси X +var y00 = 0; // координата центра окружности нулевого пуска по оси Y +var x_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси X +var y_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + AUSPv.clear_harms_sets(); // очистка спектра + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A1 вибрация пробного пуска №1 + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else if (A1_ == 0 && FREQ_0 == 0) {A1 = RMSv_2_1000.value} // принимает СКЗv + else {A1 = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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<=359; i++ ) { + x1_array.push(x01 + A1 * (Math.sin((i) * Math.PI / 180))); + y1_array.push(y01 + A1 * (Math.cos((i) * Math.PI / 180)));} + + 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: 0x00ffffff, + name: "границы", + x: [-((A0+Math.max(A0,A1))+2*A0*0.1), -((A0+Math.max(A0,A1))+2*A0*0.1), ((A0+Math.max(A0,A1))+2*A0*0.1), ((A0+Math.max(A0,A1))+2*A0*0.1)], + y: [((A0+Math.max(A0,A1))+2*A0*0.1), -((A0+Math.max(A0,A1))+2*A0*0.1), -((A0+Math.max(A0,A1))+2*A0*0.1), ((A0+Math.max(A0,A1))+2*A0*0.1)] + } + ) + +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("Начальная вибрация A0",A0); +gtl.log.info("Вибрация пробного пуска №1 A1",A1); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Ампл_гарм_1F1: F1_1_a, + _002_СКЗ_виброскорость: RMSv_2_1000.value, + _003_Начальная_вибрация_A0: A0, + _004_Вибрация_пробного_пуска_1_A1: A1 + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/1 пл бф - шаг 4.js b/scripts/1 пл бф - шаг 4.js new file mode 100644 index 0000000..7b6cd10 --- /dev/null +++ b/scripts/1 пл бф - шаг 4.js @@ -0,0 +1,251 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + let plot_balance = gtl.plots.add("Расположение дисбаланса и балансировочного груза"); // создание объекта для спектра + let plot_vibration = gtl.plots.add("Вибрации пробных пусков"); // создание объекта для визуализации вибрации пробных пусков + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +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; // модуль вектора вибрации пробного пуска №2 */** (конечное значение) +let A2_corner = 120; // угол установки груза пробного пуска №2 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) + +// Переменные вспомогательные необходимые для расчётов +var x00 = 0; // координата центра окружности нулевого пуска по оси X +var y00 = 0; // координата центра окружности нулевого пуска по оси Y +var x_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси X +var y_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + AUSPv.clear_harms_sets(); // очистка спектра + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A2 вибрация пробного пуска №2 + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else if (A2_ == 0 && FREQ_0 == 0) {A2 = RMSv_2_1000.value} // принимает СКЗv + else {A2 = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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<=359; 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<=359; i++ ) { + x2_array.push(x02 + A2 * (Math.sin((i) * Math.PI / 180))); + y2_array.push(y02 + A2 * (Math.cos((i) * Math.PI / 180)));} + + 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: 0x00ffffff, + name: "границы", + x: [-((A0+Math.max(A0,A1,A2))+2*A0*0.1), -((A0+Math.max(A0,A1,A2))+2*A0*0.1), ((A0+Math.max(A0,A1,A2))+2*A0*0.1), ((A0+Math.max(A0,A1,A2))+2*A0*0.1)], + y: [((A0+Math.max(A0,A1,A2))+2*A0*0.1), -((A0+Math.max(A0,A1,A2))+2*A0*0.1), -((A0+Math.max(A0,A1,A2))+2*A0*0.1), ((A0+Math.max(A0,A1,A2))+2*A0*0.1)] + } + ) + +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("Начальная вибрация A0",A0); +gtl.log.info("Вибрация пробного пуска №1 A1",A1); +gtl.log.info("Вибрация пробного пуска №2 A2",A2); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Ампл_гарм_1F1: F1_1_a, + _002_СКЗ_виброскорость: RMSv_2_1000.value, + _003_Начальная_вибрация_A0: A0, + _004_Вибрация_пробного_пуска_1_A1: A1, + _005_Вибрация_пробного_пуска_2_A2: A2 + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/1 пл бф - шаг 5.js b/scripts/1 пл бф - шаг 5.js new file mode 100644 index 0000000..eaf6223 --- /dev/null +++ b/scripts/1 пл бф - шаг 5.js @@ -0,0 +1,273 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + let plot_balance = gtl.plots.add("Расположение дисбаланса и балансировочного груза"); // создание объекта для спектра + let plot_vibration = gtl.plots.add("Вибрации пробных пусков"); // создание объекта для визуализации вибрации пробных пусков + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +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; // модуль вектора вибрации пробного пуска №3 */** (конечное значение) +let A3_corner = 240; // угол установки груза пробного пуска №3 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) + +// Переменные вспомогательные необходимые для расчётов +var x00 = 0; // координата центра окружности нулевого пуска по оси X +var y00 = 0; // координата центра окружности нулевого пуска по оси Y +var x_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси X +var y_b_0 = 0; // координата центра окружности расположения балансировочного груза по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + AUSPv.clear_harms_sets(); // очистка спектра + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A3 вибрация пробного пуска №3 + if (A3_ != 0) {A3 = A3_} // принимает значение из опций + else if (A3_ == 0 && FREQ_0 == 0) {A3 = RMSv_2_1000.value} // принимает СКЗv + else {A3 = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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<=359; 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<=359; 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<=359; i++ ) { + x3_array.push(x03 + A3 * (Math.sin((i) * Math.PI / 180))); + y3_array.push(y03 + A3 * (Math.cos((i) * Math.PI / 180)));} + + 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: 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)] + } + ) + +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +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("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Ампл_гарм_1F1: F1_1_a, + _002_СКЗ_виброскорость: RMSv_2_1000.value, + _003_Начальная_вибрация_A0: A0, + _004_Вибрация_пробного_пуска_1_A1: A1, + _005_Вибрация_пробного_пуска_2_A2: A2, + _006_Вибрация_пробного_пуска_3_A3: A3 + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/1 пл бф - шаг 6.js b/scripts/1 пл бф - шаг 6.js new file mode 100644 index 0000000..37b6db0 --- /dev/null +++ b/scripts/1 пл бф - шаг 6.js @@ -0,0 +1,405 @@ +"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(); + + +} diff --git a/scripts/1 пл бф - шаг 7.js b/scripts/1 пл бф - шаг 7.js new file mode 100644 index 0000000..13c7884 --- /dev/null +++ b/scripts/1 пл бф - шаг 7.js @@ -0,0 +1,172 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + + + +// Получение входных сигналов + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let A; // вибрация контрольного пуска +let A_ = gtl.options.customOptions.A; // модуль вектора вибрации после установки балансировочного груза */** + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +function diagnose() { + + AUSPv.clear_harms_sets(); // очистка спектра + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + + // Определение конечных значений переменных + // A вибрация контрольного пуска + if (A_ != 0) {A = A_} // принимает значение из опций + else if (FREQ_0 == 0) {A = RMSv_2_1000.value} // принимает СКЗv + else {A = F1_1_a} // принимает значение 1-й гармоники из спектра сигнала + + +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("Вибрация контрольного пуска A",A); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Ампл_гарм_1F1: F1_1_a, + _002_СКЗ_виброскорость: RMSv_2_1000.value, + _003_Вибрация_контр_пуска_A: A + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/1 пл бф - шаг 8.js b/scripts/1 пл бф - шаг 8.js new file mode 100644 index 0000000..0da1c85 --- /dev/null +++ b/scripts/1 пл бф - шаг 8.js @@ -0,0 +1,106 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +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 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 A_ = gtl.options.customOptions.A; // модуль вектора начальной вибрации */** +let A = A_; // вибрация контрольного пуска +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 m_test = gtl.options.customOptions.m_test; // модуль вектора пробного груза ** +let m_test_calc = gtl.options.customOptions.m_test_calc; // масса пробного груза расчётная *** +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) +let U_res2; // остаточный дисбаланс (после балансировки) *** (ГОСТ 1940) + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + + +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("Вибрация контрольного пуска A",A); +gtl.log.info("Масса ротора, гр", P); +gtl.log.info("Радиус установки грузов, мм", R); +gtl.log.info("Применённый пробный груз",m_test); +gtl.log.info("Расчётный пробный груз",m_test_calc); +gtl.log.info("Масса балансировочного груза",Mb); +gtl.log.info("Угол установки балансировочного груза",Mb_corner); +gtl.log.info("Угол расположения дисбаланса",Mdisb_corner); +gtl.log.info("Частота вращения, Гц", FREQ_0); + + // Выдача результата (results) + let __result = { + _001_Начальная_вибрация_A0: A0, + _002_Вибрация_пробного_пуска_A1: A1, + _003_Вибрация_пробного_пуска_A2: A2, + _004_Вибрация_пробного_пуска_A3: A3, + _005_Вибрация_контрольного_пуска_A: A, + _006_Масса_ротора_кг: P, + _007_Радиус_установки_грузов_мм: R, + _008_Применённый_пробный_груз: m_test, + _009_Расчётный_пробный_груз: m_test_calc, + _010_Масса_балансировочного_груза: Mb, + _011_Угол_установки_балансировочного_груза: Mb_corner, + _012_Угол_расположения_дисбаланса: Mdisb_corner, + _013_Частота_вращения_Гц: FREQ_0 + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + + +} diff --git a/scripts/2 пл - шаг 0 - стенд.js b/scripts/2 пл - шаг 0 - стенд.js new file mode 100644 index 0000000..bbd27e9 --- /dev/null +++ b/scripts/2 пл - шаг 0 - стенд.js @@ -0,0 +1,93 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let R1_ = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1, мм ** (для вычисления массы пробного груза) +let R1; // радиус установки грузов на плоскости 1, мм ** (для вычисления массы пробного груза) (конечное значение) +let R2_ = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2, мм ** (для вычисления массы пробного груза) +let R2; // радиус установки грузов на плоскости 2, мм ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 0 - ввод исходных данных: + // ввод исходных данных: радиус установки грузов, масса ротора + // ввод ДКВ (DCI), если он известен (необязателен для этого алгоритма) + + // R1 радиус установки грузов на плоскости 1, мм + if (R1_ != 0) {R1 = R1_} // принимает значение из опций + else {R1 = false} // принимает значение false + // R2 радиус установки грузов на плоскости 2, мм + if (R2_ != 0) {R2 = R2_} // принимает значение из опций + else {R2 = false} // принимает значение false + // P масса ротора, г + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Масса ротора", P); +gtl.log.info("Радиус установки грузов на плоскости 1", R1); +gtl.log.info("Радиус установки грузов на плоскости 2", R2); +gtl.log.info("Допустимый остаточный дисбаланс", U_per); + + // Выдача результата (results) + let __result = { + _001_Радиус_установки_грузов_пл1_мм: R1, + _002_Радиус_установки_грузов_пл2_мм: R2, + _003_Масса_ротора_кг: P, + _004_Допуст_ост_дисб_г_мм: U_per + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 0.js b/scripts/2 пл - шаг 0.js new file mode 100644 index 0000000..bbd27e9 --- /dev/null +++ b/scripts/2 пл - шаг 0.js @@ -0,0 +1,93 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let R1_ = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1, мм ** (для вычисления массы пробного груза) +let R1; // радиус установки грузов на плоскости 1, мм ** (для вычисления массы пробного груза) (конечное значение) +let R2_ = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2, мм ** (для вычисления массы пробного груза) +let R2; // радиус установки грузов на плоскости 2, мм ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 0 - ввод исходных данных: + // ввод исходных данных: радиус установки грузов, масса ротора + // ввод ДКВ (DCI), если он известен (необязателен для этого алгоритма) + + // R1 радиус установки грузов на плоскости 1, мм + if (R1_ != 0) {R1 = R1_} // принимает значение из опций + else {R1 = false} // принимает значение false + // R2 радиус установки грузов на плоскости 2, мм + if (R2_ != 0) {R2 = R2_} // принимает значение из опций + else {R2 = false} // принимает значение false + // P масса ротора, г + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Масса ротора", P); +gtl.log.info("Радиус установки грузов на плоскости 1", R1); +gtl.log.info("Радиус установки грузов на плоскости 2", R2); +gtl.log.info("Допустимый остаточный дисбаланс", U_per); + + // Выдача результата (results) + let __result = { + _001_Радиус_установки_грузов_пл1_мм: R1, + _002_Радиус_установки_грузов_пл2_мм: R2, + _003_Масса_ротора_кг: P, + _004_Допуст_ост_дисб_г_мм: U_per + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 1 - стенд.js b/scripts/2 пл - шаг 1 - стенд.js new file mode 100644 index 0000000..10a2a6f --- /dev/null +++ b/scripts/2 пл - шаг 1 - стенд.js @@ -0,0 +1,624 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + let freq_time = gtl.options.customOptions.freq_time; // длина (время) отрезка сигнала + let freq_avg_cnt = gtl.options.customOptions.freq_avg_cnt; // количество усреднений + freq.time = freq_time; + freq.avg_cnt = freq_avg_cnt; + freq.dc = gtl.options.customOptions.freq_dc; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = gtl.options.customOptions.resolution; // частотное разрешение + let average = gtl.options.customOptions.average; // количество усреднений + let overlap = gtl.options.customOptions.overlap; // наложение + let peak_level = gtl.options.customOptions.peak_level; // порог обнаружения гармоник + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + let channel_A = gtl.options.customOptions.channel_A; // выбор канала A + let channel_B = gtl.options.customOptions.channel_B; // выбор канала B + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + filter_A_2_1000v.scale = 1000; // множитель перехода от [м] к [мм] + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + filter_B_2_1000v.scale = 1000; // множитель перехода от [м] к [мм] + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_B"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + // "src0" : filter_A_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + // "src0" : filter_B_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase; // фаза вектора начальной вибрации точки A */** (конечное значение) + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase; // фаза вектора начальной вибрации точки B */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: peak_level + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: peak_level + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: peak_level + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: peak_level + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A.value * 0.4 || F1_1_a_B >= RMS_B.value * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 1 - начальная вибрация A0 и B0: + // измерение начальной вибрации A0 (или ввод вручную) + // определение целесообразности проведения балансировки + // построение графиков вибрации A0 и B0 + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != "-") {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a_A} // принимает значение из спектра сигнала + if (A0_phase_ != "-") {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B0 начальная вибрация + if (B0_ != "-") {B0 = B0_} // принимает значение из опций + else {B0 = F1_1_a_B} // принимает значение из спектра сигнала + if (B0_phase_ != "-") {B0_phase = B0_phase_} // принимает значение из опций + else {B0_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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; + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI / 180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI / 180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI / 180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI / 180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение координат точек окружности графика для отображения векторов вибрации + 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,B0)+Math.max(A0,B0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,B0)+Math.max(A0,B0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)], + y: [(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("-","-"); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_точкиA: F1_1_a_A, + _002_Фаза_част_вращ_F1_точкиA: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_СКЗ_вибр_точкиA: RMS_A.value, + + _006_Ампл_гарм_1F1_точкиB: F1_1_a_B, + _007_Фаза_част_вращ_F1_точкиB: F1_1_ph_B, + _008_Ампл_вибр_пуска_B0: B0, + _009_Фаза_вибр_пуска_B0: B0_phase, + _010_СКЗ_вибр_точкиB: RMS_B.value, + + _011_Нестаб_част_вращ: instability*100, + _012_Частота_вращения_F1: freq.value, + _013_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 1.js b/scripts/2 пл - шаг 1.js new file mode 100644 index 0000000..acf4b3c --- /dev/null +++ b/scripts/2 пл - шаг 1.js @@ -0,0 +1,612 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase; // фаза вектора начальной вибрации точки A */** (конечное значение) + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase; // фаза вектора начальной вибрации точки B */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A * 0.4 || F1_1_a_B >= RMS_B * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 1 - начальная вибрация A0 и B0: + // измерение начальной вибрации A0 (или ввод вручную) + // определение целесообразности проведения балансировки + // построение графиков вибрации A0 и B0 + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a_A} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B0 начальная вибрация + if (B0_ != 0) {B0 = B0_} // принимает значение из опций + else {B0 = F1_1_a_B} // принимает значение из спектра сигнала + if (B0_phase_ != 0) {B0_phase = B0_phase_} // принимает значение из опций + else {B0_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение координат точек окружности графика для отображения векторов вибрации + 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,B0)+Math.max(A0,B0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,B0)+Math.max(A0,B0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)], + y: [(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("-","-"); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_точкиA: F1_1_a_A, + _002_Фаза_част_вращ_F1_точкиA: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_СКЗ_вибр_точкиA: RMS_A.value, + + _006_Ампл_гарм_1F1_точкиB: F1_1_a_B, + _007_Фаза_част_вращ_F1_точкиB: F1_1_ph_B, + _008_Ампл_вибр_пуска_B0: B0, + _009_Фаза_вибр_пуска_B0: B0_phase, + _010_СКЗ_вибр_точкиB: RMS_B.value, + + _011_Нестаб_част_вращ: instability*100, + _012_Частота_вращения_F1: freq.value, + _013_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 2 - стенд.js b/scripts/2 пл - шаг 2 - стенд.js new file mode 100644 index 0000000..24b9369 --- /dev/null +++ b/scripts/2 пл - шаг 2 - стенд.js @@ -0,0 +1,177 @@ +"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_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_1_calc; // масса пробного груза расчётная плоскости 1 *** +let n = gtl.options.customOptions.n; // частота вращения, об/мин */** (для вычисления массы пробного груза) +let R1_ = gtl.options.customOptions.R1; // радиус установки грузов плоскости 1 ** (для вычисления массы пробного груза) +let R1 = R1_; // радиус установки грузов плоскости 1 ** (для вычисления массы пробного груза) (конечное значение) +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_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 2 - выбор массы и положения пробного груза плоскости 1: + // вычисление рекомендуемой массы пробного груза m_test_1_calc + // ввод пользователем массы пробного груза и угла его установки m_test_1 плоскости 1 + // построение графика расположения массы пробного груза плоскости 1 m_test_1 + // из предыдущих шагов переносятся: частота вращения freq, радиус установки грузов плоскости 1 R1, масса ротора P, уровень начальной вибрации A0 + + // Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + // m_test_1 масса пробного груза + if (P != 0 && R1 != 0) + {m_test_1_calc = 804 * ((P * A0) / (R1/10 * n)); + } else {m_test_1_calc = 0} + if (m_test_1_ != 0) {m_test_1 = m_test_1_} // принимает значение из опций + else {m_test_1 = 0} // значение не введено + + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1)*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_1)+Math.max(m_test_1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1)+Math.max(m_test_1)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2)], + y: [(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2)] + }); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введёный)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1)",m_test_1_corner); +gtl.log.info("m_test_1_calc (пробный груз плоскости 1 расчётный)",m_test_1_calc); +gtl.log.info("Масса ротора, кг", P); +gtl.log.info("Радиус установки грузов плоскости 1, мм", R1); +gtl.log.info("Начальная вибрация A0",A0); + + + // Выдача результата (results) + let __result = { + _001_Примен_пробный_груз_пл_1: m_test_1, + _002_Угол_устан_пробн_груза_пл_1: m_test_1_corner, + _003_Расч_пробный_груз_пл_1: m_test_1_calc + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 2.js b/scripts/2 пл - шаг 2.js new file mode 100644 index 0000000..24b9369 --- /dev/null +++ b/scripts/2 пл - шаг 2.js @@ -0,0 +1,177 @@ +"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_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_1_calc; // масса пробного груза расчётная плоскости 1 *** +let n = gtl.options.customOptions.n; // частота вращения, об/мин */** (для вычисления массы пробного груза) +let R1_ = gtl.options.customOptions.R1; // радиус установки грузов плоскости 1 ** (для вычисления массы пробного груза) +let R1 = R1_; // радиус установки грузов плоскости 1 ** (для вычисления массы пробного груза) (конечное значение) +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_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 2 - выбор массы и положения пробного груза плоскости 1: + // вычисление рекомендуемой массы пробного груза m_test_1_calc + // ввод пользователем массы пробного груза и угла его установки m_test_1 плоскости 1 + // построение графика расположения массы пробного груза плоскости 1 m_test_1 + // из предыдущих шагов переносятся: частота вращения freq, радиус установки грузов плоскости 1 R1, масса ротора P, уровень начальной вибрации A0 + + // Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + // m_test_1 масса пробного груза + if (P != 0 && R1 != 0) + {m_test_1_calc = 804 * ((P * A0) / (R1/10 * n)); + } else {m_test_1_calc = 0} + if (m_test_1_ != 0) {m_test_1 = m_test_1_} // принимает значение из опций + else {m_test_1 = 0} // значение не введено + + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1)*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_1)+Math.max(m_test_1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1)+Math.max(m_test_1)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2)], + y: [(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), -(Math.max(m_test_1)+Math.max(m_test_1)*0.2), (Math.max(m_test_1)+Math.max(m_test_1)*0.2)] + }); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введёный)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1)",m_test_1_corner); +gtl.log.info("m_test_1_calc (пробный груз плоскости 1 расчётный)",m_test_1_calc); +gtl.log.info("Масса ротора, кг", P); +gtl.log.info("Радиус установки грузов плоскости 1, мм", R1); +gtl.log.info("Начальная вибрация A0",A0); + + + // Выдача результата (results) + let __result = { + _001_Примен_пробный_груз_пл_1: m_test_1, + _002_Угол_устан_пробн_груза_пл_1: m_test_1_corner, + _003_Расч_пробный_груз_пл_1: m_test_1_calc + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 3 - стенд.js b/scripts/2 пл - шаг 3 - стенд.js new file mode 100644 index 0000000..e9227f1 --- /dev/null +++ b/scripts/2 пл - шаг 3 - стенд.js @@ -0,0 +1,790 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + let freq_time = gtl.options.customOptions.freq_time; // длина (время) отрезка сигнала + let freq_avg_cnt = gtl.options.customOptions.freq_avg_cnt; // количество усреднений + freq.time = freq_time; + freq.avg_cnt = freq_avg_cnt; + freq.dc = gtl.options.customOptions.freq_dc; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = gtl.options.customOptions.resolution; // частотное разрешение + let average = gtl.options.customOptions.average; // количество усреднений + let overlap = gtl.options.customOptions.overlap; // наложение + let peak_level = gtl.options.customOptions.peak_level; // порог обнаружения гармоник + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + let channel_A = gtl.options.customOptions.channel_A; // выбор канала A + let channel_B = gtl.options.customOptions.channel_B; // выбор канала B + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = peak_level; // порог обнаружения гармоник + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_B"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = peak_level; // порог обнаружения гармоник + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + // "src0" : filter_A_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + // "src0" : filter_B_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** + +// Переменные вспомогательные необходимые для расчётов +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 3 - вибрация пробного пуска A1 и B1 (пробный груз в плоскости 1): + // измерение начальной A1 и B1 (или ввод вручную) + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков A0, A1 и dA1, B0, B1 и dB1 + + // Определение конечных значений переменных + // A1 вибрация после установки пробного груза в плоскость 1 + if (A1_ != "-") {A1 = A1_} // принимает значение из опций + else {A1 = F1_1_a_A} // принимает значение из спектра сигнала + if (A1_phase_ != "-") {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B1 вибрация после установки пробного груза в плоскость 1 + if (B1_ != "-") {B1 = B1_} // принимает значение из опций + else {B1 = F1_1_a_B} // принимает значение из спектра сигнала + if (B1_phase_ != "-") {B1_phase = B1_phase_} // принимает значение из опций + else {B1_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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; + + // определение модуля вектора 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} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if (dB1_phase > 360) {dB1_phase = dB1_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,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + 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: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_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,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2)], + y: [(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +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("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A1: A1, + _006_Фаза_вибр_пуска_A1: A1_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B1: B1, + _013_Фаза_вибр_пуска_B1: B1_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 3.js b/scripts/2 пл - шаг 3.js new file mode 100644 index 0000000..412980c --- /dev/null +++ b/scripts/2 пл - шаг 3.js @@ -0,0 +1,780 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** + +// Переменные вспомогательные необходимые для расчётов +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 3 - вибрация пробного пуска A1 и B1 (пробный груз в плоскости 1): + // измерение начальной A1 и B1 (или ввод вручную) + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков A0, A1 и dA1, B0, B1 и dB1 + + // Определение конечных значений переменных + // A1 вибрация после установки пробного груза в плоскость 1 + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_1_a_A} // принимает значение из спектра сигнала + if (A1_phase_ != 0) {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B1 вибрация после установки пробного груза в плоскость 1 + if (B1_ != 0) {B1 = B1_} // принимает значение из опций + else {B1 = F1_1_a_B} // принимает значение из спектра сигнала + if (B1_phase_ != 0) {B1_phase = B1_phase_} // принимает значение из опций + else {B1_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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 * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} + A1_1_Y = 0; + if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/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; + + // определение модуля вектора 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA1_phase > 360) {dA1_phase = dA1_phase - 360} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if (dB1_phase > 360) {dB1_phase = dB1_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,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + 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: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_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,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2)], + y: [(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), -(Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2), (Math.max(A0,A1,dA1,B0,B1,dB1)+Math.max(A0,A1,dA1,B0,B1,dB1)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +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("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A1: A1, + _006_Фаза_вибр_пуска_A1: A1_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B1: B1, + _013_Фаза_вибр_пуска_B1: B1_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 4 - стенд.js b/scripts/2 пл - шаг 4 - стенд.js new file mode 100644 index 0000000..4635b8d --- /dev/null +++ b/scripts/2 пл - шаг 4 - стенд.js @@ -0,0 +1,178 @@ +"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_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) +let m_test_2_calc; // масса пробного груза расчётная плоскости 2 *** +let n = gtl.options.customOptions.n; // частота вращения, об/мин */** (для вычисления массы пробного груза) +let R2_ = gtl.options.customOptions.R2; // радиус установки грузов плоскости 2 ** (для вычисления массы пробного груза) +let R2 = R2_; // радиус установки грузов плоскости 2 ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P = P_; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 4 - выбор массы и положения пробного груза плоскости 2: + // вычисление рекомендуемой массы пробного груза m_test_2_calc + // ввод пользователем массы пробного груза и угла его установки m_test_2 плоскости 2 + // построение графика расположения массы пробного груза плоскости 2 m_test_2 + // из предыдущих шагов переносятся: частота вращения freq, радиус установки грузов плоскости 2 R2, масса ротора P, уровень начальной вибрации B0 + + // Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + // m_test_2 масса пробного груза + if (P != 0 && R2 != 0) + {m_test_2_calc = 804 * ((P * B0) / (R2/10 * n)); + } else {m_test_2_calc = 0} + if (m_test_2_ != 0) {m_test_2 = m_test_2_} // принимает значение из опций + else {m_test_2 = 0} // значение не введено + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 * (-1)} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_2)*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_2)+Math.max(m_test_2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_2)+Math.max(m_test_2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2)], + y: [(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2)] + }); + +gtl.log.info("m_test_2 (пробный груз плоскости 2 введёный)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2)",m_test_2_corner); +gtl.log.info("m_test_2_calc (пробный груз плоскости 2 расчётный)",m_test_2_calc); +gtl.log.info("Масса ротора, кг", P); +gtl.log.info("Радиус установки грузов плоскости 2, мм", R2); +gtl.log.info("Начальная вибрация B0",B0); + + + // Выдача результата (results) + let __result = { + _001_Примен_пробный_груз_пл_2: m_test_2, + _002_Угол_устан_пробн_груза_пл_2: m_test_2_corner, + _003_Расч_пробный_груз_пл_2: m_test_2_calc + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 4.js b/scripts/2 пл - шаг 4.js new file mode 100644 index 0000000..81020dc --- /dev/null +++ b/scripts/2 пл - шаг 4.js @@ -0,0 +1,178 @@ +"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_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) +let m_test_2_calc; // масса пробного груза расчётная плоскости 2 *** +let n = gtl.options.customOptions.n; // частота вращения, об/мин */** (для вычисления массы пробного груза) +let R2_ = gtl.options.customOptions.R2; // радиус установки грузов плоскости 2 ** (для вычисления массы пробного груза) +let R2 = R2_; // радиус установки грузов плоскости 2 ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P = P_; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 4 - выбор массы и положения пробного груза плоскости 2: + // вычисление рекомендуемой массы пробного груза m_test_2_calc + // ввод пользователем массы пробного груза и угла его установки m_test_2 плоскости 2 + // построение графика расположения массы пробного груза плоскости 2 m_test_2 + // из предыдущих шагов переносятся: частота вращения freq, радиус установки грузов плоскости 2 R2, масса ротора P, уровень начальной вибрации B0 + + // Вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + // m_test_2 масса пробного груза + if (P != 0 && R2 != 0) + {m_test_2_calc = 804 * ((P * B0) / (R2/10 * n)); + } else {m_test_2_calc = 0} + if (m_test_2_ != 0) {m_test_2 = m_test_2_} // принимает значение из опций + else {m_test_2 = 0} // значение не введено + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * 3.1415/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * 3.1415/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * 3.1415/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * 3.1415/180)) * m_test_2 * (-1)} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_2)*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_2)+Math.max(m_test_2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_2)+Math.max(m_test_2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2)], + y: [(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), -(Math.max(m_test_2)+Math.max(m_test_2)*0.2), (Math.max(m_test_2)+Math.max(m_test_2)*0.2)] + }); + +gtl.log.info("m_test_2 (пробный груз плоскости 2 введёный)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2)",m_test_2_corner); +gtl.log.info("m_test_2_calc (пробный груз плоскости 2 расчётный)",m_test_2_calc); +gtl.log.info("Масса ротора, кг", P); +gtl.log.info("Радиус установки грузов плоскости 2, мм", R2); +gtl.log.info("Начальная вибрация B0",B0); + + + // Выдача результата (results) + let __result = { + _001_Примен_пробный_груз_пл_2: m_test_2, + _002_Угол_устан_пробн_груза_пл_2: m_test_2_corner, + _003_Расч_пробный_груз_пл_2: m_test_2_calc + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 5 - стенд.js b/scripts/2 пл - шаг 5 - стенд.js new file mode 100644 index 0000000..02a9699 --- /dev/null +++ b/scripts/2 пл - шаг 5 - стенд.js @@ -0,0 +1,790 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + let freq_time = gtl.options.customOptions.freq_time; // длина (время) отрезка сигнала + let freq_avg_cnt = gtl.options.customOptions.freq_avg_cnt; // количество усреднений + freq.time = freq_time; + freq.avg_cnt = freq_avg_cnt; + freq.dc = gtl.options.customOptions.freq_dc; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = gtl.options.customOptions.resolution; // частотное разрешение + let average = gtl.options.customOptions.average; // количество усреднений + let overlap = gtl.options.customOptions.overlap; // наложение + let peak_level = gtl.options.customOptions.peak_level; // порог обнаружения гармоник + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + let channel_A = gtl.options.customOptions.channel_A; // выбор канала A + let channel_B = gtl.options.customOptions.channel_B; // выбор канала B + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_B"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + // "src0" : filter_A_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + // "src0" : filter_B_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2 // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** + + +// Переменные вспомогательные необходимые для расчётов +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 5 - вибрация пробного пуска A2 и B2 (пробный груз в плоскости 2): + // измерение вибрации A2 и B2 (или ввод вручную) + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков вибрации A0, A2 и dA2, B0, B2 и dB2 + + // Определение конечных значений переменных + // A2 вибрация после установки пробного груза в плоскость 2 + if (A2_ != "-") {A2 = A2_} // принимает значение из опций + else {A2 = F1_1_a_A} // принимает значение из спектра сигнала + if (A2_phase_ != "-") {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B2 вибрация после установки пробного груза в плоскость 2 + if (B2_ != "-") {B2 = B2_} // принимает значение из опций + else {B2 = F1_1_a_B} // принимает значение из спектра сигнала + if (B2_phase_ != "-") {B2_phase = B2_phase_} // принимает значение из опций + else {B2_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if (dB2_phase > 360) {dB2_phase = dB2_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,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + 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: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_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,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2)], + y: [(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +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("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B2: B2, + _013_Фаза_вибр_пуска_B2: B2_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 5.js b/scripts/2 пл - шаг 5.js new file mode 100644 index 0000000..2834945 --- /dev/null +++ b/scripts/2 пл - шаг 5.js @@ -0,0 +1,780 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2 // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** + + +// Переменные вспомогательные необходимые для расчётов +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 5 - вибрация пробного пуска A2 и B2 (пробный груз в плоскости 2): + // измерение вибрации A2 и B2 (или ввод вручную) + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков вибрации A0, A2 и dA2, B0, B2 и dB2 + + // Определение конечных значений переменных + // A2 вибрация после установки пробного груза в плоскость 2 + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_1_a_A} // принимает значение из спектра сигнала + if (A2_phase_ != 0) {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B2 вибрация после установки пробного груза в плоскость 2 + if (B2_ != 0) {B2 = B2_} // принимает значение из опций + else {B2 = F1_1_a_B} // принимает значение из спектра сигнала + if (B2_phase_ != 0) {B2_phase = B2_phase_} // принимает значение из опций + else {B2_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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 * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} + A2_1_Y = 0; + if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA2_phase > 360) {dA2_phase = dA2_phase - 360} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if (dB2_phase > 360) {dB2_phase = dB2_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,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + 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: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_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,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2)], + y: [(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), -(Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2), (Math.max(A0,A2,dA2,B0,B2,dB2)+Math.max(A0,A2,dA2,B0,B2,dB2)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +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("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B2: B2, + _013_Фаза_вибр_пуска_B2: B2_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 6 - стенд.js b/scripts/2 пл - шаг 6 - стенд.js new file mode 100644 index 0000000..ecbe6ed --- /dev/null +++ b/scripts/2 пл - шаг 6 - стенд.js @@ -0,0 +1,1459 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res1; // остаточный дисбаланс плоскости 1 *** (ГОСТ 1940) +let U_res2; // остаточный дисбаланс плоскости 2 *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let m_test_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1 = m_test_1_; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2 = m_test_2_; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) + +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; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1 = A1_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase = A1_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2 = A2_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase = A2_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1 = B1_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase = B1_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2 = B2_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase = B2_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2 // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** + +let DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 1 *** +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 2 *** +let Mdisb1; // масса дисбаланса в плоскости 1 *** +let Mdisb1_corner; // угол расположения дисбаланса в плоскости 1 *** +let Mdisb2; // масса дисбаланса в плоскости 2 *** +let Mdisb2_corner; // угол расположения дисбаланса в плоскости 2 *** + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + +let m_test_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 6 - расположение дисбалансов: + // вычисление положения дисбалансов Mdisb1, Mdisb2 и рекомендуемых балансировочных грузов Mb1_calc, Mb2_calc + // ввод масс и углов установки балансировочных грузов Mb1 и Mb2 + // построение графиков расположения: пробных грузов m_test_1 и m_test_2, дисбалансов Mdisb1 и Mdisb2, + // расчётных Mb1_calc и Mb2_calc и введённых Mb1 и Mb2 балансировочных грузов + // из предыдущих шагов переносятся: вибрации A0, A1, A2, B0, B1, B2, пробные грузы m_test_1 и m_test_2 + // построение графиков вибрации A0, A1, dA1, A2, dA2, B0, B1, dB1, B2, dB2 + + // определение угла наклона вектора 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; + + // определение модуля вектора 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} + + // определение угла наклона вектора A2 к осям X и Y + if (A2_phase <= 90) { + A2_phase_X = 90 - A1_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} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if (dB2_phase > 360) {dB2_phase = dB2_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,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Координаты пробных грузов + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 * (-1)} + + +// Вычисления дисбалансов и балансировочных грузов + + // DCI_A1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A + // определение модуля вектора DCI_A1 + DCI_A1 = dA1 / m_test_1 + // определение фазы вектора DCI_A1 + if ((dA1_phase - m_test_1_corner) < 0) { + DCI_A1_phase = (dA1_phase - m_test_1_corner) + 360} + else if ((dA1_phase - m_test_1_corner) > 360) { + DCI_A1_phase = (dA1_phase - m_test_1_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_B1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B + // определение модуля вектора DCI_B1 + DCI_B1 = dB1 / m_test_1 + // определение фазы вектора DCI_B1 + if ((dB1_phase - m_test_1_corner) < 0) { + DCI_B1_phase = (dB1_phase - m_test_1_corner) + 360} + else if ((dB1_phase - m_test_1_corner) > 360) { + DCI_B1_phase = (dB1_phase - m_test_1_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_A2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A + // определение модуля вектора DCI_A2 + DCI_A2 = dA2 / m_test_2 + // определение фаза вектора DCI_A2 + if ((dA2_phase - m_test_2_corner) < 0) { + DCI_A2_phase = (dA2_phase - m_test_2_corner) + 360} + else if ((dA2_phase - m_test_2_corner) > 360) { + DCI_A2_phase = (dA2_phase - m_test_2_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m_test_2_corner)} // вычисляется в скрипте + + // DCI_B2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B + // определение модуля вектора DCI_B2 + DCI_B2 = dB2 / m_test_2 + // определение фазы вектора DCI_B2 + if ((dB2_phase - m_test_2_corner) < 0) { + DCI_B2_phase = (dB2_phase - m_test_2_corner) + 360} + else if ((dB2_phase - m_test_2_corner) > 360) { + DCI_B2_phase = (dB2_phase - m_test_2_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m_test_2_corner)} // вычисляется в скрипте + + + // формулы для определение векторов балансировочных грузов + // Mb1_calc = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb2_calc = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В0 * DCI_A2 + // 2) A0 * DCI_B2 + // 3) A0 * DCI_B1 + // 4) B0 * DCI_A1 + // 5) В0 * DCI_A2 - A0 * DCI_B2 + // 6) A0 * DCI_B1 - B0 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B0 * DCI_A2 + var B0_DCI_A2 = B0 * DCI_A2; + // определение фазы вектора В0 * DCI_A2 + var B0_DCI_A2_phase; + if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} + // определение угла наклона вектора В0 * DCI_A2 к осям X и Y + var B0_DCI_A2_phase_X; + var B0_DCI_A2_phase_Y; + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} + // определение координат вектора В0 * DCI_A2 + var B0_DCI_A2_1_X = 0; + var B0_DCI_A2_2_X; + if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 * (-1)} + var B0_DCI_A2_1_Y = 0; + var B0_DCI_A2_2_Y; + if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 * (-1)} + + // определение модуля вектора A0 * DCI_B2 + var A0_DCI_B2 = A0 * DCI_B2; + // определение фазы вектора A0 * DCI_B2 + var A0_DCI_B2_phase; + if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} + // определение угла наклона вектора A0 * DCI_B2 к осям X и Y + var A0_DCI_B2_phase_X; + var A0_DCI_B2_phase_Y; + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} + // определение координат вектора A0 * DCI_B2 + var A0_DCI_B2_1_X = 0; + var A0_DCI_B2_2_X; + if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 * (-1)} + var A0_DCI_B2_1_Y = 0; + var A0_DCI_B2_2_Y; + if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 * (-1)} + + // определение модуля вектора A0 * DCI_B1 + var A0_DCI_B1 = A0 * DCI_B1; + // определение фазы вектора A0 * DCI_B1 + var A0_DCI_B1_phase; + if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} + // определение угла наклона вектора A0 * DCI_B1 к осям X и Y + var A0_DCI_B1_phase_X; + var A0_DCI_B1_phase_Y; + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} + // определение координат вектора A0 * DCI_B1 + var A0_DCI_B1_1_X = 0; + var A0_DCI_B1_2_X; + if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 * (-1)} + var A0_DCI_B1_1_Y = 0; + var A0_DCI_B1_2_Y; + if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 * (-1)} + + // определение модуля вектора B0 * DCI_A1 + var B0_DCI_A1 = B0 * DCI_A1; + // определение фазы вектора B0 * DCI_A1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + // определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + // определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 * (-1)} + + // определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2; + var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; + var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; + var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; + var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; + B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); + // определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2_phase; + if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1; + var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; + var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; + var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; + var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; + A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); + // определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1_phase; + if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы Mb1_calc (плоскость 1) + Mb1_calc = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + // опредение угла установки корректирующей массы Mb1_corner_calc (плоскость 1) + if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb1 плоскости 1 + Mdisb1 = Mb1_calc; // равен массе балансировочного груза + // определение угла расположения дисбаланса Mdisb1 плоскости 1 + if ((Mb1_corner_calc + 180) > 360) { + Mdisb1_corner = (Mb1_corner_calc + 180) - 360} + else if ((Mb1_corner_calc + 180) < 0) { + Mdisb1_corner = (Mb1_corner_calc + 180) + 360} + else {Mdisb1_corner = (Mb1_corner_calc + 180)} + + // определение корректирующей массы Mb2_calc (плоскость 2) + Mb2_calc = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + // опредение угла установки корректирующей массы Mb2_corner_calc (плоскость 2) + if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb2 плоскости 2 + Mdisb2 = Mb2_calc; // равен массе балансировочного груза + // определение угла расположения дисбаланса Mdisb2_corner плоскости 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)} + + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаалнса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res1 = Mdisb1 * R1; + U_res2 = Mdisb2 * R2; + U_res = U_res1 + U_res2; + + + +// Графики вибрации + 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: 0x0fae1a, + name: "Вибрация_A2", + x: xA2_array, + y: yA2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0xff3dcc, + name: "Вибрация_dA2", + x: xdA2_array, + y: ydA2_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_array, + }); + plot_vibr.add( + { + color: 0xff3dcc, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_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,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2)], + y: [(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2)] + }); + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_1 плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_2 плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)], + y: [(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плоскости 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс плоскости 2)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса плоскости 2)",Mdisb2_corner); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введён)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1 введён)",m_test_1_corner); +gtl.log.info("m_test_2 (пробный груз плоскости 2 введён)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2 введён)",m_test_2_corner); + +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("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1", U_res1); +gtl.log.info("Остаточный дисбаланс плоскости 2", U_res2); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A1: A1, + _004_Фаза_вибр_пуска_A1: A1_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_Ампл_вибр_пуска_B0: B0, + _008_Фаза_вибр_пуска_B0: B0_phase, + _009_Ампл_вибр_пуска_B1: B1, + _010_Фаза_вибр_пуска_B1: B1_phase, + _011_Ампл_вибр_пуска_B2: B2, + _012_Фаза_вибр_пуска_B2: B2_phase, + + _013_Масса_дисбаланса_пл_1: Mdisb1, + _014_Угол_дисбаланса_пл_1: Mdisb1_corner, + _015_Масса_дисбаланса_пл_2: Mdisb2, + _015_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _016_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _017_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _018_Масса_баланс_груза_введён_пл_1: Mb1, + _019_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _020_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _021_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _022_Масса_баланс_груза_введён_пл_2: Mb2, + _023_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _024_Модуль_ДКВ_DCI_A1: DCI_A1, + _025_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _026_Модуль_ДКВ_DCI_A2: DCI_A2, + _027_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _028_Модуль_ДКВ_DCI_B1: DCI_B1, + _029_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _030_Модуль_ДКВ_DCI_B2: DCI_B2, + _031_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _032_Допуст_ост_дисб_г_мм: U_per, + _033_Остат_дисб_пл1_г_мм: U_res1, + _034_Остат_дисб_пл2_г_мм: U_res2, + _035_Остат_дисб_сумм_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 6.js b/scripts/2 пл - шаг 6.js new file mode 100644 index 0000000..a1d6b5e --- /dev/null +++ b/scripts/2 пл - шаг 6.js @@ -0,0 +1,1459 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res1; // остаточный дисбаланс плоскости 1 *** (ГОСТ 1940) +let U_res2; // остаточный дисбаланс плоскости 2 *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let m_test_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1 = m_test_1_; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2 = m_test_2_; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) + +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; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1 = A1_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase = A1_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2 = A2_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase = A2_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1 = B1_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase = B1_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2 = B2_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase = B2_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2 // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** + +let DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 1 *** +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 2 *** +let Mdisb1; // масса дисбаланса в плоскости 1 *** +let Mdisb1_corner; // угол расположения дисбаланса в плоскости 1 *** +let Mdisb2; // масса дисбаланса в плоскости 2 *** +let Mdisb2_corner; // угол расположения дисбаланса в плоскости 2 *** + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + +let m_test_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 6 - расположение дисбалансов: + // вычисление положения дисбалансов Mdisb1, Mdisb2 и рекомендуемых балансировочных грузов Mb1_calc, Mb2_calc + // ввод масс и углов установки балансировочных грузов Mb1 и Mb2 + // построение графиков расположения: пробных грузов m_test_1 и m_test_2, дисбалансов Mdisb1 и Mdisb2, + // расчётных Mb1_calc и Mb2_calc и введённых Mb1 и Mb2 балансировочных грузов + // из предыдущих шагов переносятся: вибрации A0, A1, A2, B0, B1, B2, пробные грузы m_test_1 и m_test_2 + // построение графиков вибрации A0, A1, dA1, A2, dA2, B0, B1, dB1, B2, dB2 + + // определение угла наклона вектора 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; + + // определение модуля вектора 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} + + // определение угла наклона вектора A2 к осям X и Y + if (A2_phase <= 90) { + A2_phase_X = 90 - A1_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} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if (dB2_phase > 360) {dB2_phase = dB2_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,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Координаты пробных грузов + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 * (-1)} + + +// Вычисления дисбалансов и балансировочных грузов + + // DCI_A1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A + // определение модуля вектора DCI_A1 + DCI_A1 = dA1 / m_test_1 + // определение фазы вектора DCI_A1 + if ((dA1_phase - m_test_1_corner) < 0) { + DCI_A1_phase = (dA1_phase - m_test_1_corner) + 360} + else if ((dA1_phase - m_test_1_corner) > 360) { + DCI_A1_phase = (dA1_phase - m_test_1_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_B1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B + // определение модуля вектора DCI_B1 + DCI_B1 = dB1 / m_test_1 + // определение фазы вектора DCI_B1 + if ((dB1_phase - m_test_1_corner) < 0) { + DCI_B1_phase = (dB1_phase - m_test_1_corner) + 360} + else if ((dB1_phase - m_test_1_corner) > 360) { + DCI_B1_phase = (dB1_phase - m_test_1_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_A2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A + // определение модуля вектора DCI_A2 + DCI_A2 = dA2 / m_test_2 + // определение фаза вектора DCI_A2 + if ((dA2_phase - m_test_2_corner) < 0) { + DCI_A2_phase = (dA2_phase - m_test_2_corner) + 360} + else if ((dA2_phase - m_test_2_corner) > 360) { + DCI_A2_phase = (dA2_phase - m_test_2_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m_test_2_corner)} // вычисляется в скрипте + + // DCI_B2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B + // определение модуля вектора DCI_B2 + DCI_B2 = dB2 / m_test_2 + // определение фазы вектора DCI_B2 + if ((dB2_phase - m_test_2_corner) < 0) { + DCI_B2_phase = (dB2_phase - m_test_2_corner) + 360} + else if ((dB2_phase - m_test_2_corner) > 360) { + DCI_B2_phase = (dB2_phase - m_test_2_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m_test_2_corner)} // вычисляется в скрипте + + + // формулы для определение векторов балансировочных грузов + // Mb1_calc = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb2_calc = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В0 * DCI_A2 + // 2) A0 * DCI_B2 + // 3) A0 * DCI_B1 + // 4) B0 * DCI_A1 + // 5) В0 * DCI_A2 - A0 * DCI_B2 + // 6) A0 * DCI_B1 - B0 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B0 * DCI_A2 + var B0_DCI_A2 = B0 * DCI_A2; + // определение фазы вектора В0 * DCI_A2 + var B0_DCI_A2_phase; + if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} + // определение угла наклона вектора В0 * DCI_A2 к осям X и Y + var B0_DCI_A2_phase_X; + var B0_DCI_A2_phase_Y; + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} + // определение координат вектора В0 * DCI_A2 + var B0_DCI_A2_1_X = 0; + var B0_DCI_A2_2_X; + if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 * (-1)} + var B0_DCI_A2_1_Y = 0; + var B0_DCI_A2_2_Y; + if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 * (-1)} + + // определение модуля вектора A0 * DCI_B2 + var A0_DCI_B2 = A0 * DCI_B2; + // определение фазы вектора A0 * DCI_B2 + var A0_DCI_B2_phase; + if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} + // определение угла наклона вектора A0 * DCI_B2 к осям X и Y + var A0_DCI_B2_phase_X; + var A0_DCI_B2_phase_Y; + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} + // определение координат вектора A0 * DCI_B2 + var A0_DCI_B2_1_X = 0; + var A0_DCI_B2_2_X; + if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 * (-1)} + var A0_DCI_B2_1_Y = 0; + var A0_DCI_B2_2_Y; + if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 * (-1)} + + // определение модуля вектора A0 * DCI_B1 + var A0_DCI_B1 = A0 * DCI_B1; + // определение фазы вектора A0 * DCI_B1 + var A0_DCI_B1_phase; + if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} + // определение угла наклона вектора A0 * DCI_B1 к осям X и Y + var A0_DCI_B1_phase_X; + var A0_DCI_B1_phase_Y; + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} + // определение координат вектора A0 * DCI_B1 + var A0_DCI_B1_1_X = 0; + var A0_DCI_B1_2_X; + if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 * (-1)} + var A0_DCI_B1_1_Y = 0; + var A0_DCI_B1_2_Y; + if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 * (-1)} + + // определение модуля вектора B0 * DCI_A1 + var B0_DCI_A1 = B0 * DCI_A1; + // определение фазы вектора B0 * DCI_A1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + // определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + // определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 * (-1)} + + // определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2; + var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; + var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; + var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; + var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; + B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); + // определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2_phase; + if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1; + var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; + var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; + var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; + var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; + A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); + // определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1_phase; + if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы Mb1_calc (плоскость 1) + Mb1_calc = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + // опредение угла установки корректирующей массы Mb1_corner_calc (плоскость 1) + if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb1 плоскости 1 + Mdisb1 = Mb1_calc; // равен массе балансировочного груза + // определение угла расположения дисбаланса Mdisb1 плоскости 1 + if ((Mb1_corner_calc + 180) > 360) { + Mdisb1_corner = (Mb1_corner_calc + 180) - 360} + else if ((Mb1_corner_calc + 180) < 0) { + Mdisb1_corner = (Mb1_corner_calc + 180) + 360} + else {Mdisb1_corner = (Mb1_corner_calc + 180)} + + // определение корректирующей массы Mb2_calc (плоскость 2) + Mb2_calc = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + // опредение угла установки корректирующей массы Mb2_corner_calc (плоскость 2) + if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb2 плоскости 2 + Mdisb2 = Mb2_calc; // равен массе балансировочного груза + // определение угла расположения дисбаланса Mdisb2_corner плоскости 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)} + + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаалнса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res1 = Mdisb1 * R1; + U_res2 = Mdisb2 * R2; + U_res = U_res1 + U_res2; + + + +// Графики вибрации + 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: 0x0fae1a, + name: "Вибрация_A2", + x: xA2_array, + y: yA2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0xff3dcc, + name: "Вибрация_dA2", + x: xdA2_array, + y: ydA2_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_array, + }); + plot_vibr.add( + { + color: 0xff3dcc, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_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,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2)], + y: [(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2), (Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)+Math.max(A0,A1,dA1,A2,dA2,B0,B1,dB1,B2,dB2)*0.2)] + }); + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_1 плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_2 плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)], + y: [(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плосоксти 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс плосоксти 2)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса плоскости 2)",Mdisb2_corner); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введён)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1 введён)",m_test_1_corner); +gtl.log.info("m_test_2 (пробный груз плоскости 2 введён)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2 введён)",m_test_2_corner); + +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("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1", U_res1); +gtl.log.info("Остаточный дисбаланс плоскости 2", U_res2); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A1: A1, + _004_Фаза_вибр_пуска_A1: A1_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_Ампл_вибр_пуска_B0: B0, + _008_Фаза_вибр_пуска_B0: B0_phase, + _009_Ампл_вибр_пуска_B1: B1, + _010_Фаза_вибр_пуска_B1: B1_phase, + _011_Ампл_вибр_пуска_B2: B2, + _012_Фаза_вибр_пуска_B2: B2_phase, + + _013_Масса_дисбаланса_пл_1: Mdisb1, + _014_Угол_дисбаланса_пл_1: Mdisb1_corner, + _015_Масса_дисбаланса_пл_2: Mdisb2, + _015_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _016_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _017_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _018_Масса_баланс_груза_введён_пл_1: Mb1, + _019_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _020_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _021_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _022_Масса_баланс_груза_введён_пл_2: Mb2, + _023_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _024_Модуль_ДКВ_DCI_A1: DCI_A1, + _025_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _026_Модуль_ДКВ_DCI_A2: DCI_A2, + _027_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _028_Модуль_ДКВ_DCI_B1: DCI_B1, + _029_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _030_Модуль_ДКВ_DCI_B2: DCI_B2, + _031_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _032_Допуст_ост_дисб_г_мм: U_per, + _033_Остат_дисб_пл1_г_мм: U_res1, + _034_Остат_дисб_пл2_г_мм: U_res2, + _035_Остат_дисб_сумм_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 7 - стенд.js b/scripts/2 пл - шаг 7 - стенд.js new file mode 100644 index 0000000..182d303 --- /dev/null +++ b/scripts/2 пл - шаг 7 - стенд.js @@ -0,0 +1,800 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + let freq_time = gtl.options.customOptions.freq_time; // длина (время) отрезка сигнала + let freq_avg_cnt = gtl.options.customOptions.freq_avg_cnt; // количество усреднений + freq.time = freq_time; + freq.avg_cnt = freq_avg_cnt; + freq.dc = gtl.options.customOptions.freq_dc; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = gtl.options.customOptions.resolution; // частотное разрешение + let average = gtl.options.customOptions.average; // количество усреднений + let overlap = gtl.options.customOptions.overlap; // наложение + let peak_level = gtl.options.customOptions.peak_level; // порог обнаружения гармоник + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + let channel_A = gtl.options.customOptions.channel_A; // выбор канала A + let channel_B = gtl.options.customOptions.channel_B; // выбор канала B + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_A].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[channel_B].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_B"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = peak_level; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + // "src0" : filter_A_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + // "src0" : filter_B_vibr, + // "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src0" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "src1" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + +// Переменные вспомогательные необходимые для расчётов +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 A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A.value * 0.4 || F1_1_a_B >= RMS_B.value * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 7 - контрольный пуск: + // измерение вибрации A3 и B3 после установки балансировочных грузов + // определение целесообразности проведения добалансировки + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков A0, A3 и dA3, B0, B3 и dB3 + + + // Определение конечных значений переменных + // A3 вибрация после установки балансировочного груза в плоскость 1 + if (A3_ != "-") {A3 = A3_} // принимает значение из опций + else {A3 = F1_1_a_A} // принимает значение из спектра сигнала + if (A3_phase_ != "-") {A3_phase = A3_phase_} // принимает значение из опций + else {A3_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B3 вибрация после установки балансировочного груза в плоскость 2 + if (B3_ != "-") {B3 = B3_} // принимает значение из опций + else {B3 = F1_1_a_B} // принимает значение из спектра сигнала + if (B3_phase_ != "-") {B3_phase = B3_phase_} // принимает значение из опций + else {B3_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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; + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)], + y: [(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A3: A3, + _006_Фаза_вибр_пуска_A3: A3_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B3: B3, + _013_Фаза_вибр_пуска_B3: B3_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + _017_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 7.js b/scripts/2 пл - шаг 7.js new file mode 100644 index 0000000..ccdbe57 --- /dev/null +++ b/scripts/2 пл - шаг 7.js @@ -0,0 +1,790 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ ***** +// ****************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + +// Переменные вспомогательные необходимые для расчётов +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 A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A * 0.4 || F1_1_a_B >= RMS_B * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 7 - контрольный пуск: + // измерение вибрации A3 и B3 после установки балансировочных грузов + // определение целесообразности проведения добалансировки + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков A0, A3 и dA3, B0, B3 и dB3 + + + // Определение конечных значений переменных + // A3 вибрация после установки балансировочного груза в плоскость 1 + if (A3_ != 0) {A3 = A3_} // принимает значение из опций + else {A3 = F1_1_a_A} // принимает значение из спектра сигнала + if (A3_phase_ != 0) {A3_phase = A3_phase_} // принимает значение из опций + else {A3_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B3 вибрация после установки балансировочного груза в плоскость 2 + if (B3_ != 0) {B3 = B3_} // принимает значение из опций + else {B3 = F1_1_a_B} // принимает значение из спектра сигнала + if (B3_phase_ != 0) {B3_phase = B3_phase_} // принимает значение из опций + else {B3_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * 3.1415/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * 3.1415/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * 3.1415/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * 3.1415/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * 3.1415/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * 3.1415/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * 3.1415/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * 3.1415/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)], + y: [(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A3: A3, + _006_Фаза_вибр_пуска_A3: A3_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B3: B3, + _013_Фаза_вибр_пуска_B3: B3_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + _017_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 8 - стенд.js b/scripts/2 пл - шаг 8 - стенд.js new file mode 100644 index 0000000..c7355cf --- /dev/null +++ b/scripts/2 пл - шаг 8 - стенд.js @@ -0,0 +1,1861 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res12; // остаточный дисбаланс плоскости 1 (после балансировки) *** (ГОСТ 1940) +let U_res22; // остаточный дисбаланс плоскости 2 (после балансировки) *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let m_test_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1 = m_test_1_; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2 = m_test_2_; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) + +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; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1 = A1_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase = A1_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2 = A2_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase = A2_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3 = A3_; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase = A3_phase_; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1 = B1_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase = B1_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2 = B2_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase = B2_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3 = B3_; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase = B3_phase_; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1 = DCI_A1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1_phase = DCI_A1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1 = DCI_B1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1_phase = DCI_B1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2 = DCI_A2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2_phase = DCI_A2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2 = DCI_B2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2_phase = DCI_B2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc = gtl.options.customOptions.Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb1_corner_calc = gtl.options.customOptions.Mb1_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc = gtl.options.customOptions.Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) +let Mb2_corner_calc = gtl.options.customOptions.Mb2_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) + +let Mdisb1 = gtl.options.customOptions.Mdisb1; // масса дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb1_corner = gtl.options.customOptions.Mdisb1_corner;// угол расположения дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb2 = gtl.options.customOptions.Mdisb2; // масса дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb2_corner = gtl.options.customOptions.Mdisb2_corner;// угол расположения дисбаланса в плоскости 2 *** (конечное значение) + +let Mb12_calc; // модуль расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb12_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb22_calc; // модуль расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) +let Mb22_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) + +let Mdisb12; // масса остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb12_corner; // угол расположения остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb22; // масса остаточного дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb22_corner; // угол расположения остаточного дисбаланса в плоскости 2 *** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + +let m_test_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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 + +let Mdisb12_corner_X; // угол наклона вектора Mdisb12 к оси X (плоскость 1) +let Mdisb12_corner_Y; // угол наклона вектора Mdisb12 к оси Y (плоскость 1) +let Mdisb12_1_X; // начальная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_2_X; // конечная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_1_Y; // начальная координата вектора Mdisb12 по оси Y (плоскость 1) +let Mdisb12_2_Y; // конечная координата вектора Mdisb12 по оси Y (плоскость 1) + +let Mb12_corner_calc_X; // угол наклона расчётного вектора Mb12_calc к оси X (плоскость 1) +let Mb12_corner_calc_Y; // угол наклона расчётного вектора Mb12_calc к оси Y (плоскость 1) +let Mb12_1_calc_X; // начальная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_2_calc_X; // конечная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_1_calc_Y; // начальная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) +let Mb12_2_calc_Y; // конечная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) + +let Mdisb22_corner_X; // угол наклона вектора Mdisb22 к оси X (плоскость 2) +let Mdisb22_corner_Y; // угол наклона вектора Mdisb22 к оси Y (плоскость 2) +let Mdisb22_1_X; // начальная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_2_X; // конечная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_1_Y; // начальная координата вектора Mdisb22 по оси Y (плоскость 2) +let Mdisb22_2_Y; // конечная координата вектора Mdisb22 по оси Y (плоскость 2) + +let Mb22_corner_calc_X; // угол наклона расчётного вектора Mb22_calc к оси X (плоскость 2) +let Mb22_corner_calc_Y; // угол наклона расчётного вектора Mb22_calc к оси Y (плоскость 2) +let Mb22_1_calc_X; // начальная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_2_calc_X; // конечная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_1_calc_Y; // начальная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) +let Mb22_2_calc_Y; // конечная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) + +// ***** РАСЧЁТЫ ***** +// 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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 8 - отчёт : + // из предыдущих шагов переносится: + // начальная вибрация A0, B0 + // вибрация после установки пробных грузов A1, B1, A2, B2 + // вибрация после установки балансировочных грузов A3, B3 + // расчётные пробные грузы m_test_1_calc, m_test_2_calc + // массы и углы установки выбранных пробных грузов m_test_1, m_test_2 + // массы и углы расположения дисбалансов Mdisb1, Mdisb2 + // массы и углы расположения расчётных балансировочных грузов Mb1_calc, Mb2_calc + // массы и углы расположения выбранных балансировочных грузов Mb1, Mb2 + // массы и углы расположения остаточных дисбалансов Mdisb12, Mdisb22 + // массы и углы расположения грузов для добалансировки Mb12_calc, Mb22_calc + // построение графика вибрации: A0, A1, dA1, A2, dA2, A3, dA3, + // B0, B1, dB1, B2, dB2, B3, dB3 + // построение графиков расположения дисбалансов и балансировочных грузов: m_test_1, m_test_1, Mb1_calc, Mb2_calc, + // Mb1, Mb2, Mdisb1, Mdisb2, Mb12_calc, Mb22_calc, Mdisb12, Mdisb22 + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение модуля вектора 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} + + // определение угла наклона вектора A2 к осям X и Y + if (A2_phase <= 90) { + A2_phase_X = 90 - A1_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} + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Координаты пробных грузов + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 * (-1)} + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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)} + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + + +// Дисбалансы и балансировочные грузы ПОСЛЕ балансировки (Mb12, Mdisb12, Mb22, Mdisb22) + + // формулы для определение векторов грузов для добалансировки + // Mb12_calc = (B3 * DCI_A2 - A3 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb22_calc = (A3 * DCI_B1 - B3 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В3 * DCI_A2 + // 2) A3 * DCI_B2 + // 3) A3 * DCI_B1 + // 4) B3 * DCI_A1 + // 5) В3 * DCI_A2 - A3 * DCI_B2 + // 6) A3 * DCI_B1 - B3 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B3 * DCI_A2 + var B3_DCI_A2 = B3 * DCI_A2; + + // определение фазы вектора В0 * DCI_A2 + var B3_DCI_A2_phase; + if ((B3_phase + DCI_A2_phase) >360) { + B3_DCI_A2_phase = B3_phase + DCI_A2_phase - 360 + } else {B3_DCI_A2_phase = B3_phase + DCI_A2_phase} + + // определение угла наклона вектора В3 * DCI_A2 к осям X и Y + var B3_DCI_A2_phase_X; + var B3_DCI_A2_phase_Y; + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_X = 90 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 90} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_X = 270 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 270} + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_Y = 180 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase - 180} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_Y = 360 - B3_DCI_A2_phase} + + // определение координат вектора В3 * DCI_A2 + var B3_DCI_A2_1_X = 0; + var B3_DCI_A2_2_X; + if (B3_DCI_A2_phase <= 180) {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 * (-1)} + var B3_DCI_A2_1_Y = 0; + var B3_DCI_A2_2_Y; + if (B3_DCI_A2_phase <= 90 || B3_DCI_A2_phase >= 270) {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 * (-1)} + + // определение модуля вектора A3 * DCI_B2 + var A3_DCI_B2 = A3 * DCI_B2; + + // определение фазы вектора A3 * DCI_B2 + var A3_DCI_B2_phase; + if ((A3_phase + DCI_B2_phase) >360) { + A3_DCI_B2_phase = A3_phase + DCI_B2_phase - 360 + } else {A3_DCI_B2_phase = A3_phase + DCI_B2_phase} + + // определение угла наклона вектора A3 * DCI_B2 к осям X и Y + var A3_DCI_B2_phase_X; + var A3_DCI_B2_phase_Y; + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_X = 90 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 90} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_X = 270 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 270} + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_Y = 180 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase - 180} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_Y = 360 - A3_DCI_B2_phase} + + // определение координат вектора A3 * DCI_B2 + var A3_DCI_B2_1_X = 0; + var A3_DCI_B2_2_X; + if (A3_DCI_B2_phase <= 180) {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 * (-1)} + var A3_DCI_B2_1_Y = 0; + var A3_DCI_B2_2_Y; + if (A3_DCI_B2_phase <= 90 || A3_DCI_B2_phase >= 270) {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 * (-1)} + + // определение модуля вектора A3 * DCI_B1 + var A3_DCI_B1 = A3 * DCI_B1; + + // определение фазы вектора A3 * DCI_B1 + var A3_DCI_B1_phase; + if ((A3_phase + DCI_B1_phase) >360) { + A3_DCI_B1_phase = A3_phase + DCI_B1_phase - 360 + } else {A3_DCI_B1_phase = A3_phase + DCI_B1_phase} + + // определение угла наклона вектора A3 * DCI_B1 к осям X и Y + var A3_DCI_B1_phase_X; + var A3_DCI_B1_phase_Y; + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_X = 90 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 90} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_X = 270 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 270} + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_Y = 180 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase - 180} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_Y = 360 - A3_DCI_B1_phase} + + // определение координат вектора A3 * DCI_B1 + var A3_DCI_B1_1_X = 0; + var A3_DCI_B1_2_X; + if (A3_DCI_B1_phase <= 180) {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 * (-1)} + var A3_DCI_B1_1_Y = 0; + var A3_DCI_B1_2_Y; + if (A3_DCI_B1_phase <= 90 || A3_DCI_B1_phase >= 270) {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 * (-1)} + + // определение модуля вектора B3 * DCI_A1 + var B3_DCI_A1 = B3 * DCI_A1; + + // определение фазы вектора B3 * DCI_A1 + var B3_DCI_A1_phase; + if ((B3_phase + DCI_A1_phase) >360) { + B3_DCI_A1_phase = B3_phase + DCI_A1_phase - 360 + } else {B3_DCI_A1_phase = B3_phase + DCI_A1_phase} + + // определение угла наклона вектора B3 * DCI_A1 к осям X и Y + var B3_DCI_A1_phase_X; + var B3_DCI_A1_phase_Y; + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_X = 90 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 90} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_X = 270 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 270} + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_Y = 180 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase - 180} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_Y = 360 - B3_DCI_A1_phase} + + // определение координат вектора B3 * DCI_A1 + var B3_DCI_A1_1_X = 0; + var B3_DCI_A1_2_X; + if (B3_DCI_A1_phase <= 180) {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 * (-1)} + var B3_DCI_A1_1_Y = 0; + var B3_DCI_A1_2_Y; + if (B3_DCI_A1_phase <= 90 || B3_DCI_A1_phase >= 270) {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 * (-1)} + + + // определение модуля вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2; + var B3_DCIA2_A3_DCIB2_1_X = A3_DCI_B2_2_X; + var B3_DCIA2_A3_DCIB2_1_Y = A3_DCI_B2_2_Y; + var B3_DCIA2_A3_DCIB2_2_X = B3_DCI_A2_2_X; + var B3_DCIA2_A3_DCIB2_2_Y = B3_DCI_A2_2_Y; + B3_DCIA2_A3_DCIB2 = Math.sqrt(Math.pow(B3_DCIA2_A3_DCIB2_2_X - B3_DCIA2_A3_DCIB2_1_X, 2) + Math.pow(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y, 2)); + + // определение фазы вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2_phase; + if ((B3_DCIA2_A3_DCIB2_2_X > B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X <= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B3_DCIA2_A3_DCIB2_2_X < B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 360 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X >= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 180 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1; + var A3_DCIB1_B3_DCIA1_1_X = B3_DCI_A1_2_X; + var A3_DCIB1_B3_DCIA1_1_Y = B3_DCI_A1_2_Y; + var A3_DCIB1_B3_DCIA1_2_X = A3_DCI_B1_2_X; + var A3_DCIB1_B3_DCIA1_2_Y = A3_DCI_B1_2_Y; + A3_DCIB1_B3_DCIA1 = Math.sqrt(Math.pow(A3_DCIB1_B3_DCIA1_2_X - A3_DCIB1_B3_DCIA1_1_X, 2) + Math.pow(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y, 2)); + + // определение фазы вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1_phase; + if ((A3_DCIB1_B3_DCIA1_2_X > A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X <= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A3_DCIB1_B3_DCIA1_2_X < A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 360 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X >= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 180 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы для добалансировки Mb12_calc плоскости 1 + Mb12_calc = B3_DCIA2_A3_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb12_corner_calc плоскости 1 + if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb12 плоскости 1 + Mdisb12 = Mb12_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb1 плоскости 1 + if ((Mb12_corner_calc + 180) > 360) { + Mdisb12_corner = (Mb12_corner_calc + 180) - 360} + else if ((Mb12_corner_calc + 180) < 0) { + Mdisb12_corner = (Mb12_corner_calc + 180) + 360} + else {Mdisb12_corner = (Mb12_corner_calc + 180)} + + // определение корректирующей массы для добалансировки Mb22_calc плоскости 2 + Mb22_calc = A3_DCIB1_B3_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb22_corner_calc плоскости 2 + if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb22 плоскости 2 + Mdisb22 = Mb22_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb22_corner плоскости 2 + if ((Mb22_corner_calc + 180) > 360) { + Mdisb22_corner = (Mb22_corner_calc + 180) - 360} + else if ((Mb22_corner_calc + 180) < 0) { + Mdisb22_corner = (Mb22_corner_calc + 180) + 360} + else {Mdisb22_corner = (Mb22_corner_calc + 180)} + +// Координаты остаточных дисбалансов и грузов для добалансировки + + // определение угла наклона вектора Mb12_calc к осям X и Y + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_X = 90 - Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_X = Mb12_corner_calc - 90} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_X = 270 - Mb12_corner_calc} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_X = Mb12_corner_calc - 270} + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_Y = Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_Y = 180 - Mb12_corner_calc} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_Y = Mb12_corner_calc - 180} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_Y = 360 - Mb12_corner_calc} + // определение координат вектора Mb12_calc + Mb12_1_calc_X = 0; + if (Mb12_corner_calc <= 180) {Mb12_2_calc_X = Math.abs(Math.cos(Mb12_corner_calc_X * Math.PI/180)) * Mb12_calc * (-1) + } else {Mb12_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb12_calc} + Mb12_1_calc_Y = 0; + if (Mb12_corner_calc <= 90 || Mb12_corner_calc >= 270) {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc + } else {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc * (-1)} + + // определение угла наклона вектора Mb22_calc к осям X и Y + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_X = 90 - Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_X = Mb22_corner_calc - 90} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_X = 270 - Mb22_corner_calc} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_X = Mb22_corner_calc - 270} + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_Y = Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_Y = 180 - Mb22_corner_calc} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_Y = Mb22_corner_calc - 180} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_Y = 360 - Mb22_corner_calc} + // определение координат вектора Mb22_calc + Mb22_1_calc_X = 0; + if (Mb22_corner_calc <= 180) {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc * (-1) + } else {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc} + Mb22_1_calc_Y = 0; + if (Mb22_corner_calc <= 90 || Mb22_corner_calc >= 270) {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc + } else {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc * (-1)} + + // определение угла наклона вектора Mdisb12 к осям X и Y + if (Mdisb12_corner <= 90) { + Mdisb12_corner_X = 90 - Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_X = Mdisb12_corner - 90} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_X = 270 - Mdisb12_corner} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_X = Mdisb12_corner - 270} + if (Mdisb12_corner <= 90) { + Mdisb12_corner_Y = Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_Y = 180 - Mdisb12_corner} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_Y = Mdisb12_corner - 180} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_Y = 360 - Mdisb12_corner} + // определение координат вектора Mdisb12 + Mdisb12_1_X = 0; + if (Mdisb12_corner <= 180) {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12 * (-1) + } else {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12} + Mdisb12_1_Y = 0; + if (Mdisb12_corner <= 90 || Mdisb12_corner >= 270) {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 + } else {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 * (-1)} + + // определение угла наклона вектора Mdisb22 к осям X и Y + if (Mdisb22_corner <= 90) { + Mdisb22_corner_X = 90 - Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_X = Mdisb22_corner - 90} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_X = 270 - Mdisb22_corner} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_X = Mdisb22_corner - 270} + if (Mdisb22_corner <= 90) { + Mdisb22_corner_Y = Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_Y = 180 - Mdisb22_corner} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_Y = Mdisb22_corner - 180} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_Y = 360 - Mdisb22_corner} + // определение координат вектора Mdisb22 + Mdisb22_1_X = 0; + if (Mdisb22_corner <= 180) {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22 * (-1) + } else {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22} + Mdisb22_1_Y = 0; + if (Mdisb22_corner <= 90 || Mdisb22_corner >= 270) {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 + } else {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 * (-1)} + + + +// Координаты графиков масс + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb12_calc плоскости 1 + var x_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси X + var y_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси Y + var x0_Mb12_calc = Mb12_2_calc_X; // центр по X + var y0_Mb12_calc = Mb12_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb12_calc_array.push(x0_Mb12_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb12_calc_array.push(y0_Mb12_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb22_calc плоскости 2 + var x_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси X + var y_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси Y + var x0_Mb22_calc = Mb22_2_calc_X; // центр по X + var y0_Mb22_calc = Mb22_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb22_calc_array.push(x0_Mb22_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb22_calc_array.push(y0_Mb22_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb12 плоскости 1 + var x_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси X + var y_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси Y + var x0_Mdisb12 = Mdisb12_2_X; // центр по X + var y0_Mdisb12 = Mdisb12_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb12_array.push(x0_Mdisb12 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb12_array.push(y0_Mdisb12 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb22 плоскости 2 + var x_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси X + var y_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси Y + var x0_Mdisb22 = Mdisb22_2_X; // центр по X + var y0_Mdisb22 = Mdisb22_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb22_array.push(x0_Mdisb22 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb22_array.push(y0_Mdisb22 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*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_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res12 = Mdisb12 * R1; + U_res22 = Mdisb22 * R2; + U_res = U_res12 + U_res22; + + +// Графики вибрации + 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: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + 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: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_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,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2)], + y: [(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2)] + }); + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_1 плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_2 плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + x: x_Mdisb2_array, + y: y_Mdisb2_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb12_calc плоскости 1", + x: x_Mb12_calc_array, + y: y_Mb12_calc_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb22_calc плоскости 2", + x: x_Mb22_calc_array, + y: y_Mb22_calc_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb12 плоскости 1", + x: x_Mdisb12_array, + y: y_Mdisb12_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb22 плоскости 2", + x: x_Mdisb22_array, + y: y_Mdisb22_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)], + y: [(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плоскости 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс плоскости 2)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса плоскости 2)",Mdisb2_corner); + +gtl.log.info("Mb12_calc (масса груза для добалансировки плоскости 1 расчёт)",Mb12_calc); +gtl.log.info("Mb12_corner_calc (угол установки груза для добалансировки плоскости 1 расчёт)",Mb12_corner_calc); +gtl.log.info("Mb22_calc (масса груза для добалансировки плоскости 2 расчёт)",Mb22_calc); +gtl.log.info("Mb22_corner_calc (угол установки груза для добалансировки плоскости 2 расчёт)",Mb22_corner_calc); +gtl.log.info("Mdisb12 (дисбаланс остаточный плоскости 1)",Mdisb12); +gtl.log.info("Mdisb12_corner (угол расположения дисбаланса остаточного плоскости 1)",Mdisb12_corner); +gtl.log.info("Mdisb22 (дисбаланс остаточный плоскости 2)",Mdisb22); +gtl.log.info("Mdisb22_corner (угол расположения дисбаланса остаточного плоскости 2)",Mdisb22_corner); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введён)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1 введён)",m_test_1_corner); +gtl.log.info("m_test_2 (пробный груз плоскости 2 введён)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2 введён)",m_test_2_corner); + +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("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1 (после балансировки)", U_res12); +gtl.log.info("Остаточный дисбаланс плоскости 2 (после балансировки)", U_res22); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A1: A1, + _004_Фаза_вибр_пуска_A1: A1_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_Ампл_вибр_пуска_A3: A3, + _008_Фаза_вибр_пуска_A3: A3_phase, + _009_Ампл_вибр_пуска_B0: B0, + _010_Фаза_вибр_пуска_B0: B0_phase, + _011_Ампл_вибр_пуска_B1: B1, + _012_Фаза_вибр_пуска_B1: B1_phase, + _013_Ампл_вибр_пуска_B2: B2, + _014_Фаза_вибр_пуска_B2: B2_phase, + _015_Ампл_вибр_пуска_B3: B3, + _016_Фаза_вибр_пуска_B3: B3_phase, + + _017_Масса_дисбаланса_пл_1: Mdisb1, + _018_Угол_дисбаланса_пл_1: Mdisb1_corner, + _019_Масса_дисбаланса_пл_2: Mdisb2, + _020_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _021_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _022_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _023_Масса_баланс_груза_введён_пл_1: Mb1, + _024_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _025_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _026_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _027_Масса_баланс_груза_введён_пл_2: Mb2, + _028_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _029_Масса_остат_дисбаланса_пл_1: Mdisb12, + _030_Угол_остат_дисбаланса_пл_1: Mdisb12_corner, + _031_Масса_остат_дисбаланса_пл_2: Mdisb22, + _032_Угол_остат_дисбаланса_пл_2: Mdisb22_corner, + + _033_Масса_груза_добаланс_пл_1: Mb12_calc, + _034_Угол_груза_добаланс_пл_1: Mb12_corner_calc, + _035_Масса_груза_добаланс_пл_2: Mb22_calc, + _036_Угол_груза_добаланс_пл_2: Mb22_corner_calc, + + _037_Модуль_ДКВ_DCI_A1: DCI_A1, + _038_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _039_Модуль_ДКВ_DCI_A2: DCI_A2, + _040_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _041_Модуль_ДКВ_DCI_B1: DCI_B1, + _042_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _043_Модуль_ДКВ_DCI_B2: DCI_B2, + _044_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _045_Допуст_ост_дисб_г_мм: U_per, + _046_Остат_дисб_пл1_после_бал_г_мм: U_res12, + _047_Остат_дисб_пл2_после_бал_г_мм: U_res22, + _048_Остат_дисб_сумм_после_бал_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/2 пл - шаг 8.js b/scripts/2 пл - шаг 8.js new file mode 100644 index 0000000..c7355cf --- /dev/null +++ b/scripts/2 пл - шаг 8.js @@ -0,0 +1,1861 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res12; // остаточный дисбаланс плоскости 1 (после балансировки) *** (ГОСТ 1940) +let U_res22; // остаточный дисбаланс плоскости 2 (после балансировки) *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let m_test_1_ = gtl.options.customOptions.m_test_1; // масса пробного груза плоскости 1 ** +let m_test_1 = m_test_1_; // масса пробного груза плоскости 1 ** (конечное значение) +let m_test_1_corner_ = gtl.options.customOptions.m_test_1_corner; // угол установки пробного груза плоскости 1 ** +let m_test_1_corner = m_test_1_corner_; // угол установки пробного груза плоскости 1 ** (конечное значение) +let m_test_2_ = gtl.options.customOptions.m_test_2; // масса пробного груза плоскости 2 ** +let m_test_2 = m_test_2_; // масса пробного груза плоскости 2 ** (конечное значение) +let m_test_2_corner_ = gtl.options.customOptions.m_test_2_corner; // угол установки пробного груза плоскости 2 ** +let m_test_2_corner = m_test_2_corner_; // угол установки пробного груза плоскости 2 ** (конечное значение) + +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; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1 = A1_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** +let A1_phase = A1_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 1 */** (конечное значение) +let dA1; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let dA1_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 1 *** +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2 = A2_; // модуль вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** +let A2_phase = A2_phase_; // фаза вектора вибрации точки A после установки пробного груза в плоскость 2 */** (конечное значение) +let dA2; // модуль вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let dA2_phase; // фаза вектора дельты вибрации точки A после установки пробного груза в плоскость 2 *** +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3 = A3_; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase = A3_phase_; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1 = B1_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** +let B1_phase = B1_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 1 */** (конечное значение) +let dB1; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let dB1_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 1 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2 = B2_; // модуль вектора вибрации точки B после установки пробного груза в плоскость 2*/** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** +let B2_phase = B2_phase_; // фаза вектора вибрации точки B после установки пробного груза в плоскость 2 */** (конечное значение) +let dB2; // модуль вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let dB2_phase; // фаза вектора дельты вибрации точки B после установки пробного груза в плоскость 2 *** +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3 = B3_; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase = B3_phase_; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1 = DCI_A1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1_phase = DCI_A1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1 = DCI_B1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1_phase = DCI_B1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2 = DCI_A2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2_phase = DCI_A2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2 = DCI_B2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2_phase = DCI_B2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc = gtl.options.customOptions.Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb1_corner_calc = gtl.options.customOptions.Mb1_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc = gtl.options.customOptions.Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) +let Mb2_corner_calc = gtl.options.customOptions.Mb2_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) + +let Mdisb1 = gtl.options.customOptions.Mdisb1; // масса дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb1_corner = gtl.options.customOptions.Mdisb1_corner;// угол расположения дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb2 = gtl.options.customOptions.Mdisb2; // масса дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb2_corner = gtl.options.customOptions.Mdisb2_corner;// угол расположения дисбаланса в плоскости 2 *** (конечное значение) + +let Mb12_calc; // модуль расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb12_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb22_calc; // модуль расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) +let Mb22_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) + +let Mdisb12; // масса остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb12_corner; // угол расположения остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb22; // масса остаточного дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb22_corner; // угол расположения остаточного дисбаланса в плоскости 2 *** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 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 dA2_1_X; // начальная координата вектора dA2 по оси X +let dA2_2_X; // конечная координата вектора dA2 по оси X +let dA2_1_Y; // начальная координата вектора dA2 по оси Y +let dA2_2_Y; // конечная координата вектора dA2 по оси Y + +let A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B1_phase_X; // угол наклона вектора B1 к оси X +let B1_phase_Y; // угол наклона вектора B1 к оси Y +let B1_1_X; // начальная координата вектора B1 по оси X +let B1_2_X; // конечная координата вектора B1 по оси X +let B1_1_Y; // начальная координата вектора B1 по оси Y +let B1_2_Y; // конечная координата вектора B1 по оси Y + +let dB1_1_X; // начальная координата вектора dB1 по оси X +let dB1_2_X; // конечная координата вектора dB1 по оси X +let dB1_1_Y; // начальная координата вектора dB1 по оси Y +let dB1_2_Y; // конечная координата вектора dB1 по оси Y + +let B2_phase_X; // угол наклона вектора B2 к оси X +let B2_phase_Y; // угол наклона вектора B2 к оси Y +let B2_1_X; // начальная координата вектора B2 по оси X +let B2_2_X; // конечная координата вектора B2 по оси X +let B2_1_Y; // начальная координата вектора B2 по оси Y +let B2_2_Y; // конечная координата вектора B2 по оси Y + +let dB2_1_X; // начальная координата вектора dB2 по оси X +let dB2_2_X; // конечная координата вектора dB2 по оси X +let dB2_1_Y; // начальная координата вектора dB2 по оси Y +let dB2_2_Y; // конечная координата вектора dB2 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + +let m_test_1_corner_X; // угол наклона вектора m_test_1 к оси X +let m_test_1_corner_Y; // угол наклона вектора m_test_1 к оси Y +let m_test_1_1_X; // начальная координата вектора m_test_1 по оси X +let m_test_1_2_X; // конечная координата вектора m_test_1 по оси X +let m_test_1_1_Y; // начальная координата вектора m_test_1 по оси Y +let m_test_1_2_Y; // конечная координата вектора m_test_1 по оси Y +let m_test_2_corner_X; // угол наклона вектора m_test_2 к оси X +let m_test_2_corner_Y; // угол наклона вектора m_test_2 к оси Y +let m_test_2_1_X; // начальная координата вектора m_test_2 по оси X +let m_test_2_2_X; // конечная координата вектора m_test_2 по оси X +let m_test_2_1_Y; // начальная координата вектора m_test_2 по оси Y +let m_test_2_2_Y; // конечная координата вектора m_test_2 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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 + +let Mdisb12_corner_X; // угол наклона вектора Mdisb12 к оси X (плоскость 1) +let Mdisb12_corner_Y; // угол наклона вектора Mdisb12 к оси Y (плоскость 1) +let Mdisb12_1_X; // начальная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_2_X; // конечная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_1_Y; // начальная координата вектора Mdisb12 по оси Y (плоскость 1) +let Mdisb12_2_Y; // конечная координата вектора Mdisb12 по оси Y (плоскость 1) + +let Mb12_corner_calc_X; // угол наклона расчётного вектора Mb12_calc к оси X (плоскость 1) +let Mb12_corner_calc_Y; // угол наклона расчётного вектора Mb12_calc к оси Y (плоскость 1) +let Mb12_1_calc_X; // начальная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_2_calc_X; // конечная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_1_calc_Y; // начальная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) +let Mb12_2_calc_Y; // конечная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) + +let Mdisb22_corner_X; // угол наклона вектора Mdisb22 к оси X (плоскость 2) +let Mdisb22_corner_Y; // угол наклона вектора Mdisb22 к оси Y (плоскость 2) +let Mdisb22_1_X; // начальная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_2_X; // конечная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_1_Y; // начальная координата вектора Mdisb22 по оси Y (плоскость 2) +let Mdisb22_2_Y; // конечная координата вектора Mdisb22 по оси Y (плоскость 2) + +let Mb22_corner_calc_X; // угол наклона расчётного вектора Mb22_calc к оси X (плоскость 2) +let Mb22_corner_calc_Y; // угол наклона расчётного вектора Mb22_calc к оси Y (плоскость 2) +let Mb22_1_calc_X; // начальная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_2_calc_X; // конечная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_1_calc_Y; // начальная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) +let Mb22_2_calc_Y; // конечная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) + +// ***** РАСЧЁТЫ ***** +// 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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 8 - отчёт : + // из предыдущих шагов переносится: + // начальная вибрация A0, B0 + // вибрация после установки пробных грузов A1, B1, A2, B2 + // вибрация после установки балансировочных грузов A3, B3 + // расчётные пробные грузы m_test_1_calc, m_test_2_calc + // массы и углы установки выбранных пробных грузов m_test_1, m_test_2 + // массы и углы расположения дисбалансов Mdisb1, Mdisb2 + // массы и углы расположения расчётных балансировочных грузов Mb1_calc, Mb2_calc + // массы и углы расположения выбранных балансировочных грузов Mb1, Mb2 + // массы и углы расположения остаточных дисбалансов Mdisb12, Mdisb22 + // массы и углы расположения грузов для добалансировки Mb12_calc, Mb22_calc + // построение графика вибрации: A0, A1, dA1, A2, dA2, A3, dA3, + // B0, B1, dB1, B2, dB2, B3, dB3 + // построение графиков расположения дисбалансов и балансировочных грузов: m_test_1, m_test_1, Mb1_calc, Mb2_calc, + // Mb1, Mb2, Mdisb1, Mdisb2, Mb12_calc, Mb22_calc, Mdisb12, Mdisb22 + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение модуля вектора 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} + + // определение угла наклона вектора A2 к осям X и Y + if (A2_phase <= 90) { + A2_phase_X = 90 - A1_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} + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + // определение координат вектора B1 + var xB1_array = []; // массив координат точек вектора B1 по оси X + var yB1_array = []; // массив координат точек вектора B1 по оси Y + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * Math.PI/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * Math.PI/180)) * B1 * (-1)} + xB1_array[0] = B1_1_X; + xB1_array[1] = B1_2_X; + yB1_array[0] = B1_1_Y; + yB1_array[1] = B1_2_Y; + + // определение модуля вектора dB1 + var xdB1_array = []; // массив координат точек вектора dB1 по оси X + var ydB1_array = []; // массив координат точек вектора dB1 по оси Y + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)) + xdB1_array[0] = dB1_1_X; + xdB1_array[1] = dB1_2_X; + ydB1_array[0] = dB1_1_Y; + ydB1_array[1] = dB1_2_Y; + // определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / Math.PI)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + + // определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B2_phase <= 360) { + B2_phase_Y = 360 - B2_phase} + // определение координат вектора B2 + var xB2_array = []; // массив координат точек вектора B2 по оси X + var yB2_array = []; // массив координат точек вектора B2 по оси Y + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * Math.PI/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * Math.PI/180)) * B2 * (-1)} + xB2_array[0] = B2_1_X; + xB2_array[1] = B2_2_X; + yB2_array[0] = B2_1_Y; + yB2_array[1] = B2_2_Y; + + // определение модуля вектора dB2 + var xdB2_array = []; // массив координат точек вектора dB2 по оси X + var ydB2_array = []; // массив координат точек вектора dB2 по оси Y + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)) + xdB2_array[0] = dB2_1_X; + xdB2_array[1] = dB2_2_X; + ydB2_array[0] = dB2_1_Y; + ydB2_array[1] = dB2_2_Y; + // определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / Math.PI)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Координаты пробных грузов + // определение угла наклона вектора m_test_1 к осям X и Y + if (m_test_1_corner <= 90) { + m_test_1_corner_X = 90 - m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_X = m_test_1_corner - 90} + if (m_test_1_corner <= 270) { + m_test_1_corner_X = 270 - m_test_1_corner} + if (m_test_1_corner <= 360) { + m_test_1_corner_X = m_test_1_corner - 270} + if (m_test_1_corner <= 90) { + m_test_1_corner_Y = m_test_1_corner} + if (m_test_1_corner <= 180) { + m_test_1_corner_Y = 180 - m_test_1_corner} + if (m_test_1_corner <= 270) { + m_test_1_corner_Y = m_test_1_corner - 180} + if (m_test_1_corner <= 360) { + m_test_1_corner_Y = 360 - m_test_1_corner} + // определение координат вектора m_test_1 + m_test_1_1_X = 0; + if (m_test_1_corner <= 180) {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1 * (-1) + } else {m_test_1_2_X = Math.abs(Math.cos(m_test_1_corner_X * Math.PI/180)) * m_test_1} + m_test_1_1_Y = 0; + if (m_test_1_corner <= 90 || m_test_1_corner >= 270) {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 + } else {m_test_1_2_Y = Math.abs(Math.cos(m_test_1_corner_Y * Math.PI/180)) * m_test_1 * (-1)} + + // определение угла наклона вектора m_test_2 к осям X и Y + if (m_test_2_corner <= 90) { + m_test_2_corner_X = 90 - m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_X = m_test_2_corner - 90} + if (m_test_2_corner <= 270) { + m_test_2_corner_X = 270 - m_test_2_corner} + if (m_test_2_corner <= 360) { + m_test_2_corner_X = m_test_2_corner - 270} + if (m_test_2_corner <= 90) { + m_test_2_corner_Y = m_test_2_corner} + if (m_test_2_corner <= 180) { + m_test_2_corner_Y = 180 - m_test_2_corner} + if (m_test_2_corner <= 270) { + m_test_2_corner_Y = m_test_2_corner - 180} + if (m_test_2_corner <= 360) { + m_test_2_corner_Y = 360 - m_test_2_corner} + // определение координат вектора m_test_2 + m_test_2_1_X = 0; + if (m_test_2_corner <= 180) {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2 * (-1) + } else {m_test_2_2_X = Math.abs(Math.cos(m_test_2_corner_X * Math.PI/180)) * m_test_2} + m_test_2_1_Y = 0; + if (m_test_2_corner <= 90 || m_test_2_corner >= 270) {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 + } else {m_test_2_2_Y = Math.abs(Math.cos(m_test_2_corner_Y * Math.PI/180)) * m_test_2 * (-1)} + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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)} + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + + +// Дисбалансы и балансировочные грузы ПОСЛЕ балансировки (Mb12, Mdisb12, Mb22, Mdisb22) + + // формулы для определение векторов грузов для добалансировки + // Mb12_calc = (B3 * DCI_A2 - A3 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb22_calc = (A3 * DCI_B1 - B3 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В3 * DCI_A2 + // 2) A3 * DCI_B2 + // 3) A3 * DCI_B1 + // 4) B3 * DCI_A1 + // 5) В3 * DCI_A2 - A3 * DCI_B2 + // 6) A3 * DCI_B1 - B3 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B3 * DCI_A2 + var B3_DCI_A2 = B3 * DCI_A2; + + // определение фазы вектора В0 * DCI_A2 + var B3_DCI_A2_phase; + if ((B3_phase + DCI_A2_phase) >360) { + B3_DCI_A2_phase = B3_phase + DCI_A2_phase - 360 + } else {B3_DCI_A2_phase = B3_phase + DCI_A2_phase} + + // определение угла наклона вектора В3 * DCI_A2 к осям X и Y + var B3_DCI_A2_phase_X; + var B3_DCI_A2_phase_Y; + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_X = 90 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 90} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_X = 270 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 270} + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_Y = 180 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase - 180} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_Y = 360 - B3_DCI_A2_phase} + + // определение координат вектора В3 * DCI_A2 + var B3_DCI_A2_1_X = 0; + var B3_DCI_A2_2_X; + if (B3_DCI_A2_phase <= 180) {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 * (-1)} + var B3_DCI_A2_1_Y = 0; + var B3_DCI_A2_2_Y; + if (B3_DCI_A2_phase <= 90 || B3_DCI_A2_phase >= 270) {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 * (-1)} + + // определение модуля вектора A3 * DCI_B2 + var A3_DCI_B2 = A3 * DCI_B2; + + // определение фазы вектора A3 * DCI_B2 + var A3_DCI_B2_phase; + if ((A3_phase + DCI_B2_phase) >360) { + A3_DCI_B2_phase = A3_phase + DCI_B2_phase - 360 + } else {A3_DCI_B2_phase = A3_phase + DCI_B2_phase} + + // определение угла наклона вектора A3 * DCI_B2 к осям X и Y + var A3_DCI_B2_phase_X; + var A3_DCI_B2_phase_Y; + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_X = 90 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 90} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_X = 270 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 270} + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_Y = 180 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase - 180} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_Y = 360 - A3_DCI_B2_phase} + + // определение координат вектора A3 * DCI_B2 + var A3_DCI_B2_1_X = 0; + var A3_DCI_B2_2_X; + if (A3_DCI_B2_phase <= 180) {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 * (-1)} + var A3_DCI_B2_1_Y = 0; + var A3_DCI_B2_2_Y; + if (A3_DCI_B2_phase <= 90 || A3_DCI_B2_phase >= 270) {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 * (-1)} + + // определение модуля вектора A3 * DCI_B1 + var A3_DCI_B1 = A3 * DCI_B1; + + // определение фазы вектора A3 * DCI_B1 + var A3_DCI_B1_phase; + if ((A3_phase + DCI_B1_phase) >360) { + A3_DCI_B1_phase = A3_phase + DCI_B1_phase - 360 + } else {A3_DCI_B1_phase = A3_phase + DCI_B1_phase} + + // определение угла наклона вектора A3 * DCI_B1 к осям X и Y + var A3_DCI_B1_phase_X; + var A3_DCI_B1_phase_Y; + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_X = 90 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 90} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_X = 270 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 270} + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_Y = 180 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase - 180} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_Y = 360 - A3_DCI_B1_phase} + + // определение координат вектора A3 * DCI_B1 + var A3_DCI_B1_1_X = 0; + var A3_DCI_B1_2_X; + if (A3_DCI_B1_phase <= 180) {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 * (-1)} + var A3_DCI_B1_1_Y = 0; + var A3_DCI_B1_2_Y; + if (A3_DCI_B1_phase <= 90 || A3_DCI_B1_phase >= 270) {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 * (-1)} + + // определение модуля вектора B3 * DCI_A1 + var B3_DCI_A1 = B3 * DCI_A1; + + // определение фазы вектора B3 * DCI_A1 + var B3_DCI_A1_phase; + if ((B3_phase + DCI_A1_phase) >360) { + B3_DCI_A1_phase = B3_phase + DCI_A1_phase - 360 + } else {B3_DCI_A1_phase = B3_phase + DCI_A1_phase} + + // определение угла наклона вектора B3 * DCI_A1 к осям X и Y + var B3_DCI_A1_phase_X; + var B3_DCI_A1_phase_Y; + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_X = 90 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 90} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_X = 270 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 270} + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_Y = 180 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase - 180} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_Y = 360 - B3_DCI_A1_phase} + + // определение координат вектора B3 * DCI_A1 + var B3_DCI_A1_1_X = 0; + var B3_DCI_A1_2_X; + if (B3_DCI_A1_phase <= 180) {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 * (-1)} + var B3_DCI_A1_1_Y = 0; + var B3_DCI_A1_2_Y; + if (B3_DCI_A1_phase <= 90 || B3_DCI_A1_phase >= 270) {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 * (-1)} + + + // определение модуля вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2; + var B3_DCIA2_A3_DCIB2_1_X = A3_DCI_B2_2_X; + var B3_DCIA2_A3_DCIB2_1_Y = A3_DCI_B2_2_Y; + var B3_DCIA2_A3_DCIB2_2_X = B3_DCI_A2_2_X; + var B3_DCIA2_A3_DCIB2_2_Y = B3_DCI_A2_2_Y; + B3_DCIA2_A3_DCIB2 = Math.sqrt(Math.pow(B3_DCIA2_A3_DCIB2_2_X - B3_DCIA2_A3_DCIB2_1_X, 2) + Math.pow(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y, 2)); + + // определение фазы вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2_phase; + if ((B3_DCIA2_A3_DCIB2_2_X > B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X <= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B3_DCIA2_A3_DCIB2_2_X < B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 360 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X >= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 180 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1; + var A3_DCIB1_B3_DCIA1_1_X = B3_DCI_A1_2_X; + var A3_DCIB1_B3_DCIA1_1_Y = B3_DCI_A1_2_Y; + var A3_DCIB1_B3_DCIA1_2_X = A3_DCI_B1_2_X; + var A3_DCIB1_B3_DCIA1_2_Y = A3_DCI_B1_2_Y; + A3_DCIB1_B3_DCIA1 = Math.sqrt(Math.pow(A3_DCIB1_B3_DCIA1_2_X - A3_DCIB1_B3_DCIA1_1_X, 2) + Math.pow(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y, 2)); + + // определение фазы вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1_phase; + if ((A3_DCIB1_B3_DCIA1_2_X > A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X <= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A3_DCIB1_B3_DCIA1_2_X < A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 360 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X >= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 180 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы для добалансировки Mb12_calc плоскости 1 + Mb12_calc = B3_DCIA2_A3_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb12_corner_calc плоскости 1 + if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb12 плоскости 1 + Mdisb12 = Mb12_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb1 плоскости 1 + if ((Mb12_corner_calc + 180) > 360) { + Mdisb12_corner = (Mb12_corner_calc + 180) - 360} + else if ((Mb12_corner_calc + 180) < 0) { + Mdisb12_corner = (Mb12_corner_calc + 180) + 360} + else {Mdisb12_corner = (Mb12_corner_calc + 180)} + + // определение корректирующей массы для добалансировки Mb22_calc плоскости 2 + Mb22_calc = A3_DCIB1_B3_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb22_corner_calc плоскости 2 + if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb22 плоскости 2 + Mdisb22 = Mb22_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb22_corner плоскости 2 + if ((Mb22_corner_calc + 180) > 360) { + Mdisb22_corner = (Mb22_corner_calc + 180) - 360} + else if ((Mb22_corner_calc + 180) < 0) { + Mdisb22_corner = (Mb22_corner_calc + 180) + 360} + else {Mdisb22_corner = (Mb22_corner_calc + 180)} + +// Координаты остаточных дисбалансов и грузов для добалансировки + + // определение угла наклона вектора Mb12_calc к осям X и Y + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_X = 90 - Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_X = Mb12_corner_calc - 90} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_X = 270 - Mb12_corner_calc} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_X = Mb12_corner_calc - 270} + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_Y = Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_Y = 180 - Mb12_corner_calc} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_Y = Mb12_corner_calc - 180} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_Y = 360 - Mb12_corner_calc} + // определение координат вектора Mb12_calc + Mb12_1_calc_X = 0; + if (Mb12_corner_calc <= 180) {Mb12_2_calc_X = Math.abs(Math.cos(Mb12_corner_calc_X * Math.PI/180)) * Mb12_calc * (-1) + } else {Mb12_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb12_calc} + Mb12_1_calc_Y = 0; + if (Mb12_corner_calc <= 90 || Mb12_corner_calc >= 270) {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc + } else {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc * (-1)} + + // определение угла наклона вектора Mb22_calc к осям X и Y + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_X = 90 - Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_X = Mb22_corner_calc - 90} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_X = 270 - Mb22_corner_calc} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_X = Mb22_corner_calc - 270} + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_Y = Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_Y = 180 - Mb22_corner_calc} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_Y = Mb22_corner_calc - 180} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_Y = 360 - Mb22_corner_calc} + // определение координат вектора Mb22_calc + Mb22_1_calc_X = 0; + if (Mb22_corner_calc <= 180) {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc * (-1) + } else {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc} + Mb22_1_calc_Y = 0; + if (Mb22_corner_calc <= 90 || Mb22_corner_calc >= 270) {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc + } else {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc * (-1)} + + // определение угла наклона вектора Mdisb12 к осям X и Y + if (Mdisb12_corner <= 90) { + Mdisb12_corner_X = 90 - Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_X = Mdisb12_corner - 90} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_X = 270 - Mdisb12_corner} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_X = Mdisb12_corner - 270} + if (Mdisb12_corner <= 90) { + Mdisb12_corner_Y = Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_Y = 180 - Mdisb12_corner} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_Y = Mdisb12_corner - 180} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_Y = 360 - Mdisb12_corner} + // определение координат вектора Mdisb12 + Mdisb12_1_X = 0; + if (Mdisb12_corner <= 180) {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12 * (-1) + } else {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12} + Mdisb12_1_Y = 0; + if (Mdisb12_corner <= 90 || Mdisb12_corner >= 270) {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 + } else {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 * (-1)} + + // определение угла наклона вектора Mdisb22 к осям X и Y + if (Mdisb22_corner <= 90) { + Mdisb22_corner_X = 90 - Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_X = Mdisb22_corner - 90} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_X = 270 - Mdisb22_corner} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_X = Mdisb22_corner - 270} + if (Mdisb22_corner <= 90) { + Mdisb22_corner_Y = Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_Y = 180 - Mdisb22_corner} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_Y = Mdisb22_corner - 180} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_Y = 360 - Mdisb22_corner} + // определение координат вектора Mdisb22 + Mdisb22_1_X = 0; + if (Mdisb22_corner <= 180) {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22 * (-1) + } else {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22} + Mdisb22_1_Y = 0; + if (Mdisb22_corner <= 90 || Mdisb22_corner >= 270) {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 + } else {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 * (-1)} + + + +// Координаты графиков масс + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси X + var y_m_test_1_array = []; // массив координат точек окружности m_test_1 по оси Y + var x0_m_test_1 = m_test_1_2_X; // центр по X + var y0_m_test_1 = m_test_1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_1_array.push(x0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_1_array.push(y0_m_test_1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения массы пробного груза + var x_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси X + var y_m_test_2_array = []; // массив координат точек окружности m_test_2 по оси Y + var x0_m_test_2 = m_test_2_2_X; // центр по X + var y0_m_test_2 = m_test_2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_m_test_2_array.push(x0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_m_test_2_array.push(y0_m_test_2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb12_calc плоскости 1 + var x_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси X + var y_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси Y + var x0_Mb12_calc = Mb12_2_calc_X; // центр по X + var y0_Mb12_calc = Mb12_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb12_calc_array.push(x0_Mb12_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb12_calc_array.push(y0_Mb12_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb22_calc плоскости 2 + var x_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси X + var y_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси Y + var x0_Mb22_calc = Mb22_2_calc_X; // центр по X + var y0_Mb22_calc = Mb22_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb22_calc_array.push(x0_Mb22_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb22_calc_array.push(y0_Mb22_calc + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb12 плоскости 1 + var x_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси X + var y_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси Y + var x0_Mdisb12 = Mdisb12_2_X; // центр по X + var y0_Mdisb12 = Mdisb12_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb12_array.push(x0_Mdisb12 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb12_array.push(y0_Mdisb12 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb22 плоскости 2 + var x_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси X + var y_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси Y + var x0_Mdisb22 = Mdisb22_2_X; // центр по X + var y0_Mdisb22 = Mdisb22_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb22_array.push(x0_Mdisb22 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb22_array.push(y0_Mdisb22 + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*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_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res12 = Mdisb12 * R1; + U_res22 = Mdisb22 * R2; + U_res = U_res12 + U_res22; + + +// Графики вибрации + 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: 0xff0000, + name: "Вибрация_dA1", + x: xdA1_array, + y: ydA1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + 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: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B1", + x: xB1_array, + y: yB1_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB1", + x: xdB1_array, + y: ydB1_array, + }); + plot_vibr.add( + { + color: 0x0fae1a, + name: "Вибрация_B2", + x: xB2_array, + y: yB2_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB2", + x: xdB2_array, + y: ydB2_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_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,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2)], + y: [(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), -(Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2), (Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)+Math.max(A0,A1,dA1,A2,dA2,A3,dA3,B0,B1,dB1,B2,dB2,B3,dB3)*0.2)] + }); + + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_1 плоскости 1", + x: x_m_test_1_array, + y: y_m_test_1_array, + }); + plot_disb.add( + { + color: 0x0000ff, + name: "Пробный груз m_test_2 плоскости 2", + x: x_m_test_2_array, + y: y_m_test_2_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + x: x_Mdisb2_array, + y: y_Mdisb2_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb12_calc плоскости 1", + x: x_Mb12_calc_array, + y: y_Mb12_calc_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb22_calc плоскости 2", + x: x_Mb22_calc_array, + y: y_Mb22_calc_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb12 плоскости 1", + x: x_Mdisb12_array, + y: y_Mdisb12_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb22 плоскости 2", + x: x_Mdisb22_array, + y: y_Mdisb22_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)], + y: [(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(m_test_1,m_test_2,Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плоскости 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс плоскости 2)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса плоскости 2)",Mdisb2_corner); + +gtl.log.info("Mb12_calc (масса груза для добалансировки плоскости 1 расчёт)",Mb12_calc); +gtl.log.info("Mb12_corner_calc (угол установки груза для добалансировки плоскости 1 расчёт)",Mb12_corner_calc); +gtl.log.info("Mb22_calc (масса груза для добалансировки плоскости 2 расчёт)",Mb22_calc); +gtl.log.info("Mb22_corner_calc (угол установки груза для добалансировки плоскости 2 расчёт)",Mb22_corner_calc); +gtl.log.info("Mdisb12 (дисбаланс остаточный плоскости 1)",Mdisb12); +gtl.log.info("Mdisb12_corner (угол расположения дисбаланса остаточного плоскости 1)",Mdisb12_corner); +gtl.log.info("Mdisb22 (дисбаланс остаточный плоскости 2)",Mdisb22); +gtl.log.info("Mdisb22_corner (угол расположения дисбаланса остаточного плоскости 2)",Mdisb22_corner); + +gtl.log.info("m_test_1 (пробный груз плоскости 1 введён)",m_test_1); +gtl.log.info("m_test_1_corner (угол установки пробного груза плоскости 1 введён)",m_test_1_corner); +gtl.log.info("m_test_2 (пробный груз плоскости 2 введён)",m_test_2); +gtl.log.info("m_test_2_corner (угол установки пробного груза плоскости 2 введён)",m_test_2_corner); + +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("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B1",B1); +gtl.log.info("B1_phase",B1_phase); +gtl.log.info("B2",B2); +gtl.log.info("B2_phase",B2_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1 (после балансировки)", U_res12); +gtl.log.info("Остаточный дисбаланс плоскости 2 (после балансировки)", U_res22); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A1: A1, + _004_Фаза_вибр_пуска_A1: A1_phase, + _005_Ампл_вибр_пуска_A2: A2, + _006_Фаза_вибр_пуска_A2: A2_phase, + _007_Ампл_вибр_пуска_A3: A3, + _008_Фаза_вибр_пуска_A3: A3_phase, + _009_Ампл_вибр_пуска_B0: B0, + _010_Фаза_вибр_пуска_B0: B0_phase, + _011_Ампл_вибр_пуска_B1: B1, + _012_Фаза_вибр_пуска_B1: B1_phase, + _013_Ампл_вибр_пуска_B2: B2, + _014_Фаза_вибр_пуска_B2: B2_phase, + _015_Ампл_вибр_пуска_B3: B3, + _016_Фаза_вибр_пуска_B3: B3_phase, + + _017_Масса_дисбаланса_пл_1: Mdisb1, + _018_Угол_дисбаланса_пл_1: Mdisb1_corner, + _019_Масса_дисбаланса_пл_2: Mdisb2, + _020_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _021_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _022_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _023_Масса_баланс_груза_введён_пл_1: Mb1, + _024_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _025_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _026_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _027_Масса_баланс_груза_введён_пл_2: Mb2, + _028_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _029_Масса_остат_дисбаланса_пл_1: Mdisb12, + _030_Угол_остат_дисбаланса_пл_1: Mdisb12_corner, + _031_Масса_остат_дисбаланса_пл_2: Mdisb22, + _032_Угол_остат_дисбаланса_пл_2: Mdisb22_corner, + + _033_Масса_груза_добаланс_пл_1: Mb12_calc, + _034_Угол_груза_добаланс_пл_1: Mb12_corner_calc, + _035_Масса_груза_добаланс_пл_2: Mb22_calc, + _036_Угол_груза_добаланс_пл_2: Mb22_corner_calc, + + _037_Модуль_ДКВ_DCI_A1: DCI_A1, + _038_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _039_Модуль_ДКВ_DCI_A2: DCI_A2, + _040_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _041_Модуль_ДКВ_DCI_B1: DCI_B1, + _042_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _043_Модуль_ДКВ_DCI_B2: DCI_B2, + _044_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _045_Допуст_ост_дисб_г_мм: U_per, + _046_Остат_дисб_пл1_после_бал_г_мм: U_res12, + _047_Остат_дисб_пл2_после_бал_г_мм: U_res22, + _048_Остат_дисб_сумм_после_бал_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/2 пл ДКВ - шаг 0.js b/scripts/2 пл ДКВ - шаг 0.js new file mode 100644 index 0000000..117e3aa --- /dev/null +++ b/scripts/2 пл ДКВ - шаг 0.js @@ -0,0 +1,127 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ (использование ДКВ) ***** +// ************************************************************************** + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let R1_ = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) (конечное значение) +let R2_ = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +let R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) (конечное значение) +let P_ = gtl.options.customOptions.P; // масса ротора, кг ** (для вычисления массы пробного груза) +let P; // масса ротора, кг ** (для вычисления массы пробного груза) (конечное значение) +let G = gtl.options.customOptions.G; // класс точности балансировки, мм/с ** (ГОСТ 1940) +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза и допустимого остаточного дисбаланса) +let U_per; // допустимый остаточный дисбаланс *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1 = DCI_A1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1_phase = DCI_A1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1 = DCI_B1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1_phase = DCI_B1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2 = DCI_A2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2_phase = DCI_A2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2 = DCI_B2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2_phase = DCI_B2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = gtl.acq_time + 1; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 0 - ввод исходных данных: + // ввод исходных данных: радиус установки грузов, масса ротора + // ввод ДКВ (DCI), если он известен (необязателен для этого алгоритма) + + // R1 радиус установки грузов на плоскости 1, мм + if (R1_ != 0) {R1 = R1_} // принимает значение из опций + else {R1 = false} // принимает значение false + // R2 радиус установки грузов на плоскости 2, мм + if (R2_ != 0) {R2 = R2_} // принимает значение из опций + else {R2 = false} // принимает значение false + // P масса ротора, г + if (P_ != 0) {P = P_} // принимает значение из опций + else {P = false} // принимает значение false + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + +gtl.log.info("Масса ротора", P); +gtl.log.info("Радиус установки грузов на плоскости 1", R1); +gtl.log.info("Радиус установки грузов на плоскости 2", R2); +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); +gtl.log.info("Допустимый остаточный дисбаланс", U_per); + + // Выдача результата (results) + let __result = { + _001_Радиус_установки_грузов_пл1_мм: R1, + _002_Радиус_установки_грузов_пл2_мм: R2, + _003_Масса_ротора_кг: P, + _004_Модуль_ДКВ_DCI_A1: DCI_A1, + _005_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _006_Модуль_ДКВ_DCI_A2: DCI_A2, + _007_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _008_Модуль_ДКВ_DCI_B1: DCI_B1, + _009_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _010_Модуль_ДКВ_DCI_B2: DCI_B2, + _011_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + _012_Допуст_ост_дисб_г_мм: U_per + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +} \ No newline at end of file diff --git a/scripts/2 пл ДКВ - шаг 1.js b/scripts/2 пл ДКВ - шаг 1.js new file mode 100644 index 0000000..41d0e24 --- /dev/null +++ b/scripts/2 пл ДКВ - шаг 1.js @@ -0,0 +1,611 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ (использование ДКВ) ***** +// ************************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase; // фаза вектора начальной вибрации точки A */** (конечное значение) + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase; // фаза вектора начальной вибрации точки B */** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A * 0.4 || F1_1_a_B >= RMS_B * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 1 - начальная вибрация A0 и B0: + // измерение начальной вибрации A0 (или ввод вручную) + // определение целесообразности проведения балансировки + // построение графиков вибрации A0 и B0 + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a_A} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B0 начальная вибрация + if (B0_ != 0) {B0 = B0_} // принимает значение из опций + else {B0 = F1_1_a_B} // принимает значение из спектра сигнала + if (B0_phase_ != 0) {B0_phase = B0_phase_} // принимает значение из опций + else {B0_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение координат точек окружности графика для отображения векторов вибрации + 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,B0)+Math.max(A0,B0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,B0)+Math.max(A0,B0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)], + y: [(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("-","-"); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_точкиA: F1_1_a_A, + _002_Фаза_част_вращ_F1_точкиA: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_СКЗ_вибр_точкиA: RMS_A.value, + + _006_Ампл_гарм_1F1_точкиB: F1_1_a_B, + _007_Фаза_част_вращ_F1_точкиB: F1_1_ph_B, + _008_Ампл_вибр_пуска_B0: B0, + _009_Фаза_вибр_пуска_B0: B0_phase, + _010_СКЗ_вибр_точкиB: RMS_B.value, + + _011_Нестаб_част_вращ: instability*100, + _012_Частота_вращения_F1: freq.value, + _013_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл ДКВ - шаг 2.js b/scripts/2 пл ДКВ - шаг 2.js new file mode 100644 index 0000000..3cd1d1f --- /dev/null +++ b/scripts/2 пл ДКВ - шаг 2.js @@ -0,0 +1,1053 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res1; // остаточный дисбаланс плоскости 1 *** (ГОСТ 1940) +let U_res2; // остаточный дисбаланс плоскости 2 *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение) + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1 = DCI_A1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1_phase = DCI_A1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1 = DCI_B1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1_phase = DCI_B1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2 = DCI_A2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2_phase = DCI_A2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2 = DCI_B2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2_phase = DCI_B2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** +let Mb1_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 1 *** +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** +let Mb2_corner_calc; // угол расчётного вектора балансировочного груза в плоскости 2 *** + +let Mdisb1; // масса дисбаланса в плоскости 1 *** +let Mdisb1_corner; // угол расположения дисбаланса в плоскости 1 *** +let Mdisb2; // масса дисбаланса в плоскости 2 *** +let Mdisb2_corner; // угол расположения дисбаланса в плоскости 2 *** + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 2 - расположение дисбалансов: + // вычисление положения дисбалансов Mdisb1, Mdisb2 и рекомендуемых балансировочных грузов Mb1_calc, Mb2_calc + // ввод масс и углов установки балансировочных грузов Mb1 и Mb2 + // построение графиков расположения: дисбалансов Mdisb1 и Mdisb2, расчётных Mb1_calc и Mb2_calc и + // введённых Mb1 и Mb2 балансировочных грузов + // из предыдущих шагов переносятся: вибрации A0, B0 + // построение графиков вибрации A0, B0 + + // определение угла наклона вектора 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; + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение координат точек окружности графика для отображения векторов вибрации + 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,B0)+Math.max(A0,B0)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,B0)+Math.max(A0,B0)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Вычисления дисбалансов и балансировочных грузов + + // DCI_A1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A + // определение модуля вектора DCI_A1 + // if (DCI_A1_ != 0) {DCI_A1 = DCI_A1_} // принимает значение из опций + // else {DCI_A1 = dA1 / m_test_1} // принимает значение из расчётов + // DCI_A1 = dA1 / m_test_1 + // определение фазы вектора DCI_A1 + // if (DCI_A1_phase_ != 0) {DCI_A1_phase = DCI_A1_phase_} // принимает значение из опций + // else if ((dA1_phase - m_test_1_corner) < 0) { + // DCI_A1_phase = (dA1_phase - m_test_1_corner) + 360} + // else if ((dA1_phase - m_test_1_corner) > 360) { + // DCI_A1_phase = (dA1_phase - m_test_1_corner) - 360} + // else {DCI_A1_phase = (dA1_phase - m_test_1_corner)} // вычисляется в скрипте + // if ((dA1_phase - m_test_1_corner) < 0) { + // DCI_A1_phase = (dA1_phase - m_test_1_corner) + 360} + // else if ((dA1_phase - m_test_1_corner) > 360) { + // DCI_A1_phase = (dA1_phase - m_test_1_corner) - 360} + // else {DCI_A1_phase = (dA1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_B1 - ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B + // определение модуля вектора DCI_B1 + // if (DCI_B1_ != 0) {DCI_B1 = DCI_B1_} // принимает значение из опций + // else {DCI_B1 = dB1 / m_test_1} // принимает значение из расчётов + // DCI_B1 = dB1 / m_test_1 + // определение фазы вектора DCI_B1 + // if (DCI_B1_phase_ != 0) {DCI_B1_phase = DCI_B1_phase_} // принимает значение из опций + // else if ((dB1_phase - m_test_1_corner) < 0) { + // DCI_B1_phase = (dB1_phase - m_test_1_corner) + 360} + // else if ((dB1_phase - m_test_1_corner) > 360) { + // DCI_B1_phase = (dB1_phase - m_test_1_corner) - 360} + // else {DCI_B1_phase = (dB1_phase - m_test_1_corner)} // вычисляется в скрипте + // if ((dB1_phase - m_test_1_corner) < 0) { + // DCI_B1_phase = (dB1_phase - m_test_1_corner) + 360} + // else if ((dB1_phase - m_test_1_corner) > 360) { + // DCI_B1_phase = (dB1_phase - m_test_1_corner) - 360} + // else {DCI_B1_phase = (dB1_phase - m_test_1_corner)} // вычисляется в скрипте + + // DCI_A2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A + // определение модуля вектора DCI_A2 + // if (DCI_A2_ != 0) {DCI_A2 = DCI_A2_} // принимает значение из опций + // else {DCI_A2 = dA2 / m_test_2} // принимает значение из расчётов + // DCI_A2 = dA2 / m_test_2 + // определение фаза вектора DCI_A2 + // if (DCI_A2_phase_ != 0) {DCI_A2_phase = DCI_A2_phase_} // принимает значение из опций + // else if ((dA2_phase - m_test_2_corner) < 0) { + // DCI_A2_phase = (dA2_phase - m_test_2_corner) + 360} + // else if ((dA2_phase - m_test_2_corner) > 360) { + // DCI_A2_phase = (dA2_phase - m_test_2_corner) - 360} + // else {DCI_A2_phase = (dA2_phase - m_test_2_corner)} // вычисляется в скрипте + // if ((dA2_phase - m_test_2_corner) < 0) { + // DCI_A2_phase = (dA2_phase - m_test_2_corner) + 360} + // else if ((dA2_phase - m_test_2_corner) > 360) { + // DCI_A2_phase = (dA2_phase - m_test_2_corner) - 360} + // else {DCI_A2_phase = (dA2_phase - m_test_2_corner)} // вычисляется в скрипте + + // DCI_B2 - ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B + // определение модуля вектора DCI_B2 + // if (DCI_B2_ != 0) {DCI_B2 = DCI_B2_} // принимает значение из опций + // else {DCI_B2 = dB2 / m_test_2} // принимает значение из расчётов + // DCI_B2 = dB2 / m_test_2 + // определение фазы вектора DCI_B2 + // if (DCI_B2_phase_ != 0) {DCI_B2_phase = DCI_B2_phase_} // принимает значение из опций + // else if ((dB2_phase - m_test_2_corner) < 0) { + // DCI_B2_phase = (dB2_phase - m_test_2_corner) + 360} + // else if ((dB2_phase - m_test_2_corner) > 360) { + // DCI_B2_phase = (dB2_phase - m_test_2_corner) - 360} + // else {DCI_B2_phase = (dB2_phase - m_test_2_corner)} // вычисляется в скрипте + // if ((dB2_phase - m_test_2_corner) < 0) { + // DCI_B2_phase = (dB2_phase - m_test_2_corner) + 360} + // else if ((dB2_phase - m_test_2_corner) > 360) { + // DCI_B2_phase = (dB2_phase - m_test_2_corner) - 360} + // else {DCI_B2_phase = (dB2_phase - m_test_2_corner)} // вычисляется в скрипте + + + // формулы для определение векторов балансировочных грузов + // Mb1_calc = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb2_calc = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В0 * DCI_A2 + // 2) A0 * DCI_B2 + // 3) A0 * DCI_B1 + // 4) B0 * DCI_A1 + // 5) В0 * DCI_A2 - A0 * DCI_B2 + // 6) A0 * DCI_B1 - B0 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B0 * DCI_A2 + var B0_DCI_A2 = B0 * DCI_A2; + + // определение фазы вектора В0 * DCI_A2 + var B0_DCI_A2_phase; + if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} + + // определение угла наклона вектора В0 * DCI_A2 к осям X и Y + var B0_DCI_A2_phase_X; + var B0_DCI_A2_phase_Y; + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} + + // определение координат вектора В0 * DCI_A2 + var B0_DCI_A2_1_X = 0; + var B0_DCI_A2_2_X; + if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * Math.PI/180)) * B0_DCI_A2 * (-1)} + var B0_DCI_A2_1_Y = 0; + var B0_DCI_A2_2_Y; + if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * Math.PI/180)) * B0_DCI_A2 * (-1)} + + // определение модуля вектора A0 * DCI_B2 + var A0_DCI_B2 = A0 * DCI_B2; + + // определение фазы вектора A0 * DCI_B2 + var A0_DCI_B2_phase; + if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} + + // определение угла наклона вектора A0 * DCI_B2 к осям X и Y + var A0_DCI_B2_phase_X; + var A0_DCI_B2_phase_Y; + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} + + // определение координат вектора A0 * DCI_B2 + var A0_DCI_B2_1_X = 0; + var A0_DCI_B2_2_X; + if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * Math.PI/180)) * A0_DCI_B2 * (-1)} + var A0_DCI_B2_1_Y = 0; + var A0_DCI_B2_2_Y; + if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * Math.PI/180)) * A0_DCI_B2 * (-1)} + + // определение модуля вектора A0 * DCI_B1 + var A0_DCI_B1 = A0 * DCI_B1; + + // определение фазы вектора A0 * DCI_B1 + var A0_DCI_B1_phase; + if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} + + // определение угла наклона вектора A0 * DCI_B1 к осям X и Y + var A0_DCI_B1_phase_X; + var A0_DCI_B1_phase_Y; + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} + + // определение координат вектора A0 * DCI_B1 + var A0_DCI_B1_1_X = 0; + var A0_DCI_B1_2_X; + if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * Math.PI/180)) * A0_DCI_B1 * (-1)} + var A0_DCI_B1_1_Y = 0; + var A0_DCI_B1_2_Y; + if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * Math.PI/180)) * A0_DCI_B1 * (-1)} + + // определение модуля вектора B0 * DCI_A1 + var B0_DCI_A1 = B0 * DCI_A1; + + // определение фазы вектора A0 * DCI_B1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + + // определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + + // определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * Math.PI/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * Math.PI/180)) * B0_DCI_A1 * (-1)} + + // определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2; + var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; + var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; + var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; + var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; + B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); + + // определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2_phase; + if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1; + var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; + var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; + var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; + var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; + A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); + + // определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1_phase; + if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы Mb1_calc (плоскость 1) + Mb1_calc = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы Mb1_corner_calc (плоскость 1) + if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner_calc = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb1 плоскости 1 + Mdisb1 = Mb1_calc; // равен массе балансировочного груза + + // определение угла расположения дисбаланса Mdisb1 плоскости 1 + if ((Mb1_corner_calc + 180) > 360) { + Mdisb1_corner = (Mb1_corner_calc + 180) - 360} + else if ((Mb1_corner_calc + 180) < 0) { + Mdisb1_corner = (Mb1_corner_calc + 180) + 360} + else {Mdisb1_corner = (Mb1_corner_calc + 180)} + + // определение корректирующей массы Mb2_calc (плоскость 2) + Mb2_calc = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы Mb2_corner_calc (плоскость 2) + if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner_calc = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса Mdisb2 плоскости 2 + Mdisb2 = Mb2_calc; // равен массе балансировочного груза + + // определение угла расположения дисбаланса Mdisb2_corner плоскости 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)} + + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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)} + + + +// Координаты графиков масс + + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаалнса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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 (Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res1 = Mdisb1 * R1; + U_res2 = Mdisb2 * R2; + U_res = U_res1 + U_res2; + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)], + y: [(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), -(Math.max(A0,B0)+Math.max(A0,B0)*0.2), (Math.max(A0,B0)+Math.max(A0,B0)*0.2)] + }); + + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + 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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)], + y: [(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плосоксти 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +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("B0",B0); +gtl.log.info("B0_phase",B0_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1", U_res1); +gtl.log.info("Остаточный дисбаланс плоскости 2", U_res2); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_B0: B0, + _004_Фаза_вибр_пуска_B0: B0_phase, + + _005_Масса_дисбаланса_пл_1: Mdisb1, + _006_Угол_дисбаланса_пл_1: Mdisb1_corner, + _007_Масса_дисбаланса_пл_2: Mdisb2, + _008_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _009_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _010_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _011_Масса_баланс_груза_введён_пл_1: Mb1, + _012_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _013_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _014_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _015_Масса_баланс_груза_введён_пл_2: Mb2, + _016_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _017_Модуль_ДКВ_DCI_A1: DCI_A1, + _018_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _019_Модуль_ДКВ_DCI_A2: DCI_A2, + _020_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _021_Модуль_ДКВ_DCI_B1: DCI_B1, + _022_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _023_Модуль_ДКВ_DCI_B2: DCI_B2, + _024_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _025_Допуст_ост_дисб_г_мм: U_per, + _026_Остат_дисб_пл1_г_мм: U_res1, + _027_Остат_дисб_пл2_г_мм: U_res2, + _028_Остат_дисб_сумм_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/2 пл ДКВ - шаг 3.js b/scripts/2 пл ДКВ - шаг 3.js new file mode 100644 index 0000000..4fb12aa --- /dev/null +++ b/scripts/2 пл ДКВ - шаг 3.js @@ -0,0 +1,793 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ (использование ДКВ) ***** +// ************************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + let freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + let frequency; // граничная частота + let resolution = 0.5; // частотное разрешение + let average = 3; // количество усреднений + let overlap = 0; // наложение + let filter_A_vibr; // фильтр сигнала A вибрации + let filter_B_vibr; // фильтр сигнала B вибрации + + // Канал A + // ФИЛЬТР_A 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_A_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_1000.kind = gtl.filter_iir.butterworth; + filter_A_2_1000.type = gtl.filter_iir.bandpass; + filter_A_2_1000.order = 6; + filter_A_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_A_2_1000.width = 998; // ширина полосы фильтра + let filter_A_2_1000v = gtl.add_intg(filter_A_2_1000); // интегрирование + filter_A_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр A для виброперемещения + let filter_A_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_A_2_300s.kind = gtl.filter_iir.butterworth; + filter_A_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_A_2_300s.order = 4; + filter_A_2_300s.frequency = 151; // центральная частота + filter_A_2_300s.width = 298; // ширина полосы + + // Канал B + // ФИЛЬТР_B 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + let filter_B_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_1000.kind = gtl.filter_iir.butterworth; + filter_B_2_1000.type = gtl.filter_iir.bandpass; + filter_B_2_1000.order = 6; + filter_B_2_1000.frequency = 501; // центральная частота полосового фильтра + filter_B_2_1000.width = 998; // ширина полосы фильтра + let filter_B_2_1000v = gtl.add_intg(filter_B_2_1000); // интегрирование + filter_B_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Фильтр B для виброперемещения + let filter_B_2_300s = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter_B_2_300s.kind = gtl.filter_iir.butterworth; + filter_B_2_300s.type = gtl.filter_iir.bandpass; // полосовой фильтр + filter_B_2_300s.order = 4; + filter_B_2_300s.frequency = 151; // центральная частота + filter_B_2_300s.width = 298; // ширина полосы + + // Переключатель источника сигнала - относительная / абсолютная вибрация + // 0 - относительная вибрация (датчик виброперемещения) + // 1 - абсолютная вибрация (датчик виброускорения) + let select_vibr_sign = gtl.options.customOptions.select_vibr_sign; + + + // Выбор фильтра и параметров спектров в зависимости от значения переключателя источника сигнала вибрации + if (select_vibr_sign == 1) + { + filter_A_vibr = filter_A_2_1000v; + filter_B_vibr = filter_B_2_1000v; + frequency = 1000; + } + else if (select_vibr_sign == 0) + { + filter_A_vibr = filter_A_2_300s; + filter_B_vibr = filter_B_2_300s; + frequency = 300; + } + + // Спектр_A для получения 1-й гармоники частоты вращения + let AUSP_A = gtl.add_ausp(filter_A_vibr); // объявление переменной спектра + AUSP_A.color = 0x00ff0000; // цвет спектра + AUSP_A.name = "AUSP_A"; // имя спектра + AUSP_A.frequency = frequency; // граничная частота спектра + AUSP_A.lines = AUSP_A.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_A.average = average; // количество усреднений + AUSP_A.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_A.smoothing_factor = 100; // усреднение средней линии + AUSP_A.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_A.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_A.tolerance = AUSP_A.resolution; // диапазон поиска гармоник +/- + // СКЗ_A + let RMS_A = gtl.add_value_rms(filter_A_vibr); + RMS_A.time = 1; + RMS_A.avg_cnt = 3; + + // Спектр_B для получения 1-й гармоники частоты вращения + let AUSP_B = gtl.add_ausp(filter_B_vibr); // объявление переменной спектра + AUSP_B.color = 0x00ff0000; // цвет спектра + AUSP_B.name = "AUSP_A"; // имя спектра + AUSP_B.frequency = frequency; // граничная частота спектра + AUSP_B.lines = AUSP_B.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSP_B.average = average; // количество усреднений + AUSP_B.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSP_B.smoothing_factor = 100; // усреднение средней линии + AUSP_B.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSP_B.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSP_B.tolerance = AUSP_B.resolution; // диапазон поиска гармоник +/- + // СКЗ_B + let RMS_B = gtl.add_value_rms(filter_B_vibr); + RMS_B.time = 1; + RMS_B.avg_cnt = 3; + + + // Спектр вибрации точки A + var AUSP_A_pl = gtl.create_ausp( + { + "src" : filter_A_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки A + var pfc_A_pl = gtl.create_pfc( + { + "src0" : filter_A_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // Спектр виброскорости точки B + var AUSP_B_pl = gtl.create_ausp( + { + "src" : filter_B_vibr, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + // ФЧХ точки B + var pfc_B_pl = gtl.create_pfc( + { + "src0" : filter_B_vibr, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + +// Объявление графических плоскостей для построения графиков + 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 A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации точки A */** +let A0 = A0_; // модуль вектора начальной вибрации точки A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации точки A */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации точки A */** (конечное значение) +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации точки B */** +let B0 = B0_; // модуль вектора начальной вибрации точки B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации точки B */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации точки B */** (конечное значение) +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + + + +// Переменные вспомогательные необходимые для расчётов +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 A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSP_A.acq_time, AUSP_A_pl.acq_time, pfc_A_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSP_A.clear_harms_sets(); + AUSP_B.clear_harms_sets(); + +// Спектры вибрации точки A + let __AUSP_A_tools = gtl.create_spec_tools( + { + data: AUSP_A_pl.data, + df: AUSP_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_A = __AUSP_A_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_A.name = "F1_A (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_A_tools = gtl.create_spec_tools( + { + data: pfc_A_pl.data, + df: pfc_A_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_A = __pfc_A_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_A.name = "F1_A_phase (гарм. ряд част. вращ. точки A)"; // название гармонического ряда + +// Спектры вибрации точки B + let __AUSP_B_tools = gtl.create_spec_tools( + { + data: AUSP_B_pl.data, + df: AUSP_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_AUSP_B = __AUSP_B_tools.harms.add(freq.value, 1, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSP_B.name = "F1_B (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc_B_tools = gtl.create_spec_tools( + { + data: pfc_B_pl.data, + df: pfc_B_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row_phase_B = __pfc_B_tools.harms.add(freq.value, 1, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_phase_B.name = "F1_B_phase (гарм. ряд част. вращ. точки B)"; // название гармонического ряда + + + +// Построение графиков + // Вибрация точки A + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки A", + x: AUSP_A_pl.resolution, + y: AUSP_A_pl.data, + spec_tools: __AUSP_A_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки A", + x: pfc_A_pl.resolution, + y: pfc_A_pl.data, + spec_tools: __pfc_A_tools.to_json() + }); + let __result1_A = __AUSP_A_tools.to_json(); + let __result2_A = __pfc_A_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_A = __result1_A.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_A = __result1_A.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_A = __result2_A.harms.rows[0].harms[0].ampl; + + // Вибрация точки B + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр вибрации точки B", + x: AUSP_B_pl.resolution, + y: AUSP_B_pl.data, + spec_tools: __AUSP_B_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ вибрации точки B", + x: pfc_B_pl.resolution, + y: pfc_B_pl.data, + spec_tools: __pfc_B_tools.to_json() + }); + let __result1_B = __AUSP_B_tools.to_json(); + let __result2_B = __pfc_B_tools.to_json(); + // Амплитуда гармонического ряда частоты вращения + var F1_1_a_B = __result1_B.harms.rows[0].harms[0].ampl; + // Частота гармонического ряда частоты вращения + var F1_1_f_B = __result1_B.harms.rows[0].harms[0].freq; + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph_B = __result2_B.harms.rows[0].harms[0].ampl; + + +// Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a_A >= RMS_A * 0.4 || F1_1_a_B >= RMS_B * 0.4) // вклад оборотной гармоники в СКЗ + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 3 - контрольный пуск: + // измерение вибрации A3 и B3 после установки баалнсировочных грузов + // определение целесообразности проведения добалансировки + // из предыдущих шагов переносятся: амплитуда и фаза вибрации A0, B0 + // построение графиков A0, A3 и dA3, B0, B3 и dB3 + + + // Определение конечных значений переменных + // A3 вибрация после установки балансировочного груза в плоскость 1 + if (A3_ != 0) {A3 = A3_} // принимает значение из опций + else {A3 = F1_1_a_A} // принимает значение из спектра сигнала + if (A3_phase_ != 0) {A3_phase = A3_phase_} // принимает значение из опций + else {A3_phase = F1_1_ph_A} // принимает значение из спектра сигнала + + // B3 вибрация после установки балансировочного груза в плоскость 2 + if (B3_ != 0) {B3 = B3_} // принимает значение из опций + else {B3 = F1_1_a_B} // принимает значение из спектра сигнала + if (B3_phase_ != 0) {B3_phase = B3_phase_} // принимает значение из опций + else {B3_phase = F1_1_ph_B} // принимает значение из спектра сигнала + + + // определение угла наклона вектора 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 * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/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; + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * 3.1415/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * 3.1415/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * 3.1415/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * 3.1415/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / 3.1415)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * 3.1415/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * 3.1415/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * 3.1415/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * 3.1415/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / 3.1415)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)], + y: [(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)] + }); + + +gtl.log.info("RMS_A",RMS_A.value); +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("F1_1_ph_A (фаза)",F1_1_ph_A); +gtl.log.info("F1_1_a_A (ампл)",F1_1_a_A); +gtl.log.info("F1_1_f_A (част)",F1_1_f_A); +gtl.log.info("RMS_B",RMS_B.value); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); +gtl.log.info("F1_1_ph_B (фаза)",F1_1_ph_B); +gtl.log.info("F1_1_a_B (ампл)",F1_1_a_B); +gtl.log.info("F1_1_f_B (част)",F1_1_f_B); +gtl.log.info("Частота вращения, Гц", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); +gtl.log.info("Необходимость проведения балансировки",test_balance); + + + // Выдача результата (results) + let __result = { + + _001_Ампл_гарм_1F1_A: F1_1_a_A, + _002_Фаза_част_вращ_F1_A: F1_1_ph_A, + _003_Ампл_вибр_пуска_A0: A0, + _004_Фаза_вибр_пуска_A0: A0_phase, + _005_Ампл_вибр_пуска_A3: A3, + _006_Фаза_вибр_пуска_A3: A3_phase, + _007_СКЗ_вибр_A: RMS_A.value, + + _008_Ампл_гарм_1F1_B: F1_1_a_B, + _009_Фаза_част_вращ_F1_B: F1_1_ph_B, + _010_Ампл_вибр_пуска_B0: B0, + _011_Фаза_вибр_пуска_B0: B0_phase, + _012_Ампл_вибр_пуска_B3: B3, + _013_Фаза_вибр_пуска_B3: B3_phase, + _014_СКЗ_вибр_B: RMS_B.value, + + _015_Частота_вращения_F1: freq.value, + _016_Нестаб_част_вращ: instability*100, + _017_Тестирование: test_balance, + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/2 пл ДКВ - шаг 4.js b/scripts/2 пл ДКВ - шаг 4.js new file mode 100644 index 0000000..2a1bad9 --- /dev/null +++ b/scripts/2 пл ДКВ - шаг 4.js @@ -0,0 +1,1385 @@ +"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 R1 = gtl.options.customOptions.R1; // радиус установки грузов на плоскости 1 ** (для вычисления массы пробного груза) +let R2 = gtl.options.customOptions.R2; // радиус установки грузов на плоскости 2 ** (для вычисления массы пробного груза) +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_res12; // остаточный дисбаланс плоскости 1 (после балансировки) *** (ГОСТ 1940) +let U_res22; // остаточный дисбаланс плоскости 2 (после балансировки) *** (ГОСТ 1940) +let U_res; // остаточный дисбаланс суммарный *** (ГОСТ 1940) +let L_A = gtl.options.customOptions.L_A;// расстояние от центра масс до плоскости подшипника A +let L_B = gtl.options.customOptions.L_B;// расстояние от центра масс до плоскости подшипника B +let L = gtl.options.customOptions.L; // расстояние между подшипниковыми опорами +let b = gtl.options.customOptions.b; // расстояние между плоскостями коррекции +let b_A = gtl.options.customOptions.b_A;// расстояние от плоскости коррекции 1 до подшипниковой опоры A +let b_B = gtl.options.customOptions.b_B;// расстояние от плоскости коррекции 2 до подшипниковой опоры B + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0 = A0_; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +let A0_phase = A0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3 = A3_; // модуль вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let A3_phase_ = gtl.options.customOptions.A3_phase; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** +let A3_phase = A3_phase_; // фаза вектора вибрации точки A после установки балансировочного груза в плоскость 1 */** (конечное значение) +let dA3; // модуль вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** +let dA3_phase; // фаза вектора дельты вибрации точки A после установки балансировочного груза в плоскость 1 *** + +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации */** +let B0 = B0_; // модуль вектора начальной вибрации */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации */** +let B0_phase = B0_phase_; // фаза вектора начальной вибрации */** (конечное значение) +let B3_ = gtl.options.customOptions.B3; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3 = B3_; // модуль вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let B3_phase_ = gtl.options.customOptions.B3_phase; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** +let B3_phase = B3_phase_; // фаза вектора вибрации точки B после установки балансировочного груза в плоскость 2 */** (конечное значение) +let dB3; // модуль вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** +let dB3_phase; // фаза вектора дельты вибрации точки B после установки балансировочного груза в плоскость 2 *** + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1 = DCI_A1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** +let DCI_A1_phase = DCI_A1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1 = DCI_B1_; // модуль (мм/с/граммы) ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** +let DCI_B1_phase = DCI_B1_phase_; // фаза ДКВ груза m_test_1 в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2 = DCI_A2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** +let DCI_A2_phase = DCI_A2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2 = DCI_B2_; // модуль (мм/с/граммы) ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** +let DCI_B2_phase = DCI_B2_phase_; // фаза ДКВ груза m_test_2 в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +let Mb1 = gtl.options.customOptions.Mb1; // модуль введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_corner = gtl.options.customOptions.Mb1_corner; // угол введённого вектора балансировочного груза в плоскости 1 ** (конечное значение) +let Mb1_calc = gtl.options.customOptions.Mb1_calc; // модуль расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb1_corner_calc = gtl.options.customOptions.Mb1_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 1 *** (конечное значение) +let Mb2 = gtl.options.customOptions.Mb2; // модуль введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_corner = gtl.options.customOptions.Mb2_corner; // угол введённого вектора балансировочного груза в плоскости 2 ** (конечное значение) +let Mb2_calc = gtl.options.customOptions.Mb2_calc; // модуль расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) +let Mb2_corner_calc = gtl.options.customOptions.Mb2_corner_calc;// угол расчётного вектора балансировочного груза в плоскости 2 *** (конечное значение) + +let Mdisb1 = gtl.options.customOptions.Mdisb1; // масса дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb1_corner = gtl.options.customOptions.Mdisb1_corner;// угол расположения дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb2 = gtl.options.customOptions.Mdisb2; // масса дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb2_corner = gtl.options.customOptions.Mdisb2_corner;// угол расположения дисбаланса в плоскости 2 *** (конечное значение) + +let Mb12_calc; // модуль расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb12_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 1 *** (конечное значение) +let Mb22_calc; // модуль расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) +let Mb22_corner_calc; // угол расчётного вектора груза для добалансировки в плоскости 2 *** (конечное значение) + +let Mdisb12; // масса остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb12_corner; // угол расположения остаточного дисбаланса в плоскости 1 *** (конечное значение) +let Mdisb22; // масса остаточного дисбаланса в плоскости 2 *** (конечное значение) +let Mdisb22_corner; // угол расположения остаточного дисбаланса в плоскости 2 *** (конечное значение) + +// Переменные вспомогательные необходимые для расчётов и визуализации +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 A3_phase_X; // угол наклона вектора A3 к оси X +let A3_phase_Y; // угол наклона вектора A3 к оси Y +let A3_1_X; // начальная координата вектора A3 по оси X +let A3_2_X; // конечная координата вектора A3 по оси X +let A3_1_Y; // начальная координата вектора A3 по оси Y +let A3_2_Y; // конечная координата вектора A3 по оси Y + +let dA3_1_X; // начальная координата вектора dA3 по оси X +let dA3_2_X; // конечная координата вектора dA3 по оси X +let dA3_1_Y; // начальная координата вектора dA3 по оси Y +let dA3_2_Y; // конечная координата вектора dA3 по оси Y + +let B0_phase_X; // угол наклона вектора B0 к оси X +let B0_phase_Y; // угол наклона вектора B0 к оси Y +let B0_1_X; // начальная координата вектора B0 по оси X +let B0_2_X; // конечная координата вектора B0 по оси X +let B0_1_Y; // начальная координата вектора B0 по оси Y +let B0_2_Y; // конечная координата вектора B0 по оси Y + +let B3_phase_X; // угол наклона вектора B3 к оси X +let B3_phase_Y; // угол наклона вектора B3 к оси Y +let B3_1_X; // начальная координата вектора B3 по оси X +let B3_2_X; // конечная координата вектора B3 по оси X +let B3_1_Y; // начальная координата вектора B3 по оси Y +let B3_2_Y; // конечная координата вектора B3 по оси Y + +let dB3_1_X; // начальная координата вектора dB3 по оси X +let dB3_2_X; // конечная координата вектора dB3 по оси X +let dB3_1_Y; // начальная координата вектора dB3 по оси Y +let dB3_2_Y; // конечная координата вектора dB3 по оси Y + +let Mb1_corner_calc_X; // угол наклона расчётного вектора Mb1_calc к оси X +let Mb1_corner_calc_Y; // угол наклона расчётного вектора Mb1_calc к оси Y +let Mb1_1_calc_X; // начальная координата расчётного вектора Mb1_calc по оси X +let Mb1_2_calc_X; // конечная координата расчётного вектора Mb1_calc по оси X +let Mb1_1_calc_Y; // начальная координата расчётного вектора Mb1_calc по оси Y +let Mb1_2_calc_Y; // конечная координата расчётного вектора Mb1_calc по оси Y + +let Mb1_corner_X; // угол наклона вектора Mb1 к оси X +let Mb1_corner_Y; // угол наклона вектора Mb1 к оси Y +let Mb1_1_X; // начальная координата вектора Mb1 по оси X +let Mb1_2_X; // конечная координата вектора Mb1 по оси X +let Mb1_1_Y; // начальная координата вектора Mb1 по оси Y +let Mb1_2_Y; // конечная координата вектора Mb1 по оси Y + +let Mdisb1_corner_X; // угол наклона вектора Mdisb1 к оси X +let Mdisb1_corner_Y; // угол наклона вектора Mdisb1 к оси Y +let Mdisb1_1_X; // начальная координата вектора Mdisb1 по оси X +let Mdisb1_2_X; // конечная координата вектора Mdisb1 по оси X +let Mdisb1_1_Y; // начальная координата вектора Mdisb1 по оси Y +let Mdisb1_2_Y; // конечная координата вектора Mdisb1 по оси Y + +let Mb2_corner_calc_X; // угол наклона расчётного вектора Mb2_calc к оси X +let Mb2_corner_calc_Y; // угол наклона расчётного вектора Mb2_calc к оси Y +let Mb2_1_calc_X; // начальная координата расчётного вектора Mb2_calc по оси X +let Mb2_2_calc_X; // конечная координата расчётного вектора Mb2_calc по оси X +let Mb2_1_calc_Y; // начальная координата расчётного вектора Mb2_calc по оси Y +let Mb2_2_calc_Y; // конечная координата расчётного вектора Mb2_calc по оси Y + +let Mb2_corner_X; // угол наклона вектора Mb2 к оси X +let Mb2_corner_Y; // угол наклона вектора Mb2 к оси Y +let Mb2_1_X; // начальная координата вектора Mb2 по оси X +let Mb2_2_X; // конечная координата вектора Mb2 по оси X +let Mb2_1_Y; // начальная координата вектора Mb2 по оси Y +let Mb2_2_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 + +let Mdisb12_corner_X; // угол наклона вектора Mdisb12 к оси X (плоскость 1) +let Mdisb12_corner_Y; // угол наклона вектора Mdisb12 к оси Y (плоскость 1) +let Mdisb12_1_X; // начальная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_2_X; // конечная координата вектора Mdisb12 по оси X (плоскость 1) +let Mdisb12_1_Y; // начальная координата вектора Mdisb12 по оси Y (плоскость 1) +let Mdisb12_2_Y; // конечная координата вектора Mdisb12 по оси Y (плоскость 1) + +let Mb12_corner_calc_X; // угол наклона расчётного вектора Mb12_calc к оси X (плоскость 1) +let Mb12_corner_calc_Y; // угол наклона расчётного вектора Mb12_calc к оси Y (плоскость 1) +let Mb12_1_calc_X; // начальная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_2_calc_X; // конечная координата расчётного вектора Mb12_calc по оси X (плоскость 1) +let Mb12_1_calc_Y; // начальная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) +let Mb12_2_calc_Y; // конечная координата расчётного вектора Mb12_calc по оси Y (плоскость 1) + +let Mdisb22_corner_X; // угол наклона вектора Mdisb22 к оси X (плоскость 2) +let Mdisb22_corner_Y; // угол наклона вектора Mdisb22 к оси Y (плоскость 2) +let Mdisb22_1_X; // начальная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_2_X; // конечная координата вектора Mdisb22 по оси X (плоскость 2) +let Mdisb22_1_Y; // начальная координата вектора Mdisb22 по оси Y (плоскость 2) +let Mdisb22_2_Y; // конечная координата вектора Mdisb22 по оси Y (плоскость 2) + +let Mb22_corner_calc_X; // угол наклона расчётного вектора Mb22_calc к оси X (плоскость 2) +let Mb22_corner_calc_Y; // угол наклона расчётного вектора Mb22_calc к оси Y (плоскость 2) +let Mb22_1_calc_X; // начальная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_2_calc_X; // конечная координата расчётного вектора Mb22_calc по оси X (плоскость 2) +let Mb22_1_calc_Y; // начальная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) +let Mb22_2_calc_Y; // конечная координата расчётного вектора Mb22_calc по оси Y (плоскость 2) + +// ***** РАСЧЁТЫ ***** +// 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; + +function diagnose() { + +// РАСЧЁТЫ (балансировочный калькулятор) +// ШАГ 4 - расположение дисбалансов: + // из предыдущих шагов переносится: + // начальная вибрация A0, B0 + // вибрация после установки балансировчных грузов A3, B3 + // массы и углы расположения дисбалансов Mdisb1, Mdisb2 + // массы и углы расположения расчётных балансировочных грузов Mb1_calc, Mb2_calc + // массы и углы расположения выбранных балансировочных грузов Mb1, Mb2 + // массы и углы расположения остаточных дисбалансов Mdisb12, Mdisb22 + // массы и углы расположения грузов для добалансировки Mb12_calc, Mb22_calc + // построение графика вибрации: A0, A3, dA3, + // B0, B3, dB3 + // построение графиков расположения дисбалансов и балансировочных грузов: Mb1_calc, Mb2_calc, Mb1, Mb2, + // Mdisb1, Mdisb2, Mb12_calc, Mb22_calc, Mdisb12, Mdisb22 + + // определение угла наклона вектора 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; + + // определение угла наклона вектора A3 к осям X и Y + if (A3_phase <= 90) { + A3_phase_X = 90 - A3_phase} + if (A3_phase <= 180) { + A3_phase_X = A3_phase - 90} + if (A3_phase <= 270) { + A3_phase_X = 270 - A3_phase} + if (A3_phase <= 360) { + A3_phase_X = A3_phase - 270} + if (A3_phase <= 90) { + A3_phase_Y = A3_phase} + if (A3_phase <= 180) { + A3_phase_Y = 180 - A3_phase} + if (A3_phase <= 270) { + A3_phase_Y = A3_phase - 180} + if (A3_phase <= 360) { + A3_phase_Y = 360 - A3_phase} + // определение координат вектора A3 + var xA3_array = []; // массив координат точек вектора A3 по оси X + var yA3_array = []; // массив координат точек вектора A3 по оси Y + A3_1_X = 0; + if (A3_phase <= 180) {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 + } else {A3_2_X = Math.abs(Math.cos(A3_phase_X * Math.PI/180)) * A3 * (-1)} + A3_1_Y = 0; + if (A3_phase <= 90 || A3_phase >= 270) {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 + } else {A3_2_Y = Math.abs(Math.cos(A3_phase_Y * Math.PI/180)) * A3 * (-1)} + xA3_array[0] = A3_1_X; + xA3_array[1] = A3_2_X; + yA3_array[0] = A3_1_Y; + yA3_array[1] = A3_2_Y; + + // определение модуля вектора dA3 + var xdA3_array = []; // массив координат точек вектора dA3 по оси X + var ydA3_array = []; // массив координат точек вектора dA3 по оси Y + dA3_1_X = A0_2_X; + dA3_2_X = A3_2_X; + dA3_1_Y = A0_2_Y; + dA3_2_Y = A3_2_Y; + dA3 = Math.sqrt(Math.pow(dA3_2_X - dA3_1_X, 2) + Math.pow(dA3_2_Y - dA3_1_Y, 2)) + xdA3_array[0] = dA3_1_X; + xdA3_array[1] = dA3_2_X; + ydA3_array[0] = dA3_1_Y; + ydA3_array[1] = dA3_2_Y; + // определение фазы вектора dA3 + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 180 + (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y > dA3_1_Y) && (dA3_2_X < dA3_1_X)) { + dA3_phase = 360 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if ((dA3_2_Y < dA3_1_Y) && (dA3_2_X > dA3_1_X)) { + dA3_phase = 180 - (((Math.acos((Math.abs(dA3_2_Y - dA3_1_Y)) / dA3)) * 180 ) / Math.PI)} + if (dA3_phase > 360) {dA3_phase = dA3_phase - 360} + + + // определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} + // определение координат вектора B0 + var xB0_array = []; // массив координат точек вектора B0 по оси X + var yB0_array = []; // массив координат точек вектора B0 по оси Y + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * Math.PI/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * Math.PI/180)) * B0 * (-1)} + xB0_array[0] = B0_1_X; + xB0_array[1] = B0_2_X; + yB0_array[0] = B0_1_Y; + yB0_array[1] = B0_2_Y; + + // определение угла наклона вектора B3 к осям X и Y + if (B3_phase <= 90) { + B3_phase_X = 90 - B3_phase} + if (B3_phase <= 180) { + B3_phase_X = B3_phase - 90} + if (B3_phase <= 270) { + B3_phase_X = 270 - B3_phase} + if (B3_phase <= 360) { + B3_phase_X = B3_phase - 270} + if (B3_phase <= 90) { + B3_phase_Y = B3_phase} + if (B3_phase <= 180) { + B3_phase_Y = 180 - B3_phase} + if (B3_phase <= 270) { + B3_phase_Y = B3_phase - 180} + if (B3_phase <= 360) { + B3_phase_Y = 360 - B3_phase} + // определение координат вектора B3 + var xB3_array = []; // массив координат точек вектора B3 по оси X + var yB3_array = []; // массив координат точек вектора B3 по оси Y + B3_1_X = 0; + if (B3_phase <= 180) {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 + } else {B3_2_X = Math.abs(Math.cos(B3_phase_X * Math.PI/180)) * B3 * (-1)} + B3_1_Y = 0; + if (B3_phase <= 90 || B3_phase >= 270) {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 + } else {B3_2_Y = Math.abs(Math.cos(B3_phase_Y * Math.PI/180)) * B3 * (-1)} + xB3_array[0] = B3_1_X; + xB3_array[1] = B3_2_X; + yB3_array[0] = B3_1_Y; + yB3_array[1] = B3_2_Y; + + // определение модуля вектора dB3 + var xdB3_array = []; // массив координат точек вектора dB3 по оси X + var ydB3_array = []; // массив координат точек вектора dB3 по оси Y + dB3_1_X = B0_2_X; + dB3_2_X = B3_2_X; + dB3_1_Y = B0_2_Y; + dB3_2_Y = B3_2_Y; + dB3 = Math.sqrt(Math.pow(dB3_2_X - dB3_1_X, 2) + Math.pow(dB3_2_Y - dB3_1_Y, 2)) + xdB3_array[0] = dB3_1_X; + xdB3_array[1] = dB3_2_X; + ydB3_array[0] = dB3_1_Y; + ydB3_array[1] = dB3_2_Y; + // определение фазы вектора dB3 + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 180 + (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y > dB3_1_Y) && (dB3_2_X < dB3_1_X)) { + dB3_phase = 360 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if ((dB3_2_Y < dB3_1_Y) && (dB3_2_X > dB3_1_X)) { + dB3_phase = 180 - (((Math.acos((Math.abs(dB3_2_Y - dB3_1_Y)) / dB3)) * 180 ) / Math.PI)} + if (dB3_phase > 360) {dB3_phase = dB3_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,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.sin((i) * Math.PI / 180))); + yV_array.push(y0V + (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + +// Координаты дисбалансов и балансировочных грузов + + // определение угла наклона вектора Mb1 к осям X и Y + if (Mb1_corner <= 90) { + Mb1_corner_X = 90 - Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_X = Mb1_corner - 90} + if (Mb1_corner <= 270) { + Mb1_corner_X = 270 - Mb1_corner} + if (Mb1_corner <= 360) { + Mb1_corner_X = Mb1_corner - 270} + if (Mb1_corner <= 90) { + Mb1_corner_Y = Mb1_corner} + if (Mb1_corner <= 180) { + Mb1_corner_Y = 180 - Mb1_corner} + if (Mb1_corner <= 270) { + Mb1_corner_Y = Mb1_corner - 180} + if (Mb1_corner <= 360) { + Mb1_corner_Y = 360 - Mb1_corner} + // определение координат вектора Mb1 + Mb1_1_X = 0; + if (Mb1_corner <= 180) {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1 * (-1) + } else {Mb1_2_X = Math.abs(Math.cos(Mb1_corner_X * Math.PI/180)) * Mb1} + Mb1_1_Y = 0; + if (Mb1_corner <= 90 || Mb1_corner >= 270) {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 + } else {Mb1_2_Y = Math.abs(Math.cos(Mb1_corner_Y * Math.PI/180)) * Mb1 * (-1)} + + // определение угла наклона вектора Mb2 к осям X и Y + if (Mb2_corner <= 90) { + Mb2_corner_X = 90 - Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_X = Mb2_corner - 90} + if (Mb2_corner <= 270) { + Mb2_corner_X = 270 - Mb2_corner} + if (Mb2_corner <= 360) { + Mb2_corner_X = Mb2_corner - 270} + if (Mb2_corner <= 90) { + Mb2_corner_Y = Mb2_corner} + if (Mb2_corner <= 180) { + Mb2_corner_Y = 180 - Mb2_corner} + if (Mb2_corner <= 270) { + Mb2_corner_Y = Mb2_corner - 180} + if (Mb2_corner <= 360) { + Mb2_corner_Y = 360 - Mb2_corner} + // определение координат вектора Mb2 + Mb2_1_X = 0; + if (Mb2_corner <= 180) {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2 * (-1) + } else {Mb2_2_X = Math.abs(Math.cos(Mb2_corner_X * Math.PI/180)) * Mb2} + Mb2_1_Y = 0; + if (Mb2_corner <= 90 || Mb2_corner >= 270) {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 + } else {Mb2_2_Y = Math.abs(Math.cos(Mb2_corner_Y * Math.PI/180)) * Mb2 * (-1)} + + // определение угла наклона вектора Mdisb1 к осям X и Y + if (Mdisb1_corner <= 90) { + Mdisb1_corner_X = 90 - Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_X = Mdisb1_corner - 90} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_X = 270 - Mdisb1_corner} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_X = Mdisb1_corner - 270} + if (Mdisb1_corner <= 90) { + Mdisb1_corner_Y = Mdisb1_corner} + if (Mdisb1_corner <= 180) { + Mdisb1_corner_Y = 180 - Mdisb1_corner} + if (Mdisb1_corner <= 270) { + Mdisb1_corner_Y = Mdisb1_corner - 180} + if (Mdisb1_corner <= 360) { + Mdisb1_corner_Y = 360 - Mdisb1_corner} + // определение координат вектора Mdisb1 + Mdisb1_1_X = 0; + if (Mdisb1_corner <= 180) {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1 * (-1) + } else {Mdisb1_2_X = Math.abs(Math.cos(Mdisb1_corner_X * Math.PI/180)) * Mdisb1} + Mdisb1_1_Y = 0; + if (Mdisb1_corner <= 90 || Mdisb1_corner >= 270) {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 + } else {Mdisb1_2_Y = Math.abs(Math.cos(Mdisb1_corner_Y * Math.PI/180)) * Mdisb1 * (-1)} + + // определение угла наклона вектора 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)} + + // определение угла наклона вектора Mb1_calc к осям X и Y + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_X = 90 - Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_X = Mb1_corner_calc - 90} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_X = 270 - Mb1_corner_calc} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_X = Mb1_corner_calc - 270} + if (Mb1_corner_calc <= 90) { + Mb1_corner_calc_Y = Mb1_corner_calc} + if (Mb1_corner_calc <= 180) { + Mb1_corner_calc_Y = 180 - Mb1_corner_calc} + if (Mb1_corner_calc <= 270) { + Mb1_corner_calc_Y = Mb1_corner_calc - 180} + if (Mb1_corner_calc <= 360) { + Mb1_corner_calc_Y = 360 - Mb1_corner_calc} + // определение координат вектора Mb1_calc + Mb1_1_calc_X = 0; + if (Mb1_corner_calc <= 180) {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc * (-1) + } else {Mb1_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb1_calc} + Mb1_1_calc_Y = 0; + if (Mb1_corner_calc <= 90 || Mb1_corner_calc >= 270) {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc + } else {Mb1_2_calc_Y = Math.abs(Math.cos(Mb1_corner_calc_Y * Math.PI/180)) * Mb1_calc * (-1)} + + // определение угла наклона вектора Mb2_calc к осям 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_calc + 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)} + + + +// Дисбалансы и балансировочные грузы ПОСЛЕ балансировки (Mb12, Mdisb12, Mb22, Mdisb22) + + // формулы для определение векторов грузов для добалансировки + // Mb12_calc = (B3 * DCI_A2 - A3 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // Mb22_calc = (A3 * DCI_B1 - B3 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) + // ... вычисления этих формул делим на этапы + // 1) В3 * DCI_A2 + // 2) A3 * DCI_B2 + // 3) A3 * DCI_B1 + // 4) B3 * DCI_A1 + // 5) В3 * DCI_A2 - A3 * DCI_B2 + // 6) A3 * DCI_B1 - B3 * DCI_A1 + // 7) DCI_A1 * DCI_B2 + // 8) DCI_B1 * DCI_A2 + // 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + + // определение модуля вектора B3 * DCI_A2 + var B3_DCI_A2 = B3 * DCI_A2; + + // определение фазы вектора В0 * DCI_A2 + var B3_DCI_A2_phase; + if ((B3_phase + DCI_A2_phase) >360) { + B3_DCI_A2_phase = B3_phase + DCI_A2_phase - 360 + } else {B3_DCI_A2_phase = B3_phase + DCI_A2_phase} + + // определение угла наклона вектора В3 * DCI_A2 к осям X и Y + var B3_DCI_A2_phase_X; + var B3_DCI_A2_phase_Y; + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_X = 90 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 90} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_X = 270 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_X = B3_DCI_A2_phase - 270} + if (B3_DCI_A2_phase <= 90) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 180) { + B3_DCI_A2_phase_Y = 180 - B3_DCI_A2_phase} + if (B3_DCI_A2_phase <= 270) { + B3_DCI_A2_phase_Y = B3_DCI_A2_phase - 180} + if (B3_DCI_A2_phase <= 360) { + B3_DCI_A2_phase_Y = 360 - B3_DCI_A2_phase} + + // определение координат вектора В3 * DCI_A2 + var B3_DCI_A2_1_X = 0; + var B3_DCI_A2_2_X; + if (B3_DCI_A2_phase <= 180) {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_X = Math.abs(Math.cos(B3_DCI_A2_phase_X * Math.PI/180)) * B3_DCI_A2 * (-1)} + var B3_DCI_A2_1_Y = 0; + var B3_DCI_A2_2_Y; + if (B3_DCI_A2_phase <= 90 || B3_DCI_A2_phase >= 270) {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 + } else {B3_DCI_A2_2_Y = Math.abs(Math.cos(B3_DCI_A2_phase_Y * Math.PI/180)) * B3_DCI_A2 * (-1)} + + // определение модуля вектора A3 * DCI_B2 + var A3_DCI_B2 = A3 * DCI_B2; + + // определение фазы вектора A3 * DCI_B2 + var A3_DCI_B2_phase; + if ((A3_phase + DCI_B2_phase) >360) { + A3_DCI_B2_phase = A3_phase + DCI_B2_phase - 360 + } else {A3_DCI_B2_phase = A3_phase + DCI_B2_phase} + + // определение угла наклона вектора A3 * DCI_B2 к осям X и Y + var A3_DCI_B2_phase_X; + var A3_DCI_B2_phase_Y; + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_X = 90 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 90} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_X = 270 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_X = A3_DCI_B2_phase - 270} + if (A3_DCI_B2_phase <= 90) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 180) { + A3_DCI_B2_phase_Y = 180 - A3_DCI_B2_phase} + if (A3_DCI_B2_phase <= 270) { + A3_DCI_B2_phase_Y = A3_DCI_B2_phase - 180} + if (A3_DCI_B2_phase <= 360) { + A3_DCI_B2_phase_Y = 360 - A3_DCI_B2_phase} + + // определение координат вектора A3 * DCI_B2 + var A3_DCI_B2_1_X = 0; + var A3_DCI_B2_2_X; + if (A3_DCI_B2_phase <= 180) {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_X = Math.abs(Math.cos(A3_DCI_B2_phase_X * Math.PI/180)) * A3_DCI_B2 * (-1)} + var A3_DCI_B2_1_Y = 0; + var A3_DCI_B2_2_Y; + if (A3_DCI_B2_phase <= 90 || A3_DCI_B2_phase >= 270) {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 + } else {A3_DCI_B2_2_Y = Math.abs(Math.cos(A3_DCI_B2_phase_Y * Math.PI/180)) * A3_DCI_B2 * (-1)} + + // определение модуля вектора A3 * DCI_B1 + var A3_DCI_B1 = A3 * DCI_B1; + + // определение фазы вектора A3 * DCI_B1 + var A3_DCI_B1_phase; + if ((A3_phase + DCI_B1_phase) >360) { + A3_DCI_B1_phase = A3_phase + DCI_B1_phase - 360 + } else {A3_DCI_B1_phase = A3_phase + DCI_B1_phase} + + // определение угла наклона вектора A3 * DCI_B1 к осям X и Y + var A3_DCI_B1_phase_X; + var A3_DCI_B1_phase_Y; + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_X = 90 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 90} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_X = 270 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_X = A3_DCI_B1_phase - 270} + if (A3_DCI_B1_phase <= 90) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 180) { + A3_DCI_B1_phase_Y = 180 - A3_DCI_B1_phase} + if (A3_DCI_B1_phase <= 270) { + A3_DCI_B1_phase_Y = A3_DCI_B1_phase - 180} + if (A3_DCI_B1_phase <= 360) { + A3_DCI_B1_phase_Y = 360 - A3_DCI_B1_phase} + + // определение координат вектора A3 * DCI_B1 + var A3_DCI_B1_1_X = 0; + var A3_DCI_B1_2_X; + if (A3_DCI_B1_phase <= 180) {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_X = Math.abs(Math.cos(A3_DCI_B1_phase_X * Math.PI/180)) * A3_DCI_B1 * (-1)} + var A3_DCI_B1_1_Y = 0; + var A3_DCI_B1_2_Y; + if (A3_DCI_B1_phase <= 90 || A3_DCI_B1_phase >= 270) {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 + } else {A3_DCI_B1_2_Y = Math.abs(Math.cos(A3_DCI_B1_phase_Y * Math.PI/180)) * A3_DCI_B1 * (-1)} + + // определение модуля вектора B3 * DCI_A1 + var B3_DCI_A1 = B3 * DCI_A1; + + // определение фазы вектора A3 * DCI_B1 + var B3_DCI_A1_phase; + if ((B3_phase + DCI_A1_phase) >360) { + B3_DCI_A1_phase = B3_phase + DCI_A1_phase - 360 + } else {B3_DCI_A1_phase = B3_phase + DCI_A1_phase} + + // определение угла наклона вектора B3 * DCI_A1 к осям X и Y + var B3_DCI_A1_phase_X; + var B3_DCI_A1_phase_Y; + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_X = 90 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 90} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_X = 270 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_X = B3_DCI_A1_phase - 270} + if (B3_DCI_A1_phase <= 90) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 180) { + B3_DCI_A1_phase_Y = 180 - B3_DCI_A1_phase} + if (B3_DCI_A1_phase <= 270) { + B3_DCI_A1_phase_Y = B3_DCI_A1_phase - 180} + if (B3_DCI_A1_phase <= 360) { + B3_DCI_A1_phase_Y = 360 - B3_DCI_A1_phase} + + // определение координат вектора B3 * DCI_A1 + var B3_DCI_A1_1_X = 0; + var B3_DCI_A1_2_X; + if (B3_DCI_A1_phase <= 180) {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_X = Math.abs(Math.cos(B3_DCI_A1_phase_X * Math.PI/180)) * B3_DCI_A1 * (-1)} + var B3_DCI_A1_1_Y = 0; + var B3_DCI_A1_2_Y; + if (B3_DCI_A1_phase <= 90 || B3_DCI_A1_phase >= 270) {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 + } else {B3_DCI_A1_2_Y = Math.abs(Math.cos(B3_DCI_A1_phase_Y * Math.PI/180)) * B3_DCI_A1 * (-1)} + + + // определение модуля вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2; + var B3_DCIA2_A3_DCIB2_1_X = A3_DCI_B2_2_X; + var B3_DCIA2_A3_DCIB2_1_Y = A3_DCI_B2_2_Y; + var B3_DCIA2_A3_DCIB2_2_X = B3_DCI_A2_2_X; + var B3_DCIA2_A3_DCIB2_2_Y = B3_DCI_A2_2_Y; + B3_DCIA2_A3_DCIB2 = Math.sqrt(Math.pow(B3_DCIA2_A3_DCIB2_2_X - B3_DCIA2_A3_DCIB2_1_X, 2) + Math.pow(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y, 2)); + + // определение фазы вектора B3 * DCI_A2 - A3 * DCI_B2 + var B3_DCIA2_A3_DCIB2_phase; + if ((B3_DCIA2_A3_DCIB2_2_X > B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X <= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI) + 180} + if ((B3_DCIA2_A3_DCIB2_2_X < B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y >= B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 360 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + if ((B3_DCIA2_A3_DCIB2_2_X >= B3_DCIA2_A3_DCIB2_1_X) && (B3_DCIA2_A3_DCIB2_2_Y < B3_DCIA2_A3_DCIB2_1_Y)) { + B3_DCIA2_A3_DCIB2_phase = 180 - (((Math.acos((Math.abs(B3_DCIA2_A3_DCIB2_2_Y - B3_DCIA2_A3_DCIB2_1_Y)) / B3_DCIA2_A3_DCIB2)) * 180 ) / Math.PI)} + + // определение модуля вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1; + var A3_DCIB1_B3_DCIA1_1_X = B3_DCI_A1_2_X; + var A3_DCIB1_B3_DCIA1_1_Y = B3_DCI_A1_2_Y; + var A3_DCIB1_B3_DCIA1_2_X = A3_DCI_B1_2_X; + var A3_DCIB1_B3_DCIA1_2_Y = A3_DCI_B1_2_Y; + A3_DCIB1_B3_DCIA1 = Math.sqrt(Math.pow(A3_DCIB1_B3_DCIA1_2_X - A3_DCIB1_B3_DCIA1_1_X, 2) + Math.pow(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y, 2)); + + // определение фазы вектора A3 * DCI_B1 - B3 * DCI_A1 + var A3_DCIB1_B3_DCIA1_phase; + if ((A3_DCIB1_B3_DCIA1_2_X > A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X <= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI) + 180} + if ((A3_DCIB1_B3_DCIA1_2_X < A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y >= A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 360 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + if ((A3_DCIB1_B3_DCIA1_2_X >= A3_DCIB1_B3_DCIA1_1_X) && (A3_DCIB1_B3_DCIA1_2_Y < A3_DCIB1_B3_DCIA1_1_Y)) { + A3_DCIB1_B3_DCIA1_phase = 180 - (((Math.acos((Math.abs(A3_DCIB1_B3_DCIA1_2_Y - A3_DCIB1_B3_DCIA1_1_Y)) / A3_DCIB1_B3_DCIA1)) * 180 ) / Math.PI)} + + // определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + + // определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + + // определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + + // определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * Math.PI/180)) * DCIA1_DCIB2 * (-1)} + + // определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + + // определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + + // определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + + // определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * Math.PI/180)) * DCIB1_DCIA2 * (-1)} + + // определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + + // определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / Math.PI)} + + // определение корректирующей массы для добалансировки Mb12_calc плоскости 1 + Mb12_calc = B3_DCIA2_A3_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb12_corner_calc плоскости 1 + if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb12_corner_calc = (B3_DCIA2_A3_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb12 плоскости 1 + Mdisb12 = Mb12_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb1 плоскости 1 + if ((Mb12_corner_calc + 180) > 360) { + Mdisb12_corner = (Mb12_corner_calc + 180) - 360} + else if ((Mb12_corner_calc + 180) < 0) { + Mdisb12_corner = (Mb12_corner_calc + 180) + 360} + else {Mdisb12_corner = (Mb12_corner_calc + 180)} + + // определение корректирующей массы для добалансировки Mb22_calc плоскости 2 + Mb22_calc = A3_DCIB1_B3_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + + // опредение угла установки корректирующей массы для добалансировки Mb22_corner_calc плоскости 2 + if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb22_corner_calc = (A3_DCIB1_B3_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы остаточного дисбаланса Mdisb22 плоскости 2 + Mdisb22 = Mb22_calc; // равен массе балансировочного груза + + // определение угла расположения остаточного дисбаланса Mdisb22_corner плоскости 2 + if ((Mb22_corner_calc + 180) > 360) { + Mdisb22_corner = (Mb22_corner_calc + 180) - 360} + else if ((Mb22_corner_calc + 180) < 0) { + Mdisb22_corner = (Mb22_corner_calc + 180) + 360} + else {Mdisb22_corner = (Mb22_corner_calc + 180)} + +// Координаты остаточных дисбалансов и грузов для добалансировки + + // определение угла наклона вектора Mb12_calc к осям X и Y + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_X = 90 - Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_X = Mb12_corner_calc - 90} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_X = 270 - Mb12_corner_calc} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_X = Mb12_corner_calc - 270} + if (Mb12_corner_calc <= 90) { + Mb12_corner_calc_Y = Mb12_corner_calc} + if (Mb12_corner_calc <= 180) { + Mb12_corner_calc_Y = 180 - Mb12_corner_calc} + if (Mb12_corner_calc <= 270) { + Mb12_corner_calc_Y = Mb12_corner_calc - 180} + if (Mb12_corner_calc <= 360) { + Mb12_corner_calc_Y = 360 - Mb12_corner_calc} + // определение координат вектора Mb12_calc + Mb12_1_calc_X = 0; + if (Mb12_corner_calc <= 180) {Mb12_2_calc_X = Math.abs(Math.cos(Mb12_corner_calc_X * Math.PI/180)) * Mb12_calc * (-1) + } else {Mb12_2_calc_X = Math.abs(Math.cos(Mb1_corner_calc_X * Math.PI/180)) * Mb12_calc} + Mb12_1_calc_Y = 0; + if (Mb12_corner_calc <= 90 || Mb12_corner_calc >= 270) {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc + } else {Mb12_2_calc_Y = Math.abs(Math.cos(Mb12_corner_calc_Y * Math.PI/180)) * Mb12_calc * (-1)} + + // определение угла наклона вектора Mb22_calc к осям X и Y + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_X = 90 - Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_X = Mb22_corner_calc - 90} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_X = 270 - Mb22_corner_calc} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_X = Mb22_corner_calc - 270} + if (Mb22_corner_calc <= 90) { + Mb22_corner_calc_Y = Mb22_corner_calc} + if (Mb22_corner_calc <= 180) { + Mb22_corner_calc_Y = 180 - Mb22_corner_calc} + if (Mb22_corner_calc <= 270) { + Mb22_corner_calc_Y = Mb22_corner_calc - 180} + if (Mb22_corner_calc <= 360) { + Mb22_corner_calc_Y = 360 - Mb22_corner_calc} + // определение координат вектора Mb22_calc + Mb22_1_calc_X = 0; + if (Mb22_corner_calc <= 180) {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc * (-1) + } else {Mb22_2_calc_X = Math.abs(Math.cos(Mb22_corner_calc_X * Math.PI/180)) * Mb22_calc} + Mb22_1_calc_Y = 0; + if (Mb22_corner_calc <= 90 || Mb22_corner_calc >= 270) {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc + } else {Mb22_2_calc_Y = Math.abs(Math.cos(Mb22_corner_calc_Y * Math.PI/180)) * Mb22_calc * (-1)} + + // определение угла наклона вектора Mdisb12 к осям X и Y + if (Mdisb12_corner <= 90) { + Mdisb12_corner_X = 90 - Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_X = Mdisb12_corner - 90} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_X = 270 - Mdisb12_corner} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_X = Mdisb12_corner - 270} + if (Mdisb12_corner <= 90) { + Mdisb12_corner_Y = Mdisb12_corner} + if (Mdisb12_corner <= 180) { + Mdisb12_corner_Y = 180 - Mdisb12_corner} + if (Mdisb12_corner <= 270) { + Mdisb12_corner_Y = Mdisb12_corner - 180} + if (Mdisb12_corner <= 360) { + Mdisb12_corner_Y = 360 - Mdisb12_corner} + // определение координат вектора Mdisb12 + Mdisb12_1_X = 0; + if (Mdisb12_corner <= 180) {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12 * (-1) + } else {Mdisb12_2_X = Math.abs(Math.cos(Mdisb12_corner_X * Math.PI/180)) * Mdisb12} + Mdisb12_1_Y = 0; + if (Mdisb12_corner <= 90 || Mdisb12_corner >= 270) {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 + } else {Mdisb12_2_Y = Math.abs(Math.cos(Mdisb12_corner_Y * Math.PI/180)) * Mdisb12 * (-1)} + + // определение угла наклона вектора Mdisb22 к осям X и Y + if (Mdisb22_corner <= 90) { + Mdisb22_corner_X = 90 - Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_X = Mdisb22_corner - 90} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_X = 270 - Mdisb22_corner} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_X = Mdisb22_corner - 270} + if (Mdisb22_corner <= 90) { + Mdisb22_corner_Y = Mdisb22_corner} + if (Mdisb22_corner <= 180) { + Mdisb22_corner_Y = 180 - Mdisb22_corner} + if (Mdisb22_corner <= 270) { + Mdisb22_corner_Y = Mdisb22_corner - 180} + if (Mdisb22_corner <= 360) { + Mdisb22_corner_Y = 360 - Mdisb22_corner} + // определение координат вектора Mdisb22 + Mdisb22_1_X = 0; + if (Mdisb22_corner <= 180) {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22 * (-1) + } else {Mdisb22_2_X = Math.abs(Math.cos(Mdisb22_corner_X * Math.PI/180)) * Mdisb22} + Mdisb22_1_Y = 0; + if (Mdisb22_corner <= 90 || Mdisb22_corner >= 270) {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 + } else {Mdisb22_2_Y = Math.abs(Math.cos(Mdisb22_corner_Y * Math.PI/180)) * Mdisb22 * (-1)} + + + +// Координаты графиков масс + // определение координат точек окружности обозначения расчётного балансировочного груза Mb1_calc плоскости 1 + var x_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси X + var y_Mb1_calc_array = []; // массив координат точек окружности Mb1_calc по оси Y + var x0_Mb1_calc = Mb1_2_calc_X; // центр по X + var y0_Mb1_calc = Mb1_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_calc_array.push(x0_Mb1_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_calc_array.push(y0_Mb1_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного балансировочного груза Mb2_calc плоскости 2 + var x_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси X + var y_Mb2_calc_array = []; // массив координат точек окружности Mb2_calc по оси 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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_calc_array.push(y0_Mb2_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb1 плоскости 1 + var x_Mb1_array = []; // массив координат точек окружности Mb1 по оси X + var y_Mb1_array = []; // массив координат точек окружности Mb1 по оси Y + var x0_Mb1 = Mb1_2_X; // центр по X + var y0_Mb1 = Mb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb1_array.push(x0_Mb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb1_array.push(y0_Mb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения введённого балансировочного груза Mb2 плоскости 2 + var x_Mb2_array = []; // массив координат точек окружности Mb2 по оси X + var y_Mb2_array = []; // массив координат точек окружности Mb2 по оси Y + var x0_Mb2 = Mb2_2_X; // центр по X + var y0_Mb2 = Mb2_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb2_array.push(x0_Mb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb2_array.push(y0_Mb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb1 плоскости 1 + var x_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси X + var y_Mdisb1_array = []; // массив координат точек окружности Mdisb1 по оси Y + var x0_Mdisb1 = Mdisb1_2_X; // центр по X + var y0_Mdisb1 = Mdisb1_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb1_array.push(x0_Mdisb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb1_array.push(y0_Mdisb1 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения дисбаланса Mdisb2 плоскости 2 + 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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb2_array.push(y0_Mdisb2 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb12_calc плоскости 1 + var x_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси X + var y_Mb12_calc_array = []; // массив координат точек окружности Mb12_calc по оси Y + var x0_Mb12_calc = Mb12_2_calc_X; // центр по X + var y0_Mb12_calc = Mb12_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb12_calc_array.push(x0_Mb12_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb12_calc_array.push(y0_Mb12_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения расчётного груза для добалансировки Mb22_calc плоскости 2 + var x_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси X + var y_Mb22_calc_array = []; // массив координат точек окружности Mb22_calc по оси Y + var x0_Mb22_calc = Mb22_2_calc_X; // центр по X + var y0_Mb22_calc = Mb22_2_calc_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mb22_calc_array.push(x0_Mb22_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mb22_calc_array.push(y0_Mb22_calc + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb12 плоскости 1 + var x_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси X + var y_Mdisb12_array = []; // массив координат точек окружности Mdisb12 по оси Y + var x0_Mdisb12 = Mdisb12_2_X; // центр по X + var y0_Mdisb12 = Mdisb12_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb12_array.push(x0_Mdisb12 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb12_array.push(y0_Mdisb12 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.cos((i) * Math.PI / 180))));} + // определение координат точек окружности обозначения остаточного дисбаланса Mdisb22 плоскости 2 + var x_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси X + var y_Mdisb22_array = []; // массив координат точек окружности Mdisb22 по оси Y + var x0_Mdisb22 = Mdisb22_2_X; // центр по X + var y0_Mdisb22 = Mdisb22_2_Y; // центр по Y + for (let i=0; i<=359; i++ ) { + x_Mdisb22_array.push(x0_Mdisb22 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1 * (Math.sin((i) * Math.PI / 180)))); + y_Mdisb22_array.push(y0_Mdisb22 + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*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(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.sin((i) * Math.PI / 180))); + yD_array.push(y0D + (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.1) * (Math.cos((i) * Math.PI / 180)));} + + // Вычисление допустимого остаточного дисбаланса + U_per = (1000 * (G * P)) / (Math.PI * n / 30); + // Остаточный дисбаланс + U_res12 = Mdisb12 * R1; + U_res22 = Mdisb22 * R2; + U_res = U_res12 + U_res22; + + +// Графики вибрации + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_A0", + x: xA0_array, + y: yA0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_A3", + x: xA3_array, + y: yA3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dA3", + x: xdA3_array, + y: ydA3_array, + }); + plot_vibr.add( + { + color: 0x0000ff, + name: "Вибрация_B0", + x: xB0_array, + y: yB0_array, + }); + plot_vibr.add( + { + color: 0x00ff00, + name: "Вибрация_B3", + x: xB3_array, + y: yB3_array, + }); + plot_vibr.add( + { + color: 0xff0000, + name: "Вибрация_dB3", + x: xdB3_array, + y: ydB3_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "График векторов вибрации", + x: xV_array, + y: yV_array, + }); + plot_vibr.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)], + y: [(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), -(Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2), (Math.max(A0,A3,dA3,B0,B3,dB3)+Math.max(A0,A3,dA3,B0,B3,dB3)*0.2)] + }); + + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb1_calc плоскости 1", + x: x_Mb1_calc_array, + y: y_Mb1_calc_array, + }); + plot_disb.add( + { + color: 0x00ff00, + name: "Балансировочный груз расчётный Mb2_calc плоскости 2", + x: x_Mb2_calc_array, + y: y_Mb2_calc_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb1 плоскости 1", + x: x_Mb1_array, + y: y_Mb1_array, + }); + plot_disb.add( + { + color: 0x0fae1a, + name: "Балансировочный груз введённый Mb2 плоскости 2", + x: x_Mb2_array, + y: y_Mb2_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb1 плоскости 1", + x: x_Mdisb1_array, + y: y_Mdisb1_array, + }); + plot_disb.add( + { + color: 0xff0000, + name: "Дисбаланс Mdisb2 плоскости 2", + x: x_Mdisb2_array, + y: y_Mdisb2_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb12_calc плоскости 1", + x: x_Mb12_calc_array, + y: y_Mb12_calc_array, + }); + plot_disb.add( + { + color: 0x00ddff, + name: "Балансировочный груз для добалансировки Mb22_calc плоскости 2", + x: x_Mb22_calc_array, + y: y_Mb22_calc_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb12 плоскости 1", + x: x_Mdisb12_array, + y: y_Mdisb12_array, + }); + plot_disb.add( + { + color: 0xff3dcc, + name: "Дисбаланс остаточный Mdisb22 плоскости 2", + x: x_Mdisb22_array, + y: y_Mdisb22_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "График расположения дисбаланса", + x: xD_array, + y: yD_array, + }); + plot_disb.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)], + y: [(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), -(Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2), (Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)+Math.max(Mb1_calc,Mb2_calc,Mb1,Mb2,Mdisb1,Mdisb2,Mb12_calc,Mb22_calc,Mdisb12,Mdisb22)*0.2)] + }); + +gtl.log.info("Mb1_calc (масса балансировочного груза плоскости 1 расчёт)",Mb1_calc); +gtl.log.info("Mb1_corner_calc (угол установки балансировочного груза плоскости 1 расчёт)",Mb1_corner_calc); +gtl.log.info("Mb1 (масса балансировочного груза плоскости 1 введён)",Mb1); +gtl.log.info("Mb1_corner (угол установки балансировочного груза плоскости 1 введён)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс плоскости 1)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса плоскости 1)",Mdisb1_corner); +gtl.log.info("Mb2_calc (масса балансировочного груза плоскости 2 расчёт)",Mb2_calc); +gtl.log.info("Mb2_corner_calc (угол установки балансировочного груза плоскости 2 расчёт)",Mb2_corner_calc); +gtl.log.info("Mb2 (масса балансировочного груза плоскости 2 введён)",Mb2); +gtl.log.info("Mb2_corner (угол установки балансировочного груза плоскости 2 введён)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс плоскости 2)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса плоскости 2)",Mdisb2_corner); + +gtl.log.info("Mb12_calc (масса груза для добалансировки плоскости 1 расчёт)",Mb12_calc); +gtl.log.info("Mb12_corner_calc (угол установки груза для добалансировки плоскости 1 расчёт)",Mb12_corner_calc); +gtl.log.info("Mb22_calc (масса груза для добалансировки плоскости 2 расчёт)",Mb22_calc); +gtl.log.info("Mb22_corner_calc (угол установки груза для добалансировки плоскости 2 расчёт)",Mb22_corner_calc); +gtl.log.info("Mdisb12 (дисбаланс остаточный плоскости 1)",Mdisb12); +gtl.log.info("Mdisb12_corner (угол расположения дисбаланса остаточного плоскости 1)",Mdisb12_corner); +gtl.log.info("Mdisb22 (дисбаланс остаточный плоскости 2)",Mdisb22); +gtl.log.info("Mdisb22_corner (угол расположения дисбаланса остаточного плоскости 2)",Mdisb22_corner); + +gtl.log.info("A0",A0); +gtl.log.info("A0_phase",A0_phase); +gtl.log.info("A3",A3); +gtl.log.info("A3_phase",A3_phase); +gtl.log.info("B0",B0); +gtl.log.info("B0_phase",B0_phase); +gtl.log.info("B3",B3); +gtl.log.info("B3_phase",B3_phase); + +gtl.log.info("модуль ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1); +gtl.log.info("фаза ДКВ DCI_A1 плоскости 1 на вибрацию в точке A", DCI_A1_phase); +gtl.log.info("модуль ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2); +gtl.log.info("фаза ДКВ DCI_A2 плоскости 2 на вибрацию в точке A", DCI_A2_phase); +gtl.log.info("модуль ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1); +gtl.log.info("фаза ДКВ DCI_B1 плоскости 1 на вибрацию в точке B", DCI_B1_phase); +gtl.log.info("модуль ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2); +gtl.log.info("фаза ДКВ DCI_B2 плоскости 2 на вибрацию в точке B", DCI_B2_phase); + +gtl.log.info("Допустимый остаточный дисбаланс", U_per); +gtl.log.info("Остаточный дисбаланс плоскости 1 (после балансировки)", U_res12); +gtl.log.info("Остаточный дисбаланс плоскости 2 (после балансировки)", U_res22); + + // Выдача результата (results) + let __result = { + _001_Ампл_вибр_пуска_A0: A0, + _002_Фаза_вибр_пуска_A0: A0_phase, + _003_Ампл_вибр_пуска_A3: A3, + _004_Фаза_вибр_пуска_A3: A3_phase, + _005_Ампл_вибр_пуска_B0: B0, + _006_Фаза_вибр_пуска_B0: B0_phase, + _007_Ампл_вибр_пуска_B3: B3, + _008_Фаза_вибр_пуска_B3: B3_phase, + + _009_Масса_дисбаланса_пл_1: Mdisb1, + _010_Угол_дисбаланса_пл_1: Mdisb1_corner, + _011_Масса_дисбаланса_пл_2: Mdisb2, + _012_Угол_дисбаланса_пл_2: Mdisb2_corner, + + _013_Масса_баланс_груза_расч_пл_1: Mb1_calc, + _014_Угол_баланс_груза_расч_пл_1: Mb1_corner_calc, + _015_Масса_баланс_груза_введён_пл_1: Mb1, + _016_Угол_баланс_груза_введён_пл_1: Mb1_corner, + _017_Масса_баланс_груза_расч_пл_2: Mb2_calc, + _018_Угол_баланс_груза_расч_пл_2: Mb2_corner_calc, + _019_Масса_баланс_груза_введён_пл_2: Mb2, + _020_Угол_баланс_груза_введён_пл_2: Mb2_corner, + + _021_Масса_остат_дисбаланса_пл_1: Mdisb12, + _022_Угол_остат_дисбаланса_пл_1: Mdisb12_corner, + _023_Масса_остат_дисбаланса_пл_2: Mdisb22, + _024_Угол_остат_дисбаланса_пл_2: Mdisb22_corner, + + _025_Масса_груза_добаланс_пл_1: Mb12_calc, + _026_Угол_груза_добаланс_пл_1: Mb12_corner_calc, + _027_Масса_груза_добаланс_пл_2: Mb22_calc, + _028_Угол_груза_добаланс_пл_2: Mb22_corner_calc, + + _029_Модуль_ДКВ_DCI_A1: DCI_A1, + _030_Фаза_ДКВ_DCI_A1: DCI_A1_phase, + _031_Модуль_ДКВ_DCI_A2: DCI_A2, + _032_Фаза_ДКВ_DCI_A2: DCI_A2_phase, + _033_Модуль_ДКВ_DCI_B1: DCI_B1, + _034_Фаза_ДКВ_DCI_B1: DCI_B1_phase, + _035_Модуль_ДКВ_DCI_B2: DCI_B2, + _036_Фаза_ДКВ_DCI_B2: DCI_B2_phase, + + _037_Допуст_ост_дисб_г_мм: U_per, + _038_Остат_дисб_пл1_после_бал_г_мм: U_res12, + _039_Остат_дисб_пл2_после_бал_г_мм: U_res22, + _040_Остат_дисб_сумм_после_бал_г_мм: U_res + }; + +gtl.results = {"result": __result}; + +gtl.diagnostic.stop(); + +// break; + +// default: +// break; +// } +} \ No newline at end of file diff --git a/scripts/default/analizer_sample.js b/scripts/default/analizer_sample.js new file mode 100644 index 0000000..e26d219 --- /dev/null +++ b/scripts/default/analizer_sample.js @@ -0,0 +1,44 @@ +gtl.log.info("Анализатор", "Запущен"); + +var ausp = gtl.add_ausp(gtl.analog_inputs[0]); + +ausp.color = 0x0000ff00; +ausp.frequency = 1600; +ausp.lines = 800; +ausp.average = 6; +ausp.unit = gtl.spec.db; + +var ausp2 = gtl.add_ausp(gtl.analog_inputs[1]); + +ausp2.color = 0x000000ff; +ausp2.frequency = 1600; +ausp2.lines = 800; +ausp2.average = 6; +ausp2.unit = gtl.spec.db; + +gtl.diagnostic.interval = 0.1; + +let __counter = 0; + +let __results = { + "Потребное время измерений, секунд": ausp.acq_time, +}; + +__results["Прошло времени, секунд"] = gtl.diagnostic.interval * __counter; +__results["Статус рассчета"] = "в процессе"; + +gtl.results = __results; + +function diagnose() { + __counter++; + + __results["Прошло времени, секунд"] = gtl.diagnostic.interval * __counter; + __results["Статус рассчета"] = "в процессе"; + if (gtl.diagnostic.interval * __counter >= ausp.acq_time) { + __results["Статус рассчета"] = "окончен"; + gtl.results = __results; + gtl.diagnostic.stop(); + } + + gtl.results = __results; +} diff --git a/scripts/default/ballscrew.js b/scripts/default/ballscrew.js new file mode 100644 index 0000000..01197d9 --- /dev/null +++ b/scripts/default/ballscrew.js @@ -0,0 +1,176 @@ +"use strict"; +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; + +var fnc = gtl.import("user-functions.js"); +var mtx = gtl.import("bs_mtx.js"); +var def = gtl.import("bs_defs.js"); + +//настройки для датчика оборотов +var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра +filter_freq.kind = gtl.filter_iir.butterworth; //тип окна +filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ) +filter_freq.order = 8; //порядок фильтра +filter_freq.frequency = 10; //граничная частота фильтра + +//определение частоты вращения +var freq = gtl.add_value_freq(filter_freq); +freq.time = 1; +freq.avg_cnt = 6; +//gtl.diagnostic.interval = /*1*/10; + +//[Блок настройки параметров измерений] +//мониторинговый спектр вибрации +var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp2.name = "AUSPm"; //присвоение имени спектра +ausp2.color = 0x0000ffff; //цвет линии спектра +ausp2.frequency = 25600; //граничная частота спектра +ausp2.lines = 1600; //разрешение спектра (количество линий) +ausp2.average = 6; //количество усреднений +ausp2.unit = gtl.spec.db; //отображение в дБ + +//спектр вибрации +var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp.name = "AUSPd"; //присвоение имени спектра +ausp.color = 0x0000ff00; //цвет линии спектра +ausp.frequency = 800; //граничная частота спектра +ausp.lines = 800; //разрешение спектра (количество линий) +ausp.average = 6; //количество усреднений +ausp.unit = gtl.spec.db; //отображение в дБ +ausp.smoothing_factor = 50; //коэффициент сглаживания спектра +ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии) +ausp.peak_level = 20; //порог обнаружения гармоник +ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/- + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.color = 255; +filter_spen.width = 1482; //ширина полосы фильтра + +//спектр огибающей +var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей +spen.name = "SPEN"; //присвоение имени спектра огибающей +spen.color = 0x00ff0000; //цвет линии спектра огибающей +spen.frequency = 200; //граничная частота спектра огибающей +spen.lines = 200; //разрешение спектра огибающей (количество линий) +spen.average = 8; //количество усреднений +spen.unit = gtl.spec.db; //отображение в дБ +spen.window = gtl.spec.hann; //окно +spen.smoothing_factor = 100; //коэффициент сглаживания спектра +spen.smoothed_line_color = 0xff004dff; //цвет средней линии +spen.peak_level = 10; //порог обнаружения гармоник +spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/- + +//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения) +var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen) +var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen) +rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen) +rms_spen.time = 0.5; //интервал расчета RMS (spen) +ampl_spen.time = 0.5; //интервал расчета Amplitude (spen) +rms_spen.avg_cnt = 4; //количество усреднений RMS (spen) +ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen) + +//RMS виброскорости в диапазоне 10-1000 Гц. +var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения +int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование) +//фильтрация сигнала в диапазоне +var filter = gtl.add_filter_iir(int); //объявление переменной фильтра +filter.kind = gtl.filter_iir.butterworth; //тип окна +filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter.order = 10; //порядок фильтра +filter.frequency = 505; //центральная частота полосового фильтра +filter.width = 990; //ширина полосы фильтра +//определение среднего квадратического значения виброскорости +var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ +rms_v.time = 0.5; //время выборки +rms_v.avg_cnt = 4; //количество усреднений + +//[Диагностика] +gtl.diagnostic.interval = freq.time * freq.avg_cnt; +let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала + +function diagnose() { + switch (state) { + case 0: // считаем частоту вращения и настраиваем спектры + if (fnc.INSTABILITY() > fnc.tolerance()) { + gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + if (fnc.FREQ() <= fnc.FREQNESS()) { + gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS()); + }; + + case 1: //частота вращения фиксированная + case 2: //частота вращения из поля INFO (виброметр) + filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей + filter_spen.width = fnc.filter_width(); //определяем ширину фильтра + spen.frequency = fnc.spec_params().frequency; + spen.lines = fnc.spec_params().lines; + ausp.frequency = fnc.spec_params().frequency; + ausp.lines = fnc.spec_params().lines; + + //определение минимально необходимой длительности сигнала для проведения диагностики + let time = []; //массив по времени набора данных + time.push(ausp.acq_time); + time.push(spen.acq_time); + let max_acq = Math.max(...time); + gtl.diagnostic.interval = max_acq; + state = 3; + break; + + case 3: //выполняем анализ спектов + ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации + spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency); + + gtl.log.info("Объект диагностики", options.rbModelName); + gtl.log.info("FREQ", fnc.FREQ()); + gtl.log.info("FTF", fnc.BSFTF()); + gtl.log.info("BPFO", fnc.BSNUT()); + gtl.log.info("BPFI", fnc.BSSCR()); + gtl.log.info("BSF", fnc.BSBAL()); + gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance()); + gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency); + gtl.log.info("Ширина фильтра", filter_spen.width); + gtl.log.info("Граничная частота SPEN", spen.frequency); + gtl.log.info("Количество линий SPEN", spen.lines); + gtl.log.info("Разрешение SPEN", spen.resolution); + gtl.log.info("Ширина AUSP", ausp.frequency); + + let spen_mx = mtx.bs_mtx(spen, filter_spen, true); + let spen_df = def.bs_defs(spen_mx, true); + let ausp_mx = mtx.bs_mtx(ausp, 0, false); + + var res = { + RMSA: rms_spen.value, + RMSV: rms_v.value, + PF: ampl_spen.value / rms_spen.value, + SQR: AQ, + matrix: spen_mx, + defs: spen_df, + }; + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/scripts/default/belt_drive.js b/scripts/default/belt_drive.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/bs_defs.js b/scripts/default/bs_defs.js new file mode 100644 index 0000000..9de300b --- /dev/null +++ b/scripts/default/bs_defs.js @@ -0,0 +1,52 @@ +"use strict"; + +export function bs_defs(mtx, isDeep) { + var res = {}; //результат + if (isDeep = true) { var key = "dp" } else { var key = "lv" }; + var des = { + FTF: { ds: "тел качения и сепаратора", dp: 8, lv: 20 }, + FREQ: { ds: "винта", dp: 13, lv: 20 }, + BSF: { ds: "тел качения", dp: 10, lv: 20 }, + BPFO: { ds: "гайки", dp: 15, lv: 20 }, + BPFI: { ds: "винта", dp: 8, lv: 20 }, + }; //описание функциональных частот + + function get_note(harmsArr) { + let note = "Износ"; //описание характера колебаний + let cnt = 0; //количество значений в массиве + for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; }; + if (cnt >= 5) { note = "Дефект" }; + if (harmsArr[1] > harmsArr[0]) { note = "Перекос" }; + if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" }; + return note; + }; + + function get_level(lvl, thres) { + let level = "Сильный"; + switch (true) { + case lvl < 0.5 * thres: + level = "Слабый"; + break; + case lvl < thres: + level = "Средний"; + break; + default: + break; + }; return level; + }; + + var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник) + for (let i = 0; i <= rows.length - 1; i++) { + let arr = mtx[rows[i]]; //массив гармоник + let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива + let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива + if (sum > 0) { + let note = get_note(arr); + res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')'; + }; + }; + return res; +}; + + + diff --git a/scripts/default/bs_mtx.js b/scripts/default/bs_mtx.js new file mode 100644 index 0000000..e09bb4a --- /dev/null +++ b/scripts/default/bs_mtx.js @@ -0,0 +1,61 @@ +"use strict"; + +var ufc = gtl.import("user-functions.js"); + +export function bs_mtx(spec, filter, isDeep) { + var num = 6; //глубина матрицы (количество гармоник) + var level = 0; //уровень развития дефекта + var res = {}; //результат + + var set = { + FTF: { nm: "Частота вращения сепаратора", fn: ufc.BSFTF(), md: 0, cl: 0xffff0000 }, + FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 }, + BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSBAL(), md: 0, cl: 0xffFFB841 }, + BPFO: { nm: "Частота перекатывания тел качения по гайке", fn: ufc.BSNUT(), md: 0, cl: 0xffED3CCA }, + BPFI: { nm: "Частота перекатывания тел качения по винту", fn: ufc.BSSCR(), md: 0, cl: 0xff990090 } + }; //набор функциональных частот + + function mod_factor(dSpec, dFilter, ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; + }; //определение глубины модуляции ВЧ составляющих + + var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов) + //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. + for (let i = 0; i <= rows.length - 1; i++) { + let lines = rows[i]; + let idx = 0; //индекс гармонического ряда + let nms = set[lines].nm; //название гармонического ряда + let frq = set[lines].fn; //расчетная частота + let mod = set[lines].md; //модулирующая частота + let clr = set[lines].cl; //предустановленный цвет + let arr = []; //массив обнаруженных гармоник + + lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд) + lines.name = nms; + idx = spec.index_of_harms_set(lines); //определяем индекс набора частот + if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию + for (let j = 0; j <= num - 1; j++) { + lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники + if (lines.harms[j].is_present == true) { + switch (isDeep) { + case true: + level = Math.round(mod_factor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base)); + break; + case false: + level = Math.round(lines.harms[j].level); + break; + default: + break; + }; + arr.push(level); + } else { arr.push(0) }; + res[rows[i]] = arr; + }; + }; + + return res; +}; + diff --git a/scripts/default/chain_belt_drive.js b/scripts/default/chain_belt_drive.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/debug.js b/scripts/default/debug.js new file mode 100644 index 0000000..4f7d457 --- /dev/null +++ b/scripts/default/debug.js @@ -0,0 +1,158 @@ +"use strict"; + +let options = gtl.options; // параметры объекта + +gtl.log.info("object.objectType", options.objectType); +gtl.log.info("object.tachoRatio", options.tachoRatio); +gtl.log.info("object.scriptName", options.scriptName); + +switch (options.objectType) { + case 0: + gtl.log.info("Тип", "Тип объекта не задан"); + break; + + case 1: + gtl.log.info("Тип", "Подшипник скольжения"); + break; + + case 2: + // параметры подшипника качения + gtl.log.info("Тип", "Подшипник качения"); + gtl.log.info("object.rbModelName", options?.rbModelName || "No Name"); + gtl.log.info("object.rbVendor", options?.rbVendor || "No Vendor"); + gtl.log.info("object.rbOuterD", options.rbOuterD); + gtl.log.info("object.rbInnerD", options.rbInnerD); + gtl.log.info("object.rbRollerD", options.rbRollerD); + gtl.log.info("object.rbRollerCount", options.rbRollerCount); + gtl.log.info("object.rbAngle", (options.rbAngle * 3.1415926) / 180); + break; + + case 3: + // ШВП + gtl.log.info("Тип", "ШВП"); + gtl.log.info("object.bsModelName", options?.bsModelName || "No Name"); + gtl.log.info("object.bsVendor", options?.bsVendor || "No Name"); + gtl.log.info("object.bsOuterD", options.bsOuterD); + gtl.log.info("object.bsInnerD", options.bsInnerD); + gtl.log.info("object.bsRollerD", options.bsRollerD); + gtl.log.info("object.bsRollerCount", options.bsRollerCount); + gtl.log.info("object.rbAngle", (options.bsAngle * 3.1415926) / 180); + break; + + case 4: + gtl.log.info("Тип", "Редуктор"); + gtl.log.info("object.gtZ1", options.gtZ1); + gtl.log.info("object.gtZ2", options.gtZ2); + break; + + case 5: + gtl.log.info("Тип", "Ремень"); + gtl.log.info("object.bdD1", options.bdD1); + gtl.log.info("object.bdD2", options.bdD2); + gtl.log.info("object.bdL", options.bdL); + break; + + case 6: + gtl.log.info("Тип", "Зубчатый ремень"); + gtl.log.info("object.cbdZ1", options.cbdZ1); + gtl.log.info("object.cbdZ2", options.cbdZ2); + gtl.log.info("object.cbdZ3", options.cbdZ3); + break; + + case 7: + gtl.log.info("Тип", "Помпа"); + gtl.log.info("object.pmBlades", options.pmBlades); + break; + + case 8: + gtl.log.info("Тип", "Планетарный редуктор"); + gtl.log.info("object.pgZ1", options.pgZ1); + gtl.log.info("object.pgZ2", options.pgZ2); + gtl.log.info("object.pgZ3", options.pgZ3); + gtl.log.info("object.pgN", options.pgN); + break; + + case 9: + gtl.log.info("Тип", "Турбина"); + gtl.log.info("object.trBlades", options.trBlades); + break; + + case 10: + gtl.log.info("Тип", "Электродвигатель"); + break; +} + +let record = gtl.options.record; // параметры записи +gtl.log.info("record.uuid", record.uuid); +gtl.log.info("record.recordFileName", record.recordFileName); +gtl.log.info("record.recordPath", record.recordPath); +gtl.log.info("record.recordType", record.recordType); // Link или Local +gtl.log.info("record.recordFileSize", record.recordFileSize); +gtl.log.info("record.timestamp", record.timestamp); +gtl.log.info("record.playerTime", record.playerTime); +gtl.log.info("record.playerChannelsCount", record.playerChannelsCount); +gtl.log.info("record.playerRate", record.playerRate); +gtl.log.info("record.playerComment", record.playerComment); +gtl.log.info("record.playerDevice", record.playerDevice); + +let signals = gtl.options.record.signalsModel; // массив сигналов +signals.forEach((signal, index) => { + // параметры сигнала с индексом index + gtl.log.info(`signals[${index}].portNumber`, signal.portNumber); // номер канала + gtl.log.info(`signals[${index}].name`, signal.name); // имя канала + gtl.log.info(`signals[${index}].units`, signal.units); // единицы измерения + gtl.log.info(`signals[${index}].sensitivity`, signal.sensitivity); // чувствительность (заданная при записи исходного сигнала) + gtl.log.info(`signals[${index}].scaleFactor`, signal.scaleFactor); // масштабный коэффициент для чувствительность +}); + +var point = gtl.options.point; // праметры точки +gtl.log.info("point.label", point.label); +gtl.log.info("point.uuid", point.uuid); +gtl.log.info("point.comment", point.comment); + +if (record.tachoOptions.isTachoEnabled) { + gtl.log.info("record.tachoOptions.minTacho", record.tachoOptions.minTacho); + gtl.log.info("record.tachoOptions.maxTacho", record.tachoOptions.maxTacho); + switch (record.tachoOptions.tachoState) { + case 0: // тахо сигнал берется из сигнала + gtl.log.info("Режим тахометра", "Взять из сигнала"); + gtl.log.info( + "record.tachoOptions.tachoChannel", + record.tachoOptions.tachoChannel + ); // номер канала для тахо + gtl.log.info( + "record.tachoOptions.tachoChannelName", + record.tachoOptions.tachoChannelName + ); + break; + + case 1: // значение тахо фиксированное + gtl.log.info("Режим тахометра", "Фиксированное значение"); + gtl.log.info( + "record.tachoOptions.tachoValue", + record.tachoOptions.tachoValue + ); // фиксированное значение тахо + break; + + case 2: // значение тахо из поля INFO (виброметр) + gtl.log.info("Режим тахометра", "Взять из поля INFO"); + gtl.log.info( + "record.tachoOptions.tachoFromInfo", + record.tachoOptions.tachoFromInfo + ); // значение тахо из инфо + break; + + default: + break; + } +} else { + gtl.log.info("Режим тахометра", "Тахометр не используется"); +} + +function diagnose() { + let __result = { skz: 1, speed: 2 }; + + gtl.results = __result; + + gtl.diagnostic.stop(); +} diff --git a/scripts/default/electrical_engine.js b/scripts/default/electrical_engine.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/gear_transmission.js b/scripts/default/gear_transmission.js new file mode 100644 index 0000000..44e2665 --- /dev/null +++ b/scripts/default/gear_transmission.js @@ -0,0 +1,174 @@ +"use strict"; +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; + +var fnc = gtl.import("user-functions.js"); +var mtx = gtl.import("gt_mtx.js"); +var def = gtl.import("gt_defs.js"); + +//настройки для датчика оборотов +var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра +filter_freq.kind = gtl.filter_iir.butterworth; //тип окна +filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ) +filter_freq.order = 8; //порядок фильтра +filter_freq.frequency = 10; //граничная частота фильтра + +//определение частоты вращения +var freq = gtl.add_value_freq(filter_freq); +freq.time = 1; +freq.avg_cnt = 6; +//gtl.diagnostic.interval = /*1*/10; + +//[Блок настройки параметров измерений] +//мониторинговый спектр вибрации +var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp2.name = "AUSPm"; //присвоение имени спектра +ausp2.color = 0x0000ffff; //цвет линии спектра +ausp2.frequency = 25600; //граничная частота спектра +ausp2.lines = 1600; //разрешение спектра (количество линий) +ausp2.average = 6; //количество усреднений +ausp2.unit = gtl.spec.db; //отображение в дБ + +//спектр вибрации +var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp.name = "AUSPd"; //присвоение имени спектра +ausp.color = 0x0000ff00; //цвет линии спектра +ausp.frequency = 800; //граничная частота спектра +ausp.lines = 800; //разрешение спектра (количество линий) +ausp.average = 6; //количество усреднений +ausp.unit = gtl.spec.db; //отображение в дБ +ausp.smoothing_factor = 50; //коэффициент сглаживания спектра +ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии) +ausp.peak_level = 20; //порог обнаружения гармоник +ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/- + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.color = 255; +filter_spen.width = 1482; //ширина полосы фильтра + +//спектр огибающей +var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей +spen.name = "SPEN"; //присвоение имени спектра огибающей +spen.color = 0x00ff0000; //цвет линии спектра огибающей +spen.frequency = 200; //граничная частота спектра огибающей +spen.lines = 200; //разрешение спектра огибающей (количество линий) +spen.average = 8; //количество усреднений +spen.unit = gtl.spec.db; //отображение в дБ +spen.window = gtl.spec.hann; //окно +spen.smoothing_factor = 100; //коэффициент сглаживания спектра +spen.smoothed_line_color = 0xff004dff; //цвет средней линии +spen.peak_level = 10; //порог обнаружения гармоник +spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/- + +//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения) +var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen) +var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen) +rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen) +rms_spen.time = 0.5; //интервал расчета RMS (spen) +ampl_spen.time = 0.5; //интервал расчета Amplitude (spen) +rms_spen.avg_cnt = 4; //количество усреднений RMS (spen) +ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen) + +//RMS виброскорости в диапазоне 10-1000 Гц. +var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения +int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование) +//фильтрация сигнала в диапазоне +var filter = gtl.add_filter_iir(int); //объявление переменной фильтра +filter.kind = gtl.filter_iir.butterworth; //тип окна +filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter.order = 10; //порядок фильтра +filter.frequency = 505; //центральная частота полосового фильтра +filter.width = 990; //ширина полосы фильтра +//определение среднего квадратического значения виброскорости +var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ +rms_v.time = 0.5; //время выборки +rms_v.avg_cnt = 4; //количество усреднений + +//[Диагностика] +gtl.diagnostic.interval = freq.time * freq.avg_cnt; +let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала + +function diagnose() { + switch (state) { + case 0: // считаем частоту вращения и настраиваем спектры + if (fnc.INSTABILITY() > fnc.tolerance()) { + gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + if (fnc.FREQ() <= fnc.FREQNESS()) { + gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS()); + }; + + case 1: //частота вращения фиксированная + case 2: //частота вращения из поля INFO (виброметр) + filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей + filter_spen.width = fnc.filter_width(); //определяем ширину фильтра + spen.frequency = fnc.spec_params().frequency; + spen.lines = fnc.spec_params().lines; + ausp.frequency = fnc.spec_params().frequency; + ausp.lines = fnc.spec_params().lines; + + //определение минимально необходимой длительности сигнала для проведения диагностики + let time = []; //массив по времени набора данных + time.push(ausp.acq_time); + time.push(spen.acq_time); + let max_acq = Math.max(...time); + gtl.diagnostic.interval = max_acq; + state = 3; + break; + + case 3: //выполняем анализ спектов + ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации + spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency); + + gtl.log.info("Объект диагностики", options.rbModelName); + gtl.log.info("FREQ", fnc.FREQ()); + gtl.log.info("FTF", fnc.GTF2()); + gtl.log.info("BPFO", fnc.GTFZ()); + gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance()); + gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency); + gtl.log.info("Ширина фильтра", filter_spen.width); + gtl.log.info("Граничная частота SPEN", spen.frequency); + gtl.log.info("Количество линий SPEN", spen.lines); + gtl.log.info("Разрешение SPEN", spen.resolution); + gtl.log.info("Ширина AUSP", ausp.frequency); + + let spen_mx = mtx.gt_mtx(spen, filter_spen, true); + let spen_df = def.gt_defs(spen_mx, true); + let ausp_mx = mtx.gt_mtx(ausp, 0, false); + + var res = { + RMSA: rms_spen.value, + RMSV: rms_v.value, + PF: ampl_spen.value / rms_spen.value, + SQR: AQ, + matrix: spen_mx, + defs: spen_df + }; + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/scripts/default/gt_defs.js b/scripts/default/gt_defs.js new file mode 100644 index 0000000..9635e2f --- /dev/null +++ b/scripts/default/gt_defs.js @@ -0,0 +1,51 @@ +"use strict"; + +export function gt_defs(mtx, isDeep) { + var res = {}; //результат + if (isDeep = true) { var key = "dp" } else { var key = "lv" }; + var des = { + FREQ: { ds: "шестерни", dp: 20, lv: 20 }, + GTF2: { ds: "зубчатого колеса", dp: 20, lv: 20 }, + GTFZ: { ds: "зацепления шестерни", dp: 20, lv: 20 }, + GTFZ2: { ds: "зацепления зубчатого колеса", dp: 20, lv: 20 } + }; //описание функциональных частот + + function get_note(harmsArr) { + let note = "Биение"; //описание характера колебаний + let cnt = 0; //количество значений в массиве + for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; }; + if (cnt >= 5) { note = "Дефект" }; + if (harmsArr[1] > harmsArr[0]) { note = "Перекос" }; + if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" }; + return note; + }; + + function get_level(lvl, thres) { + let level = "Сильный"; + switch (true) { + case lvl < 0.5 * thres: + level = "Слабый"; + break; + case lvl < thres: + level = "Средний"; + break; + default: + break; + }; return level; + }; + + var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник) + for (let i = 0; i <= rows.length - 1; i++) { + let arr = mtx[rows[i]]; //массив гармоник + let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива + let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива + if (sum > 0) { + let note = get_note(arr); + res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')'; + }; + }; + return res; +}; + + + diff --git a/scripts/default/gt_mtx.js b/scripts/default/gt_mtx.js new file mode 100644 index 0000000..bef24c7 --- /dev/null +++ b/scripts/default/gt_mtx.js @@ -0,0 +1,60 @@ +"use strict"; + +var ufc = gtl.import("user-functions.js"); + +export function gt_mtx(spec, filter, isDeep) { + var num = 6; //глубина матрицы (количество гармоник) + var level = 0; //уровень развития дефекта + var res = {}; //результат + + var set = { + FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 }, + GTF2: { nm: "Частота вращения второго вала", fn: ufc.GTF2(), md: 0, cl: 0xffFFB841 }, + GTFZ: { nm: "Зубцовая частота по шестерне", fn: ufc.GTFZ(), md: ufc.FREQ(), cl: 0xffED3CCA }, + GTFZ2: { nm: "Зубцовая частота по второму валу", fn: ufc.GTFZ(), md: ufc.GTF2(), cl: 0xff990090 } + }; //набор функциональных частот + + function mod_factor(dSpec, dFilter, ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; + }; //определение глубины модуляции ВЧ составляющих + + var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов) + //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. + for (let i = 0; i <= rows.length - 1; i++) { + let lines = rows[i]; + let idx = 0; //индекс гармонического ряда + let nms = set[lines].nm; //название гармонического ряда + let frq = set[lines].fn; //расчетная частота + let mod = set[lines].md; //модулирующая частота + let clr = set[lines].cl; //предустановленный цвет + let arr = []; //массив обнаруженных гармоник + + lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд) + lines.name = nms; + idx = spec.index_of_harms_set(lines); //определяем индекс набора частот + if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию + for (let j = 0; j <= num - 1; j++) { + lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники + if (lines.harms[j].is_present == true) { + switch (isDeep) { + case true: + level = Math.round(mod_factor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base)); + break; + case false: + level = Math.round(lines.harms[j].level); + break; + default: + break; + }; + arr.push(level); + } else { arr.push(0) }; + res[rows[i]] = arr; + }; + }; + + return res; +}; + diff --git a/scripts/default/kNN.js b/scripts/default/kNN.js new file mode 100644 index 0000000..a201fe1 --- /dev/null +++ b/scripts/default/kNN.js @@ -0,0 +1,166 @@ +"use strict"; + +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; + +var fnc = gtl.import("user-functions.js"); +var mtx = gtl.import("kn_mtx.js"); +var def = gtl.import("kn_defs.js"); + +//настройки для датчика оборотов +var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра +filter_freq.kind = gtl.filter_iir.butterworth; //тип окна +filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ) +filter_freq.order = 8; //порядок фильтра +filter_freq.frequency = 10; //граничная частота фильтра + +//определение частоты вращения +var freq = gtl.add_value_freq(filter_freq); +freq.time = 1; +freq.avg_cnt = 6; +//gtl.diagnostic.interval = /*1*/10; + +//[Блок настройки параметров измерений] +//спектр вибрации +var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp.name = "AUSP"; //присвоение имени спектра +ausp.color = 0x0000ff00; //цвет линии спектра +ausp.frequency = 800; //граничная частота спектра +ausp.lines = 800; //разрешение спектра (количество линий) +ausp.average = 6; //количество усреднений +ausp.unit = gtl.spec.db; //отображение в дБ +ausp.smoothing_factor = 50; //коэффициент сглаживания спектра +ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии) +ausp.peak_level = 20; //порог обнаружения гармоник +ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/- + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.width = 1482; //ширина полосы фильтра +filter_spen.color = 255; + +//спектр огибающей +var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей +spen.name = "SPEN"; //присвоение имени спектра огибающей +spen.color = 0x00ff0000; //цвет линии спектра огибающей +spen.frequency = 200; //граничная частота спектра огибающей +spen.lines = 200; //разрешение спектра огибающей (количество линий) +spen.average = 8; //количество усреднений +spen.unit = gtl.spec.db; //отображение в дБ +spen.window = gtl.spec.hann; //окно +spen.smoothing_factor = 100; //коэффициент сглаживания спектра +spen.smoothed_line_color = 0xff004dff; //цвет средней линии +spen.peak_level = 10; //порог обнаружения гармоник +spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/- + +//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения) +var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen) +var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen) +rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen) +rms_spen.time = 0.5; //интервал расчета RMS (spen) +ampl_spen.time = 0.5; //интервал расчета Amplitude (spen) +rms_spen.avg_cnt = 4; //количество усреднений RMS (spen) +ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen) + +//RMS виброскорости в диапазоне 10-1000 Гц. +var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения +int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование) +//фильтрация сигнала в диапазоне +var filter = gtl.add_filter_iir(int); //объявление переменной фильтра +filter.kind = gtl.filter_iir.butterworth; //тип окна +filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter.order = 10; //порядок фильтра +filter.frequency = 505; //центральная частота полосового фильтра +filter.width = 990; //ширина полосы фильтра +//определение среднего квадратического значения виброскорости +var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ +rms_v.time = 0.5; //время выборки +rms_v.avg_cnt = 4; //количество усреднений + +//[Диагностика] +gtl.diagnostic.interval = freq.time * freq.avg_cnt; +let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала + +function diagnose() { + switch (state) { + case 0: // считаем частоту вращения и настраиваем спектры + if (fnc.INSTABILITY() > fnc.tolerance()) { + gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + if (fnc.FREQ() <= fnc.FREQNESS()) { + gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS()); + }; + + case 1: //частота вращения фиксированная + case 2: //частота вращения из поля INFO (виброметр) + filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей + filter_spen.width = fnc.filter_width(); //определяем ширину фильтра + spen.frequency = fnc.spec_params().frequency; + spen.lines = fnc.spec_params().lines; + + //определение минимально необходимой длительности сигнала для проведения диагностики + let time = []; //массив по времени набора данных + time.push(ausp.acq_time); + time.push(spen.acq_time); + let max_acq = Math.max(...time); + gtl.diagnostic.interval = max_acq; + state = 3; + break; + + case 3: //выполняем анализ спектов + ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации + spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency); + + gtl.log.info("Объект диагностики", + options.rbModelName); + gtl.log.info("Минимально необходимая частота вращения", fnc.FREQNESS()); + gtl.log.info("FREQ", fnc.FREQ()); + gtl.log.info("FTF", fnc.FTF()); + gtl.log.info("BPFO", fnc.BPFO()); + gtl.log.info("BPFI", fnc.BPFI()); + gtl.log.info("BSF", fnc.BSF()); + gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance()); + gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency); + gtl.log.info("Ширина фильтра", filter_spen.width); + gtl.log.info("Граничная частота SPEN", spen.frequency); + gtl.log.info("Количество линий SPEN", spen.lines); + gtl.log.info("Разрешение SPEN", spen.resolution); + gtl.log.info("Ширина AUSP", ausp.frequency); + + let spen_mx = mtx.kn_mtx(spen, filter_spen, true); + let spen_df = def.kn_defs(spen_mx, true); + + var res = { + RMSA: rms_spen.value, + RMSV: rms_v.value, + PF: ampl_spen.value / rms_spen.value, + SQR: AQ, + matrix: spen_mx, + defs: spen_df + }; + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/scripts/default/kn_defs.js b/scripts/default/kn_defs.js new file mode 100644 index 0000000..54b4484 --- /dev/null +++ b/scripts/default/kn_defs.js @@ -0,0 +1,35 @@ +"use strict"; + +export function kn_defs(mtx, isDeep) { + var res = {}; //результат + if (isDeep = true) { var key = "dp" } else { var key = "lv" }; + var des = { + FTF: { ds: "Износ тел качения и сепаратора", dp: 8, lv: 20 }, + FREQ: { ds: "Износ внутреннего кольца", dp: 13, lv: 20 }, + BSF: { ds: "Дефект тел качения", dp: 10, lv: 20 }, + BPFO: { ds: "Дефект наружного кольца", dp: 15, lv: 20 }, + BPFI: { ds: "Дефект внутреннего кольца", dp: 8, lv: 20 }, + }; //описание функциональных частот + + var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник) + for (let i = 0; i <= rows.length - 1; i++) { + let arr = mtx[rows[i]]; //массив гармоник + let delta = 0; //"расстояние" до дефекта + for (let j = 0; j <= arr.length - 1; j++) { + let limit = des[rows[i]][key]; //порог для гармоник + if (arr[j] / limit >= 1) { limit = arr[j] }; + delta = delta + Math.pow(1 - arr[j] / limit, 2); + }; + delta = Math.sqrt(delta); + res[rows[i]] = delta; + }; + + let values = Object.values(res); //собираем значения ключей объекта в массив + let minValue = Math.min(...values); //определяем минимальное значение + let minKey = Object.keys(res).find(minKey => res[minKey] === minValue); //определяем ключ по минимальному значению + + return des[minKey].ds; +}; + + + diff --git a/scripts/default/kn_mtx.js b/scripts/default/kn_mtx.js new file mode 100644 index 0000000..1ae29ba --- /dev/null +++ b/scripts/default/kn_mtx.js @@ -0,0 +1,61 @@ +"use strict"; + +var ufc = gtl.import("user-functions.js"); + +export function kn_mtx(spec, filter, isDeep) { + var num = 6; //глубина матрицы (количество гармоник) + var level = 0; //уровень развития дефекта + var res = {}; //результат + + var set = { + FTF: { nm: "Частота вращения сепаратора", fn: ufc.FTF(), md: 0, cl: 0xffff0000 }, + FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 }, + BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSF(), md: ufc.FTF(), cl: 0xffFFB841 }, + BPFO: { nm: "Частота перекатывания тел качения по наружному кольцу", fn: ufc.BPFO(), md: ufc.FTF(), cl: 0xffED3CCA }, + BPFI: { nm: "Частота перекатывания тел качения по внутреннему кольцу", fn: ufc.BPFI(), md: ufc.FREQ(), cl: 0xff990090 } + }; //набор функциональных частот + + function mod_factor(dSpec, dFilter, ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; + }; //определение глубины модуляции ВЧ составляющих + + var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов) + //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. + for (let i = 0; i <= rows.length - 1; i++) { + let lines = rows[i]; + let idx = 0; //индекс гармонического ряда + let nms = set[lines].nm; //название гармонического ряда + let frq = set[lines].fn; //расчетная частота + let mod = set[lines].md; //модулирующая частота + let clr = set[lines].cl; //предустановленный цвет + let arr = []; //массив обнаруженных гармоник + + lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд) + lines.name = nms; + idx = spec.index_of_harms_set(lines); //определяем индекс набора частот + if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию + for (let j = 0; j <= num - 1; j++) { + lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники + if (lines.harms[j].is_present == true) { + switch (isDeep) { + case true: + level = Math.round(mod_factor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base)); + break; + case false: + level = Math.round(lines.harms[j].level); + break; + default: + break; + }; + arr.push(level); + } else { arr.push(0) }; + res[rows[i]] = arr; + }; + }; + + return res; +}; + diff --git a/scripts/default/master_script.js b/scripts/default/master_script.js new file mode 100644 index 0000000..5720b78 --- /dev/null +++ b/scripts/default/master_script.js @@ -0,0 +1,18 @@ +getNodeByName = (searchNodeName) => { + let children = gtld.node.children; + let child = undefined; + + children.forEach((node) => { + if (node.name == searchNodeName) { + child = node; + } + }); + + return child; +}; + +let __pointUUID = getNodeByName("point").uuid.toString(); + +gtl.log.info("uuid", getNodeByName("point").uuid.toString()); + +gtl.results = { skz: 2, speed: 3, childUUID: __pointUUID }; diff --git a/scripts/default/planetary_gear.js b/scripts/default/planetary_gear.js new file mode 100644 index 0000000..35dec9d --- /dev/null +++ b/scripts/default/planetary_gear.js @@ -0,0 +1,261 @@ +"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("user-functions.js"); + +var gear0 = gtl.import("gt-gear-beat.js"); +var wheel0 = gtl.import("gt-wheel-beat.js"); +var gear1 = gtl.import("gt-gear-fault.js"); +var wheel1 = gtl.import("gt-wheel-fault.js"); + +//настройки для датчика оборотов +var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра +filter_freq.kind = gtl.filter_iir.butterworth; //тип окна +filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ) +filter_freq.order = 8; //порядок фильтра +filter_freq.frequency = 10; //граничная частота фильтра + +//определение частоты вращения +var freq = gtl.add_value_freq(filter_freq); +freq.time = 1; +freq.avg_cnt = 6; +//gtl.diagnostic.interval = /*1*/10; + +//[Блок настройки параметров измерений] +//мониторинговый спектр вибрации +var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации +ausp2.name = "AUSPm"; //присвоение имени спектра +ausp2.color = 0x0000ffff; //цвет линии спектра +ausp2.frequency = 1600; //граничная частота спектра +ausp2.lines = 1600; //разрешение спектра (количество линий) +ausp2.average = 6; //количество усреднений +ausp2.unit = gtl.spec.db; //отображение в дБ + +//спектр вибрации +var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной спектра вибрации +ausp.name = "AUSPd"; //присвоение имени спектра +ausp.color = 0x0000ff00; //цвет линии спектра +ausp.frequency = 800; //граничная частота спектра +ausp.lines = 800; //разрешение спектра (количество линий) +ausp.average = 6; //количество усреднений +ausp.unit = gtl.spec.db; //отображение в дБ +ausp.smoothing_factor = 50; //коэффициент сглаживания спектра +ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии) +ausp.peak_level = 20; //порог обнаружения гармоник +ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/- + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.color = 255; +filter_spen.width = 1482; //ширина полосы фильтра + +//спектр огибающей +var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей +spen.name = "SPEN"; //присвоение имени спектра огибающей +spen.color = 0x00ff0000; //цвет линии спектра огибающей +spen.frequency = 400; //граничная частота спектра огибающей +spen.lines = 400; //разрешение спектра огибающей (количество линий) +spen.average = 8; //количество усреднений +spen.unit = gtl.spec.db; //отображение в дБ +spen.window = gtl.spec.hann; //окно +spen.smoothing_factor = 100; //коэффициент сглаживания спектра +spen.smoothed_line_color = 0xff004dff; //цвет средней линии +spen.peak_level = 10; //порог обнаружения гармоник +spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/- + +//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения) +var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen) +var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen) +rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen) +rms_spen.time = 0.5; //интервал расчета RMS (spen) +ampl_spen.time = 0.5; //интервал расчета Amplitude (spen) +rms_spen.avg_cnt = 4; //количество усреднений RMS (spen) +ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen) + +//RMS и Amplitude в УВЧ диапазоне 10-25 кГц (контроль разрыва масляной пленки) +var filter_uhf = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный) +filter_uhf.kind = gtl.filter_iir.butterworth; //тип окна +filter_uhf.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_uhf.order = 10; //порядок фильтра +filter_uhf.frequency = 17500; //центральная частота полосового фильтра +filter_uhf.width = 15000; //ширина полосы фильтра + +var rms_uhf = gtl.add_value_rms(filter_uhf); //назначение переменной RMS +var ampl_uhf = gtl.add_value_ampl(filter_uhf); //назначение переменной Amplitude +rms_uhf.name = "RMS (uhf)" //присвоение имени RMS (uhf) +rms_uhf.time = 0.5; //интервал расчета RMS (uhf) +ampl_uhf.time = 0.5; //интервал расчета Amplitude (uhf) +rms_uhf.avg_cnt = 4; //количество усреднений RMS (uhf) +ampl_uhf.avg_cnt = 4; //количество усреднений Amplitude (uhf) + +//Виброскорость в дипазоне 2-1000 Гц (вибромониторинг) +var filter2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный) +filter2_1000.kind = gtl.filter_iir.butterworth; //тип окна +filter2_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter2_1000.order = 10; //порядок фильтра +filter2_1000.frequency = 501; //центральная частота полосового фильтра +filter2_1000.width = 998; //ширина полосы фильтра +var filter2_1000v = gtl.add_intg(filter2_1000); // интегрирование +filter2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + +var rms_v2 = gtl.add_value_rms(filter2_1000v); //назначение переменной RMS(V) +rms_v2.name = "RMS(V) 2-1000 Гц" //присвоение имени RMS(V) +rms_v2.time = 0.5; //интервал расчета RMS(V) +rms_v2.avg_cnt = 4; //количество усреднений RMS(V) + +//Виброскорость в дипазоне 10-1000 Гц (вибромониторинг) +var filter10_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].signalChannel]); //назначение переменной фильтра (предварительный) +filter10_1000.kind = gtl.filter_iir.butterworth; //тип окна +filter10_1000.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter10_1000.order = 10; //порядок фильтра +filter10_1000.frequency = 505; //центральная частота полосового фильтра +filter10_1000.width = 990; //ширина полосы фильтра +var filter10_1000v = gtl.add_intg(filter10_1000); // интегрирование +filter10_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + +var rms_v10 = gtl.add_value_rms(filter10_1000v); //назначение переменной RMS(V) +rms_v10.name = "RMS(V) 10-1000 Гц" //присвоение имени RMS(V) +rms_v10.time = 0.5; //интервал расчета RMS(V) +rms_v10.avg_cnt = 4; //количество усреднений RMS(V) + +//[Диагностика] +gtl.diagnostic.interval = freq.time * freq.avg_cnt; +let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала +let acq_time = 0; + +function diagnose() { + switch (state) { + case 0: // считаем частоту вращения и настраиваем спектры + if (imp.INSTABILITY() > imp.tolerance()) { + gtl.log.info("Критическая нестабильность частоты вращения, %", imp.INSTABILITY() * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + if (imp.FREQ() <= imp.FREQNESS()) { + gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + imp.FREQNESS()); + }; + + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //ausp.lines = imp.standart_lines(); + + //определение минимально необходимой длительности сигнала для проведения диагностики + var acq_times = []; + acq_times.push(ausp.acq_time); + acq_times.push(spen.acq_time); + acq_time = Math.max(...acq_times); + + gtl.diagnostic.interval = acq_time; + state = 3; + break; + + case 1: //частота вращения фиксированная + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //ausp.lines = imp.standart_lines(); + + //определение минимально необходимой длительности сигнала для проведения диагностики + var acq_times = []; + acq_times.push(ausp.acq_time); + acq_times.push(spen.acq_time); + acq_time = Math.max(...acq_times); + + gtl.diagnostic.interval = acq_time; + state = 3; + break; + + case 2: //частота вращения из поля INFO (виброметр) + //установка стандартной ширины спектра огибающей и количества линий спектра + spen.frequency = imp.standart_width(imp.spec_width().es); + spen.lines = imp.standart_lines(imp.spec_lines()); + filter_spen.frequency = imp.filter_frequency(); + ausp.frequency = imp.standart_width(imp.spec_width().as1); + //ausp.lines = imp.standart_lines(); + + //определение минимально необходимой длительности сигнала для проведения диагностики + var acq_times = []; + acq_times.push(ausp.acq_time); + acq_times.push(spen.acq_time); + acq_time = Math.max(...acq_times); + + gtl.diagnostic.interval = acq_time; + state = 3; + break; + + case 3: //выполняем анализ спектов + ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации + spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = imp.spec_square(ausp2.data, 800, ausp2.frequency); + + gtl.log.info("Объект диагностики", "Подшипник качения " + options.rbModelName); + gtl.log.info("Минимально необходимая длительность сигнала", acq_time); + gtl.log.info("FREQ", imp.FREQ()); + gtl.log.info("Минимально необходимая частота вращения", imp.FREQNESS()); + gtl.log.info("Площадь спектра", AQ); + gtl.log.info("Нестабильность частоты вращения, %", imp.INSTABILITY() * 100); + gtl.log.info("FTF", imp.FTF()); + gtl.log.info("BPFO", imp.BPFO()); + gtl.log.info("BPFI", imp.BPFI()); + gtl.log.info("BSF", imp.BSF()); + gtl.log.info("Центральная частота полосового фильтра", filter_spen.frequency); + gtl.log.info("Количество долей октавного фильтра", n); + gtl.log.info("Коэффициент для октавного фильтра", kf); + gtl.log.info("Граничная частота спектра", imp.spec_width().es); + gtl.log.info("Расчетное количество линий", imp.spec_lines()); + gtl.log.info("Расчетное разрешение спектра", imp.spec_resolution()); + gtl.log.info("Расчетный коридор обнаружения, %", imp.tolerance() * 100); + gtl.log.info("Стандартная граничная частота", spen.frequency); + gtl.log.info("Стандартное кол-во линий", spen.lines); + gtl.log.info("СКЗ(A) ВЧ вибрации", rms_spen.value); + gtl.log.info("СКЗ(A) УВЧ вибрации", rms_uhf.value); + gtl.log.info("ПФ(A) в ВЧ диапазоне", ampl_spen.value / rms_spen.value); + gtl.log.info("ПФ(A) в УВЧ диапазоне", ampl_uhf.value / rms_uhf.value); + gtl.log.info("СКЗ(V) 2-1000 Гц", rms_v2.value); + gtl.log.info("СКЗ(V) 10-1000 Гц", rms_v10.value); + + let def = {}; + //var indx = 0; + def["Биение шестерни"] = gear0.defect(); //indx (spen = 0, ausp = 0) + def["Биение зубчатого колеса"] = wheel0.defect(); //indx (spen = 1, ausp = 1) + def["Дефект зубьев шестерни"] = gear1.defect(); //indx (spen = 2, ausp = 2) + def["Дефект зубьев зубчатого колеса"] = wheel1.defect(); //indx (spen = 3, ausp = 3) + + var res = { + RMSA: rms_spen.value, + PF: ampl_spen.value / rms_spen.value, + RMS_V2: rms_v2.value, + RMS_V10: rms_v10.value, + SQR: AQ, + defects: def + }; + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/scripts/default/pump.js b/scripts/default/pump.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/rb_defs.js b/scripts/default/rb_defs.js new file mode 100644 index 0000000..3706d8d --- /dev/null +++ b/scripts/default/rb_defs.js @@ -0,0 +1,52 @@ +"use strict"; + +export function rb_defs(mtx, isDeep) { + var res = {}; //результат + if (isDeep = true) { var key = "dp" } else { var key = "lv" }; + var des = { + FTF: { ds: "тел качения и сепаратора", dp: 8, lv: 20 }, + FREQ: { ds: "внутреннего кольца", dp: 13, lv: 20 }, + BSF: { ds: "тел качения", dp: 10, lv: 20 }, + BPFO: { ds: "наружного кольца", dp: 15, lv: 20 }, + BPFI: { ds: "внутреннего кольца", dp: 8, lv: 20 }, + }; //описание функциональных частот + + function get_note(harmsArr) { + let note = "Износ"; //описание характера колебаний + let cnt = 0; //количество значений в массиве + for (let i = 0; i <= harmsArr.length - 1; i++) { if (harmsArr[i] > 0) { cnt++ }; }; + if (cnt >= 5) { note = "Дефект" }; + if (harmsArr[1] > harmsArr[0]) { note = "Перекос" }; + if (cnt > 0 && harmsArr[0] == 0 && harmsArr[1] == 0) { note = "Неидентифицированные изменения вибрации" }; + return note; + }; + + function get_level(lvl, thres) { + let level = "Сильный"; + switch (true) { + case lvl < 0.5 * thres: + level = "Слабый"; + break; + case lvl < thres: + level = "Средний"; + break; + default: + break; + }; return level; + }; + + var rows = Object.keys(mtx); //массив ключей объекта (наборов гармоник) + for (let i = 0; i <= rows.length - 1; i++) { + let arr = mtx[rows[i]]; //массив гармоник + let lvl = Math.max(...arr); //определяем максимальное значение параметра из массива + let sum = arr.reduce(function (a, b) { return a + b }, 0); //сумма элементов массива + if (sum > 0) { + let note = get_note(arr); + res[rows[i]] = note + ' ' + des[rows[i]].ds + ': ' + get_level(lvl, des[rows[i]][key]) + ' (' + lvl + ')'; + }; + }; + return res; +}; + + + diff --git a/scripts/default/rb_mtx.js b/scripts/default/rb_mtx.js new file mode 100644 index 0000000..1018eb1 --- /dev/null +++ b/scripts/default/rb_mtx.js @@ -0,0 +1,61 @@ +"use strict"; + +var ufc = gtl.import("user-functions.js"); + +export function rb_mtx(spec, filter, isDeep) { + var num = 6; //глубина матрицы (количество гармоник) + var level = 0; //уровень развития дефекта + var res = {}; //результат + + var set = { + FTF: { nm: "Частота вращения сепаратора", fn: ufc.FTF(), md: 0, cl: 0xffff0000 }, + FREQ: { nm: "Частота вращения", fn: ufc.FREQ(), md: 0, cl: 0xff0000f0 }, + BSF: { nm: "Частота вращения (контакта) тел качения", fn: ufc.BSF(), md: ufc.FTF(), cl: 0xffFFB841 }, + BPFO: { nm: "Частота перекатывания тел качения по наружному кольцу", fn: ufc.BPFO(), md: ufc.FTF(), cl: 0xffED3CCA }, + BPFI: { nm: "Частота перекатывания тел качения по внутреннему кольцу", fn: ufc.BPFI(), md: ufc.FREQ(), cl: 0xff990090 } + }; //набор функциональных частот + + function mod_factor(dSpec, dFilter, ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = dSpec.resolution / dFilter.width; //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; + }; //определение глубины модуляции ВЧ составляющих + + var rows = Object.keys(set); //массив ключей объекта (наборов гармонических рядов) + //присваиваем набору гармоник переменную, добавляем гармоники: частота, кол-во (default = 10), цвет, вес. + for (let i = 0; i <= rows.length - 1; i++) { + let lines = rows[i]; + let idx = 0; //индекс гармонического ряда + let nms = set[lines].nm; //название гармонического ряда + let frq = set[lines].fn; //расчетная частота + let mod = set[lines].md; //модулирующая частота + let clr = set[lines].cl; //предустановленный цвет + let arr = []; //массив обнаруженных гармоник + + lines = spec.add_harms_set(frq, num, clr, 2); //строим набор частот (гармонический ряд) + lines.name = nms; + idx = spec.index_of_harms_set(lines); //определяем индекс набора частот + if (mod != 0) { spec.harms_sets[idx].modulate(mod, 2, clr, 0.5) }; //строим амплитудную модуляцию + for (let j = 0; j <= num - 1; j++) { + lines.harms[j].tolerance = (j + 1) * frq * ufc.tolerance(); //устанавливаем коридор обнаружения гармоники + if (lines.harms[j].is_present == true) { + switch (isDeep) { + case true: + level = Math.round(mod_factor(spec, filter, lines.harms[j].amplitude, lines.harms[j].base)); + break; + case false: + level = Math.round(lines.harms[j].level); + break; + default: + break; + }; + arr.push(level); + } else { arr.push(0) }; + res[rows[i]] = arr; + }; + }; + + return res; +}; + diff --git a/scripts/default/rolling_bearing.js b/scripts/default/rolling_bearing.js new file mode 100644 index 0000000..d30029d --- /dev/null +++ b/scripts/default/rolling_bearing.js @@ -0,0 +1,177 @@ +"use strict"; +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; + +var fnc = gtl.import("user-functions.js"); +var mtx = gtl.import("rb_mtx.js"); +var def = gtl.import("rb_defs.js"); + +//настройки для датчика оборотов +var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); //объявление переменной фильтра +filter_freq.kind = gtl.filter_iir.butterworth; //тип окна +filter_freq.type = gtl.filter_iir.lowpass; //тип фильтра (ФНЧ) +filter_freq.order = 8; //порядок фильтра +filter_freq.frequency = 10; //граничная частота фильтра + +//определение частоты вращения +var freq = gtl.add_value_freq(filter_freq); +freq.time = 1; +freq.avg_cnt = 6; +//gtl.diagnostic.interval = /*1*/10; + +//[Блок настройки параметров измерений] +//мониторинговый спектр вибрации +var ausp2 = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp2.name = "AUSPm"; //присвоение имени спектра +ausp2.color = 0x0000ffff; //цвет линии спектра +ausp2.frequency = 25600; //граничная частота спектра +ausp2.lines = 1600; //разрешение спектра (количество линий) +ausp2.average = 6; //количество усреднений +ausp2.unit = gtl.spec.db; //отображение в дБ + +//спектр вибрации +var ausp = gtl.add_ausp(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной спектра вибрации +ausp.name = "AUSPd"; //присвоение имени спектра +ausp.color = 0x0000ff00; //цвет линии спектра +ausp.frequency = 800; //граничная частота спектра +ausp.lines = 800; //разрешение спектра (количество линий) +ausp.average = 6; //количество усреднений +ausp.unit = gtl.spec.db; //отображение в дБ +ausp.smoothing_factor = 50; //коэффициент сглаживания спектра +ausp.smoothed_line_color = 0x000000ff; //цвет линии сглаживания (средней линии) +ausp.peak_level = 20; //порог обнаружения гармоник +ausp.harm_tolerance = ausp.resolution; //диапазон поиска гармоник +/- + +//фильтр для формирования спектра огибающей +var filter_spen = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); //назначение переменной фильтра +filter_spen.kind = gtl.filter_iir.butterworth; //тип окна +filter_spen.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter_spen.order = 10; //порядок фильтра +filter_spen.frequency = 6400; //центральная частота полосового фильтра +filter_spen.color = 255; +filter_spen.width = 1482; //ширина полосы фильтра + +//спектр огибающей +var spen = gtl.add_spen(filter_spen); //назначение переменной спектра огибающей +spen.name = "SPEN"; //присвоение имени спектра огибающей +spen.color = 0x00ff0000; //цвет линии спектра огибающей +spen.frequency = 200; //граничная частота спектра огибающей +spen.lines = 200; //разрешение спектра огибающей (количество линий) +spen.average = 8; //количество усреднений +spen.unit = gtl.spec.db; //отображение в дБ +spen.window = gtl.spec.hann; //окно +spen.smoothing_factor = 100; //коэффициент сглаживания спектра +spen.smoothed_line_color = 0xff004dff; //цвет средней линии +spen.peak_level = 10; //порог обнаружения гармоник +spen.harm_tolerance = spen.resolution; //диапазон поиска гармоник +/- + +//RMS и Amplitude в диапазоне спектра огибающей (контроль работы сил трения) +var rms_spen = gtl.add_value_rms(filter_spen); //назначение переменной RMS (spen) +var ampl_spen = gtl.add_value_ampl(filter_spen); //назначение переменной Amplitude (spen) +rms_spen.name = "RMS (spen)" //присвоение имени RMS (spen) +rms_spen.time = 0.5; //интервал расчета RMS (spen) +ampl_spen.time = 0.5; //интервал расчета Amplitude (spen) +rms_spen.avg_cnt = 4; //количество усреднений RMS (spen) +ampl_spen.avg_cnt = 4; //количество усреднений Amplitude (spen) + +//RMS виброскорости в диапазоне 10-1000 Гц. +var int = gtl.add_intg(gtl.analog_inputs[signals[0].portNumber]); //интегрирование сигнала виброускорения +int.taps = 1; //степень интегрирования (скорость из ускорения - 1-нарное интегрирование) +//фильтрация сигнала в диапазоне +var filter = gtl.add_filter_iir(int); //объявление переменной фильтра +filter.kind = gtl.filter_iir.butterworth; //тип окна +filter.type = gtl.filter_iir.bandpass; //тип фильтра (полосовой) +filter.order = 10; //порядок фильтра +filter.frequency = 505; //центральная частота полосового фильтра +filter.width = 990; //ширина полосы фильтра +//определение среднего квадратического значения виброскорости +var rms_v = gtl.add_value_rms(filter); //объявление переменной СКЗ +rms_v.time = 0.5; //время выборки +rms_v.avg_cnt = 4; //количество усреднений + +//[Диагностика] +gtl.diagnostic.interval = freq.time * freq.avg_cnt; +let state = record.tachoOptions.tachoState; //начальное состояние после выбора источника тахо сигнала + +function diagnose() { + switch (state) { + case 0: // считаем частоту вращения и настраиваем спектры + if (fnc.INSTABILITY() > fnc.tolerance()) { + gtl.log.info("Критическая нестабильность частоты вращения, %", fnc.INSTABILITY() * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + if (fnc.FREQ() <= fnc.FREQNESS()) { + gtl.log.info("Частота вращения меньше минимально рекомендуемой", "Минимально рекомендуемая частота: " + fnc.FREQNESS()); + }; + + case 1: //частота вращения фиксированная + case 2: //частота вращения из поля INFO (виброметр) + filter_spen.frequency = fnc.filter_frequency(); //считаме фильтр для огибающей + filter_spen.width = fnc.filter_width(); //определяем ширину фильтра + spen.frequency = fnc.spec_params().frequency; + spen.lines = fnc.spec_params().lines; + ausp.frequency = fnc.spec_params().frequency; + ausp.lines = fnc.spec_params().lines; + + //определение минимально необходимой длительности сигнала для проведения диагностики + let time = []; //массив времени набора данных + time.push(ausp.acq_time); + time.push(spen.acq_time); + let max_acq = Math.max(...time); + gtl.diagnostic.interval = max_acq; + state = 3; + break; + + case 3: //выполняем анализ спектов + ausp.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре вибрации + spen.clear_harms_sets(); //сброс отрисовки набора гармоник в спектре огибающей + + //Вывод информации в лог + //Расчет площади спектра вибрации: спектр, начало отсчета в Гц, граничная частота спектра + var AQ = fnc.spec_square(ausp.data, ausp.frequency / 2, ausp.frequency); + + gtl.log.info("Объект диагностики", options.rbModelName); + gtl.log.info("Минимально необходимая частота вращения", fnc.FREQNESS()); + gtl.log.info("FREQ", fnc.FREQ()); + gtl.log.info("FTF", fnc.FTF()); + gtl.log.info("BPFO", fnc.BPFO()); + gtl.log.info("BPFI", fnc.BPFI()); + gtl.log.info("BSF", fnc.BSF()); + gtl.log.info("Коридор обнаружения гармоники", fnc.tolerance()); + gtl.log.info("Полосовой фильтр (расчетный)", filter_spen.frequency); + gtl.log.info("Ширина фильтра", filter_spen.width); + gtl.log.info("Граничная частота SPEN", spen.frequency); + gtl.log.info("Количество линий SPEN", spen.lines); + gtl.log.info("Разрешение SPEN", spen.resolution); + gtl.log.info("Ширина AUSP", ausp.frequency); + + let spen_mx = mtx.rb_mtx(spen, filter_spen, true); + let spen_df = def.rb_defs(spen_mx, true); + let ausp_mx = mtx.rb_mtx(ausp, 0, true); + + var res = { + RMSA: rms_spen.value, + RMSV: rms_v.value, + PF: ampl_spen.value / rms_spen.value, + SQR: AQ, + matrix: spen_mx, + defs: spen_df + }; + + gtl.results = res; + gtl.diagnostic.stop(); + break; + + default: + break; + } +} \ No newline at end of file diff --git a/scripts/default/sample_excel_export.js b/scripts/default/sample_excel_export.js new file mode 100644 index 0000000..c204696 --- /dev/null +++ b/scripts/default/sample_excel_export.js @@ -0,0 +1,8 @@ +let __result = { skz: 1, +test_array: [ { col1: {}, col2: 2, col3: 3}, { col1: [], col2: 2, col3: 3}, { col2 : 5, col3: 6.3, col4: "ddd", col5: true } ], +test_object: { col1: [1, 2, 3, 4, 5, 6], col2: ["dd", true, 0.5], col3: [], col4: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }, +test_simple_array: [1, 2, 3, 4, 5, {}, [], true, 6, 7, 8, 9, 10] }; + +gtl.results = __result; + +gtl.diagnostic.stop(); \ No newline at end of file diff --git a/scripts/default/sliding_bearing.js b/scripts/default/sliding_bearing.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/turbine.js b/scripts/default/turbine.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/default/user-functions.js b/scripts/default/user-functions.js new file mode 100644 index 0000000..0debafc --- /dev/null +++ b/scripts/default/user-functions.js @@ -0,0 +1,245 @@ +//параметры подшипника качения +var rbModelName = options.rbModelName || "No Name"; +var rbVendor = options.rbVendor || "No Vendor"; +var rb_inner = options.rbInnerD || 0; //диаметр внутреннего кольца +var rb_outer = options.rbOuterD || 0; //диаметр наружного кольца +var rb_roller = options.rbRollerD || 0; //диаметр тела качения +var rb_rollerCount = options.rbRollerCount || 0; //количество тел качения +var rb_angle = (options.rbAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.) +var rb_cage = (rb_inner + rb_outer) / 2; //диаметр сепаратора (средний диаметр) + +//параметры ШВП +var bsModelName = options.bsModelName || "No Name"; +var bsVendor = options.bsVendor || "No Vendor"; +var bs_inner = options.bsInnerD || 0; //диаметр внутреннего кольца +var bs_outer = options.bsOuterD || 0; //диаметр наружного кольца +var bs_roller = options.bsRollerD || 0; //диаметр тела качения +var bs_rollerCount = options.bsRollerCount || 0; //количество тел качения +var bs_angle = (options.bsAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.) +var bs_cage = (bs_inner + bs_outer) / 2; //средний диаметр + +//параметры редуктора +var gtZ1 = options.gtZ1 || 0; //количество зубьев шестерни +var gtZ2 = options.gtZ2 || 0; //количество зубьев зубчатого колеса + +//параметры ременной передачи +var bdD1 = options.bdD1 || 0; //диаметр ведущего шкива +var bdD2 = options.bdD2 || 0; //диаметр ведомого шкива +var bdL = options.bdL || 0; //длинна ремня + +//параметры зубчатой ременной передачи +var cbdZ1 = options.cbdZ1 || 0; //количество зубьев ведущего шкива +var cbdZ2 = options.cbdZ2 || 0; //количество зубьев ведомого шкива +var cbdZ3 = options.cbdZ3 || 0; //количество зубьев ремня + +//параметры насоса +var pmBlades = options.pmBlades || 0; //количество лопастей насосного колеса + +//параметры планетарной передачи +var pgZ1 = options.pgZ1 || 0; //количество зубьев солнца +var pgZ2 = options.pgZ2 || 0; //количество зубьев саттелитов +var pgZ3 = options.pgZ3 || 0; //количество зубьев короны +var pgN = options.pgN || 0; //количество саттелитов + +//параметры турбины +var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + +//параметры электродвигателя +//var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + +export function FREQ() { + let FR = 0; + switch (record.tachoOptions.tachoState) { + case 0: + FR = freq.value * options.tachoRatio; + break; + case 1: + FR = record.tachoOptions.tachoValue * options.tachoRatio; + break; + case 2: + FR = record.tachoOptions.tachoFromInfo * options.tachoRatio; + break; + }; return FR; +}; //определение частоты вращения в зависимости от источника тахо сигнала (FREQ) + +export function INSTABILITY() { + let freq_max = Math.max(...freq.values); + let freq_min = Math.min(...freq.values); + let instability = (freq_max - freq_min) / freq.value; + return instability; +}; //нестабильность частоты вращения в % + +//определение вспомогательных коэффициентов k1 и k2 для подшипников качения и ШВП +var rb_k1 = 0.5 * (1 - (rb_roller / rb_cage) * Math.cos(rb_angle)); +var rb_k2 = 0.5 * (1 + (rb_roller / rb_cage) * Math.cos(rb_angle)); +var bs_k1 = 0.5 * (1 - (bs_roller / bs_cage) * Math.cos(bs_angle)); +var bs_k2 = 0.5 * (1 + (bs_roller / bs_cage) * Math.cos(bs_angle)); + +export function FREQNESS() { + let R = (rb_inner / 2) + (rb_roller / 2); //расстояние до центра тяжести тела качения + let freqness = (Math.sqrt(9.81 / (4 * (Math.PI ** 2) * R / 1000))) / rb_k1; + return freqness; +}; //минимально необходимая частота вращения для компенсации силы тяжести центробежной силой + +export function FTF() { return rb_k1 * FREQ(); }; //частота вращения сепаратора (FTF) +export function BPFO() { return rb_k1 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по наружному кольцу (BPFO) +export function BPFI() { return rb_k2 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по внутреннему кольцу (BPFI) +export function BSF() { return 2 * FREQ() * (rb_cage / rb_roller) * rb_k1 * rb_k2; }; //частота вращения (контакта) тел качения (BSF) + +export function BSFTF() { return bs_k1 * FREQ(); }; //частота вращения сепаратора (перемещения тел качения) +export function BSNUT() { return bs_k1 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по гайке +export function BSSCR() { return bs_k2 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по винту +export function BSBAL() { return 2 * FREQ() * (bs_cage / bs_roller) * bs_k1 * bs_k2; }; //частота вращения (контакта) тел качения + +export function BDF2() { return FREQ() * (bdD1 / bdD2) }; //частота вращения ведомого шкива +export function BDFB() { return FREQ() * (Math.PI * bdD1 / bdL) }; //частота вращения ремня + +export function CBFZ() { return FREQ() * cbdZ1; }; //зубцовая частота +export function CBDF2() { return FREQ() * (cbdZ1 / cbdZ2) }; //частота вращения ведомого шкива +export function CBDFB() { return FREQ() * (cbdZ1 / cbdZ3) }; //частота вращения ремня + +export function PMFBLD() { return FREQ() * pmBlades; }; //лопастная частота + +export function GTFZ() { return FREQ() * gtZ1; }; //зубцовая частота +export function GTF2() { return FREQ() * (gtZ1 / gtZ2); }; //частота вращения второго вала редуктора + +export function PGF2() { return (0.5 * FREQ() * pgZ1) / (pgZ1 + pgZ2); }; //частота вращения выходного вала планетарной передачи +export function PGFSAT() { return (0.5 * FREQ()) * (pgZ1 / pgZ2) * ((pgZ1 + 2 * pgZ2) / (pgZ1 + pgZ2)); }; //частота вращения саттелита +export function PGFZ() { return pgZ2 * PGFSAT() }; //зубцовая частота + +export function TRFBLD() { return FREQ() * trBlades; }; //лопастная частота + +export function filter_frequency() { + let filter = 6013.41 * Math.log(0.266935 * FREQ() + 1.1201); + return filter; +}; //расчетная центральная частота полосового фильтра для спектра огибающей + +export function filter_width(number) { + let n = 3; + if (number != null) { n = number }; + let kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2)); //коэффициент для полосового фильтра + let width = kf * filter_frequency(); + return width; +}; //ширина фильтра спектра огибающей + +export function tolerance() { + let tol = 0; + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + break; + case 2: //подшипник качения + tol = (2 * FTF()) / (5 * BPFO()); + break; + case 3: //ШВП + tol = (2 * BSFTF()) / (5 * BSNUT()); + break; + case 4: //редуктор + tol = (2 * FREQ()) / (5 * GTFZ()); + break; + case 5: //ременная передача + break; + case 6: //зубчатый ремень + break; + case 7: //помпа + break; + case 8: //планетарый редуктор + tol = (2 * PGF2()) / (5 * PGFZ()); + break; + case 9: //турбина + break; + case 10: //электродвигатель + break; + }; return tol; +}; //максимальный коридор обнаружения гармоник (tolerance) + +export function spec_params() { + let frq = 200; //ширина спектра + let res = 400; //частотное разрешение + function getStandart(value) { + let arr = [50, 100, 200, 400, 800, 1600, 3200, 6400, 12800]; //массив стандартных величин + let t = arr[0]; + if (value >= arr[arr.length - 1]) { t = arr[arr.length - 1] } else { + for (let i = 0; i <= arr.length - 1; i++) { + if (value > arr[i]) { t = arr[i + 1] }; + }; + }; return t + }; + + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + frq = 20 * FREQ(); + res = FREQ() / 8; + break; + case 2: //подшипник качения + frq = 5 * BPFI() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 3: //ШВП + frq = 5 * BSSCR() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 4: //редуктор + frq = 3 * GTFZ() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 5: //ременная передача + frq = 400; + res = BDFB() / 4; + break; + case 6: //зубчатый ремень + frq = 400; + res = CBDFB() / 4; + break; + case 7: //помпа + frq = 3 * PMFBLD() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 8: //планетарый редуктор + frq = 3 * PGFZ() + 4 * FREQ(); + res = PGF2() / 8; + break; + case 9: //турбина + frq = 3 * TRFBLD() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 10: //электродвигатель + frq = 400; + res = FREQ() / 8; + break; + }; return { + frequency: getStandart(frq), + lines: getStandart(getStandart(frq) / res), + resolution: getStandart(frq) / getStandart(getStandart(frq) / res) + }; +}; + +export function spec_square(data, bnd, frq) { + let lines = data.length; //определение количества линий спектра вибрации + let res = frq / lines; //определение частотного разрешения спектра вибрации (основание прямоугольной трапеции) + let start = 1; //переменная для определения стартового индекса в массиве + let S = 0; //переменная расчетной площади спектра вибрации + if (bnd !== 0) { start = lines - Math.round((frq - bnd) / res) }; //начальная точка отсчета в массиве (стартовый индекс) + for (let i = start - 1; i <= lines - 2; i++) { S = S + res * ((data[i] + data[i + 1]) / 2) }; //вычисляем площадь спектра вибрации + return S; +}; //определение площади спектра + +export function mod_factor(ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = spec_params().resolution / filter_width(); //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; +}; //определение условной глубины модуляции + +export function deep_factor(ampl, base) { + let deep = (ampl - base) / (ampl + base) * 100; + return deep; +}; //определение условной глубины модуляции + +export function ampl_factor(ampl, base) { + let crest = (ampl / base); + return crest; +}; //определение амплитудного коэффициента diff --git a/scripts/functions.js b/scripts/functions.js new file mode 100644 index 0000000..0dddbe0 --- /dev/null +++ b/scripts/functions.js @@ -0,0 +1,246 @@ + // Дополнительные функции + + // Параметры подшипника подгружаемые из база данных из скады + var rbModelName = gtl.options.rbModelName || "No Name"; + var rbVendor = gtl.options.rbVendor || "No Vendor"; + var d_outer = gtl.options.rbOuterD || 0; + var d_inner = gtl.options.rbInnerD || 0; + var d_roller = gtl.options.rbRollerD || 0; + var z = gtl.options.rbRollerCount || 0; + var angle = ((gtl.options.rbAngle || 0) * 3.1415926) / 180; + var d_cage = (d_inner + d_outer) / 2; // диаметр сепаратора (средний диаметр) + + // Параметры редуктора + var gtZ1 = options.gtZ1 || 0; //количество зубьев шестерни + var gtZ2 = options.gtZ2 || 0; //количество зубьев зубчатого колеса + + // Параметры ременной передачи + var bdD1 = options.bdD1 || 0; //диаметр ведущего шкива + var bdD2 = options.bdD2 || 0; //диаметр ведомого шкива + var bdL = options.bdL || 0; //длинна ремня + + // Параметры зубчатой ременной передачи + var cbdZ1 = options.cbdZ1 || 0; //количество зубьев ведущего шкива + var cbdZ2 = options.cbdZ2 || 0; //количество зубьев ведомого шкива + var cbdZ3 = options.cbdZ3 || 0; //количество зубьев ремня + + // Параметры насоса + var pmBlades = options.pmBlades || 0; //количество лопастей насосного колеса + + // Параметры планетарной передачи + var pgZ1 = options.pgZ1 || 0; //количество зубьев солнца + var pgZ2 = options.pgZ2 || 0; //количество зубьев саттелитов + var pgZ3 = options.pgZ3 || 0; //количество зубьев короны + var pgN = options.pgN || 0; //количество саттелитов + + // Параметры турбины + var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + + // Параметры электродвигателя + // var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + + + // 1. Получение данных о частоте вращения + // Определение частоты вращения в зависимости от источника тахо сигнала (FREQ) + export function FREQ() { + let FR = 0; + switch (record.tachoOptions.tachoState) { + case 0: + FR = freq.value * options.tachoRatio; + break; + case 1: + FR = record.tachoOptions.tachoValue * options.tachoRatio; + break; + case 2: + FR = record.tachoOptions.tachoFromInfo * options.tachoRatio; + break; + }; return FR; + }; + + // Минимально необходимая частота вращения для компенсации силы тяжести центробежной силой + export function FREQNESS() { + let R = (d_inner / 2) + (d_roller / 2); //расстояние до центра тяжести тела качения + let freqness = (Math.sqrt(9.81 / (4 * (Math.PI ** 2) * R / 1000))) / k1; + return freqness; + }; + + // 2. Частоты подшипника качения + // kFREQ - коэффициент для диагностики на выбеге + export function k1() { return 0.5 * (1 - (d_roller / d_cage) * Math.cos(angle)); }; // вспомогательный коэффициент k1 + export function k2() { return 0.5 * (1 + (d_roller / d_cage) * Math.cos(angle)); }; // вспомогательный коэффициент k2 + export function FTF() { return k1() * FREQ(); }; // частота вращения сепаратора (FTF) + export function BPFO() { return k1() * FREQ() * z; }; // частота перекатывания тел качения по наружному кольцу (BPFO) + export function BPFI() { return k2() * FREQ() * z; }; // частота перекатывания тел качения по внутреннему кольцу (BPFI) + export function BSF() { return 2 * FREQ() * (d_cage / d_roller) * k1() * k2(); }; // частота вращения (контакта) тел качения (BSF) + + // 3. Настройки спектра огибающей + // Ширина спектра огибающей + export function spen_frequency() { + let flim = 0; + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + flim = 20 * FREQ(); + break; + case 2: //подшипник качения + flim = 5 * BPFI() + 4 * FREQ(); + break; + case 3: //ШВП + break; + case 4: //редуктор + flim = 5 * GTFZ() + 4 * FREQ(); + break; + case 5: //ременная передача + break; + case 6: //зубчатый ремень + break; + case 7: //помпа + break; + case 8: //планетарый редуктор + flim = 3 * PGFZ() + 4 * FREQ(); + break; + case 9: //турбина + break; + case 10: //электродвигатель + break; + }; return flim; + }; + + // Частотное разрешение (разделение двух гармоник с минимальной частотой) + export function spen_resolution() { + let res = 0; + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + res = FREQ() / 8; + break; + case 2: //подшипник качения + res = FREQ() / 8; + break; + case 3: //ШВП + break; + case 4: //редуктор + res = FREQ() / 8; + break; + case 5: //ременная передача + break; + case 6: //зубчатый ремень + break; + case 7: //помпа + break; + case 8: //планетарый редуктор + res = PGF2() / 8; + break; + case 9: //турбина + break; + case 10: //электродвигатель + break; + }; return res; + }; + + // Минимальное количество линий спектра + export function spen_lines() { return spen_frequency() / spen_resolution(); }; + + // Максимальный коридор обнаружения гармоник (tolerance) + export function tolerance() { + let tol = 0; + switch (options.objectType) { + case 0: // объект не выбран + break; + case 1: // подшипник скольжения + break; + case 2: // подшипник качения + tol = (2 * FTF()) / (5 * BPFO()); + break; + case 3: // ШВП + break; + case 4: // редуктор + tol = (2 * FREQ()) / (5 * GTFZ()); + break; + case 5: // ременная передача + break; + case 6: // зубчатый ремень + break; + case 7: // помпа + break; + case 8: // планетарый редуктор + tol = (2 * PGF2()) / (5 * PGFZ()); + break; + case 9: // турбина + break; + case 10: // электродвигатель + break; + }; return tol; + }; + + // Стандартная ширина спектра + export function standart_width() { + let STFRQ = 0; + if (spen_frequency() <= 50) { STFRQ = 50 } else + if (spen_frequency() > 50 && spen_frequency() <= 100) { STFRQ = 100 } else + if (spen_frequency() > 100 && spen_frequency() <= 200) { STFRQ = 200 } else + if (spen_frequency() > 200 && spen_frequency() <= 400) { STFRQ = 400 } else + if (spen_frequency() > 400 && spen_frequency() <= 800) { STFRQ = 800 } else { STFRQ = 1600 }; return STFRQ + }; + + // Стандартное количество линий спектра + export function standart_lines() { + let STLNS = 0; + if (spen_lines() <= 200) { STLNS = 200 } else + if (spen_lines() > 200 && spen_lines() <= 400) { STLNS = 400 } else + if (spen_lines() > 400 && spen_lines() <= 800) { STLNS = 800 } else + if (spen_lines() > 800 && spen_lines() <= 1600) { STLNS = 1600 } else { STLNS = 3200 }; return STLNS + }; + + // 5. Расчёт площади под спектром до средней линии + export function delta_square (data, base, band, freq, level) { + let lines = data.length; // определение количества линий спектра + let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции) + let start = 1; // переменная для определения стартового индекса в массиве + let S_data = 0; // переменная расчетной площади спектра + let S_base = 0; // переменная расчетной площади под средней линией + let S_delta = 0; + let new_data = []; // нормализованный массив спектра + if (band != 0) { start = lines - Math.round((freq - band) / res) }; // начальная точка отсчета в массиве (стартовый индекс) + for (let i = 0; i <= lines - 1; i++) { + if (data[i] - base[i] > 0) { new_data[i] = data[i]; + } else { new_data[i] = base[i]; } }; // нормализуем массив спектра + for (let i = start - 1; i <= lines - 2; i++) { + S_data = S_data + res * ((new_data[i] + level + new_data[i+1] + level) / 2) }; //вычисляем площадь спектра + for (let i = start - 1; i <= lines - 2; i++) { + S_base = S_base + res * ((base[i] + level + base[i+1] + level) / 2) }; //вычисляем площадь под средней линией + return S_delta = S_data - S_base; + }; + + // 6. Расчёт площади под спектром + export function spectr_square (data, band, freq, level) { + // data - массив амплитуд + // band - начало вычисления площади (фильтр) + // freq - конец вычисления площади (фильтр) + let lines = data.length; // определение количества линий спектра + let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции) + let start = 1; // переменная для определения стартового индекса в массиве + let S_data = 0; // переменная расчетной площади под спектром + if (band != 0) {start = lines - Math.round((freq - band) / res)}; // начальная точка отсчета в массиве (стартовый индекс) + for (let i = start - 1; i <= lines - 2; i++) + { S_data = S_data + res * ((data[i] + level + data[i+1] + level) / 2) }; // вычисляем площадь спектра + return S_data; + }; + + // 7. Расчёт площади под средней линией + export function smoothed_line_square (base, band, freq, level) { + // base - массив амплитуд средней линии спектра + // band - начало вычисления площади (фильтр) + // freq - конец вычисления площади (фильтр) + let lines = base.length; // определение количества линий спектра + let res = freq / lines; // определение частотного разрешения спектра (основание прямоугольной трапеции) + let start = 1; // переменная для определения стартового индекса в массиве + let S_base = 0; // переменная расчетной площади под средней линией спектра + if (band != 0) {start = lines - Math.round((freq - band) / res)}; // начальная точка отсчета в массиве (стартовый индекс) + for (let i = start - 1; i <= lines - 2; i++) + { S_base = S_base + res * ((base[i] + level + base[i+1] + level) / 2) }; // вычисляем площадь средней линии спектра + return S_base; + }; + diff --git a/scripts/functions_for_balance.js b/scripts/functions_for_balance.js new file mode 100644 index 0000000..69ffec6 --- /dev/null +++ b/scripts/functions_for_balance.js @@ -0,0 +1,20 @@ + // Дополнительные функции + + + // 1. Получение данных о частоте вращения + // Определение частоты вращения в зависимости от источника тахо сигнала (FREQ) + export function FREQ() { + let FR = 0; + switch (record.tachoOptions.tachoState) { + case 0: + FR = freq.value * options.tachoRatio; + break; + case 1: + FR = record.tachoOptions.tachoValue * options.tachoRatio; + break; + case 2: + FR = record.tachoOptions.tachoFromInfo * options.tachoRatio; + break; + }; return FR; + }; + diff --git a/scripts/functions_for_test_apfc.js b/scripts/functions_for_test_apfc.js new file mode 100644 index 0000000..69ffec6 --- /dev/null +++ b/scripts/functions_for_test_apfc.js @@ -0,0 +1,20 @@ + // Дополнительные функции + + + // 1. Получение данных о частоте вращения + // Определение частоты вращения в зависимости от источника тахо сигнала (FREQ) + export function FREQ() { + let FR = 0; + switch (record.tachoOptions.tachoState) { + case 0: + FR = freq.value * options.tachoRatio; + break; + case 1: + FR = record.tachoOptions.tachoValue * options.tachoRatio; + break; + case 2: + FR = record.tachoOptions.tachoFromInfo * options.tachoRatio; + break; + }; return FR; + }; + diff --git a/scripts/tools.js b/scripts/tools.js new file mode 100644 index 0000000..67fd325 --- /dev/null +++ b/scripts/tools.js @@ -0,0 +1,81 @@ +//отрисовка спектров и компонентов на координатных плоскостях +var ausp = gtl.create_ausp( + { + src: gtl.analog_inputs[0], + frequency: 1000, + resolution: 1, + average: 3, + overlap: .5, + window: gtl.spec.rectangular, + view: gtl.spec.db + } +); //создание спектра вибрации + + +gtl.diagnostic.interval = ausp.acq_time; +gtl.log.info("acq time", ausp.acq_time); + +let plot1 = gtl.plots.add("Спектр вибрации"); //создание координатной плоскости для спектра вибрации + +function diagnose() { + let __tools = gtl.create_spec_tools( + { + data: ausp.data, + df: ausp.resolution, + base: { + factor: 100, + visible: true, + color: 0xff0000 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 15 + }, + harms: { + tolerance: 1 + } + } + ); //создание компонентов + + let __row1 = __tools.harms.add(50, 3, 0xff0000, 1); //добавление набора гармоник (частота, количество, цвет, вес) + __row1.name = "row2"; //наименование набора гармоник + __row1.modulate(5, 2, 0x00ff00, 1); //добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + plot1.add( + { + color: 0x0000ff, + name: "ausp", + x: ausp.resolution, + y: ausp.data, + spec_tools: __tools.to_json() + } + ); //отрисовка спектра вибрации и компонентов на координатной плоскости 1 + + let __result = __tools.to_json(); + gtl.results = __result; + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + + + gtl.diagnostic.stop(); +}; \ No newline at end of file diff --git a/scripts/user-functions.js b/scripts/user-functions.js new file mode 100644 index 0000000..0debafc --- /dev/null +++ b/scripts/user-functions.js @@ -0,0 +1,245 @@ +//параметры подшипника качения +var rbModelName = options.rbModelName || "No Name"; +var rbVendor = options.rbVendor || "No Vendor"; +var rb_inner = options.rbInnerD || 0; //диаметр внутреннего кольца +var rb_outer = options.rbOuterD || 0; //диаметр наружного кольца +var rb_roller = options.rbRollerD || 0; //диаметр тела качения +var rb_rollerCount = options.rbRollerCount || 0; //количество тел качения +var rb_angle = (options.rbAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.) +var rb_cage = (rb_inner + rb_outer) / 2; //диаметр сепаратора (средний диаметр) + +//параметры ШВП +var bsModelName = options.bsModelName || "No Name"; +var bsVendor = options.bsVendor || "No Vendor"; +var bs_inner = options.bsInnerD || 0; //диаметр внутреннего кольца +var bs_outer = options.bsOuterD || 0; //диаметр наружного кольца +var bs_roller = options.bsRollerD || 0; //диаметр тела качения +var bs_rollerCount = options.bsRollerCount || 0; //количество тел качения +var bs_angle = (options.bsAngle * Math.PI) / 180 || 0; //угол контакта тел качения (рад.) +var bs_cage = (bs_inner + bs_outer) / 2; //средний диаметр + +//параметры редуктора +var gtZ1 = options.gtZ1 || 0; //количество зубьев шестерни +var gtZ2 = options.gtZ2 || 0; //количество зубьев зубчатого колеса + +//параметры ременной передачи +var bdD1 = options.bdD1 || 0; //диаметр ведущего шкива +var bdD2 = options.bdD2 || 0; //диаметр ведомого шкива +var bdL = options.bdL || 0; //длинна ремня + +//параметры зубчатой ременной передачи +var cbdZ1 = options.cbdZ1 || 0; //количество зубьев ведущего шкива +var cbdZ2 = options.cbdZ2 || 0; //количество зубьев ведомого шкива +var cbdZ3 = options.cbdZ3 || 0; //количество зубьев ремня + +//параметры насоса +var pmBlades = options.pmBlades || 0; //количество лопастей насосного колеса + +//параметры планетарной передачи +var pgZ1 = options.pgZ1 || 0; //количество зубьев солнца +var pgZ2 = options.pgZ2 || 0; //количество зубьев саттелитов +var pgZ3 = options.pgZ3 || 0; //количество зубьев короны +var pgN = options.pgN || 0; //количество саттелитов + +//параметры турбины +var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + +//параметры электродвигателя +//var trBlades = options.trBlades || 0; //количество лопастей крыльчатки турбины + +export function FREQ() { + let FR = 0; + switch (record.tachoOptions.tachoState) { + case 0: + FR = freq.value * options.tachoRatio; + break; + case 1: + FR = record.tachoOptions.tachoValue * options.tachoRatio; + break; + case 2: + FR = record.tachoOptions.tachoFromInfo * options.tachoRatio; + break; + }; return FR; +}; //определение частоты вращения в зависимости от источника тахо сигнала (FREQ) + +export function INSTABILITY() { + let freq_max = Math.max(...freq.values); + let freq_min = Math.min(...freq.values); + let instability = (freq_max - freq_min) / freq.value; + return instability; +}; //нестабильность частоты вращения в % + +//определение вспомогательных коэффициентов k1 и k2 для подшипников качения и ШВП +var rb_k1 = 0.5 * (1 - (rb_roller / rb_cage) * Math.cos(rb_angle)); +var rb_k2 = 0.5 * (1 + (rb_roller / rb_cage) * Math.cos(rb_angle)); +var bs_k1 = 0.5 * (1 - (bs_roller / bs_cage) * Math.cos(bs_angle)); +var bs_k2 = 0.5 * (1 + (bs_roller / bs_cage) * Math.cos(bs_angle)); + +export function FREQNESS() { + let R = (rb_inner / 2) + (rb_roller / 2); //расстояние до центра тяжести тела качения + let freqness = (Math.sqrt(9.81 / (4 * (Math.PI ** 2) * R / 1000))) / rb_k1; + return freqness; +}; //минимально необходимая частота вращения для компенсации силы тяжести центробежной силой + +export function FTF() { return rb_k1 * FREQ(); }; //частота вращения сепаратора (FTF) +export function BPFO() { return rb_k1 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по наружному кольцу (BPFO) +export function BPFI() { return rb_k2 * FREQ() * rb_rollerCount; }; //частота перекатывания тел качения по внутреннему кольцу (BPFI) +export function BSF() { return 2 * FREQ() * (rb_cage / rb_roller) * rb_k1 * rb_k2; }; //частота вращения (контакта) тел качения (BSF) + +export function BSFTF() { return bs_k1 * FREQ(); }; //частота вращения сепаратора (перемещения тел качения) +export function BSNUT() { return bs_k1 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по гайке +export function BSSCR() { return bs_k2 * FREQ() * bs_rollerCount; }; //частота перекатывания тел качения по винту +export function BSBAL() { return 2 * FREQ() * (bs_cage / bs_roller) * bs_k1 * bs_k2; }; //частота вращения (контакта) тел качения + +export function BDF2() { return FREQ() * (bdD1 / bdD2) }; //частота вращения ведомого шкива +export function BDFB() { return FREQ() * (Math.PI * bdD1 / bdL) }; //частота вращения ремня + +export function CBFZ() { return FREQ() * cbdZ1; }; //зубцовая частота +export function CBDF2() { return FREQ() * (cbdZ1 / cbdZ2) }; //частота вращения ведомого шкива +export function CBDFB() { return FREQ() * (cbdZ1 / cbdZ3) }; //частота вращения ремня + +export function PMFBLD() { return FREQ() * pmBlades; }; //лопастная частота + +export function GTFZ() { return FREQ() * gtZ1; }; //зубцовая частота +export function GTF2() { return FREQ() * (gtZ1 / gtZ2); }; //частота вращения второго вала редуктора + +export function PGF2() { return (0.5 * FREQ() * pgZ1) / (pgZ1 + pgZ2); }; //частота вращения выходного вала планетарной передачи +export function PGFSAT() { return (0.5 * FREQ()) * (pgZ1 / pgZ2) * ((pgZ1 + 2 * pgZ2) / (pgZ1 + pgZ2)); }; //частота вращения саттелита +export function PGFZ() { return pgZ2 * PGFSAT() }; //зубцовая частота + +export function TRFBLD() { return FREQ() * trBlades; }; //лопастная частота + +export function filter_frequency() { + let filter = 6013.41 * Math.log(0.266935 * FREQ() + 1.1201); + return filter; +}; //расчетная центральная частота полосового фильтра для спектра огибающей + +export function filter_width(number) { + let n = 3; + if (number != null) { n = number }; + let kf = (2 ** (1 / n) - 1) / ((2 ** (1 / n)) ** (1 / 2)); //коэффициент для полосового фильтра + let width = kf * filter_frequency(); + return width; +}; //ширина фильтра спектра огибающей + +export function tolerance() { + let tol = 0; + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + break; + case 2: //подшипник качения + tol = (2 * FTF()) / (5 * BPFO()); + break; + case 3: //ШВП + tol = (2 * BSFTF()) / (5 * BSNUT()); + break; + case 4: //редуктор + tol = (2 * FREQ()) / (5 * GTFZ()); + break; + case 5: //ременная передача + break; + case 6: //зубчатый ремень + break; + case 7: //помпа + break; + case 8: //планетарый редуктор + tol = (2 * PGF2()) / (5 * PGFZ()); + break; + case 9: //турбина + break; + case 10: //электродвигатель + break; + }; return tol; +}; //максимальный коридор обнаружения гармоник (tolerance) + +export function spec_params() { + let frq = 200; //ширина спектра + let res = 400; //частотное разрешение + function getStandart(value) { + let arr = [50, 100, 200, 400, 800, 1600, 3200, 6400, 12800]; //массив стандартных величин + let t = arr[0]; + if (value >= arr[arr.length - 1]) { t = arr[arr.length - 1] } else { + for (let i = 0; i <= arr.length - 1; i++) { + if (value > arr[i]) { t = arr[i + 1] }; + }; + }; return t + }; + + switch (options.objectType) { + case 0: //объект не выбран + break; + case 1: //подшипник скольжения + frq = 20 * FREQ(); + res = FREQ() / 8; + break; + case 2: //подшипник качения + frq = 5 * BPFI() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 3: //ШВП + frq = 5 * BSSCR() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 4: //редуктор + frq = 3 * GTFZ() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 5: //ременная передача + frq = 400; + res = BDFB() / 4; + break; + case 6: //зубчатый ремень + frq = 400; + res = CBDFB() / 4; + break; + case 7: //помпа + frq = 3 * PMFBLD() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 8: //планетарый редуктор + frq = 3 * PGFZ() + 4 * FREQ(); + res = PGF2() / 8; + break; + case 9: //турбина + frq = 3 * TRFBLD() + 4 * FREQ(); + res = FREQ() / 8; + break; + case 10: //электродвигатель + frq = 400; + res = FREQ() / 8; + break; + }; return { + frequency: getStandart(frq), + lines: getStandart(getStandart(frq) / res), + resolution: getStandart(frq) / getStandart(getStandart(frq) / res) + }; +}; + +export function spec_square(data, bnd, frq) { + let lines = data.length; //определение количества линий спектра вибрации + let res = frq / lines; //определение частотного разрешения спектра вибрации (основание прямоугольной трапеции) + let start = 1; //переменная для определения стартового индекса в массиве + let S = 0; //переменная расчетной площади спектра вибрации + if (bnd !== 0) { start = lines - Math.round((frq - bnd) / res) }; //начальная точка отсчета в массиве (стартовый индекс) + for (let i = start - 1; i <= lines - 2; i++) { S = S + res * ((data[i] + data[i + 1]) / 2) }; //вычисляем площадь спектра вибрации + return S; +}; //определение площади спектра + +export function mod_factor(ampl, base) { + let dl = (ampl - base); //разность уровней гармонической и случайной составляющей вибрации + let df = spec_params().resolution / filter_width(); //отношение частотному разрешению спектра к ширине фильтра + let mod = Math.sqrt((10 ** (dl / 10) - 1) * df) * 100; + return mod; +}; //определение условной глубины модуляции + +export function deep_factor(ampl, base) { + let deep = (ampl - base) / (ampl + base) * 100; + return deep; +}; //определение условной глубины модуляции + +export function ampl_factor(ampl, base) { + let crest = (ampl / base); + return crest; +}; //определение амплитудного коэффициента diff --git a/scripts/Две_плоскости_с_фазой (до редактирования).js b/scripts/Две_плоскости_с_фазой (до редактирования).js new file mode 100644 index 0000000..47a855f --- /dev/null +++ b/scripts/Две_плоскости_с_фазой (до редактирования).js @@ -0,0 +1,1407 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ с фазой ***** +// ************************************************************** + +// Получение входных сигналов + + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // Канал 0 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter0_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter0_2_1000.kind = gtl.filter_iir.butterworth; + filter0_2_1000.type = gtl.filter_iir.bandpass; + filter0_2_1000.order = 6; + filter0_2_1000.frequency = 502; // центральная частота полосового фильтра + filter0_2_1000.width = 1000; // ширина полосы фильтра + var filter0_2_1000v = gtl.add_intg(filter0_2_1000); // интегрирование + filter0_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv0 = gtl.add_ausp(filter0_2_1000v); // объявление переменной спектра + AUSPv0.color = 0x00ff0000; // цвет спектра + AUSPv0.name = "AUSPv0"; // имя спектра + AUSPv0.frequency = frequency; // граничная частота спектра + AUSPv0.lines = AUSPv0.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv0.average = average; // количество усреднений + AUSPv0.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv0.smoothing_factor = 100; // усреднение средней линии + AUSPv0.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv0.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv0.tolerance = AUSPv0.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv0_2_1000 = gtl.add_value_rms(filter0_2_1000v); + RMSv0_2_1000.time = 1; + RMSv0_2_1000.avg_cnt = 3; + // СКЗa + var RMSa0 = gtl.add_value_rms(gtl.analog_inputs[signals[0].portNumber]); + RMSa0.time = 1; + RMSa0.avg_cnt = 3; + + // Канал 1 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter1_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter1_2_1000.kind = gtl.filter_iir.butterworth; + filter1_2_1000.type = gtl.filter_iir.bandpass; + filter1_2_1000.order = 6; + filter1_2_1000.frequency = 502; // центральная частота полосового фильтра + filter1_2_1000.width = 1000; // ширина полосы фильтра + var filter1_2_1000v = gtl.add_intg(filter1_2_1000); // интегрирование + filter1_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv1 = gtl.add_ausp(filter1_2_1000v); // объявление переменной спектра + AUSPv1.color = 0x00ff0000; // цвет спектра + AUSPv1.name = "AUSPv1"; // имя спектра + AUSPv1.frequency = frequency; // граничная частота спектра + AUSPv1.lines = AUSPv1.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv1.average = average; // количество усреднений + AUSPv1.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv1.smoothing_factor = 100; // усреднение средней линии + AUSPv1.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv1.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv1.tolerance = AUSPv1.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv1_2_1000 = gtl.add_value_rms(filter1_2_1000v); + RMSv1_2_1000.time = 1; + RMSv1_2_1000.avg_cnt = 3; + // СКЗa + var RMSa1 = gtl.add_value_rms(gtl.analog_inputs[signals[1].portNumber]); + RMSa1.time = 1; + RMSa1.avg_cnt = 3; + +// Спектр виброскорости (новый метод) +var AUSPv0_pl = gtl.create_ausp( + { + "src" : filter0_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } +); +var AUSPv1_pl = gtl.create_ausp( + { + "src" : filter1_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } +); +// ФЧХ (новый метод) +var pfc0_pl = gtl.create_pfc( + { + "src0" : filter0_2_1000v, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false, //по умолчанию - false + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + } +); +var pfc1_pl = gtl.create_pfc( + { + "src0" : filter1_2_1000v, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "range" : gtl.phase.positive, + "is_single" : false, //по умолчанию - false + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + } +); + +// Объявление графических плоскостей для построения графиков + var plot_ausp0 = gtl.plots.add("Спектр виброскорости 0"); // создание объекта для спектра + var plot_ausp1 = gtl.plots.add("Спектр виброскорости 1"); // создание объекта для спектра + var plot_pfc0 = gtl.plots.add("ФЧХ 0"); // фазо-частотная характеристика + var plot_pfc1 = gtl.plots.add("ФЧХ 1"); // фазо-частотная характеристика + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +var m_test_calc; // масса пробного груза расчётная *** +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +var FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let P = gtl.options.customOptions.P; // масса ротора, грамм ** (для вычисления массы пробного груза) + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации в точке A */** +var A0 = 8; // модуль вектора начальной вибрации в точке A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации в точке A */** +var A0_phase; // фаза вектора начальной вибрации в точке A */** (конечное значение) +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации в точке B */** +var B0; // модуль вектора начальной вибрации в точке B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации в точке B */** +var B0_phase; // фаза вектора начальной вибрации в точке B */** (конечное значение) + +let m11_test_ = gtl.options.customOptions.m11_test; // модуль вектора пробного груза при 1-ом пуске в плоскости 1** +let m11_test; // модуль вектора пробного груза при 1-ом пуске в плоскости 1** (конечное значение) +let m11_test_corner = gtl.options.customOptions.m11_test_corner;// угол вектора пробного груза при 1-ом пуске в плоскости 1 ** +let m22_test_ = gtl.options.customOptions.m22_test; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 ** +let m22_test; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 **(конечное значение) +let m22_test_corner = gtl.options.customOptions.m22_test_corner;// угол вектора пробного груза при 2-ом пуске в плоскости 2 ** + +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1_phase; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var dA1; // модуль вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var dA1_phase; // фаза вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1_phase; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var dB1_phase; // фаза вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var dB1; // модуль вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** + +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2_phase; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +var dA2; // модуль вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var dA2_phase; // фаза вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2_phase; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +var dB2; // модуль вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var dB2_phase; // фаза вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +var Mb1; // модуль вектора балансировочного груза в плоскости 1 *** +var Mb1_corner; // угол вектора балансировочного груза в плоскости 1 *** +var Mb2; // модуль вектора балансировочного груза в плоскости 2 *** +var Mb2_corner; // угол вектора балансировочного груза в плоскости 2 *** +var Mdisb1; // масса дисбаланса в плоскости 1 *** +var Mdisb1_corner; // угол расположения дисбаланса в плоскости 1 *** +var Mdisb2; // масса дисбаланса в плоскости 2 *** +var Mdisb2_corner; // угол расположения дисбаланса в плоскости 2 *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var B0_phase_X; // угол наклона вектора B0 к оси X +var B0_phase_Y; // угол наклона вектора B0 к оси Y +var B0_1_X; // начальная координата вектора B0 по оси X +var B0_2_X; // конечная координата вектора B0 по оси X +var B0_1_Y; // начальная координата вектора B0 по оси Y +var B0_2_Y; // конечная координата вектора B0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA1_1_X; // начальная координата вектора dA1 по оси X +var dA1_2_X; // конечная координата вектора dA1 по оси X +var dA1_1_Y; // начальная координата вектора dA1 по оси Y +var dA1_2_Y; // конечная координата вектора dA1 по оси Y + +var A2_phase_X; // угол наклона вектора A2 к оси X +var A2_phase_Y; // угол наклона вектора A2 к оси Y +var A2_1_X; // начальная координата вектора A2 по оси X +var A2_2_X; // конечная координата вектора A2 по оси X +var A2_1_Y; // начальная координата вектора A2 по оси Y +var A2_2_Y; // конечная координата вектора A2 по оси Y + +var dA2_1_X; // начальная координата вектора dA2 по оси X +var dA2_2_X; // конечная координата вектора dA2 по оси X +var dA2_1_Y; // начальная координата вектора dA2 по оси Y +var dA2_2_Y; // конечная координата вектора dA2 по оси Y + +var B1_phase_X; // угол наклона вектора A1 к оси X +var B1_phase_Y; // угол наклона вектора A1 к оси Y +var B1_1_X; // начальная координата вектора A1 по оси X +var B1_2_X; // конечная координата вектора A1 по оси X +var B1_1_Y; // начальная координата вектора A1 по оси Y +var B1_2_Y; // конечная координата вектора A1 по оси Y + +var dB1_1_X; // начальная координата вектора dB1 по оси X +var dB1_2_X; // конечная координата вектора dB1 по оси X +var dB1_1_Y; // начальная координата вектора dB1 по оси Y +var dB1_2_Y; // конечная координата вектора dB1 по оси Y + +var B2_phase_X; // угол наклона вектора A1 к оси X +var B2_phase_Y; // угол наклона вектора A1 к оси Y +var B2_1_X; // начальная координата вектора A1 по оси X +var B2_2_X; // конечная координата вектора A1 по оси X +var B2_1_Y; // начальная координата вектора A1 по оси Y +var B2_2_Y; // конечная координата вектора A1 по оси Y + +var dB2_1_X; // начальная координата вектора dB2 по оси X +var dB2_2_X; // конечная координата вектора dB2 по оси X +var dB2_1_Y; // начальная координата вектора dB2 по оси Y +var dB2_2_Y; // конечная координата вектора dB2 по оси Y + +var m11_test_corner_X; // угол наклона вектора m11_test к оси X +var m11_test_corner_Y; // угол наклона вектора m11_test к оси Y +var m11_test_1_X; // начальная координата вектора m11_test по оси X +var m11_test_2_X; // конечная координата вектора m11_test по оси X +var m11_test_1_Y; // начальная координата вектора m11_test по оси Y +var m11_test_2_Y; // конечная координата вектора m11_test по оси Y + +var m22_test_corner_X; // угол наклона вектора m22_test к оси X +var m22_test_corner_Y; // угол наклона вектора m22_test к оси Y +var m22_test_1_X; // начальная координата вектора m22_test по оси X +var m22_test_2_X; // конечная координата вектора m22_test по оси X +var m22_test_1_Y; // начальная координата вектора m22_test по оси Y +var m22_test_2_Y; // конечная координата вектора m22_test по оси Y + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + // Нестабильность частоты вращения + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + + switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv0.clear_harms_sets(); + AUSPv1.clear_harms_sets(); + + + let __AUSPv0_tools = gtl.create_spec_tools( + { + data: AUSPv0_pl.data, + df: AUSPv0_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row0 = __AUSPv0_tools.harms.add(freq.value, 3, 0xff0000, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row0.name = "F1v0 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc0_tools = gtl.create_spec_tools( + { + data: pfc0_pl.data, + df: pfc0_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row0_phase = __pfc0_tools.harms.add(freq.value, 3, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row0_phase.name = "F1v_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + let __result1_0 = __AUSPv0_tools.to_json(); + let __result2_0 = __pfc0_tools.to_json(); + + + let __AUSPv1_tools = gtl.create_spec_tools( + { + data: AUSPv1_pl.data, + df: AUSPv1_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row1 = __AUSPv1_tools.harms.add(freq.value, 3, 0xff0000, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1.name = "F1v1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc1_tools = gtl.create_spec_tools( + { + data: pfc1_pl.data, + df: pfc1_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row1_phase = __pfc1_tools.harms.add(freq.value, 3, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1v1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + let __result1_1 = __AUSPv1_tools.to_json(); + let __result2_1 = __pfc1_tools.to_json(); + + + // Отрисовка графиков + plot_ausp0.add( + { + color: 0x0000ff, + name: "Спектр виброскорости 0", + x: AUSPv0_pl.resolution, + y: AUSPv0_pl.data, + spec_tools: __AUSPv0_tools.to_json() + }); + plot_pfc0.add( + { + color: 0xff0000, + name: "ФЧХ 0", + x: pfc0_pl.resolution, + y: pfc0_pl.data, + spec_tools: __pfc0_tools.to_json() + }); + plot_ausp1.add( + { + color: 0x0000ff, + name: "Спектр виброскорости 1", + x: AUSPv1_pl.resolution, + y: AUSPv1_pl.data, + spec_tools: __AUSPv1_tools.to_json() + }); + plot_pfc1.add( + { + color: 0xff0000, + name: "ФЧХ 1", + x: pfc1_pl.resolution, + y: pfc1_pl.data, + spec_tools: __pfc1_tools.to_json() + }); + + + // Амплитуда гармонического ряда частоты вращения (канал 0) + var F1_0_1_a = __result1_0.harms.rows[0].harms[0].ampl; + var F1_0_2_a = __result1_0.harms.rows[0].harms[1].ampl; + var F1_0_3_a = __result1_0.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения (канал 0) + var F1_0_1_f = __result1_0.harms.rows[0].harms[0].freq; + var F1_0_2_f = __result1_0.harms.rows[0].harms[1].freq; + var F1_0_3_f = __result1_0.harms.rows[0].harms[2].freq; + + // Амплитуда гармонического ряда частоты вращения (канал 1) + var F1_1_1_a = __result1_1.harms.rows[0].harms[0].ampl; + var F1_1_2_a = __result1_1.harms.rows[0].harms[1].ampl; + var F1_1_3_a = __result1_1.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения (канал 1) + var F1_1_1_f = __result1_1.harms.rows[0].harms[0].freq; + var F1_1_2_f = __result1_1.harms.rows[0].harms[1].freq; + var F1_1_3_f = __result1_1.harms.rows[0].harms[2].freq; + + // Проверка наличия оборотной гармоники и необходимости проведения балансировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_0_1_a >= RMSv0_2_1000 * 0.4 || + F1_1_1_a >= RMSv1_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + // Фаза (амплитуда) гармонического ряда частоты вращения (канал 0) + var F1_0_1_ph = __result2_0.harms.rows[0].harms[0].ampl; + var F1_0_2_ph = __result2_0.harms.rows[0].harms[1].ampl; + var F1_0_3_ph = __result2_0.harms.rows[0].harms[2].ampl; + + // Фаза (амплитуда) гармонического ряда частоты вращения (канал 1) + var F1_1_1_ph = __result2_1.harms.rows[0].harms[0].ampl; + var F1_1_2_ph = __result2_1.harms.rows[0].harms[1].ampl; + var F1_1_3_ph = __result2_1.harms.rows[0].harms[2].ampl; + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + +//РАСЧЁТЫ + // Определение конечных значений переменных + // A0 - начальная вибрация в точке A + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_0_1_a} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B0 - начальная вибрация в точке B + if (B0_ != 0) {B0 = B0_} // принимает значение из опций + else {B0 = F1_1_1_a} // принимает значение из спектра сигнала + if (B0_phase_ != 0) {B0_phase = B0_phase_} // принимает значение из опций + else {B0_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // A1 - вибрация в точке A после установки пробного груза в плоскость 1 + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_0_1_a} // принимает значение из спектра сигнала + if (A1_phase_ != 0) {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B1 - вибрация в точке B после установки пробного груза в плоскость 1 + if (B1_ != 0) {B1 = B1_} // принимает значение из опций + else {B1 = F1_1_1_a} // принимает значение из спектра сигнала + if (B1_phase_ != 0) {B1_phase = B1_phase_} // принимает значение из опций + else {B1_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // A2 - вибрация в точке A после установки пробного груза в плоскость 2 + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_0_1_a} // принимает значение из спектра сигнала + if (A2_phase_ != 0) {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B2 - вибрация в точке B после установки пробного груза в плоскость 2 + if (B2_ != 0) {B2 = B2_} // принимает значение из опций + else {B2 = F1_1_1_a} // принимает значение из спектра сигнала + if (B2_phase_ != 0) {B2_phase = B2_phase_} // принимает значение из опций + else {B2_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // DCI_A1 - ДКВ груза m11_test в плоскости 1 на вибрацию в точке A + if (DCI_A1_ != 0) {DCI_A1 = DCI_A1_} // принимает значение из опций + else {DCI_A1 = 0} // принимает значение из расчётов (пока ноль) + if (DCI_A1_phase_ != 0) {DCI_A1_phase = DCI_A1_phase_} // принимает значение из опций + else {DCI_A1_phase = 0} // вычисляется в скрипте (пока ноль) + + // DCI_B1 - ДКВ груза m11_test в плоскости 1 на вибрацию в точке B + if (DCI_B1_ != 0) {DCI_B1 = DCI_B1_} // принимает значение из опций + else {DCI_B1 = 0} // принимает значение из расчётов (пока ноль) + if (DCI_B1_phase_ != 0) {DCI_B1_phase = DCI_B1_phase_} // принимает значение из опций + else {DCI_B1_phase = 0} // вычисляется в скрипте (пока ноль) + + // DCI_A2 - ДКВ груза m22_test в плоскости 2 на вибрацию в точке A + if (DCI_A2_ != 0) {DCI_A2 = DCI_A2_} // принимает значение из опций + else {DCI_A2 = 0} // принимает значение из расчётов (пока ноль) + if (DCI_A2_phase_ != 0) {DCI_A2_phase = DCI_A2_phase_} // принимает значение из опций + else {DCI_A2_phase = 0} // вычисляется в скрипте (пока ноль) + + // DCI_B2 - ДКВ груза m22_test в плоскости 2 на вибрацию в точке B + if (DCI_B2_ != 0) {DCI_B2 = DCI_B2_} // принимает значение из опций + else {DCI_B2 = 0} // принимает значение из расчётов (пока ноль) + if (DCI_B2_phase_ != 0) {DCI_B2_phase = DCI_B2_phase_} // принимает значение из опций + else {DCI_B2_phase = 0} // вычисляется в скрипте (пока ноль) + + // вычисление массы пробного груза (если не выбран свой и есть данные для формулы) + var m_test_calc = 804 * ((P * A0) / (R * n)); + // m11_test масса пробного груза в плоскости 1 (1-й пробный пуск) + if (m11_test_ != 0) {m11_test = m11_test_} // принимает значение из опций + else {m11_test = m_test_calc} // принимает значение из расчёта + + // m22_test масса пробного груза в плоскости 2 (2-й пробный пуск) + if (m22_test_ != 0) {m22_test = m22_test_} // принимает значение из опций + else {m22_test = m_test_calc} // принимает значение из расчёта + +// определение угла наклона вектора 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 + A0_1_X = 0; + if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} +// определение координат вектора B0 + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + +// определение угла наклона вектора m11_test к осям X и Y + if (m11_test_corner <= 90) { + m11_test_corner_X = 90 - m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_X = m11_test_corner - 90} + if (m11_test_corner <= 270) { + m11_test_corner_X = 270 - m11_test_corner} + if (m11_test_corner <= 360) { + m11_test_corner_X = m11_test_corner - 270} + if (m11_test_corner <= 90) { + m11_test_corner_Y = m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_Y = 180 - m11_test_corner} + if (m11_test_corner <= 270) { + m11_test_corner_Y = m11_test_corner - 180} + if (m11_test_corner <= 360) { + m11_test_corner_Y = 360 - m11_test_corner} + +// определение координат вектора m11_test + m11_test_1_X = 0; + if (m11_test_corner <= 180) {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test * (-1) + } else {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test} + m11_test_1_Y = 0; + if (m11_test_corner <= 90 || m11_test_corner >= 270) {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test + } else {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test * (-1)} + +// определение угла наклона вектора 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 + A1_1_X = 0; + if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} + A1_1_Y = 0; + if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + +// определение координат вектора B1 + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 * (-1)} + +// определение модуля вектора dA1 + 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)); + +// определение фазы вектора 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA1_phase > 360) {dA1_phase = dA1_phase - 360} + +// определение модуля вектора dB1 + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)); + +// определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + +// определение угла наклона вектора m22_test к осям X и Y + if (m22_test_corner <= 90) { + m22_test_corner_X = 90 - m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_X = m22_test_corner - 90} + if (m22_test_corner <= 270) { + m22_test_corner_X = 270 - m22_test_corner} + if (m22_test_corner <= 360) { + m22_test_corner_X = m22_test_corner - 270} + if (m22_test_corner <= 90) { + m22_test_corner_Y = m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_Y = 180 - m22_test_corner} + if (m22_test_corner <= 270) { + m22_test_corner_Y = m22_test_corner - 180} + if (m22_test_corner <= 360) { + m22_test_corner_Y = 360 - m22_test_corner} + +// определение координат вектора m22_test + m22_test_1_X = 0; + if (m22_test_corner <= 180) {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test * (-1) + } else {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test} + m22_test_1_Y = 0; + if (m22_test_corner <= 90 || m22_test_corner >= 270) {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test + } else {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test * (-1)} + +// определение угла наклона вектора 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 + A2_1_X = 0; + if (A2_phase <= 180) {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} + A2_1_Y = 0; + if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 * (-1)} + +// определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B1_phase <= 360) { + B2_phase_Y = 360 - B2_phase} +// определение координат вектора B2 + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 * (-1)} + +// определение модуля вектора dA2 + 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)); + +// определение фазы вектора 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA2_phase > 360) {dA2_phase = dA2_phase - 360} + +// определение модуля вектора dB2 + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)); + +// определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + +// определение модуля вектора DCI_A1 + DCI_A1 = dA1 / m11_test; + +// опредение фаза вектора DCI_A1 + if ((dA1_phase - m11_test_corner) < 0) { + DCI_A1_phase = (dA1_phase - m11_test_corner) + 360} + else if ((dA1_phase - m11_test_corner) > 360) { + DCI_A1_phase = (dA1_phase - m11_test_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m11_test_corner)} + +// определение модуля вектора DCI_B1 + DCI_B1 = dB1 / m11_test; + +// опредение фаза вектора DCI_B1 + if ((dB1_phase - m11_test_corner) < 0) { + DCI_B1_phase = (dB1_phase - m11_test_corner) + 360} + else if ((dB1_phase - m11_test_corner) > 360) { + DCI_B1_phase = (dB1_phase - m11_test_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m11_test_corner)} + +// определение модуля вектора DCI_A2 + DCI_A2 = dA2 / m22_test; + +// опредение фаза вектора DCI_A2 + if ((dA2_phase - m22_test_corner) < 0) { + DCI_A2_phase = (dA2_phase - m22_test_corner) + 360} + else if ((dA2_phase - m22_test_corner) > 360) { + DCI_A2_phase = (dA2_phase - m22_test_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m22_test_corner)} + +// определение модуля вектора DCI_B2 + DCI_B2 = dB2 / m22_test; + +// опредение фаза вектора DCI_B2 + if ((dB2_phase - m22_test_corner) < 0) { + DCI_B2_phase = (dB2_phase - m22_test_corner) + 360} + else if ((dB2_phase - m22_test_corner) > 360) { + DCI_B2_phase = (dB2_phase - m22_test_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m22_test_corner)} + +// формулы для определение векторов балансировочных грузов +// Mb1 = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// Mb2 = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// ... вычисления этих формул делим на этапы +// 1) В0 * DCI_A2 +// 2) A0 * DCI_B2 +// 3) A0 * DCI_B1 +// 4) B0 * DCI_A1 +// 5) В0 * DCI_A2 - A0 * DCI_B2 +// 6) A0 * DCI_B1 - B0 * DCI_A1 +// 7) DCI_A1 * DCI_B2 +// 8) DCI_B1 * DCI_A2 +// 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + +// определение модуля вектора B0 * DCI_A2 + var B0_DCI_A2 = B0 * DCI_A2; + +// определение фазы вектора В0 * DCI_A2 + var B0_DCI_A2_phase; + if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} + +// определение угла наклона вектора В0 * DCI_A2 к осям X и Y + var B0_DCI_A2_phase_X; + var B0_DCI_A2_phase_Y; + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} + +// определение координат вектора В0 * DCI_A2 + var B0_DCI_A2_1_X = 0; + var B0_DCI_A2_2_X; + if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 * (-1)} + var B0_DCI_A2_1_Y = 0; + var B0_DCI_A2_2_Y; + if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 * (-1)} + +// определение модуля вектора A0 * DCI_B2 + var A0_DCI_B2 = A0 * DCI_B2; + +// определение фазы вектора A0 * DCI_B2 + var A0_DCI_B2_phase; + if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} + +// определение угла наклона вектора A0 * DCI_B2 к осям X и Y + var A0_DCI_B2_phase_X; + var A0_DCI_B2_phase_Y; + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} + +// определение координат вектора A0 * DCI_B2 + var A0_DCI_B2_1_X = 0; + var A0_DCI_B2_2_X; + if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 * (-1)} + var A0_DCI_B2_1_Y = 0; + var A0_DCI_B2_2_Y; + if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 * (-1)} + +// определение модуля вектора A0 * DCI_B1 + var A0_DCI_B1 = A0 * DCI_B1; + +// определение фазы вектора A0 * DCI_B1 + var A0_DCI_B1_phase; + if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} + +// определение угла наклона вектора A0 * DCI_B1 к осям X и Y + var A0_DCI_B1_phase_X; + var A0_DCI_B1_phase_Y; + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} + +// определение координат вектора A0 * DCI_B1 + var A0_DCI_B1_1_X = 0; + var A0_DCI_B1_2_X; + if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 * (-1)} + var A0_DCI_B1_1_Y = 0; + var A0_DCI_B1_2_Y; + if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 * (-1)} + +// определение модуля вектора B0 * DCI_A1 + var B0_DCI_A1 = B0 * DCI_A1; + +// определение фазы вектора A0 * DCI_B1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + +// определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение фазы вектора B0 * DCI_A1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + +// определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2; + var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; + var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; + var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; + var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; + B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); + +// определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2_phase; + if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415) + 180} + if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + +// определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1; + var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; + var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; + var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; + var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; + A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); + +// определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1_phase; + if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415) + 180} + if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + +// определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + +// определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + +// определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + +// определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + +// определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + +// определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + +// определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + +// определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + +// определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + +// определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + +// определение массы корректирующей массы Mb1 (плоскость 1) + Mb1 = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + +// опредение угла установки корректирующей массы Mb1 (плоскость 1) + if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса плоскости 1 + Mdisb1 = Mb1; // равен массе балансировочного груза + + // определение угла расположения дисбаланса плоскости 1 + if ((Mb1_corner + 180) > 360) { + Mdisb1_corner = (Mb1_corner + 180) - 360} + else if ((Mb1_corner + 180) < 0) { + Mdisb1_corner = (Mb1_corner + 180) + 360} + else {Mdisb1_corner = (Mb1_corner + 180)} + +// определение массы корректирующей массы Mb2 (плоскость 2) + Mb2 = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + +// опредение угла установки корректирующей массы Mb2 (плоскость 2) + if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса плоскости 2 + Mdisb2 = Mb2; // равен массе балансировочного груза + + // определение угла расположения дисбаланса плоскости 2 + if ((Mb2_corner + 180) > 360) { + Mdisb2_corner = (Mb2_corner + 180) - 360} + else if ((Mb2_corner + 180) < 0) { + Mdisb2_corner = (Mb2_corner + 180) + 360} + else {Mdisb2_corner = (Mb2_corner + 180)} + + + +gtl.log.info("Mb1 (баланс. груз 1-й плоскости)",Mb1); +gtl.log.info("Mb1_corner (угол баланс. груза 1-й плоск.)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс 1-й плоскости)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса 1-й плоскости)",Mdisb1_corner); +gtl.log.info("Mb2 (баланс. груз 2-й плоскости)",Mb2); +gtl.log.info("Mb2_corner (угол баланс. груза 2-й плоск.)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс 2-й плоскости)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса 2-й плоскости)",Mdisb2_corner); +gtl.log.info("m11_test (пробный груз введёный)",m11_test); +gtl.log.info("m22_test (пробный груз введёный)",m22_test); +gtl.log.info("RMSv0_2_1000",RMSv0_2_1000.value); +gtl.log.info("RMSa0",RMSa0.value); +gtl.log.info("RMSv1_2_1000",RMSv1_2_1000.value); +gtl.log.info("RMSa1",RMSa1.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("F1_0_3_ph (фаза)",F1_0_3_ph); +gtl.log.info("F1_0_3_a (ампл)",F1_0_3_a); +gtl.log.info("F1_0_3_f (част)",F1_0_3_f); +gtl.log.info("F1_0_2_ph (фаза)",F1_0_2_ph); +gtl.log.info("F1_0_2_a (ампл)",F1_0_2_a); +gtl.log.info("F1_0_2_f (част)",F1_0_2_f); +gtl.log.info("F1_0_1_ph (фаза)",F1_0_1_ph); +gtl.log.info("F1_0_1_a (ампл)",F1_0_1_a); +gtl.log.info("F1_0_1_f (част)",F1_0_1_f); +gtl.log.info("F1_1_3_ph (фаза)",F1_1_3_ph); +gtl.log.info("F1_1_3_a (ампл)",F1_1_3_a); +gtl.log.info("F1_1_3_f (част)",F1_1_3_f); +gtl.log.info("F1_1_2_ph (фаза)",F1_1_2_ph); +gtl.log.info("F1_1_2_a (ампл)",F1_1_2_a); +gtl.log.info("F1_1_2_f (част)",F1_1_2_f); +gtl.log.info("F1_1_1_ph (фаза)",F1_1_1_ph); +gtl.log.info("F1_1_1_a (ампл)",F1_1_1_a); +gtl.log.info("F1_1_1_f (част)",F1_1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения freq.value", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + // Выдача результата (results) + let __result3 = { + Частота_вращения_F1: freq.value, + Нестаб_част_вращ: instability*100, + Тестирование: test_balance, + Ампл_гарм_1F1_точка_A: F1_0_1_a, + Фаза_част_вращ_F1_точка_A: F1_0_1_ph, + Примен_пробный_груз_плоскости_1: m11_test, + Расч_масса_пробного_груза: m_test_calc, + Масса_баланс_груза_плоскости_1: Mb1, + Угол_баланс_груза_плоскости_1: Mb1_corner, + СКЗ_виброскор_точки_A: RMSv0_2_1000.value, + Ампл_гарм_1F1_точка_B: F1_1_1_a, + Фаза_част_вращ_F1_точка_B: F1_1_1_ph, + Примен_пробный_груз_плоскости_2: m22_test, + Масса_баланс_груза_плоскости_2: Mb2, + Угол_баланс_груза_плоскости_2: Mb2_corner, + СКЗ_виброскор_точки_B: RMSv1_2_1000.value, + ДКВ_A1: DCI_A1, + ДКВ_A1_phase: DCI_A1_phase, + ДКВ_B1: DCI_B1, + ДКВ_B1_phase: DCI_B1_phase, + ДКВ_A2: DCI_A2, + ДКВ_A2_phase: DCI_A2_phase, + ДКВ_B2: DCI_B2, + ДКВ_B2_phase: DCI_B2_phase, + }; +gtl.results = {"result_ausp0": __result1_0, + "result_pfc0": __result2_0, + "result_ausp1": __result1_1, + "result_pfc1": __result2_1, + "result_общий": __result3}; +gtl.diagnostic.stop(); +break; +default: + break; +} +} \ No newline at end of file diff --git a/scripts/Две_плоскости_с_фазой — копия.js b/scripts/Две_плоскости_с_фазой — копия.js new file mode 100644 index 0000000..e62b2b0 --- /dev/null +++ b/scripts/Две_плоскости_с_фазой — копия.js @@ -0,0 +1,1129 @@ +"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 freq_default = 5; // предполагаемая частота вращения + var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); // объявление переменной фильтра + filter_freq.kind = gtl.filter_iir.butterworth; // тип окна + filter_freq.type = gtl.filter_iir.bandpass; // тип фильтра (полосовой) + filter_freq.order = 6; // порядок фильтра + filter_freq.width = freq_default * 0.2; // полоса пропускания 20% + filter_freq.frequency = freq_default; // центральная частота фильтра + + // Определение частоты вращения по фильтру предполагаемой частоты + var FREQ = gtl.add_value_freq(filter_freq); + FREQ.time = 1; // длина отрезка сигнала + FREQ.avg_cnt = 3; // усреднение частоты вращения + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + + // Канал 0 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter0_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[0]); + filter0_2_1000.kind = gtl.filter_iir.butterworth; + filter0_2_1000.type = gtl.filter_iir.bandpass; + filter0_2_1000.order = 6; + filter0_2_1000.frequency = 502; // центральная частота полосового фильтра + filter0_2_1000.width = 1000; // ширина полосы фильтра + var filter0_2_1000v = gtl.add_intg(filter0_2_1000); // интегрирование + filter0_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv0 = gtl.add_ausp(filter0_2_1000v); // объявление переменной спектра + AUSPv0.color = 0x00ff0000; // цвет спектра + AUSPv0.name = "AUSPv0"; // имя спектра + AUSPv0.frequency = 1000; // граничная частота спектра + AUSPv0.lines = AUSPv0.frequency * 2; // разрешение спектра (количество линий) + AUSPv0.average = 4; // количество усреднений + AUSPv0.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv0.smoothing_factor = 100; // усреднение средней линии + AUSPv0.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv0.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv0.tolerance = AUSPv0.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv0_2_1000 = gtl.add_value_rms(filter0_2_1000v); + RMSv0_2_1000.time = 1; + RMSv0_2_1000.avg_cnt = 3; + // Фаза 1-й гармоники частоты вращения (виброскорости) + var delta_phase_F1v0 = gtl.add_delta_phase_spec(filter0_2_1000v, gtl.analog_inputs[record.tachoOptions.tachoChannel]); + delta_phase_F1v0.max_frequency = 1000; + delta_phase_F1v0.resolution = AUSPv0.resolution; + delta_phase_F1v0.frequency = 5.5; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v0.frequency = FREQ.value; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v0.frequency = freq.value; //частота, на которой вычисляем дельта-фазу + // Формирование объекта apfc для получения амплитуды и фазы + var apfc0 = gtl.add_apfc( + { + "src1" : gtl.analog_inputs[0], + "src2" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "name" : "coh", + "color" : 0xff0000, + "visible" : true, + "freq" : AUSPv0.frequency, + "window" : gtl.spec.rectangular, + "resolution" : AUSPv0.frequency / AUSPv0.lines, + "average" : 1, + "overlap" : 0, + "afc" : gtl.apfc.magnitude, + "pfc" : gtl.apfc.deg + } + ); + // Объявление переменных массивов + var level_AUSPv0 = []; // массив амплитуд гармоник канала 0 + var delta_phase_AUSPv0 = []; // массив разностей фаз гармоник канала 0 относительно тахо + var index_AUSPv0 = []; // массив индексов гармоник канала 0 + var frequency_AUSPv0 = []; // массив частот (перевод индексов) гармоник канала 0 + var AUSPv_data0 = []; // массив спектра + var AUSPv_base0 = []; // массив средней линии спектра + + // Канал 1 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter1_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[1]); + filter1_2_1000.kind = gtl.filter_iir.butterworth; + filter1_2_1000.type = gtl.filter_iir.bandpass; + filter1_2_1000.order = 6; + filter1_2_1000.frequency = 502; // центральная частота полосового фильтра + filter1_2_1000.width = 1000; // ширина полосы фильтра + var filter1_2_1000v = gtl.add_intg(filter1_2_1000); // интегрирование + filter1_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv1 = gtl.add_ausp(filter1_2_1000v); // объявление переменной спектра + AUSPv1.color = 0x00ff0000; // цвет спектра + AUSPv1.name = "AUSPv1"; // имя спектра + AUSPv1.frequency = 1000; // граничная частота спектра + AUSPv1.lines = AUSPv1.frequency * 2; // разрешение спектра (количество линий) + AUSPv1.average = 4; // количество усреднений + AUSPv1.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv1.smoothing_factor = 100; // усреднение средней линии + AUSPv1.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv1.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv1.tolerance = AUSPv1.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv1_2_1000 = gtl.add_value_rms(filter1_2_1000v); + RMSv1_2_1000.time = 1; + RMSv1_2_1000.avg_cnt = 3; + // Фаза 1-й гармоники частоты вращения (виброскорости) + var delta_phase_F1v1 = gtl.add_delta_phase_spec(filter1_2_1000v, gtl.analog_inputs[record.tachoOptions.tachoChannel]); + delta_phase_F1v1.max_frequency = 1000; + delta_phase_F1v1.resolution = AUSPv1.resolution; + delta_phase_F1v1.frequency = 5.5; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v1.frequency = FREQ.value; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v1.frequency = freq.value; //частота, на которой вычисляем дельта-фазу + // Формирование объекта apfc для получения амплитуды и фазы + var apfc1 = gtl.add_apfc( + { + "src1" : gtl.analog_inputs[1], + "src2" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "name" : "coh", + "color" : 0xff0000, + "visible" : true, + "freq" : AUSPv1.frequency, + "window" : gtl.spec.rectangular, + "resolution" : AUSPv1.frequency / AUSPv1.lines, + "average" : 1, + "overlap" : 0, + "afc" : gtl.apfc.magnitude, + "pfc" : gtl.apfc.deg + } + ); + // Объявление переменных массивов + var level_AUSPv1 = []; // массив амплитуд гармоник канала 1 + var delta_phase_AUSPv1 = []; // массив разностей фаз гармоник канала 1 относительно тахо + var index_AUSPv1 = []; // массив индексов гармоник канала 1 + var frequency_AUSPv1 = []; // массив частот (перевод индексов) гармоник канала 1 + var AUSPv_data1 = []; // массив спектра + var AUSPv_base1 = []; // массив средней линии спектра + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +var A0 = 8; // модуль вектора начальной вибрации в точке A */** +var A0_phase = 150; // фаза вектора начальной вибрации в точке A */** +var B0 = 9; // модуль вектора начальной вибрации в точке B */** +var B0_phase = 40; // фаза вектора начальной вибрации в точке B */** +var m11_test = 60; // модуль вектора пробного груза при 1-ом пуске в плоскости 1* +var m11_test_corner = 250;// угол вектора пробного груза при 1-ом пуске в плоскости 1 * +var m22_test = 60; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 * +var m22_test_corner = 250;// угол вектора пробного груза при 2-ом пуске в плоскости 2 * +var A1 = 9.1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1_phase = 120; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var dA1; // модуль вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var dA1_phase; // фаза вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var B1 = 6.3; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1_phase = 189; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var dB1_phase; // фаза вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var dB1; // модуль вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var A2 = 8.1; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2_phase = 95; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var dA2; // модуль вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var dA2_phase; // фаза вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var B2 = 5.8; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2_phase = 165; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var dB2; // модуль вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var dB2_phase; // фаза вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var Mb1; // модуль вектора балансировочного груза в плоскости 1 *** +var Mb1_corner; // угол вектора балансировочного груза в плоскости 1 *** +var Mb2; // модуль вектора балансировочного груза в плоскости 2 *** +var Mb2_corner; // угол вектора балансировочного груза в плоскости 2 *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var B0_phase_X; // угол наклона вектора B0 к оси X +var B0_phase_Y; // угол наклона вектора B0 к оси Y +var B0_1_X; // начальная координата вектора B0 по оси X +var B0_2_X; // конечная координата вектора B0 по оси X +var B0_1_Y; // начальная координата вектора B0 по оси Y +var B0_2_Y; // конечная координата вектора B0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA1_1_X; // начальная координата вектора dA1 по оси X +var dA1_2_X; // конечная координата вектора dA1 по оси X +var dA1_1_Y; // начальная координата вектора dA1 по оси Y +var dA1_2_Y; // конечная координата вектора dA1 по оси Y + +var A2_phase_X; // угол наклона вектора A2 к оси X +var A2_phase_Y; // угол наклона вектора A2 к оси Y +var A2_1_X; // начальная координата вектора A2 по оси X +var A2_2_X; // конечная координата вектора A2 по оси X +var A2_1_Y; // начальная координата вектора A2 по оси Y +var A2_2_Y; // конечная координата вектора A2 по оси Y + +var dA2_1_X; // начальная координата вектора dA2 по оси X +var dA2_2_X; // конечная координата вектора dA2 по оси X +var dA2_1_Y; // начальная координата вектора dA2 по оси Y +var dA2_2_Y; // конечная координата вектора dA2 по оси Y + +var B1_phase_X; // угол наклона вектора A1 к оси X +var B1_phase_Y; // угол наклона вектора A1 к оси Y +var B1_1_X; // начальная координата вектора A1 по оси X +var B1_2_X; // конечная координата вектора A1 по оси X +var B1_1_Y; // начальная координата вектора A1 по оси Y +var B1_2_Y; // конечная координата вектора A1 по оси Y + +var dB1_1_X; // начальная координата вектора dB1 по оси X +var dB1_2_X; // конечная координата вектора dB1 по оси X +var dB1_1_Y; // начальная координата вектора dB1 по оси Y +var dB1_2_Y; // конечная координата вектора dB1 по оси Y + +var B2_phase_X; // угол наклона вектора A1 к оси X +var B2_phase_Y; // угол наклона вектора A1 к оси Y +var B2_1_X; // начальная координата вектора A1 по оси X +var B2_2_X; // конечная координата вектора A1 по оси X +var B2_1_Y; // начальная координата вектора A1 по оси Y +var B2_2_Y; // конечная координата вектора A1 по оси Y + +var dB2_1_X; // начальная координата вектора dB2 по оси X +var dB2_2_X; // конечная координата вектора dB2 по оси X +var dB2_1_Y; // начальная координата вектора dB2 по оси Y +var dB2_2_Y; // конечная координата вектора dB2 по оси Y + +var m11_test_corner_X; // угол наклона вектора m11_test к оси X +var m11_test_corner_Y; // угол наклона вектора m11_test к оси Y +var m11_test_1_X; // начальная координата вектора m11_test по оси X +var m11_test_2_X; // конечная координата вектора m11_test по оси X +var m11_test_1_Y; // начальная координата вектора m11_test по оси Y +var m11_test_2_Y; // конечная координата вектора m11_test по оси Y + +var m22_test_corner_X; // угол наклона вектора m22_test к оси X +var m22_test_corner_Y; // угол наклона вектора m22_test к оси Y +var m22_test_1_X; // начальная координата вектора m22_test по оси X +var m22_test_2_X; // конечная координата вектора m22_test по оси X +var m22_test_1_Y; // начальная координата вектора m22_test по оси Y +var m22_test_2_Y; // конечная координата вектора m22_test по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = AUSPv0.acq_time; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + // Нестабильность частоты вращения + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + + switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv0.clear_harms_sets(); + AUSPv1.clear_harms_sets(); + + + + // Спектр виброскорости + // Набор гармоник частоты вращения F1v0 (виброскорость) Канал 0 + var F1v0_harms = AUSPv0.add_harms_set(freq.value, 1, 0x00ff0000, 1); // красный цвет + for (let i=0; i <= 0; i++) + {F1v0_harms.harms[i].tolerance = (1+i) * freq.value * 0.1}; // коридор обнаружения гармоник + F1v0_harms.name = "F1v0 (гарм. ряд част. вращ.)"; + // Набор гармоник частоты вращения F1v1 (виброскорость) Канал 1 + var F1v1_harms = AUSPv1.add_harms_set(freq.value, 1, 0x00ff0000, 1); // красный цвет + for (let i=0; i <= 0; i++) + {F1v1_harms.harms[i].tolerance = (1+i) * freq.value * 0.1}; // коридор обнаружения гармоник + F1v1_harms.name = "F1v1 (гарм. ряд част. вращ.)"; + // 1-я гармоника F1v для каналов 0 и 1 + // Проверка наличия оборотной гармоники необходимости проведения баалнсировки + if (F1v0_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v0 = F1v0_harms.harms[0].level; + var F1v0_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v0_test_ampl = "амплитуда частоты вращения НЕ определена";} + if (F1v1_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v1 = F1v1_harms.harms[0].level; + var F1v1_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v1_test_ampl = "амплитуда частоты вращения НЕ определена";} + if ((F1v0 >= RMSv0_2_1000.value * 0.4) || // вклад оборотной гармоники в СКЗv + (F1v1 >= RMSv1_2_1000.value * 0.4)) + {var F1v_test_balance = "необходимо провести балансировку";} + else {var F1v_test_balance = "проведение балансировки не требуется или нецелесообразно";} + + + // ТЕСТИРОВАНИЕ (получение фазы и амплитуды оборотной гармоники из массивов) + // Запись в массив значений уровня спектра (канал 0) + for (let i = 0; i < AUSPv0.data.length; i++) { + // Массив уровней (старый метод) + // level_AUSPv0.push(AUSPv0.data[i] - AUSPv0.base[i]); + + // Разница фаз гармоник + delta_phase_AUSPv0.push(apfc0.phase[i]); + + // Амплитуда гармоник + level_AUSPv0.push(apfc0.data[i]); + + // Индексы гармоник + index_AUSPv0.push(i); + + // Частоты гармоник + frequency_AUSPv0.push(i * (AUSPv0.frequency / AUSPv0.lines)); + + // Запись массивов AUSPv.data и AUSPv.base + AUSPv_data0.push(AUSPv0.data[i]); + AUSPv_base0.push(AUSPv0.base[i]); + } + + // Запись в массив значений уровня спектра (канал 1) + for (let i = 0; i < AUSPv1.data.length; i++) { + // Массив уровней (старый метод) + // level_AUSPv1.push(AUSPv1.data[i] - AUSPv1.base[i]); + + // Разница фаз гармоник + delta_phase_AUSPv1.push(apfc1.phase[i]); + + // Амплитуда гармоник + level_AUSPv1.push(apfc1.data[i]); + + // Индексы гармоник + index_AUSPv1.push(i); + + // Частоты гармоник + frequency_AUSPv1.push(i * (AUSPv1.frequency / AUSPv1.lines)); + + // Запись массивов AUSPv.data и AUSPv.base + AUSPv_data1.push(AUSPv1.data[i]); + AUSPv_base1.push(AUSPv1.base[i]); + } + + var F_find = freq.value; // искомая частота + var F_find_round_min = Math.round(F_find); // округление значения искомой частоты до ближайшего + var F_find_round_max = Math.round(F_find) + AUSPv0.resolution; // округление значения искомой частоты в большую сторону + var F_find_round0; + if (level_AUSPv0[frequency_AUSPv0.indexOf(F_find_round_min)] >= level_AUSPv0[frequency_AUSPv0.indexOf(F_find_round_max)]) + {F_find_round0 = F_find_round_min;} + else {F_find_round0 = F_find_round_max;} + var F_find_round1; + if (level_AUSPv1[frequency_AUSPv0.indexOf(F_find_round_min)] >= level_AUSPv1[frequency_AUSPv0.indexOf(F_find_round_max)]) + {F_find_round1 = F_find_round_min;} + else {F_find_round1 = F_find_round_max;} + + var ind_F_find0 = frequency_AUSPv0.indexOf(F_find_round0); // индекс искомой частоты (канал 0) + var ind_F_find1 = frequency_AUSPv1.indexOf(F_find_round1); // индекс искомой частоты (канал 1) + + + gtl.log.info("искомая частота, Гц", F_find); + gtl.log.info("верхняя граница поиска частоты, Гц", F_find_round_max); + gtl.log.info("нижняя граница поиска частоты, Гц", F_find_round_min); + gtl.log.info("AUSPv.lines", AUSPv0.lines); + gtl.log.info("AUSPv.frequency", AUSPv0.frequency); + +// лог канала 0 + gtl.log.info("искомая частота округлённая до ближ (канал 0), Гц", F_find_round0); + gtl.log.info("индекс искомой частоты (канал 0)", ind_F_find0); + gtl.log.info("уровень искомой частоты (канал 0)", level_AUSPv0[ind_F_find0]); + gtl.log.info("фаза искомой частоты (канал 0)", delta_phase_AUSPv0[ind_F_find0]); + gtl.log.info("проверка уровня AUSPv.data (канал 0)", AUSPv_data0[ind_F_find0] - AUSPv_base0[ind_F_find0]); + gtl.log.info("размер массива frequency_AUSPv (канал 0)", frequency_AUSPv0.length); + +// лог канала 1 + gtl.log.info("искомая частота округлённая до ближ (канал 1), Гц", F_find_round1); + gtl.log.info("индекс искомой частоты (канал 1)", ind_F_find1); + gtl.log.info("уровень искомой частоты (канал 1)", level_AUSPv1[ind_F_find1]); + gtl.log.info("фаза искомой частоты (канал 1)", delta_phase_AUSPv1[ind_F_find1]); + gtl.log.info("проверка уровня AUSPv.data (канал 1)", AUSPv_data1[ind_F_find1] - AUSPv_base1[ind_F_find1]); + gtl.log.info("размер массива frequency_AUSPv (канал 1)", frequency_AUSPv1.length); + + + +//РАСЧЁТЫ + +// определение угла наклона вектора 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 +A0_1_X = 0; +if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} +A0_1_Y = 0; +if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора B0 к осям X и Y +if (B0_phase <= 90) { +B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} +if (B0_phase <= 90) { +B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} +// определение координат вектора B0 +B0_1_X = 0; +if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} +B0_1_Y = 0; +if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + +// определение угла наклона вектора m11_test к осям X и Y +if (m11_test_corner <= 90) { +m11_test_corner_X = 90 - m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_X = m11_test_corner - 90} + if (m11_test_corner <= 270) { + m11_test_corner_X = 270 - m11_test_corner} + if (m11_test_corner <= 360) { + m11_test_corner_X = m11_test_corner - 270} +if (m11_test_corner <= 90) { +m11_test_corner_Y = m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_Y = 180 - m11_test_corner} + if (m11_test_corner <= 270) { + m11_test_corner_Y = m11_test_corner - 180} + if (m11_test_corner <= 360) { + m11_test_corner_Y = 360 - m11_test_corner} +// определение координат вектора m11_test +m11_test_1_X = 0; +if (m11_test_corner <= 180) {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test * (-1) + } else {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test} +m11_test_1_Y = 0; +if (m11_test_corner <= 90 || m11_test_corner >= 270) {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test + } else {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test * (-1)} + +// определение угла наклона вектора 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 +A1_1_X = 0; +if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} +A1_1_Y = 0; +if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение угла наклона вектора B1 к осям X и Y +if (B1_phase <= 90) { +B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} +if (B1_phase <= 90) { +B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} +// определение координат вектора B1 +B1_1_X = 0; +if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 * (-1)} +B1_1_Y = 0; +if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 * (-1)} + +// определение модуля вектора dA1 +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)); +// определение фазы вектора 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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} + if (dA1_phase > 360) {dA1_phase = dA1_phase - 360} + +// определение модуля вектора dB1 +dB1_1_X = B0_2_X; +dB1_2_X = B1_2_X; +dB1_1_Y = B0_2_Y; +dB1_2_Y = B1_2_Y; +dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)); +// определение фазы вектора dB1 +if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + +// определение угла наклона вектора m22_test к осям X и Y +if (m22_test_corner <= 90) { +m22_test_corner_X = 90 - m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_X = m22_test_corner - 90} + if (m22_test_corner <= 270) { + m22_test_corner_X = 270 - m22_test_corner} + if (m22_test_corner <= 360) { + m22_test_corner_X = m22_test_corner - 270} +if (m22_test_corner <= 90) { +m22_test_corner_Y = m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_Y = 180 - m22_test_corner} + if (m22_test_corner <= 270) { + m22_test_corner_Y = m22_test_corner - 180} + if (m22_test_corner <= 360) { + m22_test_corner_Y = 360 - m22_test_corner} +// определение координат вектора m22_test +m22_test_1_X = 0; +if (m22_test_corner <= 180) {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test * (-1) + } else {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test} +m22_test_1_Y = 0; +if (m22_test_corner <= 90 || m22_test_corner >= 270) {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test + } else {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test * (-1)} + +// определение угла наклона вектора 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 +A2_1_X = 0; +if (A2_phase <= 180) {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} +A2_1_Y = 0; +if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 * (-1)} + +// определение угла наклона вектора B2 к осям X и Y +if (B2_phase <= 90) { +B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} +if (B2_phase <= 90) { +B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B1_phase <= 360) { + B2_phase_Y = 360 - B2_phase} +// определение координат вектора B2 +B2_1_X = 0; +if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 * (-1)} +B2_1_Y = 0; +if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 * (-1)} + +// определение модуля вектора dA2 +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)); +// определение фазы вектора 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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} + if (dA2_phase > 360) {dA2_phase = dA2_phase - 360} + +// определение модуля вектора dB2 +dB2_1_X = B0_2_X; +dB2_2_X = B2_2_X; +dB2_1_Y = B0_2_Y; +dB2_2_Y = B2_2_Y; +dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)); +// определение фазы вектора dB2 +if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + +// определение модуля вектора DCI_A1 +DCI_A1 = dA1 / m11_test; +// опредение фаза вектора DCI_A1 +if ((dA1_phase - m11_test_corner) < 0) { + DCI_A1_phase = (dA1_phase - m11_test_corner) + 360} + else if ((dA1_phase - m11_test_corner) > 360) { + DCI_A1_phase = (dA1_phase - m11_test_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m11_test_corner)} + +// определение модуля вектора DCI_B1 +DCI_B1 = dB1 / m11_test; +// опредение фаза вектора DCI_B1 +if ((dB1_phase - m11_test_corner) < 0) { + DCI_B1_phase = (dB1_phase - m11_test_corner) + 360} + else if ((dB1_phase - m11_test_corner) > 360) { + DCI_B1_phase = (dB1_phase - m11_test_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m11_test_corner)} + +// определение модуля вектора DCI_A2 +DCI_A2 = dA2 / m22_test; +// опредение фаза вектора DCI_A2 +if ((dA2_phase - m22_test_corner) < 0) { + DCI_A2_phase = (dA2_phase - m22_test_corner) + 360} + else if ((dA2_phase - m22_test_corner) > 360) { + DCI_A2_phase = (dA2_phase - m22_test_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m22_test_corner)} + +// определение модуля вектора DCI_B2 +DCI_B2 = dB2 / m22_test; +// опредение фаза вектора DCI_B2 +if ((dB2_phase - m22_test_corner) < 0) { + DCI_B2_phase = (dB2_phase - m22_test_corner) + 360} + else if ((dB2_phase - m22_test_corner) > 360) { + DCI_B2_phase = (dB2_phase - m22_test_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m22_test_corner)} + +// формулы для определение векторов балансировочных грузов +// Mb1 = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// Mb2 = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// ... вычисления этих формул делим на этапы +// 1) В0 * DCI_A2 +// 2) A0 * DCI_B2 +// 3) A0 * DCI_B1 +// 4) B0 * DCI_A1 +// 5) В0 * DCI_A2 - A0 * DCI_B2 +// 6) A0 * DCI_B1 - B0 * DCI_A1 +// 7) DCI_A1 * DCI_B2 +// 8) DCI_B1 * DCI_A2 +// 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + +// определение модуля вектора B0 * DCI_A2 +var B0_DCI_A2 = B0 * DCI_A2; +// определение фазы вектора В0 * DCI_A2 +var B0_DCI_A2_phase; +if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} +// определение угла наклона вектора В0 * DCI_A2 к осям X и Y +var B0_DCI_A2_phase_X; +var B0_DCI_A2_phase_Y; +if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} +if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} +// определение координат вектора В0 * DCI_A2 +var B0_DCI_A2_1_X = 0; +var B0_DCI_A2_2_X; +if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 * (-1)} +var B0_DCI_A2_1_Y = 0; +var B0_DCI_A2_2_Y; +if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 * (-1)} + +// определение модуля вектора A0 * DCI_B2 +var A0_DCI_B2 = A0 * DCI_B2; +// определение фазы вектора A0 * DCI_B2 +var A0_DCI_B2_phase; +if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} +// определение угла наклона вектора A0 * DCI_B2 к осям X и Y +var A0_DCI_B2_phase_X; +var A0_DCI_B2_phase_Y; +if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} +if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} +// определение координат вектора A0 * DCI_B2 +var A0_DCI_B2_1_X = 0; +var A0_DCI_B2_2_X; +if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 * (-1)} +var A0_DCI_B2_1_Y = 0; +var A0_DCI_B2_2_Y; +if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 * (-1)} + +// определение модуля вектора A0 * DCI_B1 +var A0_DCI_B1 = A0 * DCI_B1; +// определение фазы вектора A0 * DCI_B1 +var A0_DCI_B1_phase; +if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} +// определение угла наклона вектора A0 * DCI_B1 к осям X и Y +var A0_DCI_B1_phase_X; +var A0_DCI_B1_phase_Y; +if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} +if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} +// определение координат вектора A0 * DCI_B1 +var A0_DCI_B1_1_X = 0; +var A0_DCI_B1_2_X; +if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 * (-1)} +var A0_DCI_B1_1_Y = 0; +var A0_DCI_B1_2_Y; +if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 * (-1)} + +// определение модуля вектора B0 * DCI_A1 +var B0_DCI_A1 = B0 * DCI_A1; +// определение фазы вектора A0 * DCI_B1 +var B0_DCI_A1_phase; +if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y +var B0_DCI_A1_phase_X; +var B0_DCI_A1_phase_Y; +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} +// определение координат вектора B0 * DCI_A1 +var B0_DCI_A1_1_X = 0; +var B0_DCI_A1_2_X; +if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} +var B0_DCI_A1_1_Y = 0; +var B0_DCI_A1_2_Y; +if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение фазы вектора B0 * DCI_A1 +var B0_DCI_A1_phase; +if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y +var B0_DCI_A1_phase_X; +var B0_DCI_A1_phase_Y; +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} +// определение координат вектора B0 * DCI_A1 +var B0_DCI_A1_1_X = 0; +var B0_DCI_A1_2_X; +if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} +var B0_DCI_A1_1_Y = 0; +var B0_DCI_A1_2_Y; +if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 +var B0_DCIA2_A0_DCIB2; +var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; +var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; +var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; +var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; +B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); +// определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 +var B0_DCIA2_A0_DCIB2_phase; +if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} +if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415) + 180} +if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} +if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + +// определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 +var A0_DCIB1_B0_DCIA1; +var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; +var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; +var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; +var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; +A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); +// определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 +var A0_DCIB1_B0_DCIA1_phase; +if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} +if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415) + 180} +if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} +if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + +// определение модуля вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2 = DCI_A1 * DCI_B2; +// определение фазы вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2_phase; +if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} +// определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y +var DCIA1_DCIB2_phase_X; +var DCIA1_DCIB2_phase_Y; +if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} +if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} +// определение координат вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2_1_X = 0; +var DCIA1_DCIB2_2_X; +if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 * (-1)} +var DCIA1_DCIB2_1_Y = 0; +var DCIA1_DCIB2_2_Y; +if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + +// определение модуля вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2 = DCI_B1 * DCI_A2; +// определение фазы вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2_phase; +if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} +// определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y +var DCIB1_DCIA2_phase_X; +var DCIB1_DCIA2_phase_Y; +if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} +if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} +// определение координат вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2_1_X = 0; +var DCIB1_DCIA2_2_X; +if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 * (-1)} +var DCIB1_DCIA2_1_Y = 0; +var DCIB1_DCIA2_2_Y; +if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + +// определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 +var DCIA1_DCIB2_DCIB1_DCIA2; +var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; +var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; +var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; +var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; +DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); +// определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 +var DCIA1_DCIB2_DCIB1_DCIA2_phase; +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415) + 180} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + +// определение массы корректирующей массы Mb1 (плоскость 1) +Mb1 = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; +// опредение угла установки корректирующей массы Mb1 (плоскость 1) +if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + +// определение массы корректирующей массы Mb2 (плоскость 2) +Mb2 = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; +// опредение угла установки корректирующей массы Mb2 (плоскость 2) +if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + +gtl.log.info("Mb1",Mb1); +gtl.log.info("Mb1_corner",Mb1_corner); +gtl.log.info("Mb2",Mb2); +gtl.log.info("Mb2_corner",Mb2_corner); +gtl.log.info("FREQ.value",FREQ.value); +gtl.log.info("freq.value (по dc)",freq.value); +gtl.log.info("F1v0.level",F1v0); +gtl.log.info("RMSv0_2_1000",RMSv0_2_1000.value); +gtl.log.info("F1v1.level",F1v1); +gtl.log.info("RMSv1_2_1000",RMSv1_2_1000.value); +gtl.log.info("F1v0_test_ampl",F1v0_test_ampl); +gtl.log.info("F1v1_test_ampl",F1v1_test_ampl); +gtl.log.info("F1v_test_balance",F1v_test_balance); +gtl.log.info("F1v_harms.harms[0].tolerance",F1v0_harms.harms[0].tolerance); +gtl.log.info("delta_phase_F1v0",delta_phase_F1v0.value); +gtl.log.info("delta_phase_F1v1",delta_phase_F1v1.value); +gtl.log.info("delta_phase_F1v.acq_time",delta_phase_F1v0.acq_time); +gtl.log.info("AUSPv0.acq_time",AUSPv0.acq_time); + + // Выдача результата (results) + let __result = { + Частота_вращения_F1_0: F_find_round0, + Канал_вибрации_датчика1: "канал [0]", + Амплитуда_гармоники_F1_датчика1: level_AUSPv0[ind_F_find0], + Фаза_гармоники_F1_датчика1: delta_phase_AUSPv0[ind_F_find0], + проверка_амплитуды_F1v_датчика1: AUSPv_data0[ind_F_find0] - AUSPv_base0[ind_F_find0], + амплитуды_F1v_датчика1: F1v0, + дельта_фаза_датчика1: delta_phase_F1v0.value, + _:"-", + Частота_вращения_F1_1: F_find_round1, + Канал_вибрации_датчика2: "канал [1]", + Амплитуда_гармоники_F1_датчика2: level_AUSPv1[ind_F_find1], + Фаза_гармоники_F1_датчика2: delta_phase_AUSPv1[ind_F_find1], + проверка_амплитуды_F1v_датчика2: AUSPv_data1[ind_F_find1] - AUSPv_base1[ind_F_find1], + амплитуды_F1v_датчика2: F1v1, + дельта_фаза_датчика2: delta_phase_F1v1.value, + }; +gtl.results = __result; +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/Две_плоскости_с_фазой(old).js b/scripts/Две_плоскости_с_фазой(old).js new file mode 100644 index 0000000..e62b2b0 --- /dev/null +++ b/scripts/Две_плоскости_с_фазой(old).js @@ -0,0 +1,1129 @@ +"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 freq_default = 5; // предполагаемая частота вращения + var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); // объявление переменной фильтра + filter_freq.kind = gtl.filter_iir.butterworth; // тип окна + filter_freq.type = gtl.filter_iir.bandpass; // тип фильтра (полосовой) + filter_freq.order = 6; // порядок фильтра + filter_freq.width = freq_default * 0.2; // полоса пропускания 20% + filter_freq.frequency = freq_default; // центральная частота фильтра + + // Определение частоты вращения по фильтру предполагаемой частоты + var FREQ = gtl.add_value_freq(filter_freq); + FREQ.time = 1; // длина отрезка сигнала + FREQ.avg_cnt = 3; // усреднение частоты вращения + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + + // Канал 0 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter0_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[0]); + filter0_2_1000.kind = gtl.filter_iir.butterworth; + filter0_2_1000.type = gtl.filter_iir.bandpass; + filter0_2_1000.order = 6; + filter0_2_1000.frequency = 502; // центральная частота полосового фильтра + filter0_2_1000.width = 1000; // ширина полосы фильтра + var filter0_2_1000v = gtl.add_intg(filter0_2_1000); // интегрирование + filter0_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv0 = gtl.add_ausp(filter0_2_1000v); // объявление переменной спектра + AUSPv0.color = 0x00ff0000; // цвет спектра + AUSPv0.name = "AUSPv0"; // имя спектра + AUSPv0.frequency = 1000; // граничная частота спектра + AUSPv0.lines = AUSPv0.frequency * 2; // разрешение спектра (количество линий) + AUSPv0.average = 4; // количество усреднений + AUSPv0.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv0.smoothing_factor = 100; // усреднение средней линии + AUSPv0.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv0.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv0.tolerance = AUSPv0.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv0_2_1000 = gtl.add_value_rms(filter0_2_1000v); + RMSv0_2_1000.time = 1; + RMSv0_2_1000.avg_cnt = 3; + // Фаза 1-й гармоники частоты вращения (виброскорости) + var delta_phase_F1v0 = gtl.add_delta_phase_spec(filter0_2_1000v, gtl.analog_inputs[record.tachoOptions.tachoChannel]); + delta_phase_F1v0.max_frequency = 1000; + delta_phase_F1v0.resolution = AUSPv0.resolution; + delta_phase_F1v0.frequency = 5.5; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v0.frequency = FREQ.value; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v0.frequency = freq.value; //частота, на которой вычисляем дельта-фазу + // Формирование объекта apfc для получения амплитуды и фазы + var apfc0 = gtl.add_apfc( + { + "src1" : gtl.analog_inputs[0], + "src2" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "name" : "coh", + "color" : 0xff0000, + "visible" : true, + "freq" : AUSPv0.frequency, + "window" : gtl.spec.rectangular, + "resolution" : AUSPv0.frequency / AUSPv0.lines, + "average" : 1, + "overlap" : 0, + "afc" : gtl.apfc.magnitude, + "pfc" : gtl.apfc.deg + } + ); + // Объявление переменных массивов + var level_AUSPv0 = []; // массив амплитуд гармоник канала 0 + var delta_phase_AUSPv0 = []; // массив разностей фаз гармоник канала 0 относительно тахо + var index_AUSPv0 = []; // массив индексов гармоник канала 0 + var frequency_AUSPv0 = []; // массив частот (перевод индексов) гармоник канала 0 + var AUSPv_data0 = []; // массив спектра + var AUSPv_base0 = []; // массив средней линии спектра + + // Канал 1 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter1_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[1]); + filter1_2_1000.kind = gtl.filter_iir.butterworth; + filter1_2_1000.type = gtl.filter_iir.bandpass; + filter1_2_1000.order = 6; + filter1_2_1000.frequency = 502; // центральная частота полосового фильтра + filter1_2_1000.width = 1000; // ширина полосы фильтра + var filter1_2_1000v = gtl.add_intg(filter1_2_1000); // интегрирование + filter1_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv1 = gtl.add_ausp(filter1_2_1000v); // объявление переменной спектра + AUSPv1.color = 0x00ff0000; // цвет спектра + AUSPv1.name = "AUSPv1"; // имя спектра + AUSPv1.frequency = 1000; // граничная частота спектра + AUSPv1.lines = AUSPv1.frequency * 2; // разрешение спектра (количество линий) + AUSPv1.average = 4; // количество усреднений + AUSPv1.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv1.smoothing_factor = 100; // усреднение средней линии + AUSPv1.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv1.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv1.tolerance = AUSPv1.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv1_2_1000 = gtl.add_value_rms(filter1_2_1000v); + RMSv1_2_1000.time = 1; + RMSv1_2_1000.avg_cnt = 3; + // Фаза 1-й гармоники частоты вращения (виброскорости) + var delta_phase_F1v1 = gtl.add_delta_phase_spec(filter1_2_1000v, gtl.analog_inputs[record.tachoOptions.tachoChannel]); + delta_phase_F1v1.max_frequency = 1000; + delta_phase_F1v1.resolution = AUSPv1.resolution; + delta_phase_F1v1.frequency = 5.5; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v1.frequency = FREQ.value; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v1.frequency = freq.value; //частота, на которой вычисляем дельта-фазу + // Формирование объекта apfc для получения амплитуды и фазы + var apfc1 = gtl.add_apfc( + { + "src1" : gtl.analog_inputs[1], + "src2" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "name" : "coh", + "color" : 0xff0000, + "visible" : true, + "freq" : AUSPv1.frequency, + "window" : gtl.spec.rectangular, + "resolution" : AUSPv1.frequency / AUSPv1.lines, + "average" : 1, + "overlap" : 0, + "afc" : gtl.apfc.magnitude, + "pfc" : gtl.apfc.deg + } + ); + // Объявление переменных массивов + var level_AUSPv1 = []; // массив амплитуд гармоник канала 1 + var delta_phase_AUSPv1 = []; // массив разностей фаз гармоник канала 1 относительно тахо + var index_AUSPv1 = []; // массив индексов гармоник канала 1 + var frequency_AUSPv1 = []; // массив частот (перевод индексов) гармоник канала 1 + var AUSPv_data1 = []; // массив спектра + var AUSPv_base1 = []; // массив средней линии спектра + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +var A0 = 8; // модуль вектора начальной вибрации в точке A */** +var A0_phase = 150; // фаза вектора начальной вибрации в точке A */** +var B0 = 9; // модуль вектора начальной вибрации в точке B */** +var B0_phase = 40; // фаза вектора начальной вибрации в точке B */** +var m11_test = 60; // модуль вектора пробного груза при 1-ом пуске в плоскости 1* +var m11_test_corner = 250;// угол вектора пробного груза при 1-ом пуске в плоскости 1 * +var m22_test = 60; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 * +var m22_test_corner = 250;// угол вектора пробного груза при 2-ом пуске в плоскости 2 * +var A1 = 9.1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1_phase = 120; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var dA1; // модуль вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var dA1_phase; // фаза вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var B1 = 6.3; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1_phase = 189; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var dB1_phase; // фаза вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var dB1; // модуль вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var A2 = 8.1; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2_phase = 95; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var dA2; // модуль вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var dA2_phase; // фаза вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var B2 = 5.8; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2_phase = 165; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var dB2; // модуль вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var dB2_phase; // фаза вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var Mb1; // модуль вектора балансировочного груза в плоскости 1 *** +var Mb1_corner; // угол вектора балансировочного груза в плоскости 1 *** +var Mb2; // модуль вектора балансировочного груза в плоскости 2 *** +var Mb2_corner; // угол вектора балансировочного груза в плоскости 2 *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var B0_phase_X; // угол наклона вектора B0 к оси X +var B0_phase_Y; // угол наклона вектора B0 к оси Y +var B0_1_X; // начальная координата вектора B0 по оси X +var B0_2_X; // конечная координата вектора B0 по оси X +var B0_1_Y; // начальная координата вектора B0 по оси Y +var B0_2_Y; // конечная координата вектора B0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA1_1_X; // начальная координата вектора dA1 по оси X +var dA1_2_X; // конечная координата вектора dA1 по оси X +var dA1_1_Y; // начальная координата вектора dA1 по оси Y +var dA1_2_Y; // конечная координата вектора dA1 по оси Y + +var A2_phase_X; // угол наклона вектора A2 к оси X +var A2_phase_Y; // угол наклона вектора A2 к оси Y +var A2_1_X; // начальная координата вектора A2 по оси X +var A2_2_X; // конечная координата вектора A2 по оси X +var A2_1_Y; // начальная координата вектора A2 по оси Y +var A2_2_Y; // конечная координата вектора A2 по оси Y + +var dA2_1_X; // начальная координата вектора dA2 по оси X +var dA2_2_X; // конечная координата вектора dA2 по оси X +var dA2_1_Y; // начальная координата вектора dA2 по оси Y +var dA2_2_Y; // конечная координата вектора dA2 по оси Y + +var B1_phase_X; // угол наклона вектора A1 к оси X +var B1_phase_Y; // угол наклона вектора A1 к оси Y +var B1_1_X; // начальная координата вектора A1 по оси X +var B1_2_X; // конечная координата вектора A1 по оси X +var B1_1_Y; // начальная координата вектора A1 по оси Y +var B1_2_Y; // конечная координата вектора A1 по оси Y + +var dB1_1_X; // начальная координата вектора dB1 по оси X +var dB1_2_X; // конечная координата вектора dB1 по оси X +var dB1_1_Y; // начальная координата вектора dB1 по оси Y +var dB1_2_Y; // конечная координата вектора dB1 по оси Y + +var B2_phase_X; // угол наклона вектора A1 к оси X +var B2_phase_Y; // угол наклона вектора A1 к оси Y +var B2_1_X; // начальная координата вектора A1 по оси X +var B2_2_X; // конечная координата вектора A1 по оси X +var B2_1_Y; // начальная координата вектора A1 по оси Y +var B2_2_Y; // конечная координата вектора A1 по оси Y + +var dB2_1_X; // начальная координата вектора dB2 по оси X +var dB2_2_X; // конечная координата вектора dB2 по оси X +var dB2_1_Y; // начальная координата вектора dB2 по оси Y +var dB2_2_Y; // конечная координата вектора dB2 по оси Y + +var m11_test_corner_X; // угол наклона вектора m11_test к оси X +var m11_test_corner_Y; // угол наклона вектора m11_test к оси Y +var m11_test_1_X; // начальная координата вектора m11_test по оси X +var m11_test_2_X; // конечная координата вектора m11_test по оси X +var m11_test_1_Y; // начальная координата вектора m11_test по оси Y +var m11_test_2_Y; // конечная координата вектора m11_test по оси Y + +var m22_test_corner_X; // угол наклона вектора m22_test к оси X +var m22_test_corner_Y; // угол наклона вектора m22_test к оси Y +var m22_test_1_X; // начальная координата вектора m22_test по оси X +var m22_test_2_X; // конечная координата вектора m22_test по оси X +var m22_test_1_Y; // начальная координата вектора m22_test по оси Y +var m22_test_2_Y; // конечная координата вектора m22_test по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = AUSPv0.acq_time; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + // Нестабильность частоты вращения + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + + switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv0.acq_time; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv0.clear_harms_sets(); + AUSPv1.clear_harms_sets(); + + + + // Спектр виброскорости + // Набор гармоник частоты вращения F1v0 (виброскорость) Канал 0 + var F1v0_harms = AUSPv0.add_harms_set(freq.value, 1, 0x00ff0000, 1); // красный цвет + for (let i=0; i <= 0; i++) + {F1v0_harms.harms[i].tolerance = (1+i) * freq.value * 0.1}; // коридор обнаружения гармоник + F1v0_harms.name = "F1v0 (гарм. ряд част. вращ.)"; + // Набор гармоник частоты вращения F1v1 (виброскорость) Канал 1 + var F1v1_harms = AUSPv1.add_harms_set(freq.value, 1, 0x00ff0000, 1); // красный цвет + for (let i=0; i <= 0; i++) + {F1v1_harms.harms[i].tolerance = (1+i) * freq.value * 0.1}; // коридор обнаружения гармоник + F1v1_harms.name = "F1v1 (гарм. ряд част. вращ.)"; + // 1-я гармоника F1v для каналов 0 и 1 + // Проверка наличия оборотной гармоники необходимости проведения баалнсировки + if (F1v0_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v0 = F1v0_harms.harms[0].level; + var F1v0_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v0_test_ampl = "амплитуда частоты вращения НЕ определена";} + if (F1v1_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v1 = F1v1_harms.harms[0].level; + var F1v1_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v1_test_ampl = "амплитуда частоты вращения НЕ определена";} + if ((F1v0 >= RMSv0_2_1000.value * 0.4) || // вклад оборотной гармоники в СКЗv + (F1v1 >= RMSv1_2_1000.value * 0.4)) + {var F1v_test_balance = "необходимо провести балансировку";} + else {var F1v_test_balance = "проведение балансировки не требуется или нецелесообразно";} + + + // ТЕСТИРОВАНИЕ (получение фазы и амплитуды оборотной гармоники из массивов) + // Запись в массив значений уровня спектра (канал 0) + for (let i = 0; i < AUSPv0.data.length; i++) { + // Массив уровней (старый метод) + // level_AUSPv0.push(AUSPv0.data[i] - AUSPv0.base[i]); + + // Разница фаз гармоник + delta_phase_AUSPv0.push(apfc0.phase[i]); + + // Амплитуда гармоник + level_AUSPv0.push(apfc0.data[i]); + + // Индексы гармоник + index_AUSPv0.push(i); + + // Частоты гармоник + frequency_AUSPv0.push(i * (AUSPv0.frequency / AUSPv0.lines)); + + // Запись массивов AUSPv.data и AUSPv.base + AUSPv_data0.push(AUSPv0.data[i]); + AUSPv_base0.push(AUSPv0.base[i]); + } + + // Запись в массив значений уровня спектра (канал 1) + for (let i = 0; i < AUSPv1.data.length; i++) { + // Массив уровней (старый метод) + // level_AUSPv1.push(AUSPv1.data[i] - AUSPv1.base[i]); + + // Разница фаз гармоник + delta_phase_AUSPv1.push(apfc1.phase[i]); + + // Амплитуда гармоник + level_AUSPv1.push(apfc1.data[i]); + + // Индексы гармоник + index_AUSPv1.push(i); + + // Частоты гармоник + frequency_AUSPv1.push(i * (AUSPv1.frequency / AUSPv1.lines)); + + // Запись массивов AUSPv.data и AUSPv.base + AUSPv_data1.push(AUSPv1.data[i]); + AUSPv_base1.push(AUSPv1.base[i]); + } + + var F_find = freq.value; // искомая частота + var F_find_round_min = Math.round(F_find); // округление значения искомой частоты до ближайшего + var F_find_round_max = Math.round(F_find) + AUSPv0.resolution; // округление значения искомой частоты в большую сторону + var F_find_round0; + if (level_AUSPv0[frequency_AUSPv0.indexOf(F_find_round_min)] >= level_AUSPv0[frequency_AUSPv0.indexOf(F_find_round_max)]) + {F_find_round0 = F_find_round_min;} + else {F_find_round0 = F_find_round_max;} + var F_find_round1; + if (level_AUSPv1[frequency_AUSPv0.indexOf(F_find_round_min)] >= level_AUSPv1[frequency_AUSPv0.indexOf(F_find_round_max)]) + {F_find_round1 = F_find_round_min;} + else {F_find_round1 = F_find_round_max;} + + var ind_F_find0 = frequency_AUSPv0.indexOf(F_find_round0); // индекс искомой частоты (канал 0) + var ind_F_find1 = frequency_AUSPv1.indexOf(F_find_round1); // индекс искомой частоты (канал 1) + + + gtl.log.info("искомая частота, Гц", F_find); + gtl.log.info("верхняя граница поиска частоты, Гц", F_find_round_max); + gtl.log.info("нижняя граница поиска частоты, Гц", F_find_round_min); + gtl.log.info("AUSPv.lines", AUSPv0.lines); + gtl.log.info("AUSPv.frequency", AUSPv0.frequency); + +// лог канала 0 + gtl.log.info("искомая частота округлённая до ближ (канал 0), Гц", F_find_round0); + gtl.log.info("индекс искомой частоты (канал 0)", ind_F_find0); + gtl.log.info("уровень искомой частоты (канал 0)", level_AUSPv0[ind_F_find0]); + gtl.log.info("фаза искомой частоты (канал 0)", delta_phase_AUSPv0[ind_F_find0]); + gtl.log.info("проверка уровня AUSPv.data (канал 0)", AUSPv_data0[ind_F_find0] - AUSPv_base0[ind_F_find0]); + gtl.log.info("размер массива frequency_AUSPv (канал 0)", frequency_AUSPv0.length); + +// лог канала 1 + gtl.log.info("искомая частота округлённая до ближ (канал 1), Гц", F_find_round1); + gtl.log.info("индекс искомой частоты (канал 1)", ind_F_find1); + gtl.log.info("уровень искомой частоты (канал 1)", level_AUSPv1[ind_F_find1]); + gtl.log.info("фаза искомой частоты (канал 1)", delta_phase_AUSPv1[ind_F_find1]); + gtl.log.info("проверка уровня AUSPv.data (канал 1)", AUSPv_data1[ind_F_find1] - AUSPv_base1[ind_F_find1]); + gtl.log.info("размер массива frequency_AUSPv (канал 1)", frequency_AUSPv1.length); + + + +//РАСЧЁТЫ + +// определение угла наклона вектора 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 +A0_1_X = 0; +if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} +A0_1_Y = 0; +if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора B0 к осям X и Y +if (B0_phase <= 90) { +B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} +if (B0_phase <= 90) { +B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} +// определение координат вектора B0 +B0_1_X = 0; +if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} +B0_1_Y = 0; +if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + +// определение угла наклона вектора m11_test к осям X и Y +if (m11_test_corner <= 90) { +m11_test_corner_X = 90 - m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_X = m11_test_corner - 90} + if (m11_test_corner <= 270) { + m11_test_corner_X = 270 - m11_test_corner} + if (m11_test_corner <= 360) { + m11_test_corner_X = m11_test_corner - 270} +if (m11_test_corner <= 90) { +m11_test_corner_Y = m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_Y = 180 - m11_test_corner} + if (m11_test_corner <= 270) { + m11_test_corner_Y = m11_test_corner - 180} + if (m11_test_corner <= 360) { + m11_test_corner_Y = 360 - m11_test_corner} +// определение координат вектора m11_test +m11_test_1_X = 0; +if (m11_test_corner <= 180) {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test * (-1) + } else {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test} +m11_test_1_Y = 0; +if (m11_test_corner <= 90 || m11_test_corner >= 270) {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test + } else {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test * (-1)} + +// определение угла наклона вектора 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 +A1_1_X = 0; +if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} +A1_1_Y = 0; +if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение угла наклона вектора B1 к осям X и Y +if (B1_phase <= 90) { +B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} +if (B1_phase <= 90) { +B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} +// определение координат вектора B1 +B1_1_X = 0; +if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 * (-1)} +B1_1_Y = 0; +if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 * (-1)} + +// определение модуля вектора dA1 +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)); +// определение фазы вектора 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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} + if (dA1_phase > 360) {dA1_phase = dA1_phase - 360} + +// определение модуля вектора dB1 +dB1_1_X = B0_2_X; +dB1_2_X = B1_2_X; +dB1_1_Y = B0_2_Y; +dB1_2_Y = B1_2_Y; +dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)); +// определение фазы вектора dB1 +if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} +if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + +// определение угла наклона вектора m22_test к осям X и Y +if (m22_test_corner <= 90) { +m22_test_corner_X = 90 - m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_X = m22_test_corner - 90} + if (m22_test_corner <= 270) { + m22_test_corner_X = 270 - m22_test_corner} + if (m22_test_corner <= 360) { + m22_test_corner_X = m22_test_corner - 270} +if (m22_test_corner <= 90) { +m22_test_corner_Y = m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_Y = 180 - m22_test_corner} + if (m22_test_corner <= 270) { + m22_test_corner_Y = m22_test_corner - 180} + if (m22_test_corner <= 360) { + m22_test_corner_Y = 360 - m22_test_corner} +// определение координат вектора m22_test +m22_test_1_X = 0; +if (m22_test_corner <= 180) {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test * (-1) + } else {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test} +m22_test_1_Y = 0; +if (m22_test_corner <= 90 || m22_test_corner >= 270) {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test + } else {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test * (-1)} + +// определение угла наклона вектора 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 +A2_1_X = 0; +if (A2_phase <= 180) {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} +A2_1_Y = 0; +if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 * (-1)} + +// определение угла наклона вектора B2 к осям X и Y +if (B2_phase <= 90) { +B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} +if (B2_phase <= 90) { +B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B1_phase <= 360) { + B2_phase_Y = 360 - B2_phase} +// определение координат вектора B2 +B2_1_X = 0; +if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 * (-1)} +B2_1_Y = 0; +if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 * (-1)} + +// определение модуля вектора dA2 +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)); +// определение фазы вектора 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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} +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 ) / 3.1415)} + if (dA2_phase > 360) {dA2_phase = dA2_phase - 360} + +// определение модуля вектора dB2 +dB2_1_X = B0_2_X; +dB2_2_X = B2_2_X; +dB2_1_Y = B0_2_Y; +dB2_2_Y = B2_2_Y; +dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)); +// определение фазы вектора dB2 +if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} +if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + +// определение модуля вектора DCI_A1 +DCI_A1 = dA1 / m11_test; +// опредение фаза вектора DCI_A1 +if ((dA1_phase - m11_test_corner) < 0) { + DCI_A1_phase = (dA1_phase - m11_test_corner) + 360} + else if ((dA1_phase - m11_test_corner) > 360) { + DCI_A1_phase = (dA1_phase - m11_test_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m11_test_corner)} + +// определение модуля вектора DCI_B1 +DCI_B1 = dB1 / m11_test; +// опредение фаза вектора DCI_B1 +if ((dB1_phase - m11_test_corner) < 0) { + DCI_B1_phase = (dB1_phase - m11_test_corner) + 360} + else if ((dB1_phase - m11_test_corner) > 360) { + DCI_B1_phase = (dB1_phase - m11_test_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m11_test_corner)} + +// определение модуля вектора DCI_A2 +DCI_A2 = dA2 / m22_test; +// опредение фаза вектора DCI_A2 +if ((dA2_phase - m22_test_corner) < 0) { + DCI_A2_phase = (dA2_phase - m22_test_corner) + 360} + else if ((dA2_phase - m22_test_corner) > 360) { + DCI_A2_phase = (dA2_phase - m22_test_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m22_test_corner)} + +// определение модуля вектора DCI_B2 +DCI_B2 = dB2 / m22_test; +// опредение фаза вектора DCI_B2 +if ((dB2_phase - m22_test_corner) < 0) { + DCI_B2_phase = (dB2_phase - m22_test_corner) + 360} + else if ((dB2_phase - m22_test_corner) > 360) { + DCI_B2_phase = (dB2_phase - m22_test_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m22_test_corner)} + +// формулы для определение векторов балансировочных грузов +// Mb1 = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// Mb2 = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// ... вычисления этих формул делим на этапы +// 1) В0 * DCI_A2 +// 2) A0 * DCI_B2 +// 3) A0 * DCI_B1 +// 4) B0 * DCI_A1 +// 5) В0 * DCI_A2 - A0 * DCI_B2 +// 6) A0 * DCI_B1 - B0 * DCI_A1 +// 7) DCI_A1 * DCI_B2 +// 8) DCI_B1 * DCI_A2 +// 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + +// определение модуля вектора B0 * DCI_A2 +var B0_DCI_A2 = B0 * DCI_A2; +// определение фазы вектора В0 * DCI_A2 +var B0_DCI_A2_phase; +if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} +// определение угла наклона вектора В0 * DCI_A2 к осям X и Y +var B0_DCI_A2_phase_X; +var B0_DCI_A2_phase_Y; +if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} +if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} +// определение координат вектора В0 * DCI_A2 +var B0_DCI_A2_1_X = 0; +var B0_DCI_A2_2_X; +if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 * (-1)} +var B0_DCI_A2_1_Y = 0; +var B0_DCI_A2_2_Y; +if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 * (-1)} + +// определение модуля вектора A0 * DCI_B2 +var A0_DCI_B2 = A0 * DCI_B2; +// определение фазы вектора A0 * DCI_B2 +var A0_DCI_B2_phase; +if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} +// определение угла наклона вектора A0 * DCI_B2 к осям X и Y +var A0_DCI_B2_phase_X; +var A0_DCI_B2_phase_Y; +if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} +if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} +// определение координат вектора A0 * DCI_B2 +var A0_DCI_B2_1_X = 0; +var A0_DCI_B2_2_X; +if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 * (-1)} +var A0_DCI_B2_1_Y = 0; +var A0_DCI_B2_2_Y; +if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 * (-1)} + +// определение модуля вектора A0 * DCI_B1 +var A0_DCI_B1 = A0 * DCI_B1; +// определение фазы вектора A0 * DCI_B1 +var A0_DCI_B1_phase; +if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} +// определение угла наклона вектора A0 * DCI_B1 к осям X и Y +var A0_DCI_B1_phase_X; +var A0_DCI_B1_phase_Y; +if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} +if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} +// определение координат вектора A0 * DCI_B1 +var A0_DCI_B1_1_X = 0; +var A0_DCI_B1_2_X; +if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 * (-1)} +var A0_DCI_B1_1_Y = 0; +var A0_DCI_B1_2_Y; +if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 * (-1)} + +// определение модуля вектора B0 * DCI_A1 +var B0_DCI_A1 = B0 * DCI_A1; +// определение фазы вектора A0 * DCI_B1 +var B0_DCI_A1_phase; +if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y +var B0_DCI_A1_phase_X; +var B0_DCI_A1_phase_Y; +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} +// определение координат вектора B0 * DCI_A1 +var B0_DCI_A1_1_X = 0; +var B0_DCI_A1_2_X; +if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} +var B0_DCI_A1_1_Y = 0; +var B0_DCI_A1_2_Y; +if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение фазы вектора B0 * DCI_A1 +var B0_DCI_A1_phase; +if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y +var B0_DCI_A1_phase_X; +var B0_DCI_A1_phase_Y; +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} +if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} +// определение координат вектора B0 * DCI_A1 +var B0_DCI_A1_1_X = 0; +var B0_DCI_A1_2_X; +if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} +var B0_DCI_A1_1_Y = 0; +var B0_DCI_A1_2_Y; +if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 +var B0_DCIA2_A0_DCIB2; +var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; +var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; +var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; +var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; +B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); +// определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 +var B0_DCIA2_A0_DCIB2_phase; +if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} +if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415) + 180} +if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} +if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + +// определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 +var A0_DCIB1_B0_DCIA1; +var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; +var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; +var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; +var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; +A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); +// определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 +var A0_DCIB1_B0_DCIA1_phase; +if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} +if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415) + 180} +if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} +if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + +// определение модуля вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2 = DCI_A1 * DCI_B2; +// определение фазы вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2_phase; +if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} +// определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y +var DCIA1_DCIB2_phase_X; +var DCIA1_DCIB2_phase_Y; +if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} +if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} +// определение координат вектора DCI_A1 * DCI_B2 +var DCIA1_DCIB2_1_X = 0; +var DCIA1_DCIB2_2_X; +if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 * (-1)} +var DCIA1_DCIB2_1_Y = 0; +var DCIA1_DCIB2_2_Y; +if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + +// определение модуля вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2 = DCI_B1 * DCI_A2; +// определение фазы вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2_phase; +if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} +// определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y +var DCIB1_DCIA2_phase_X; +var DCIB1_DCIA2_phase_Y; +if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} +if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} +// определение координат вектора DCI_B1 * DCI_A2 +var DCIB1_DCIA2_1_X = 0; +var DCIB1_DCIA2_2_X; +if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 * (-1)} +var DCIB1_DCIA2_1_Y = 0; +var DCIB1_DCIA2_2_Y; +if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + +// определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 +var DCIA1_DCIB2_DCIB1_DCIA2; +var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; +var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; +var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; +var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; +DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); +// определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 +var DCIA1_DCIB2_DCIB1_DCIA2_phase; +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415) + 180} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} +if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + +// определение массы корректирующей массы Mb1 (плоскость 1) +Mb1 = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; +// опредение угла установки корректирующей массы Mb1 (плоскость 1) +if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + +// определение массы корректирующей массы Mb2 (плоскость 2) +Mb2 = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; +// опредение угла установки корректирующей массы Mb2 (плоскость 2) +if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + +gtl.log.info("Mb1",Mb1); +gtl.log.info("Mb1_corner",Mb1_corner); +gtl.log.info("Mb2",Mb2); +gtl.log.info("Mb2_corner",Mb2_corner); +gtl.log.info("FREQ.value",FREQ.value); +gtl.log.info("freq.value (по dc)",freq.value); +gtl.log.info("F1v0.level",F1v0); +gtl.log.info("RMSv0_2_1000",RMSv0_2_1000.value); +gtl.log.info("F1v1.level",F1v1); +gtl.log.info("RMSv1_2_1000",RMSv1_2_1000.value); +gtl.log.info("F1v0_test_ampl",F1v0_test_ampl); +gtl.log.info("F1v1_test_ampl",F1v1_test_ampl); +gtl.log.info("F1v_test_balance",F1v_test_balance); +gtl.log.info("F1v_harms.harms[0].tolerance",F1v0_harms.harms[0].tolerance); +gtl.log.info("delta_phase_F1v0",delta_phase_F1v0.value); +gtl.log.info("delta_phase_F1v1",delta_phase_F1v1.value); +gtl.log.info("delta_phase_F1v.acq_time",delta_phase_F1v0.acq_time); +gtl.log.info("AUSPv0.acq_time",AUSPv0.acq_time); + + // Выдача результата (results) + let __result = { + Частота_вращения_F1_0: F_find_round0, + Канал_вибрации_датчика1: "канал [0]", + Амплитуда_гармоники_F1_датчика1: level_AUSPv0[ind_F_find0], + Фаза_гармоники_F1_датчика1: delta_phase_AUSPv0[ind_F_find0], + проверка_амплитуды_F1v_датчика1: AUSPv_data0[ind_F_find0] - AUSPv_base0[ind_F_find0], + амплитуды_F1v_датчика1: F1v0, + дельта_фаза_датчика1: delta_phase_F1v0.value, + _:"-", + Частота_вращения_F1_1: F_find_round1, + Канал_вибрации_датчика2: "канал [1]", + Амплитуда_гармоники_F1_датчика2: level_AUSPv1[ind_F_find1], + Фаза_гармоники_F1_датчика2: delta_phase_AUSPv1[ind_F_find1], + проверка_амплитуды_F1v_датчика2: AUSPv_data1[ind_F_find1] - AUSPv_base1[ind_F_find1], + амплитуды_F1v_датчика2: F1v1, + дельта_фаза_датчика2: delta_phase_F1v1.value, + }; +gtl.results = __result; +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/Две_плоскости_с_фазой.js b/scripts/Две_плоскости_с_фазой.js new file mode 100644 index 0000000..b05d1d9 --- /dev/null +++ b/scripts/Две_плоскости_с_фазой.js @@ -0,0 +1,1393 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ДВЕ ПЛОСКОСТИ с фазой ***** +// ************************************************************** + +// Получение входных сигналов + + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // Канал 0 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter0_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter0_2_1000.kind = gtl.filter_iir.butterworth; + filter0_2_1000.type = gtl.filter_iir.bandpass; + filter0_2_1000.order = 6; + filter0_2_1000.frequency = 502; // центральная частота полосового фильтра + filter0_2_1000.width = 1000; // ширина полосы фильтра + var filter0_2_1000v = gtl.add_intg(filter0_2_1000); // интегрирование + filter0_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv0 = gtl.add_ausp(filter0_2_1000v); // объявление переменной спектра + AUSPv0.color = 0x00ff0000; // цвет спектра + AUSPv0.name = "AUSPv0"; // имя спектра + AUSPv0.frequency = frequency; // граничная частота спектра + AUSPv0.lines = AUSPv0.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv0.average = average; // количество усреднений + AUSPv0.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv0.smoothing_factor = 100; // усреднение средней линии + AUSPv0.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv0.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv0.tolerance = AUSPv0.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv0_2_1000 = gtl.add_value_rms(filter0_2_1000v); + RMSv0_2_1000.time = 1; + RMSv0_2_1000.avg_cnt = 3; + // СКЗa + var RMSa0 = gtl.add_value_rms(gtl.analog_inputs[signals[0].portNumber]); + RMSa0.time = 1; + RMSa0.avg_cnt = 3; + + // Канал 1 + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter1_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[1].portNumber]); + filter1_2_1000.kind = gtl.filter_iir.butterworth; + filter1_2_1000.type = gtl.filter_iir.bandpass; + filter1_2_1000.order = 6; + filter1_2_1000.frequency = 502; // центральная частота полосового фильтра + filter1_2_1000.width = 1000; // ширина полосы фильтра + var filter1_2_1000v = gtl.add_intg(filter1_2_1000); // интегрирование + filter1_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv1 = gtl.add_ausp(filter1_2_1000v); // объявление переменной спектра + AUSPv1.color = 0x00ff0000; // цвет спектра + AUSPv1.name = "AUSPv1"; // имя спектра + AUSPv1.frequency = frequency; // граничная частота спектра + AUSPv1.lines = AUSPv1.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv1.average = average; // количество усреднений + AUSPv1.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv1.smoothing_factor = 100; // усреднение средней линии + AUSPv1.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv1.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv1.tolerance = AUSPv1.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv1_2_1000 = gtl.add_value_rms(filter1_2_1000v); + RMSv1_2_1000.time = 1; + RMSv1_2_1000.avg_cnt = 3; + // СКЗa + var RMSa1 = gtl.add_value_rms(gtl.analog_inputs[signals[1].portNumber]); + RMSa1.time = 1; + RMSa1.avg_cnt = 3; + +// Спектр виброскорости (новый метод) +var AUSPv0_pl = gtl.create_ausp( + { + "src" : filter0_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } +); +var AUSPv1_pl = gtl.create_ausp( + { + "src" : filter1_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } +); +// ФЧХ (новый метод) +var pfc0_pl = gtl.create_pfc( + { + "src0" : filter0_2_1000v, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false, //по умолчанию - false + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + } +); +var pfc1_pl = gtl.create_pfc( + { + "src0" : filter1_2_1000v, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false, //по умолчанию - false + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + } +); + +// Объявление графических плоскостей для построения графиков + var plot_ausp0 = gtl.plots.add("Спектр виброскорости 0"); // создание объекта для спектра + var plot_ausp1 = gtl.plots.add("Спектр виброскорости 1"); // создание объекта для спектра + var plot_pfc0 = gtl.plots.add("ФЧХ 0"); // фазо-частотная характеристика + var plot_pfc1 = gtl.plots.add("ФЧХ 1"); // фазо-частотная характеристика + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +var m_test_calc; // масса пробного груза расчётная *** +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +var FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let P = gtl.options.customOptions.P; // масса ротора, грамм ** (для вычисления массы пробного груза) + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации в точке A */** +var A0 = 8; // модуль вектора начальной вибрации в точке A */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации в точке A */** +var A0_phase; // фаза вектора начальной вибрации в точке A */** (конечное значение) +let B0_ = gtl.options.customOptions.B0; // модуль вектора начальной вибрации в точке B */** +var B0; // модуль вектора начальной вибрации в точке B */** (конечное значение) +let B0_phase_ = gtl.options.customOptions.B0_phase; // фаза вектора начальной вибрации в точке B */** +var B0_phase; // фаза вектора начальной вибрации в точке B */** (конечное значение) + +let m11_test_ = gtl.options.customOptions.m11_test; // модуль вектора пробного груза при 1-ом пуске в плоскости 1** +let m11_test; // модуль вектора пробного груза при 1-ом пуске в плоскости 1** (конечное значение) +let m11_test_corner = gtl.options.customOptions.m11_test_corner;// угол вектора пробного груза при 1-ом пуске в плоскости 1 ** +let m22_test_ = gtl.options.customOptions.m22_test; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 ** +let m22_test; // модуль вектора пробного груза при 2-ом пуске в плоскости 2 **(конечное значение) +let m22_test_corner = gtl.options.customOptions.m22_test_corner;// угол вектора пробного груза при 2-ом пуске в плоскости 2 ** + +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1; // модуль вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +let A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** +var A1_phase; // фаза вектора вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var dA1; // модуль вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +var dA1_phase; // фаза вектора дельты вибрации в точке A 1-го пробного пуска с грузом в плоскости 1 *** +let B1_ = gtl.options.customOptions.B1; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1; // модуль вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var B1_phase_ = gtl.options.customOptions.B1_phase; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** +var B1_phase; // фаза вектора вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 */** (конечное значение) +var dB1_phase; // фаза вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** +var dB1; // модуль вектора дельты вибрации в точке B 1-го пробного пуска с грузом в плоскости 1 *** + +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2; // модуль вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +let A2_phase_ = gtl.options.customOptions.A2_phase; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** +var A2_phase; // фаза вектора вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +var dA2; // модуль вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +var dA2_phase; // фаза вектора дельты вибрации в точке A 2-го пробного пуска с грузом в плоскости 2 *** +let B2_ = gtl.options.customOptions.B2; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2; // модуль вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +let B2_phase_ = gtl.options.customOptions.B2_phase; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** +var B2_phase; // фаза вектора вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 */** (конечное значение) +var dB2; // модуль вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** +var dB2_phase; // фаза вектора дельты вибрации в точке B 2-го пробного пуска с грузом в плоскости 2 *** + +let DCI_A1_ = gtl.options.customOptions.DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_A1_phase_ = gtl.options.customOptions.DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** +var DCI_A1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке A **/*** (конечное значение) +let DCI_B1_ = gtl.options.customOptions.DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1; // модуль (мм/с/граммы) ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** (конечное значение) +let DCI_B1_phase_ = gtl.options.customOptions.DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** +var DCI_B1_phase; // фаза ДКВ груза m11_test в плоскости 1 на вибрацию в точке B **/*** (конечное значение) + +let DCI_A2_ = gtl.options.customOptions.DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_A2_phase_ = gtl.options.customOptions.DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** +var DCI_A2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке A **/*** (конечное значение) +let DCI_B2_ = gtl.options.customOptions.DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2; // модуль (мм/с/граммы) ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** (конечное значение) +let DCI_B2_phase_ = gtl.options.customOptions.DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** +var DCI_B2_phase; // фаза ДКВ груза m22_test в плоскости 2 на вибрацию в точке B **/*** (конечное значение) + +var Mb1; // модуль вектора балансировочного груза в плоскости 1 *** +var Mb1_corner; // угол вектора балансировочного груза в плоскости 1 *** +var Mb2; // модуль вектора балансировочного груза в плоскости 2 *** +var Mb2_corner; // угол вектора балансировочного груза в плоскости 2 *** +var Mdisb1; // масса дисбаланса в плоскости 1 *** +var Mdisb1_corner; // угол расположения дисбаланса в плоскости 1 *** +var Mdisb2; // масса дисбаланса в плоскости 2 *** +var Mdisb2_corner; // угол расположения дисбаланса в плоскости 2 *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var B0_phase_X; // угол наклона вектора B0 к оси X +var B0_phase_Y; // угол наклона вектора B0 к оси Y +var B0_1_X; // начальная координата вектора B0 по оси X +var B0_2_X; // конечная координата вектора B0 по оси X +var B0_1_Y; // начальная координата вектора B0 по оси Y +var B0_2_Y; // конечная координата вектора B0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA1_1_X; // начальная координата вектора dA1 по оси X +var dA1_2_X; // конечная координата вектора dA1 по оси X +var dA1_1_Y; // начальная координата вектора dA1 по оси Y +var dA1_2_Y; // конечная координата вектора dA1 по оси Y + +var A2_phase_X; // угол наклона вектора A2 к оси X +var A2_phase_Y; // угол наклона вектора A2 к оси Y +var A2_1_X; // начальная координата вектора A2 по оси X +var A2_2_X; // конечная координата вектора A2 по оси X +var A2_1_Y; // начальная координата вектора A2 по оси Y +var A2_2_Y; // конечная координата вектора A2 по оси Y + +var dA2_1_X; // начальная координата вектора dA2 по оси X +var dA2_2_X; // конечная координата вектора dA2 по оси X +var dA2_1_Y; // начальная координата вектора dA2 по оси Y +var dA2_2_Y; // конечная координата вектора dA2 по оси Y + +var B1_phase_X; // угол наклона вектора A1 к оси X +var B1_phase_Y; // угол наклона вектора A1 к оси Y +var B1_1_X; // начальная координата вектора A1 по оси X +var B1_2_X; // конечная координата вектора A1 по оси X +var B1_1_Y; // начальная координата вектора A1 по оси Y +var B1_2_Y; // конечная координата вектора A1 по оси Y + +var dB1_1_X; // начальная координата вектора dB1 по оси X +var dB1_2_X; // конечная координата вектора dB1 по оси X +var dB1_1_Y; // начальная координата вектора dB1 по оси Y +var dB1_2_Y; // конечная координата вектора dB1 по оси Y + +var B2_phase_X; // угол наклона вектора A1 к оси X +var B2_phase_Y; // угол наклона вектора A1 к оси Y +var B2_1_X; // начальная координата вектора A1 по оси X +var B2_2_X; // конечная координата вектора A1 по оси X +var B2_1_Y; // начальная координата вектора A1 по оси Y +var B2_2_Y; // конечная координата вектора A1 по оси Y + +var dB2_1_X; // начальная координата вектора dB2 по оси X +var dB2_2_X; // конечная координата вектора dB2 по оси X +var dB2_1_Y; // начальная координата вектора dB2 по оси Y +var dB2_2_Y; // конечная координата вектора dB2 по оси Y + +var m11_test_corner_X; // угол наклона вектора m11_test к оси X +var m11_test_corner_Y; // угол наклона вектора m11_test к оси Y +var m11_test_1_X; // начальная координата вектора m11_test по оси X +var m11_test_2_X; // конечная координата вектора m11_test по оси X +var m11_test_1_Y; // начальная координата вектора m11_test по оси Y +var m11_test_2_Y; // конечная координата вектора m11_test по оси Y + +var m22_test_corner_X; // угол наклона вектора m22_test к оси X +var m22_test_corner_Y; // угол наклона вектора m22_test к оси Y +var m22_test_1_X; // начальная координата вектора m22_test по оси X +var m22_test_2_X; // конечная координата вектора m22_test по оси X +var m22_test_1_Y; // начальная координата вектора m22_test по оси Y +var m22_test_2_Y; // конечная координата вектора m22_test по оси Y + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + + // Нестабильность частоты вращения + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + + switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv0.acq_time, AUSPv0_pl.acq_time, pfc0_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv0.clear_harms_sets(); + AUSPv1.clear_harms_sets(); + + + let __AUSPv0_tools = gtl.create_spec_tools( + { + data: AUSPv0_pl.data, + df: AUSPv0_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row0 = __AUSPv0_tools.harms.add(freq.value, 3, 0xff0000, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row0.name = "F1v0 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc0_tools = gtl.create_spec_tools( + { + data: pfc0_pl.data, + df: pfc0_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row0_phase = __pfc0_tools.harms.add(freq.value, 3, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row0_phase.name = "F1v_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + let __result1_0 = __AUSPv0_tools.to_json(); + let __result2_0 = __pfc0_tools.to_json(); + + + let __AUSPv1_tools = gtl.create_spec_tools( + { + data: AUSPv1_pl.data, + df: AUSPv1_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row1 = __AUSPv1_tools.harms.add(freq.value, 3, 0xff0000, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1.name = "F1v1 (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + let __pfc1_tools = gtl.create_spec_tools( + { + data: pfc1_pl.data, + df: pfc1_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + let __row1_phase = __pfc1_tools.harms.add(freq.value, 3, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1v1_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + let __result1_1 = __AUSPv1_tools.to_json(); + let __result2_1 = __pfc1_tools.to_json(); + + + // Отрисовка графиков + plot_ausp0.add( + { + color: 0x0000ff, + name: "Спектр виброскорости 0", + x: AUSPv0_pl.resolution, + y: AUSPv0_pl.data, + spec_tools: __AUSPv0_tools.to_json() + }); + plot_pfc0.add( + { + color: 0xff0000, + name: "ФЧХ 0", + x: pfc0_pl.resolution, + y: pfc0_pl.data, + spec_tools: __pfc0_tools.to_json() + }); + plot_ausp1.add( + { + color: 0x0000ff, + name: "Спектр виброскорости 1", + x: AUSPv1_pl.resolution, + y: AUSPv1_pl.data, + spec_tools: __AUSPv1_tools.to_json() + }); + plot_pfc1.add( + { + color: 0xff0000, + name: "ФЧХ 1", + x: pfc1_pl.resolution, + y: pfc1_pl.data, + spec_tools: __pfc1_tools.to_json() + }); + + + // Амплитуда гармонического ряда частоты вращения (канал 0) + var F1_0_1_a = __result1_0.harms.rows[0].harms[0].ampl; + var F1_0_2_a = __result1_0.harms.rows[0].harms[1].ampl; + var F1_0_3_a = __result1_0.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения (канал 0) + var F1_0_1_f = __result1_0.harms.rows[0].harms[0].freq; + var F1_0_2_f = __result1_0.harms.rows[0].harms[1].freq; + var F1_0_3_f = __result1_0.harms.rows[0].harms[2].freq; + + // Амплитуда гармонического ряда частоты вращения (канал 1) + var F1_1_1_a = __result1_1.harms.rows[0].harms[0].ampl; + var F1_1_2_a = __result1_1.harms.rows[0].harms[1].ampl; + var F1_1_3_a = __result1_1.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения (канал 1) + var F1_1_1_f = __result1_1.harms.rows[0].harms[0].freq; + var F1_1_2_f = __result1_1.harms.rows[0].harms[1].freq; + var F1_1_3_f = __result1_1.harms.rows[0].harms[2].freq; + + // Проверка наличия оборотной гармоники и необходимости проведения балансировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_0_1_a >= RMSv0_2_1000 * 0.4 || + F1_1_1_a >= RMSv1_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + // Фаза (амплитуда) гармонического ряда частоты вращения (канал 0) + var F1_0_1_ph = __result2_0.harms.rows[0].harms[0].ampl; + var F1_0_2_ph = __result2_0.harms.rows[0].harms[1].ampl; + var F1_0_3_ph = __result2_0.harms.rows[0].harms[2].ampl; + + // Фаза (амплитуда) гармонического ряда частоты вращения (канал 1) + var F1_1_1_ph = __result2_1.harms.rows[0].harms[0].ampl; + var F1_1_2_ph = __result2_1.harms.rows[0].harms[1].ampl; + var F1_1_3_ph = __result2_1.harms.rows[0].harms[2].ampl; + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + +//РАСЧЁТЫ + // Определение конечных значений переменных + // A0 - начальная вибрация в точке A + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_0_1_a} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B0 - начальная вибрация в точке B + if (B0_ != 0) {B0 = B0_} // принимает значение из опций + else {B0 = F1_1_1_a} // принимает значение из спектра сигнала + if (B0_phase_ != 0) {B0_phase = B0_phase_} // принимает значение из опций + else {B0_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // A1 - вибрация в точке A после установки пробного груза в плоскость 1 + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_0_1_a} // принимает значение из спектра сигнала + if (A1_phase_ != 0) {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B1 - вибрация в точке B после установки пробного груза в плоскость 1 + if (B1_ != 0) {B1 = B1_} // принимает значение из опций + else {B1 = F1_1_1_a} // принимает значение из спектра сигнала + if (B1_phase_ != 0) {B1_phase = B1_phase_} // принимает значение из опций + else {B1_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // A2 - вибрация в точке A после установки пробного груза в плоскость 2 + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_0_1_a} // принимает значение из спектра сигнала + if (A2_phase_ != 0) {A2_phase = A2_phase_} // принимает значение из опций + else {A2_phase = F1_0_1_ph} // принимает значение из спектра сигнала + + // B2 - вибрация в точке B после установки пробного груза в плоскость 2 + if (B2_ != 0) {B2 = B2_} // принимает значение из опций + else {B2 = F1_1_1_a} // принимает значение из спектра сигнала + if (B2_phase_ != 0) {B2_phase = B2_phase_} // принимает значение из опций + else {B2_phase = F1_1_1_ph} // принимает значение из спектра сигнала + + // вычисление массы пробного груза (если не выбран свой и есть данные для формулы) + var m_test_calc = 804 * ((P * A0) / (R * n)); + // m11_test масса пробного груза в плоскости 1 (1-й пробный пуск) + if (m11_test_ != 0) {m11_test = m11_test_} // принимает значение из опций + else {m11_test = m_test_calc} // принимает значение из расчёта + + // m22_test масса пробного груза в плоскости 2 (2-й пробный пуск) + if (m22_test_ != 0) {m22_test = m22_test_} // принимает значение из опций + else {m22_test = m_test_calc} // принимает значение из расчёта + +// определение угла наклона вектора 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 + A0_1_X = 0; + if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора B0 к осям X и Y + if (B0_phase <= 90) { + B0_phase_X = 90 - B0_phase} + if (B0_phase <= 180) { + B0_phase_X = B0_phase - 90} + if (B0_phase <= 270) { + B0_phase_X = 270 - B0_phase} + if (B0_phase <= 360) { + B0_phase_X = B0_phase - 270} + if (B0_phase <= 90) { + B0_phase_Y = B0_phase} + if (B0_phase <= 180) { + B0_phase_Y = 180 - B0_phase} + if (B0_phase <= 270) { + B0_phase_Y = B0_phase - 180} + if (B0_phase <= 360) { + B0_phase_Y = 360 - B0_phase} +// определение координат вектора B0 + B0_1_X = 0; + if (B0_phase <= 180) {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 + } else {B0_2_X = Math.abs(Math.cos(B0_phase_X * 3.1415/180)) * B0 * (-1)} + B0_1_Y = 0; + if (B0_phase <= 90 || B0_phase >= 270) {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 + } else {B0_2_Y = Math.abs(Math.cos(B0_phase_Y * 3.1415/180)) * B0 * (-1)} + +// определение угла наклона вектора m11_test к осям X и Y + if (m11_test_corner <= 90) { + m11_test_corner_X = 90 - m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_X = m11_test_corner - 90} + if (m11_test_corner <= 270) { + m11_test_corner_X = 270 - m11_test_corner} + if (m11_test_corner <= 360) { + m11_test_corner_X = m11_test_corner - 270} + if (m11_test_corner <= 90) { + m11_test_corner_Y = m11_test_corner} + if (m11_test_corner <= 180) { + m11_test_corner_Y = 180 - m11_test_corner} + if (m11_test_corner <= 270) { + m11_test_corner_Y = m11_test_corner - 180} + if (m11_test_corner <= 360) { + m11_test_corner_Y = 360 - m11_test_corner} + +// определение координат вектора m11_test + m11_test_1_X = 0; + if (m11_test_corner <= 180) {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test * (-1) + } else {m11_test_2_X = Math.abs(Math.cos(m11_test_corner_X * 3.1415/180)) * m11_test} + m11_test_1_Y = 0; + if (m11_test_corner <= 90 || m11_test_corner >= 270) {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test + } else {m11_test_2_Y = Math.abs(Math.cos(m11_test_corner_Y * 3.1415/180)) * m11_test * (-1)} + +// определение угла наклона вектора 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 + A1_1_X = 0; + if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} + A1_1_Y = 0; + if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение угла наклона вектора B1 к осям X и Y + if (B1_phase <= 90) { + B1_phase_X = 90 - B1_phase} + if (B1_phase <= 180) { + B1_phase_X = B1_phase - 90} + if (B1_phase <= 270) { + B1_phase_X = 270 - B1_phase} + if (B1_phase <= 360) { + B1_phase_X = B1_phase - 270} + if (B1_phase <= 90) { + B1_phase_Y = B1_phase} + if (B1_phase <= 180) { + B1_phase_Y = 180 - B1_phase} + if (B1_phase <= 270) { + B1_phase_Y = B1_phase - 180} + if (B1_phase <= 360) { + B1_phase_Y = 360 - B1_phase} + +// определение координат вектора B1 + B1_1_X = 0; + if (B1_phase <= 180) {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 + } else {B1_2_X = Math.abs(Math.cos(B1_phase_X * 3.1415/180)) * B1 * (-1)} + B1_1_Y = 0; + if (B1_phase <= 90 || B1_phase >= 270) {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 + } else {B1_2_Y = Math.abs(Math.cos(B1_phase_Y * 3.1415/180)) * B1 * (-1)} + +// определение модуля вектора dA1 + 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)); + +// определение фазы вектора 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA1_phase > 360) {dA1_phase = dA1_phase - 360} + +// определение модуля вектора dB1 + dB1_1_X = B0_2_X; + dB1_2_X = B1_2_X; + dB1_1_Y = B0_2_Y; + dB1_2_Y = B1_2_Y; + dB1 = Math.sqrt(Math.pow(dB1_2_X - dB1_1_X, 2) + Math.pow(dB1_2_Y - dB1_1_Y, 2)); + +// определение фазы вектора dB1 + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 180 + (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y > dB1_1_Y) && (dB1_2_X < dB1_1_X)) { + dB1_phase = 360 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if ((dB1_2_Y < dB1_1_Y) && (dB1_2_X > dB1_1_X)) { + dB1_phase = 180 - (((Math.acos((Math.abs(dB1_2_Y - dB1_1_Y)) / dB1)) * 180 ) / 3.1415)} + if (dB1_phase > 360) {dB1_phase = dB1_phase - 360} + +// определение угла наклона вектора m22_test к осям X и Y + if (m22_test_corner <= 90) { + m22_test_corner_X = 90 - m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_X = m22_test_corner - 90} + if (m22_test_corner <= 270) { + m22_test_corner_X = 270 - m22_test_corner} + if (m22_test_corner <= 360) { + m22_test_corner_X = m22_test_corner - 270} + if (m22_test_corner <= 90) { + m22_test_corner_Y = m22_test_corner} + if (m22_test_corner <= 180) { + m22_test_corner_Y = 180 - m22_test_corner} + if (m22_test_corner <= 270) { + m22_test_corner_Y = m22_test_corner - 180} + if (m22_test_corner <= 360) { + m22_test_corner_Y = 360 - m22_test_corner} + +// определение координат вектора m22_test + m22_test_1_X = 0; + if (m22_test_corner <= 180) {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test * (-1) + } else {m22_test_2_X = Math.abs(Math.cos(m22_test_corner_X * 3.1415/180)) * m22_test} + m22_test_1_Y = 0; + if (m22_test_corner <= 90 || m22_test_corner >= 270) {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test + } else {m22_test_2_Y = Math.abs(Math.cos(m22_test_corner_Y * 3.1415/180)) * m22_test * (-1)} + +// определение угла наклона вектора 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 + A2_1_X = 0; + if (A2_phase <= 180) {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 + } else {A2_2_X = Math.abs(Math.cos(A2_phase_X * 3.1415/180)) * A2 * (-1)} + A2_1_Y = 0; + if (A2_phase <= 90 || A2_phase >= 270) {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 + } else {A2_2_Y = Math.abs(Math.cos(A2_phase_Y * 3.1415/180)) * A2 * (-1)} + +// определение угла наклона вектора B2 к осям X и Y + if (B2_phase <= 90) { + B2_phase_X = 90 - B2_phase} + if (B2_phase <= 180) { + B2_phase_X = B2_phase - 90} + if (B2_phase <= 270) { + B2_phase_X = 270 - B2_phase} + if (B2_phase <= 360) { + B2_phase_X = B2_phase - 270} + if (B2_phase <= 90) { + B2_phase_Y = B2_phase} + if (B2_phase <= 180) { + B2_phase_Y = 180 - B2_phase} + if (B2_phase <= 270) { + B2_phase_Y = B2_phase - 180} + if (B1_phase <= 360) { + B2_phase_Y = 360 - B2_phase} +// определение координат вектора B2 + B2_1_X = 0; + if (B2_phase <= 180) {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 + } else {B2_2_X = Math.abs(Math.cos(B2_phase_X * 3.1415/180)) * B2 * (-1)} + B2_1_Y = 0; + if (B2_phase <= 90 || B2_phase >= 270) {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 + } else {B2_2_Y = Math.abs(Math.cos(B2_phase_Y * 3.1415/180)) * B2 * (-1)} + +// определение модуля вектора dA2 + 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)); + +// определение фазы вектора 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + 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 ) / 3.1415)} + if (dA2_phase > 360) {dA2_phase = dA2_phase - 360} + +// определение модуля вектора dB2 + dB2_1_X = B0_2_X; + dB2_2_X = B2_2_X; + dB2_1_Y = B0_2_Y; + dB2_2_Y = B2_2_Y; + dB2 = Math.sqrt(Math.pow(dB2_2_X - dB2_1_X, 2) + Math.pow(dB2_2_Y - dB2_1_Y, 2)); + +// определение фазы вектора dB2 + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 180 + (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y > dB2_1_Y) && (dB2_2_X < dB2_1_X)) { + dB2_phase = 360 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if ((dB2_2_Y < dB2_1_Y) && (dB2_2_X > dB2_1_X)) { + dB2_phase = 180 - (((Math.acos((Math.abs(dB2_2_Y - dB2_1_Y)) / dB2)) * 180 ) / 3.1415)} + if (dB2_phase > 360) {dB2_phase = dB2_phase - 360} + + +// DCI_A1 - ДКВ груза m11_test в плоскости 1 на вибрацию в точке A +// определение модуля вектора DCI_A1 + if (DCI_A1_ != 0) {DCI_A1 = DCI_A1_} // принимает значение из опций + else {DCI_A1 = dA1 / m11_test} // принимает значение из расчётов +// определение фаза вектора DCI_A1 + if (DCI_A1_phase_ != 0) {DCI_A1_phase = DCI_A1_phase_} // принимает значение из опций + else if ((dA1_phase - m11_test_corner) < 0) { + DCI_A1_phase = (dA1_phase - m11_test_corner) + 360} + else if ((dA1_phase - m11_test_corner) > 360) { + DCI_A1_phase = (dA1_phase - m11_test_corner) - 360} + else {DCI_A1_phase = (dA1_phase - m11_test_corner)} // вычисляется в скрипте + +// DCI_B1 - ДКВ груза m11_test в плоскости 1 на вибрацию в точке B +// определение модуля вектора DCI_B1 + if (DCI_B1_ != 0) {DCI_B1 = DCI_B1_} // принимает значение из опций + else {DCI_B1 = dB1 / m11_test} // принимает значение из расчётов +// определение фаза вектора DCI_B1 + if (DCI_B1_phase_ != 0) {DCI_B1_phase = DCI_B1_phase_} // принимает значение из опций + else if ((dB1_phase - m11_test_corner) < 0) { + DCI_B1_phase = (dB1_phase - m11_test_corner) + 360} + else if ((dB1_phase - m11_test_corner) > 360) { + DCI_B1_phase = (dB1_phase - m11_test_corner) - 360} + else {DCI_B1_phase = (dB1_phase - m11_test_corner)} // вычисляется в скрипте + +// DCI_A2 - ДКВ груза m22_test в плоскости 2 на вибрацию в точке A +// определение модуля вектора DCI_A2 + if (DCI_A2_ != 0) {DCI_A2 = DCI_A2_} // принимает значение из опций + else {DCI_A2 = dA2 / m22_test} // принимает значение из расчётов +// определение фаза вектора DCI_A2 + if (DCI_A2_phase_ != 0) {DCI_A2_phase = DCI_A2_phase_} // принимает значение из опций + else if ((dA2_phase - m22_test_corner) < 0) { + DCI_A2_phase = (dA2_phase - m22_test_corner) + 360} + else if ((dA2_phase - m22_test_corner) > 360) { + DCI_A2_phase = (dA2_phase - m22_test_corner) - 360} + else {DCI_A2_phase = (dA2_phase - m22_test_corner)} // вычисляется в скрипте + +// DCI_B2 - ДКВ груза m22_test в плоскости 2 на вибрацию в точке B +// определение модуля вектора DCI_B2 + if (DCI_B2_ != 0) {DCI_B2 = DCI_B2_} // принимает значение из опций + else {DCI_B2 = dB2 / m22_test} // принимает значение из расчётов +// определение фаза вектора DCI_B2 + if (DCI_B2_phase_ != 0) {DCI_B2_phase = DCI_B2_phase_} // принимает значение из опций + else if ((dB2_phase - m22_test_corner) < 0) { + DCI_B2_phase = (dB2_phase - m22_test_corner) + 360} + else if ((dB2_phase - m22_test_corner) > 360) { + DCI_B2_phase = (dB2_phase - m22_test_corner) - 360} + else {DCI_B2_phase = (dB2_phase - m22_test_corner)} // вычисляется в скрипте + + +// формулы для определение векторов балансировочных грузов +// Mb1 = (B0 * DCI_A2 - A0 * DCI_B2) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// Mb2 = (A0 * DCI_B1 - B0 * DCI_A1) / (DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2) +// ... вычисления этих формул делим на этапы +// 1) В0 * DCI_A2 +// 2) A0 * DCI_B2 +// 3) A0 * DCI_B1 +// 4) B0 * DCI_A1 +// 5) В0 * DCI_A2 - A0 * DCI_B2 +// 6) A0 * DCI_B1 - B0 * DCI_A1 +// 7) DCI_A1 * DCI_B2 +// 8) DCI_B1 * DCI_A2 +// 9) DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + +// определение модуля вектора B0 * DCI_A2 + var B0_DCI_A2 = B0 * DCI_A2; + +// определение фазы вектора В0 * DCI_A2 + var B0_DCI_A2_phase; + if ((B0_phase + DCI_A2_phase) >360) { + B0_DCI_A2_phase = B0_phase + DCI_A2_phase - 360 + } else {B0_DCI_A2_phase = B0_phase + DCI_A2_phase} + +// определение угла наклона вектора В0 * DCI_A2 к осям X и Y + var B0_DCI_A2_phase_X; + var B0_DCI_A2_phase_Y; + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_X = 90 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 90} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_X = 270 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_X = B0_DCI_A2_phase - 270} + if (B0_DCI_A2_phase <= 90) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 180) { + B0_DCI_A2_phase_Y = 180 - B0_DCI_A2_phase} + if (B0_DCI_A2_phase <= 270) { + B0_DCI_A2_phase_Y = B0_DCI_A2_phase - 180} + if (B0_DCI_A2_phase <= 360) { + B0_DCI_A2_phase_Y = 360 - B0_DCI_A2_phase} + +// определение координат вектора В0 * DCI_A2 + var B0_DCI_A2_1_X = 0; + var B0_DCI_A2_2_X; + if (B0_DCI_A2_phase <= 180) {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_X = Math.abs(Math.cos(B0_DCI_A2_phase_X * 3.1415/180)) * B0_DCI_A2 * (-1)} + var B0_DCI_A2_1_Y = 0; + var B0_DCI_A2_2_Y; + if (B0_DCI_A2_phase <= 90 || B0_DCI_A2_phase >= 270) {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 + } else {B0_DCI_A2_2_Y = Math.abs(Math.cos(B0_DCI_A2_phase_Y * 3.1415/180)) * B0_DCI_A2 * (-1)} + +// определение модуля вектора A0 * DCI_B2 + var A0_DCI_B2 = A0 * DCI_B2; + +// определение фазы вектора A0 * DCI_B2 + var A0_DCI_B2_phase; + if ((A0_phase + DCI_B2_phase) >360) { + A0_DCI_B2_phase = A0_phase + DCI_B2_phase - 360 + } else {A0_DCI_B2_phase = A0_phase + DCI_B2_phase} + +// определение угла наклона вектора A0 * DCI_B2 к осям X и Y + var A0_DCI_B2_phase_X; + var A0_DCI_B2_phase_Y; + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_X = 90 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 90} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_X = 270 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_X = A0_DCI_B2_phase - 270} + if (A0_DCI_B2_phase <= 90) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 180) { + A0_DCI_B2_phase_Y = 180 - A0_DCI_B2_phase} + if (A0_DCI_B2_phase <= 270) { + A0_DCI_B2_phase_Y = A0_DCI_B2_phase - 180} + if (A0_DCI_B2_phase <= 360) { + A0_DCI_B2_phase_Y = 360 - A0_DCI_B2_phase} + +// определение координат вектора A0 * DCI_B2 + var A0_DCI_B2_1_X = 0; + var A0_DCI_B2_2_X; + if (A0_DCI_B2_phase <= 180) {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_X = Math.abs(Math.cos(A0_DCI_B2_phase_X * 3.1415/180)) * A0_DCI_B2 * (-1)} + var A0_DCI_B2_1_Y = 0; + var A0_DCI_B2_2_Y; + if (A0_DCI_B2_phase <= 90 || A0_DCI_B2_phase >= 270) {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 + } else {A0_DCI_B2_2_Y = Math.abs(Math.cos(A0_DCI_B2_phase_Y * 3.1415/180)) * A0_DCI_B2 * (-1)} + +// определение модуля вектора A0 * DCI_B1 + var A0_DCI_B1 = A0 * DCI_B1; + +// определение фазы вектора A0 * DCI_B1 + var A0_DCI_B1_phase; + if ((A0_phase + DCI_B1_phase) >360) { + A0_DCI_B1_phase = A0_phase + DCI_B1_phase - 360 + } else {A0_DCI_B1_phase = A0_phase + DCI_B1_phase} + +// определение угла наклона вектора A0 * DCI_B1 к осям X и Y + var A0_DCI_B1_phase_X; + var A0_DCI_B1_phase_Y; + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_X = 90 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 90} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_X = 270 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_X = A0_DCI_B1_phase - 270} + if (A0_DCI_B1_phase <= 90) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 180) { + A0_DCI_B1_phase_Y = 180 - A0_DCI_B1_phase} + if (A0_DCI_B1_phase <= 270) { + A0_DCI_B1_phase_Y = A0_DCI_B1_phase - 180} + if (A0_DCI_B1_phase <= 360) { + A0_DCI_B1_phase_Y = 360 - A0_DCI_B1_phase} + +// определение координат вектора A0 * DCI_B1 + var A0_DCI_B1_1_X = 0; + var A0_DCI_B1_2_X; + if (A0_DCI_B1_phase <= 180) {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_X = Math.abs(Math.cos(A0_DCI_B1_phase_X * 3.1415/180)) * A0_DCI_B1 * (-1)} + var A0_DCI_B1_1_Y = 0; + var A0_DCI_B1_2_Y; + if (A0_DCI_B1_phase <= 90 || A0_DCI_B1_phase >= 270) {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 + } else {A0_DCI_B1_2_Y = Math.abs(Math.cos(A0_DCI_B1_phase_Y * 3.1415/180)) * A0_DCI_B1 * (-1)} + +// определение модуля вектора B0 * DCI_A1 + var B0_DCI_A1 = B0 * DCI_A1; + +// определение фазы вектора A0 * DCI_B1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + +// определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение фазы вектора B0 * DCI_A1 + var B0_DCI_A1_phase; + if ((B0_phase + DCI_A1_phase) >360) { + B0_DCI_A1_phase = B0_phase + DCI_A1_phase - 360 + } else {B0_DCI_A1_phase = B0_phase + DCI_A1_phase} + +// определение угла наклона вектора B0 * DCI_A1 к осям X и Y + var B0_DCI_A1_phase_X; + var B0_DCI_A1_phase_Y; + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_X = 90 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 90} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_X = 270 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_X = B0_DCI_A1_phase - 270} + if (B0_DCI_A1_phase <= 90) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 180) { + B0_DCI_A1_phase_Y = 180 - B0_DCI_A1_phase} + if (B0_DCI_A1_phase <= 270) { + B0_DCI_A1_phase_Y = B0_DCI_A1_phase - 180} + if (B0_DCI_A1_phase <= 360) { + B0_DCI_A1_phase_Y = 360 - B0_DCI_A1_phase} + +// определение координат вектора B0 * DCI_A1 + var B0_DCI_A1_1_X = 0; + var B0_DCI_A1_2_X; + if (B0_DCI_A1_phase <= 180) {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_X = Math.abs(Math.cos(B0_DCI_A1_phase_X * 3.1415/180)) * B0_DCI_A1 * (-1)} + var B0_DCI_A1_1_Y = 0; + var B0_DCI_A1_2_Y; + if (B0_DCI_A1_phase <= 90 || B0_DCI_A1_phase >= 270) {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 + } else {B0_DCI_A1_2_Y = Math.abs(Math.cos(B0_DCI_A1_phase_Y * 3.1415/180)) * B0_DCI_A1 * (-1)} + +// определение модуля вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2; + var B0_DCIA2_A0_DCIB2_1_X = A0_DCI_B2_2_X; + var B0_DCIA2_A0_DCIB2_1_Y = A0_DCI_B2_2_Y; + var B0_DCIA2_A0_DCIB2_2_X = B0_DCI_A2_2_X; + var B0_DCIA2_A0_DCIB2_2_Y = B0_DCI_A2_2_Y; + B0_DCIA2_A0_DCIB2 = Math.sqrt(Math.pow(B0_DCIA2_A0_DCIB2_2_X - B0_DCIA2_A0_DCIB2_1_X, 2) + Math.pow(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y, 2)); + +// определение фазы вектора B0 * DCI_A2 - A0 * DCI_B2 + var B0_DCIA2_A0_DCIB2_phase; + if ((B0_DCIA2_A0_DCIB2_2_X > B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + if ((B0_DCIA2_A0_DCIB2_2_X <= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415) + 180} + if ((B0_DCIA2_A0_DCIB2_2_X < B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y >= B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 360 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + if ((B0_DCIA2_A0_DCIB2_2_X >= B0_DCIA2_A0_DCIB2_1_X) && (B0_DCIA2_A0_DCIB2_2_Y < B0_DCIA2_A0_DCIB2_1_Y)) { + B0_DCIA2_A0_DCIB2_phase = 180 - (((Math.acos((Math.abs(B0_DCIA2_A0_DCIB2_2_Y - B0_DCIA2_A0_DCIB2_1_Y)) / B0_DCIA2_A0_DCIB2)) * 180 ) / 3.1415)} + +// определение модуля вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1; + var A0_DCIB1_B0_DCIA1_1_X = B0_DCI_A1_2_X; + var A0_DCIB1_B0_DCIA1_1_Y = B0_DCI_A1_2_Y; + var A0_DCIB1_B0_DCIA1_2_X = A0_DCI_B1_2_X; + var A0_DCIB1_B0_DCIA1_2_Y = A0_DCI_B1_2_Y; + A0_DCIB1_B0_DCIA1 = Math.sqrt(Math.pow(A0_DCIB1_B0_DCIA1_2_X - A0_DCIB1_B0_DCIA1_1_X, 2) + Math.pow(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y, 2)); + +// определение фазы вектора A0 * DCI_B1 - B0 * DCI_A1 + var A0_DCIB1_B0_DCIA1_phase; + if ((A0_DCIB1_B0_DCIA1_2_X > A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + if ((A0_DCIB1_B0_DCIA1_2_X <= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415) + 180} + if ((A0_DCIB1_B0_DCIA1_2_X < A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y >= A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 360 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + if ((A0_DCIB1_B0_DCIA1_2_X >= A0_DCIB1_B0_DCIA1_1_X) && (A0_DCIB1_B0_DCIA1_2_Y < A0_DCIB1_B0_DCIA1_1_Y)) { + A0_DCIB1_B0_DCIA1_phase = 180 - (((Math.acos((Math.abs(A0_DCIB1_B0_DCIA1_2_Y - A0_DCIB1_B0_DCIA1_1_Y)) / A0_DCIB1_B0_DCIA1)) * 180 ) / 3.1415)} + +// определение модуля вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2 = DCI_A1 * DCI_B2; + +// определение фазы вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_phase; + if ((DCI_A1_phase + DCI_B2_phase) >360) { + DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase - 360 + } else {DCIA1_DCIB2_phase = DCI_A1_phase + DCI_B2_phase} + +// определение угла наклона вектора DCI_A1 * DCI_B2 к осям X и Y + var DCIA1_DCIB2_phase_X; + var DCIA1_DCIB2_phase_Y; + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_X = 90 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 90} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_X = 270 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_X = DCIA1_DCIB2_phase - 270} + if (DCIA1_DCIB2_phase <= 90) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 180) { + DCIA1_DCIB2_phase_Y = 180 - DCIA1_DCIB2_phase} + if (DCIA1_DCIB2_phase <= 270) { + DCIA1_DCIB2_phase_Y = DCIA1_DCIB2_phase - 180} + if (DCIA1_DCIB2_phase <= 360) { + DCIA1_DCIB2_phase_Y = 360 - DCIA1_DCIB2_phase} + +// определение координат вектора DCI_A1 * DCI_B2 + var DCIA1_DCIB2_1_X = 0; + var DCIA1_DCIB2_2_X; + if (DCIA1_DCIB2_phase <= 180) {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_X = Math.abs(Math.cos(DCIA1_DCIB2_phase_X * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + var DCIA1_DCIB2_1_Y = 0; + var DCIA1_DCIB2_2_Y; + if (DCIA1_DCIB2_phase <= 90 || DCIA1_DCIB2_phase >= 270) {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 + } else {DCIA1_DCIB2_2_Y = Math.abs(Math.cos(DCIA1_DCIB2_phase_Y * 3.1415/180)) * DCIA1_DCIB2 * (-1)} + +// определение модуля вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2 = DCI_B1 * DCI_A2; + +// определение фазы вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_phase; + if ((DCI_B1_phase + DCI_A2_phase) >360) { + DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase - 360 + } else {DCIB1_DCIA2_phase = DCI_B1_phase + DCI_A2_phase} + +// определение угла наклона вектора DCI_B1 * DCI_A2 к осям X и Y + var DCIB1_DCIA2_phase_X; + var DCIB1_DCIA2_phase_Y; + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_X = 90 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 90} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_X = 270 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_X = DCIB1_DCIA2_phase - 270} + if (DCIB1_DCIA2_phase <= 90) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 180) { + DCIB1_DCIA2_phase_Y = 180 - DCIB1_DCIA2_phase} + if (DCIB1_DCIA2_phase <= 270) { + DCIB1_DCIA2_phase_Y = DCIB1_DCIA2_phase - 180} + if (DCIB1_DCIA2_phase <= 360) { + DCIB1_DCIA2_phase_Y = 360 - DCIB1_DCIA2_phase} + +// определение координат вектора DCI_B1 * DCI_A2 + var DCIB1_DCIA2_1_X = 0; + var DCIB1_DCIA2_2_X; + if (DCIB1_DCIA2_phase <= 180) {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_X = Math.abs(Math.cos(DCIB1_DCIA2_phase_X * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + var DCIB1_DCIA2_1_Y = 0; + var DCIB1_DCIA2_2_Y; + if (DCIB1_DCIA2_phase <= 90 || DCIB1_DCIA2_phase >= 270) {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 + } else {DCIB1_DCIA2_2_Y = Math.abs(Math.cos(DCIB1_DCIA2_phase_Y * 3.1415/180)) * DCIB1_DCIA2 * (-1)} + +// определение модуля вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2; + var DCIA1_DCIB2_DCIB1_DCIA2_1_X = DCIB1_DCIA2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_1_Y = DCIB1_DCIA2_2_Y; + var DCIA1_DCIB2_DCIB1_DCIA2_2_X = DCIA1_DCIB2_2_X; + var DCIA1_DCIB2_DCIB1_DCIA2_2_Y = DCIA1_DCIB2_2_Y; + DCIA1_DCIB2_DCIB1_DCIA2 = Math.sqrt(Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_X - DCIA1_DCIB2_DCIB1_DCIA2_1_X, 2) + Math.pow(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y, 2)); + +// определение фазы вектора DCI_A1 * DCI_B2 - DCI_B1 * DCI_A2 + var DCIA1_DCIB2_DCIB1_DCIA2_phase; + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X > DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X <= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415) + 180} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X < DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y >= DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 360 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + if ((DCIA1_DCIB2_DCIB1_DCIA2_2_X >= DCIA1_DCIB2_DCIB1_DCIA2_1_X) && (DCIA1_DCIB2_DCIB1_DCIA2_2_Y < DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) { + DCIA1_DCIB2_DCIB1_DCIA2_phase = 180 - (((Math.acos((Math.abs(DCIA1_DCIB2_DCIB1_DCIA2_2_Y - DCIA1_DCIB2_DCIB1_DCIA2_1_Y)) / DCIA1_DCIB2_DCIB1_DCIA2)) * 180 ) / 3.1415)} + +// определение корректирующей массы Mb1 (плоскость 1) + Mb1 = B0_DCIA2_A0_DCIB2 / DCIA1_DCIB2_DCIB1_DCIA2; + +// опредение угла установки корректирующей массы Mb1 (плоскость 1) + if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb1_corner = (B0_DCIA2_A0_DCIB2_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса плоскости 1 + Mdisb1 = Mb1; // равен массе балансировочного груза + + // определение угла расположения дисбаланса плоскости 1 + if ((Mb1_corner + 180) > 360) { + Mdisb1_corner = (Mb1_corner + 180) - 360} + else if ((Mb1_corner + 180) < 0) { + Mdisb1_corner = (Mb1_corner + 180) + 360} + else {Mdisb1_corner = (Mb1_corner + 180)} + +// определение корректирующей массы Mb2 (плоскость 2) + Mb2 = A0_DCIB1_B0_DCIA1 / DCIA1_DCIB2_DCIB1_DCIA2; + +// опредение угла установки корректирующей массы Mb2 (плоскость 2) + if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) < 0) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) + 360} + else if ((A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) > 360) { + Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase) - 360} + else {Mb2_corner = (A0_DCIB1_B0_DCIA1_phase - DCIA1_DCIB2_DCIB1_DCIA2_phase)} + + // определение массы дисбаланса плоскости 2 + Mdisb2 = Mb2; // равен массе балансировочного груза + + // определение угла расположения дисбаланса плоскости 2 + if ((Mb2_corner + 180) > 360) { + Mdisb2_corner = (Mb2_corner + 180) - 360} + else if ((Mb2_corner + 180) < 0) { + Mdisb2_corner = (Mb2_corner + 180) + 360} + else {Mdisb2_corner = (Mb2_corner + 180)} + + + +gtl.log.info("Mb1 (баланс. груз 1-й плоскости)",Mb1); +gtl.log.info("Mb1_corner (угол баланс. груза 1-й плоск.)",Mb1_corner); +gtl.log.info("Mdisb1 (дисбаланс 1-й плоскости)",Mdisb1); +gtl.log.info("Mdisb1_corner (угол расположения дисбаланса 1-й плоскости)",Mdisb1_corner); +gtl.log.info("Mb2 (баланс. груз 2-й плоскости)",Mb2); +gtl.log.info("Mb2_corner (угол баланс. груза 2-й плоск.)",Mb2_corner); +gtl.log.info("Mdisb2 (дисбаланс 2-й плоскости)",Mdisb2); +gtl.log.info("Mdisb2_corner (угол расположения дисбаланса 2-й плоскости)",Mdisb2_corner); +gtl.log.info("m11_test (пробный груз введёный)",m11_test); +gtl.log.info("m22_test (пробный груз введёный)",m22_test); +gtl.log.info("RMSv0_2_1000",RMSv0_2_1000.value); +gtl.log.info("RMSa0",RMSa0.value); +gtl.log.info("RMSv1_2_1000",RMSv1_2_1000.value); +gtl.log.info("RMSa1",RMSa1.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("F1_0_3_ph (фаза)",F1_0_3_ph); +gtl.log.info("F1_0_3_a (ампл)",F1_0_3_a); +gtl.log.info("F1_0_3_f (част)",F1_0_3_f); +gtl.log.info("F1_0_2_ph (фаза)",F1_0_2_ph); +gtl.log.info("F1_0_2_a (ампл)",F1_0_2_a); +gtl.log.info("F1_0_2_f (част)",F1_0_2_f); +gtl.log.info("F1_0_1_ph (фаза)",F1_0_1_ph); +gtl.log.info("F1_0_1_a (ампл)",F1_0_1_a); +gtl.log.info("F1_0_1_f (част)",F1_0_1_f); +gtl.log.info("F1_1_3_ph (фаза)",F1_1_3_ph); +gtl.log.info("F1_1_3_a (ампл)",F1_1_3_a); +gtl.log.info("F1_1_3_f (част)",F1_1_3_f); +gtl.log.info("F1_1_2_ph (фаза)",F1_1_2_ph); +gtl.log.info("F1_1_2_a (ампл)",F1_1_2_a); +gtl.log.info("F1_1_2_f (част)",F1_1_2_f); +gtl.log.info("F1_1_1_ph (фаза)",F1_1_1_ph); +gtl.log.info("F1_1_1_a (ампл)",F1_1_1_a); +gtl.log.info("F1_1_1_f (част)",F1_1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения freq.value", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + // Выдача результата (results) + let __result3 = { + Частота_вращения_F1: freq.value, + Нестаб_част_вращ: instability*100, + Тестирование: test_balance, + Ампл_гарм_1F1_точка_A: F1_0_1_a, + Фаза_част_вращ_F1_точка_A: F1_0_1_ph, + Примен_пробный_груз_плоскости_1: m11_test, + Расч_масса_пробного_груза: m_test_calc, + Масса_баланс_груза_плоскости_1: Mb1, + Угол_баланс_груза_плоскости_1: Mb1_corner, + СКЗ_виброскор_точки_A: RMSv0_2_1000.value, + Ампл_гарм_1F1_точка_B: F1_1_1_a, + Фаза_част_вращ_F1_точка_B: F1_1_1_ph, + Примен_пробный_груз_плоскости_2: m22_test, + Масса_баланс_груза_плоскости_2: Mb2, + Угол_баланс_груза_плоскости_2: Mb2_corner, + СКЗ_виброскор_точки_B: RMSv1_2_1000.value, + ДКВ_A1: DCI_A1, + ДКВ_A1_phase: DCI_A1_phase, + ДКВ_B1: DCI_B1, + ДКВ_B1_phase: DCI_B1_phase, + ДКВ_A2: DCI_A2, + ДКВ_A2_phase: DCI_A2_phase, + ДКВ_B2: DCI_B2, + ДКВ_B2_phase: DCI_B2_phase, + }; +gtl.results = {"result_ausp0": __result1_0, + "result_pfc0": __result2_0, + "result_ausp1": __result1_1, + "result_pfc1": __result2_1, + "result_общий": __result3}; +gtl.diagnostic.stop(); +break; +default: + break; +} +} \ No newline at end of file diff --git a/scripts/Одна_плоскость_без_фазы (old).js b/scripts/Одна_плоскость_без_фазы (old).js new file mode 100644 index 0000000..b78ef35 --- /dev/null +++ b/scripts/Одна_плоскость_без_фазы (old).js @@ -0,0 +1,538 @@ +"use strict"; + +var signals = gtl.options.record.signalsModel; +var options = gtl.options; +var record = gtl.options.record; +var point = gtl.options.point; +var fnc = gtl.import("user-functions.js"); // используемые функции +// Цвета (для справки) +// #ff0000 - красный +// #00ff00 - зелёный +// #0000ff - синий +// #00ddff - голубой +// #ff3dcc - фиолетовый +// #ffff00 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = 1000; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 2; // разрешение спектра (количество линий) + AUSPv.average = 4; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.1; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.25; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // АФЧХ (старый метод) + // var apfc_pl = gtl.add_apfc( + // { + // "src0" : filter_2_1000v, + // // "src0" : gtl.analog_inputs[signals[0].portNumber], + // "src1" : gtl.analog_inputs[signals[1].portNumber], + // // "name" : "АФЧХ", + // "color" : 0xff0000, + // "visible" : true, + // "freq" : frequency, + // "window" : gtl.spec.rectangular, + // "resolution" : resolution, + // "average" : average, + // "overlap" : overlap, + // "afc" : gtl.apfc.magnitude, + // "pfc" : gtl.apfc.deg + // } + // ); + + // АЧХ (новый метод) + // var afc_pl = gtl.create_afc( + // { + // // "src0" : filter_2_1000v, + // "src0" : gtl.analog_inputs[signals[0].portNumber], + // "src1" : gtl.analog_inputs[signals[1].portNumber], + // "frequency": frequency, + // "resolution": resolution, + // "average": average, + // "overlap": overlap, + // "window": gtl.spec.rectangular, + // "view": gtl.spec.unit + // } + // ); + + // ФЧХ (новый метод) + var pfc_pl = gtl.create_pfc( + { + // "src0" : filter_2_1000v, + // "src0" : gtl.analog_inputs[0], + "src0" : gtl.analog_inputs[1], + "src1" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + "is_single" : false, //по умолчанию - false + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true + } + ); + + + // Примечание + // is_single - тип расчета: однократный или непрерывный. непрерывный - как сейчас. однократный - будет произведен расчет по окончанию набора данных и после этого будет вызван сигнал finished. после этого до вызова метода start набор данных и расчет производиться не будет. + // delay - задержка в секундах. до начала набора данных. полезно, если нужно пропустить данные каких-нибудь переходных процессов. + // start - флаг, показывающий, нужно ли начинать набор сразу после создания объекта. позже можно запустить с помощью метода start(). + // теперь можно окончание расчета не отслеживать по времени, а отлавливать сигнал. + // пример: + // var afc = gtl.create_afc( + // { + // src0 : gtl.analog_inputs[0], + // src1 : gtl.analog_inputs[1], + // frequency : 1000, + // resolution : 1, + // average : 3, + // overlap : .5, + // window : gtl.spec.rectangular, + // is_single : true, //по умолчанию - false + // delay : .1, //по умолчанию - 0 + // start : false //по умолчанию - true + // } + // ); + // let plot1 = gtl.plots.add("plot1"); + // afc.finished.connect(afc_finished); + // function afc_finished() + // { + // plot1.add( + // { + // color: 0x0000ff, + // name: "afc", + // x: afc.resolution, + // y: afc.data + // } + // ) + // gtl.log.info("afc", "finished"); + // } + // gtl.log.info("acq time", afc.acq_time); + // afc.start(); + // //afc.start(2); //старт с задержкой + + + // Объявление графических плоскостей для построения графиков + var plot_afc = gtl.plots.add("АЧХ"); // амплитудно-частотная характеристика + var plot_pfc = gtl.plots.add("ФЧХ"); // фазо-частотная характеристика + var plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + var plot_afc1 = gtl.plots.add("АЧХ из apfc"); // АЧХ из старого метода apfc + var plot_pfc1 = gtl.plots.add("ФЧХ из apfc"); // ФЧХ из старого метода apfc + + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // СКЗa + var RMSa = gtl.add_value_rms(gtl.analog_inputs[signals[0].portNumber]); + RMSa.time = 1; + RMSa.avg_cnt = 3; + + +// Переменные основные +// масса груза (модуль ветора) - граммы +// в качестве вибрации лучше использовать амплитуду оборотной гармоники (или СКЗ виброскорости) + +// Массу пробного груза рекомендуется брать исходя их расчёта: +// m_test = 804 * (P * A)/(R * N), где: +// P - масса ротора; A - вибрация в мм/с; R - радиус плоскости коррекции; +// N - скорость вращения в об/мин + +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +var m_test = 30; // масса пробного груза ** +var m_test_calc; // масса пробного груза расчётная *** +var n = 3000; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +var FREQ_0 = 3000 / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +var R = 200; // радиус установки грузов ** (для вычисления массы пробного груза) +var P = 10000; // масса ротора, грамм ** (для вычисления массы пробного груза) + +var Mb; // масса балансировочного груза *** +var Mb_corner; // угол установки балансировочного груза *** + +var A0 = 12; // амплитуда вибрации нулевого пуска */** +var A1 = 15; // амплитуда вибрации (окружности) пробного пуска №1 +var A2 = 10; // амплитуда вибрации (окружности) пробного пуска №2 +var A3 = 18; // амплитуда вибрации (окружности) пробного пуска №3 +var A1_corner = 0; // угол установки груза пробного пуска №1 +var A2_corner = 120; // угол установки груза пробного пуска №2 +var A3_corner = 240; // угол установки груза пробного пуска №3 +var x00 = 0; // координата центра окружности нулевого пуска по оси X +var y00 = 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 = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time, afc_pl.acq_time, pfc_pl.acq_time) + 0.1; + + +function diagnose() { + + // вычисление массы пробного груза (если не выбране свой и есть данные для формулы) + m_test_calc = 804 * ((P * A0) / (R * n)); + + + // // Спектр виброскорости (старый метод) + // // Набор гармоник частоты вращения F1v (виброскорость) + // var F1v_harms = AUSPv.add_harms_set(FREQ, 1, 0x00ff0000, 1); // красный цвет + // for (let i=0; i <= 0; i++) + // {F1v_harms.harms[i].tolerance = (1+i) * FREQ * 0.1}; // коридор обнаружения гармоник + // F1v_harms.name = "F1v (гарм. ряд част. вращ.)"; + // // 1-я гармоника F1v + // // Проверка наличия оборотной гармоники необходимости проведения баалнсировки + // if (F1v >= RMSv_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + // {var F1v = F1v_harms.harms[0].level; + // var F1v_test_balance = "необходимо провести балансировку";} + // else {var F1v_test_balance = "проведение балансировки не требуется или нецелесообразно";} + + + let __tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1 = __tools.harms.add(FREQ_0, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + // spec_tools: __tools.to_json() + }); + + // plot_afc.add( + // { + // color: 0x00ff00, + // name: "АЧХ", + // x: afc_pl.resolution, + // y: afc_pl.data + // }); + + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data + }); + + // plot_afc1.add( + // { + // color: 0x137a13, + // name: "АЧХ из apfc", + // x: resolution, + // y: apfc_pl.data + // }); + + // plot_pfc1.add( + // { + // color: 0x641414, + // name: "ФЧХ из apfc", + // x: apfc_pl.resolution, + // y: apfc_pl.phase + // }); + + let __result = __tools.to_json(); + gtl.results = __result; + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + + var a = __result.harms.rows[0].harms[0].ampl; + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + + +// 1) производится "нулевой пуск", записывается значение вибрации A0 +// ...выбирается точка с максимальным значением вибрации, далее работаем только с этой точкой + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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); + +// 2) выбирается масса пробного груза (записывается в граммах) + +// 3) на плоскости коррекции ротора (место установки грузов) отмечаются углы 0(360), 120 и 240 +// ...увеличение угла против направления вращения ротора + +// 4) пробный груз по очереди устанавливается в 0(360), 120 и 240 градусов; измеряется вибрация (амплитуда записывается) + +// определение координат точек окружностти 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<=359; i++ ) { + x1_array.push(x01 + A1 * (Math.sin((i) * Math.PI / 180))); + y1_array.push(y01 + A1 * (Math.cos((i) * Math.PI / 180)));} +//gtl.log.info("x0_array[0]",x0_array[0]); +//gtl.log.info("x0_array[360]",x0_array[360]); +//gtl.log.info("centr x01",x01); +//gtl.log.info("centr y01",y01); + +// определение координат точек окружностти 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<=359; i++ ) { + x2_array.push(x02 + A2 * (Math.sin((i) * Math.PI / 180))); + y2_array.push(y02 + A2 * (Math.cos((i) * Math.PI / 180)));} +//gtl.log.info("centr x02",x02); +//gtl.log.info("centr y02",y02); + +// определение координат точек окружностти 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<=359; i++ ) { + x3_array.push(x03 + A3 * (Math.sin((i) * Math.PI / 180))); + y3_array.push(y02 + A3 * (Math.cos((i) * Math.PI / 180)));} +//gtl.log.info("centr x03",x03); +//gtl.log.info("centr y03",y03); + +// определение вспомогательных переменных +d12 = Math.sqrt(Math.pow(x02 - x01, 2) + Math.pow(y02 - y01, 2)); +d23 = d12; +d31 = d12; +//gtl.log.info("d12",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; +//gtl.log.info("c1",c1); +//gtl.log.info("b1",b1); +//gtl.log.info("c2",c2); +//gtl.log.info("b2",b2); +//gtl.log.info("c3",c3); +//gtl.log.info("b3",b3); + +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)); +//gtl.log.info("h1",h1); +//gtl.log.info("h2",h2); +//gtl.log.info("h3",h3); + +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); +//gtl.log.info("P11_X",P11_X); +//gtl.log.info("P11_Y",P11_Y); +//gtl.log.info("P21_X",P21_X); +//gtl.log.info("P21_Y",P21_Y); +//gtl.log.info("P_21_X",P_21_X); +//gtl.log.info("P_21_Y",P_21_Y); + +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); +//gtl.log.info("P12_X",P12_X); +//gtl.log.info("P12_Y",P12_Y); +//gtl.log.info("P22_X",P22_X); +//gtl.log.info("P22_Y",P22_Y); +//gtl.log.info("P_22_X",P_22_X); +//gtl.log.info("P_22_Y",P_22_Y); + +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); +//gtl.log.info("P13_X",P13_X); +//gtl.log.info("P13_Y",P13_Y); +//gtl.log.info("P23_X",P23_X); +//gtl.log.info("P23_Y",P23_Y); +//gtl.log.info("P_23_X",P_23_X); +//gtl.log.info("P_23_Y",P_23_Y); + +K_X = (P_21_X + P_22_X + P_23_X) / 3; +K_Y = (P_21_Y + P_22_Y + P_23_Y) / 3; +//gtl.log.info("K_X",K_X); +//gtl.log.info("K_Y",K_Y); + +OK = Math.sqrt(Math.pow(K_X,2) + Math.pow(K_Y,2)); +//gtl.log.info("OK",OK); + +// определение массы балансировочного груза +Mb = (m_test * A0) / OK; + +// определение угла установки балансировочного груза +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} + + +gtl.log.info("Mb (балансировочный груз)",Mb); +gtl.log.info("Mb_corner (угол установки груза)",Mb_corner); +gtl.log.info("m_test (пробный груз введёный)",m_test); +gtl.log.info("m_test_calc (пробный груз расчётный)",m_test_calc); +gtl.log.info("FREQ_0",FREQ_0); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("RMSa",RMSa.value); +gtl.log.info("a",a); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +// gtl.log.info("AUSPv_pl.acq_time", AUSPv_pl.acq_time); +// gtl.log.info("afc_pl.acq_time", afc_pl.acq_time); +// gtl.log.info("pfc_pl.acq_time", pfc_pl.acq_time); + + +gtl.diagnostic.stop(); +} \ No newline at end of file diff --git a/scripts/Одна_плоскость_без_фазы.js b/scripts/Одна_плоскость_без_фазы.js new file mode 100644 index 0000000..61876e9 --- /dev/null +++ b/scripts/Одна_плоскость_без_фазы.js @@ -0,0 +1,523 @@ +"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 - жёлтый + + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ БЕЗ ФАЗЫ ***** +// **************************************************************** + +// Получение входных сигналов + + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // СКЗa + var RMSa = gtl.add_value_rms(gtl.analog_inputs[signals[0].portNumber]); + RMSa.time = 1; + RMSa.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // Объявление графических плоскостей для построения графиков + let plot_ausp = gtl.plots.add("Спектр виброскорости"); // создание объекта для спектра + let plot_balance = gtl.plots.add("Расположение балансировочного груза"); // создание объекта для расположения балансировочного груза на плоскости + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль вектора) - граммы +// DCI - Dynamic Coefficient of Influence (динамический коэффициент влияния) +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +// значение переменной с нижним подчёркиванием (..._) берётся из "дополнительных опций"; если оно не задано, то рассчитывается в скрипте + +let m_test_ = gtl.options.customOptions.m_test; // модуль вектора пробного груза ** +let m_test; // модуль вектора пробного груза ** (конечное значение) +let m_test_calc; // масса пробного груза расчётная *** +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +let FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let P = gtl.options.customOptions.P; // масса ротора, грамм ** (для вычисления массы пробного груза) + +let Mb; // масса балансировочного груза *** +let Mb_corner; // угол установки балансировочного груза *** +let Mdisb; // масса дисбаланса *** +let Mdisb_corner; // угол расположения дисбаланса *** +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +let A0; // модуль вектора начальной вибрации */** (конечное значение) +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации пробного пуска №1 */** +let A1; // модуль вектора вибрации пробного пуска №1 */** (конечное значение) +let A2_ = gtl.options.customOptions.A2; // модуль вектора вибрации пробного пуска №2 */** +let A2; // модуль вектора вибрации пробного пуска №2 */** (конечное значение) +let A3_ = gtl.options.customOptions.A3; // модуль вектора вибрации пробного пуска №3 */** +let A3; // модуль вектора вибрации пробного пуска №3 */** (конечное значение) +let A1_corner = 0; // угол установки груза пробного пуска №1 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) +let A2_corner = 120; // угол установки груза пробного пуска №2 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) +let A3_corner = 240; // угол установки груза пробного пуска №3 (фиксированный параметр, НЕ ИЗМЕНЯТЬ) + +// Переменные вспомогательные необходимые для расчётов +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 = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv.clear_harms_sets(); + + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(freq.value, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + var F1_2_a = __result1.harms.rows[0].harms[1].ampl; + var F1_3_a = __result1.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + var F1_2_f = __result1.harms.rows[0].harms[1].freq; + var F1_3_f = __result1.harms.rows[0].harms[2].freq; + + // Проверка наличия оборотной гармоники и необходимости проведения балансировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMSv_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a} // принимает значение из спектра сигнала + + // A1 вибрация после установки пробного груза в 0 градусов + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_1_a} // принимает значение из спектра сигнала + + // A2 вибрация после установки пробного груза в 120 градусов + if (A2_ != 0) {A2 = A2_} // принимает значение из опций + else {A2 = F1_1_a} // принимает значение из спектра сигнала + + // A3 вибрация после установки пробного груза в 240 градусов + if (A3_ != 0) {A3 = A3_} // принимает значение из опций + else {A3 = F1_1_a} // принимает значение из спектра сигнала + + // вычисление массы пробного груза (если не введено своё значение и есть данные для формулы) + m_test_calc = 804 * ((P * A0) / (R * n)); + // m_test масса пробного груза + if (m_test_ != 0) {m_test = m_test_} // принимает значение из опций + else {m_test = m_test_calc} // принимает значение из расчёта + +// 1) производится "нулевой пуск", записывается значение вибрации A0 +// ...выбирается точка с максимальным значением вибрации, далее работаем только с этой точкой + +// определение координат точек окружности A0 +var x0_array = []; // массив координат точек окружности A0 по оси X +var y0_array = []; // массив координат точек окружности A0 по оси Y + for (let i=0; i<=359; 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); + +// 2) выбирается масса пробного груза (записывается в граммах) + +// 3) на плоскости коррекции ротора (место установки грузов) отмечаются углы 0(360), 120 и 240 +// ...увеличение угла против направления вращения ротора + +// 4) пробный груз по очереди устанавливается в 0(360), 120 и 240 градусов; измеряется вибрация (амплитуда записывается) + +// определение координат точек окружности 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<=359; 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<=359; 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<=359; i++ ) { + x3_array.push(x03 + A3 * (Math.sin((i) * Math.PI / 180))); + y3_array.push(y02 + A3 * (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)); + +// определение массы балансировочного груза +Mb = (m_test * A0) / OK; + +// определение угла установки балансировочного груза +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} + +// определение массы дисбаланса +Mdisb = Mb; // равен массе балансировочного груза + +// определение угла расположения дисбаланса +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)} + + + // определение координат точек окружности расположения балансировочного груза + // в качестве радиуса окружности используется радиус балансировочной плоскости R + let x_b_array = []; // массив координат точек окружности расположения балансировочного груза по оси X + let y_b_array = []; // массив координат точек окружности расположения балансировочного груза по оси Y + // for (let i=0; i<=359; i++ ) { + // x_b_array.push(R * (Math.sin(i * Math.PI / 180))); + // y_b_array.push(R * (Math.cos(i * Math.PI / 180)));} + // x_b_array.push(x_b_0 + R * (Math.sin((i) * Math.PI / 180))); + // y_b_array.push(y_b_0 + R * (Math.cos((i) * Math.PI / 180)));} + + for(let i = 0; i <= 359; i++) + { + x_b_array.push(A0*Math.sin(2*Math.PI/180*i)); + y_b_array.push(A0*Math.cos(2*Math.PI/180*i)); + } + plot_balance.add( + { + color: 0x0000ff, + name: "Расположение балансировочного груза", + x: x_b_array, + y: y_b_array, + }); + + plot_balance.add( + { + color: 0x00ffffff, + name: "границы", + x: [-(A0+A0*0.1), -(A0+A0*0.1), (A0+A0*0.1), (A0+A0*0.1)], + y: [(A0+A0*0.1), -(A0+A0*0.1), -(A0+A0*0.1), (A0+A0*0.1)] + } + ) + +gtl.log.info("x_b_array",x_b_array[1]); +gtl.log.info("y_b_array",y_b_array[1]); +gtl.log.info("Mb (балансировочный груз)",Mb); +gtl.log.info("Mb_corner (угол установки груза)",Mb_corner); +gtl.log.info("Mdisb (дисбаланс)",Mdisb); +gtl.log.info("Mdisb_corner (угол расположения дисбаланса)",Mdisb_corner); +gtl.log.info("m_test (пробный груз введёный)",m_test); +gtl.log.info("m_test_calc (пробный груз расчётный)",m_test_calc); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("RMSa",RMSa.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("F1_3_a (ампл)",F1_3_a); +gtl.log.info("F1_3_f (част)",F1_3_f); +gtl.log.info("F1_2_a (ампл)",F1_2_a); +gtl.log.info("F1_2_f (част)",F1_2_f); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения freq.value", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + // Выдача результата (results) + let __result3 = { + Частота_вращения_F1: freq.value, + Тестирование: test_balance, + Ампл_гарм_1F1: F1_1_a, + Примен_пробный_груз: m_test, + Расч_пробный_груз: m_test_calc, + Масса_баланс_груза: Mb, + Угол_баланс_груза: Mb_corner, + СКЗ_виброскор: RMSv_2_1000.value, + Нестаб_част_вращ: instability*100 + }; + +gtl.results = {"result_ausp": __result1, + "result_общий": __result3}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file diff --git a/scripts/Одна_плоскость_с_фазой — копия.js b/scripts/Одна_плоскость_с_фазой — копия.js new file mode 100644 index 0000000..9b70ec2 --- /dev/null +++ b/scripts/Одна_плоскость_с_фазой — копия.js @@ -0,0 +1,371 @@ +"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"); + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = 1000; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 4; // разрешение спектра (количество линий) + AUSPv.average = 4; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[signals[2].portNumber]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + + // Фаза 1-й гармоники частоты вращения (виброскорости) + // var delta_phase_F1v = gtl.add_delta_phase_spec(filter_2_1000v, filter_freq); + // var delta_phase_F1v = gtl.add_delta_phase_spec(gtl.analog_inputs[0], filter_freq); + // var delta_phase_F1v = gtl.add_delta_phase_spec(gtl.analog_inputs[0], gtl.analog_inputs[record.tachoOptions.tachoChannel]); + var delta_phase_F1v = gtl.add_delta_phase_spec(filter_2_1000v, gtl.analog_inputs[signals[1].portNumber]); + var freq_begin = 54.25; // предположительное значение частоты вращения + var freq_round; // округлённая частота вращения для которой вычисляем фазу вибрации + var frq_arr = [freq_begin, freq_round]; // массив частот для которых определяем фазу + var i = 0; + var res_delta_phase_F1v = {}; // объект результатов вычислений разности фаз + delta_phase_F1v.max_frequency = AUSPv.frequency; + delta_phase_F1v.resolution = AUSPv.resolution; + delta_phase_F1v.frequency = frq_arr[0]; // частота, для которой вычисляется разница фаз, Гц + + // Объявление переменных массивов + var level_AUSPv = []; // массив амплитуд гармоник канала 0 + var delta_phase_AUSPv = []; // массив разностей фаз гармоник канала 0 относительно тахо + var index_AUSPv = []; // массив индексов гармоник канала 0 + var frequency_AUSPv = []; // массив частот (перевод индексов) гармоник канала 0 + + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +var A0=100; // модуль вектора начальной вибрации */** +var A0_phase=30; // фаза вектора начальной вибрации */** +var m_test=50; // модуль вектора пробного груза * +var m_test_corner=100; // угол вектора пробного груза * +var A1=75; // модуль вектора вибрации после установки пробного груза */** +var A1_phase=120; // фаза вектора вибрации после установки пробного груза */** +var dA; // модуль вектора дельты вибрации после установки пробного груза *** +var dA_phase; // фаза вектора дельты вибрации после установки пробного груза *** +var DCI; // модуль (мм/с/граммы) динамического коэффициента влияния (dinamic coefficient of influence) **/*** +var DCI_phase; // фаза динамического коэффициента влияния **/*** +var Mb; // модуль вектора балансировочного груза *** +var Mb_corner; // угол вектора балансировочного груза *** +var A2=1; // модуль вектора вибрации после установки балансировочного груза *** +var A2_phase=21; // фаза вектора вибрации после установки балансировочного груза *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA_1_X; // начальная координата вектора dA по оси X +var dA_2_X; // конечная координата вектора dA по оси X +var dA_1_Y; // начальная координата вектора dA по оси Y +var dA_2_Y; // конечная координата вектора dA по оси Y + +var m_test_corner_X;// угол наклона вектора m_test к оси X +var m_test_corner_Y;// угол наклона вектора m_test к оси Y +var m_test_1_X; // начальная координата вектора m_test по оси X +var m_test_2_X; // конечная координата вектора m_test по оси X +var m_test_1_Y; // начальная координата вектора m_test по оси Y +var m_test_2_Y; // конечная координата вектора m_test по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, delta_phase_F1v.acq_time); +// gtl.diagnostic.interval = delta_phase_F1v.acq_time; //интервал запуска функции диагностики +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv.clear_harms_sets(); + + + // ТЕСТИРОВАНИЕ (получение фазы и амплитуды оборотной гармоники из массивов) + // Запись в массив значений уровня спектра + for (let i = 0; i < AUSPv.data.length; i++) { + index_AUSPv.push(i); // индексы гармоник + frequency_AUSPv.push(i * (AUSPv.frequency / AUSPv.lines)); // частоты гармоник + level_AUSPv.push(AUSPv.data[i]); // уровень гармоник, если отображение амплитуд в спектре unit + // level_AUSPv.push(AUSPv.data[i] - AUSPv.base[i]); // уровень гармоник, если отображение амплитуд в спектре db + } + + var F_find = freq.value; // искомая частота + var F_find_round_min = Math.round(F_find); // округление значения искомой частоты до ближайшего + var F_find_round_max = Math.round(F_find) + AUSPv.resolution; // округление значения искомой частоты в большую сторону + if (level_AUSPv[frequency_AUSPv.indexOf(F_find_round_min)] >= level_AUSPv[frequency_AUSPv.indexOf(F_find_round_max)]) + {freq_round = F_find_round_min;} + else {freq_round = F_find_round_max;} + + var ind_F_find = frequency_AUSPv.indexOf(freq_round); // индекс искомой частоты в общем спектре + res_delta_phase_F1v[frq_arr[i]] = delta_phase_F1v.value; // записываем данные в объект + if (i < frq_arr.length - 1) { + i = i + 1; + delta_phase_F1v.frequency = frq_arr[i]; + } else { + gtl.results = res_delta_phase_F1v; // записываем объект в резалт + }; + + + // Спектр виброскорости (для визуализации) + // Набор гармоник частоты вращения F1v (виброскорость) + var F1v_harms = AUSPv.add_harms_set(freq_round, 1, 0x000000ff, 1); // синий цвет + for (let i=0; i <= 0; i++) + {F1v_harms.harms[i].tolerance = (1+i) * freq_round * 0.1}; // коридор обнаружения гармоник + F1v_harms.name = "F1v (гарм. ряд част. вращ.)"; + // 1-я гармоника F1v + var F1v = F1v_harms.harms[0].amplitude; // параметр amplitude при спектре в абсолютной величине амплитуды + // var F1v = F1v_harms.harms[0].level; // параметр level при спектре в относительной величине амплитуды + // Проверка наличия оборотной гармоники необходимости проведения балансировки + if (F1v_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v_test_ampl = "амплитуда частоты вращения НЕ определена или имеет низкий уровень";} + if (F1v >= RMSv_2_1000.value * 0.4) // вклад оборотной гармоники в СКЗv + {var F1v_test_balance = "необходимо провести балансировку";} + else {var F1v_test_balance = "проведение балансировки не требуется или нецелесообразно";} + + +// РАСЧЁТЫ (балансировочный калькулятор) + +// определение угла наклона вектора 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 +A0_1_X = 0; +if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} +A0_1_Y = 0; +if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора 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)} + +// определение угла наклона вектора 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 +A1_1_X = 0; +if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} +A1_1_Y = 0; +if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение модуля вектора dA +dA_1_X = A0_2_X; +dA_2_X = A1_2_X; +dA_1_Y = A0_2_Y; +dA_2_Y = A1_2_Y; +dA = Math.sqrt(Math.pow(dA_2_X - dA_1_X, 2) + Math.pow(dA_2_Y - dA_1_Y, 2)) +// определение фазы вектора dA +if ((dA_2_Y < dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 180 + (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y > dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y > dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 360 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y < dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = 180 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if (dA_phase > 360) {dA_phase = dA_phase - 360} + +// определение модуля вектора DCI +DCI = dA / m_test; +// опредение фаза вектора DCI +DCI_phase = dA_phase - m_test_corner; + +// определение модуля вектора Mb +Mb = (m_test * A0) / dA; +// определение модуля вектора Mb по известному ДКВ (DCI) ** +//Mb = A0 / DCI; +// определение угла вектора Mb +if ((m_test_corner + A0_phase - dA_phase + 180) < 360) { + Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) + } else {Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) - 360} +// определение угла вектора Mb по известному ДКВ (DCI) +//if ((A0_phase - DCI_phase + 180) < 360) { +// Mb_corner = (A0_phase - DCI_phase + 180) +// } else {Mb_corner = (A0_phase - DCI_phase + 180) - 360} + + + + + +gtl.log.info("Индекс", i); +gtl.log.info("Частота", frq_arr[i]); +gtl.log.info("Разница фаз на частоте", delta_phase_F1v.value); +gtl.log.info("искомая частота, Гц", F_find); +gtl.log.info("искомая частота округлённая до ближ, Гц", freq_round); +// gtl.log.info("верхняя граница поиска частоты, Гц", F_find_round_max); +// gtl.log.info("нижняя граница поиска частоты, Гц", F_find_round_min); +gtl.log.info("индекс искомой частоты в общем спектре", ind_F_find); +gtl.log.info("уровень искомой частоты (data)", level_AUSPv[ind_F_find]); + +// gtl.log.info("Mb",Mb); +// gtl.log.info("Mb_corner",Mb_corner); +// gtl.log.info("freq.value (по dc)",freq.value); +gtl.log.info("F1v.level (гарм.ряд)",F1v); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +// gtl.log.info("F1v_test_ampl",F1v_test_ampl); +// gtl.log.info("F1v_test_balance",F1v_test_balance); +// gtl.log.info("F1v_harms.harms[0].tolerance",F1v_harms.harms[0].tolerance); +// gtl.log.info("delta_phase_F1v",delta_phase_F1v.value); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +// gtl.log.info("delta_phase_F1v.acq_time",delta_phase_F1v.acq_time); +// gtl.log.info("AUSPv.acq_time",AUSPv.acq_time); + + // Выдача результата (results) + let __result = { + Частота_вращения_F1_округл: freq_round, + Канал_вибрации_датчика1: "канал [0]", + Амплитуда_гармоники_F1: level_AUSPv[ind_F_find], + амплитуда_F1v_поСпектру: F1v, + дельта_фаза: delta_phase_F1v.value, + phase_res: res_delta_phase_F1v, + }; +gtl.results = __result; +gtl.diagnostic.stop(); +} +} \ No newline at end of file diff --git a/scripts/Одна_плоскость_с_фазой(old).js b/scripts/Одна_плоскость_с_фазой(old).js new file mode 100644 index 0000000..f9e9f1e --- /dev/null +++ b/scripts/Одна_плоскость_с_фазой(old).js @@ -0,0 +1,437 @@ +"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"); + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[0]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = 1000; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 4; // разрешение спектра (количество линий) + AUSPv.average = 4; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.000001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + + // Настройки для датчика оборотов + var freq_default = 5; // предполагаемая частота вращения + var filter_freq = gtl.add_filter_iir(gtl.analog_inputs[record.tachoOptions.tachoChannel]); // объявление переменной фильтра + filter_freq.kind = gtl.filter_iir.butterworth; // тип окна + filter_freq.type = gtl.filter_iir.bandpass; // тип фильтра (полосовой) + filter_freq.order = 6; // порядок фильтра + filter_freq.width = freq_default * 0.2; // полоса пропускания 20% + filter_freq.frequency = freq_default; // центральная частота фильтра + + // Определение частоты вращения по фильтру предполагаемой частоты + var FREQ = gtl.add_value_freq(filter_freq); + FREQ.time = 1; // длина отрезка сигнала + FREQ.avg_cnt = 3; // усреднение частоты вращения + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина отрезка сигнала + freq.avg_cnt = 3; // усреднение + freq.dc = -0.05; // уровень, при переходе через который считаются периоды + // Фаза 1-й гармоники частоты вращения (виброскорости) + // var delta_phase_F1v = gtl.add_delta_phase_spec(filter_2_1000v, filter_freq); + var delta_phase_F1v = gtl.add_delta_phase_spec(filter_2_1000v, gtl.analog_inputs[record.tachoOptions.tachoChannel]); + // var delta_phase_F1v = gtl.add_delta_phase_spec(gtl.analog_inputs[0], filter_freq); + // var delta_phase_F1v = gtl.add_delta_phase_spec(gtl.analog_inputs[0], gtl.analog_inputs[record.tachoOptions.tachoChannel]); + var F_find_round; // перевоначальное значение + var freq_begin = 5.5; // предположительное значение частоты вращения + var frq_arr = [freq_begin, F_find_round]; // массив частот для которых определяем фазу + var i = 0; + var res_delta_phase_F1v = {}; // объект результатов вычислений разности фаз + delta_phase_F1v.max_frequency = AUSPv.frequency; + delta_phase_F1v.resolution = AUSPv.resolution; + delta_phase_F1v.frequency = frq_arr[0]; // частота, для которой вычисляется разница фаз, Гц + // delta_phase_F1v.frequency = 5.5; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v.frequency = FREQ.value; // частота, на которой вычисляем дельта-фазу + // delta_phase_F1v.frequency = freq.value; // частота, на которой вычисляем дельта-фазу + + // Формирование объекта apfc для получения амплитуды и фазы + var apfc = gtl.add_apfc( + { + // "src1" : filter_2_1000v, + // "src1" : filter_2_1000, + "src1" : gtl.analog_inputs[0], + "src2" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "name" : "coh", + "color" : 0xff0000, + "visible" : true, + "freq" : AUSPv.frequency, + "window" : gtl.spec.rectangular, + "resolution" : AUSPv.frequency / AUSPv.lines, + "average" : 1, + "overlap" : 0, + "afc" : gtl.apfc.magnitude, + "pfc" : gtl.apfc.deg + } + ); + + // Объявление переменных массивов + var level_AUSPv = []; // массив амплитуд гармоник канала 0 + var delta_phase_AUSPv = []; // массив разностей фаз гармоник канала 0 относительно тахо + var index_AUSPv = []; // массив индексов гармоник канала 0 + var frequency_AUSPv = []; // массив частот (перевод индексов) гармоник канала 0 + var AUSPv_data = []; // массив спектра + var AUSPv_base = []; // массив средней линии спектра + + + +// Переменные основные +// параметр вибрации (модуль вектора) - виброскорость (мм/с) +// угол (фаза) вектора - градусы +// масса груза (модуль ветора) - граммы +// * - значение получаем из измерительного блока при нажатии кнопки +// ** - значение вводится пользователем +// *** - значение получаем в результате расчёта программы балансировки +var A0=100; // модуль вектора начальной вибрации */** +var A0_phase=30; // фаза вектора начальной вибрации */** +var m_test=50; // модуль вектора пробного груза * +var m_test_corner=100; // угол вектора пробного груза * +var A1=75; // модуль вектора вибрации после установки пробного груза */** +var A1_phase=120; // фаза вектора вибрации после установки пробного груза */** +var dA; // модуль вектора дельты вибрации после установки пробного груза *** +var dA_phase; // фаза вектора дельты вибрации после установки пробного груза *** +var DCI; // модуль (мм/с/граммы) динамического коэффициента влияния (dinamic coefficient of influence) **/*** +var DCI_phase; // фаза динамического коэффициента влияния **/*** +var Mb; // модуль вектора балансировочного груза *** +var Mb_corner; // угол вектора балансировочного груза *** +var A2=1; // модуль вектора вибрации после установки балансировочного груза *** +var A2_phase=21; // фаза вектора вибрации после установки балансировочного груза *** + +// Переменные вспомогательные +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA_1_X; // начальная координата вектора dA по оси X +var dA_2_X; // конечная координата вектора dA по оси X +var dA_1_Y; // начальная координата вектора dA по оси Y +var dA_2_Y; // конечная координата вектора dA по оси Y + +var m_test_corner_X;// угол наклона вектора m_test к оси X +var m_test_corner_Y;// угол наклона вектора m_test к оси Y +var m_test_1_X; // начальная координата вектора m_test по оси X +var m_test_2_X; // конечная координата вектора m_test по оси X +var m_test_1_Y; // начальная координата вектора m_test по оси Y +var m_test_2_Y; // конечная координата вектора m_test по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 10; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, delta_phase_F1v.acq_time, apfc.acq_time); +// gtl.diagnostic.interval = delta_phase_F1v.acq_time; //интервал запуска функции диагностики +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = AUSPv.acq_time; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv.clear_harms_sets(); + + + + // Спектр виброскорости + // Набор гармоник частоты вращения F1v (виброскорость) + var F1v_harms = AUSPv.add_harms_set(freq.value, 1, 0x00ff0000, 1); // красный цвет + for (let i=0; i <= 0; i++) + {F1v_harms.harms[i].tolerance = (1+i) * freq.value * 0.1}; // коридор обнаружения гармоник + F1v_harms.name = "F1v (гарм. ряд част. вращ.)"; + // 1-я гармоника F1v + // Проверка наличия оборотной гармоники необходимости проведения балансировки + if (F1v_harms.harms[0].is_present == true) // обнаружения оборотной гармоники + {var F1v = F1v_harms.harms[0].level; + var F1v_test_ampl = "амплитуда частоты вращения определена";} + else {var F1v_test_ampl = "амплитуда частоты вращения НЕ определена";} + if (F1v >= RMSv_2_1000.value * 0.4) // вклад оборотной гармоники в СКЗv + {var F1v_test_balance = "необходимо провести балансировку";} + else {var F1v_test_balance = "проведение балансировки не требуется или нецелесообразно";} + + + // ТЕСТИРОВАНИЕ (получение фазы и амплитуды оборотной гармоники из массивов) + // Запись в массив значений уровня спектра + for (let i = 0; i < AUSPv.data.length; i++) { + // Массив уровней (старый метод) + // level_AUSPv.push(AUSPv.data[i] - AUSPv.base[i]); + + // Разница фаз гармоник + delta_phase_AUSPv.push(apfc.phase[i]); + + // Амплитуда гармоник + level_AUSPv.push(apfc.data[i]); + + // Индексы гармоник + index_AUSPv.push(i); + + // Частоты гармоник + frequency_AUSPv.push(i * (AUSPv.frequency / AUSPv.lines)); + + // Запись массивов AUSPv.data и AUSPv.base для определения уровня (level) + AUSPv_data.push(AUSPv.data[i]); + AUSPv_base.push(AUSPv.base[i]); + } + + var F_find = freq.value; // искомая частота + var F_find_round_min = Math.round(F_find); // округление значения искомой частоты до ближайшего + var F_find_round_max = Math.round(F_find) + AUSPv.resolution; // округление значения искомой частоты в большую сторону + + if (level_AUSPv[frequency_AUSPv.indexOf(F_find_round_min)] >= level_AUSPv[frequency_AUSPv.indexOf(F_find_round_max)]) + {F_find_round = F_find_round_min;} + else {F_find_round = F_find_round_max;} + + var ind_F_find = frequency_AUSPv.indexOf(F_find_round); // индекс искомой частоты + res_delta_phase_F1v[frq_arr[i]] = delta_phase_F1v.value; //записываем данные в объект + if (i < frq_arr.length - 1) { + i = i + 1; + delta_phase_F1v.frequency = frq_arr[i]; + } else { + gtl.results = res_delta_phase_F1v; // записываем объект в резалт + }; + + + + + + + gtl.log.info("Индекс", i); + gtl.log.info("Частота", frq_arr[i]); + gtl.log.info("Разница фаз на частоте", delta_phase_F1v.value); + gtl.log.info("искомая частота, Гц", F_find); + gtl.log.info("искомая частота округлённая до ближ, Гц", F_find_round); + gtl.log.info("верхняя граница поиска частоты, Гц", F_find_round_max); + gtl.log.info("нижняя граница поиска частоты, Гц", F_find_round_min); + gtl.log.info("индекс искомой частоты", ind_F_find); + gtl.log.info("уровень искомой частоты", level_AUSPv[ind_F_find]); + gtl.log.info("фаза искомой частоты", delta_phase_AUSPv[ind_F_find]); + gtl.log.info("проверка уровня AUSPv.data", AUSPv_data[ind_F_find] - AUSPv_base[ind_F_find]); +// gtl.log.info("размер массива frequency_AUSPv", frequency_AUSPv.length); +// gtl.log.info("AUSPv.lines", AUSPv.lines); +// gtl.log.info("AUSPv.frequency", AUSPv.frequency); + + + + + + +// РАСЧЁТЫ + +// определение угла наклона вектора 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 +A0_1_X = 0; +if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} +A0_1_Y = 0; +if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + +// определение угла наклона вектора 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)} + +// определение угла наклона вектора 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 +A1_1_X = 0; +if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} +A1_1_Y = 0; +if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + +// определение модуля вектора dA +dA_1_X = A0_2_X; +dA_2_X = A1_2_X; +dA_1_Y = A0_2_Y; +dA_2_Y = A1_2_Y; +dA = Math.sqrt(Math.pow(dA_2_X - dA_1_X, 2) + Math.pow(dA_2_Y - dA_1_Y, 2)) +// определение фазы вектора dA +if ((dA_2_Y < dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 180 + (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y > dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y > dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 360 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} +if ((dA_2_Y < dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = 180 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if (dA_phase > 360) {dA_phase = dA_phase - 360} + +// определение модуля вектора DCI +DCI = dA / m_test; +// опредение фаза вектора DCI +DCI_phase = dA_phase - m_test_corner; + +// определение модуля вектора Mb +Mb = (m_test * A0) / dA; +// определение модуля вектора Mb по известному ДКВ (DCI) ** +//Mb = A0 / DCI; +// определение угла вектора Mb +if ((m_test_corner + A0_phase - dA_phase + 180) < 360) { + Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) + } else {Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) - 360} +// определение угла вектора Mb по известному ДКВ (DCI) +//if ((A0_phase - DCI_phase + 180) < 360) { +// Mb_corner = (A0_phase - DCI_phase + 180) +// } else {Mb_corner = (A0_phase - DCI_phase + 180) - 360} + +// gtl.log.info("Mb",Mb); +// gtl.log.info("Mb_corner",Mb_corner); +gtl.log.info("FREQ.value",FREQ.value); +gtl.log.info("freq.value (по dc)",freq.value); +gtl.log.info("F1v.level",F1v); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +// gtl.log.info("F1v_test_ampl",F1v_test_ampl); +// gtl.log.info("F1v_test_balance",F1v_test_balance); +// gtl.log.info("F1v_harms.harms[0].tolerance",F1v_harms.harms[0].tolerance); +// gtl.log.info("delta_phase_F1v",delta_phase_F1v.value); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +// gtl.log.info("delta_phase_F1v.acq_time",delta_phase_F1v.acq_time); +// gtl.log.info("AUSPv.acq_time",AUSPv.acq_time); + + // Выдача результата (results) + let __result = { + Частота_вращения_F1: F_find_round, + Канал_вибрации_датчика1: "канал [0]", + Амплитуда_гармоники_F1_apfc: level_AUSPv[ind_F_find], + Фаза_гармоники_F1_apfc: delta_phase_AUSPv[ind_F_find], + // проверка_ампл_F1v_поСпектру: AUSPv_data[ind_F_find] - AUSPv_base[ind_F_find], + проверка_ампл_F1v_поСпектру: AUSPv_data[ind_F_find], + амплитуда_F1v_поСпектру: F1v, + дельта_фаза: delta_phase_F1v.value, + res_delta_phase_F1v: res_delta_phase_F1v, + }; +gtl.results = __result; +gtl.diagnostic.stop(); +} +} \ No newline at end of file diff --git a/scripts/Одна_плоскость_с_фазой.js b/scripts/Одна_плоскость_с_фазой.js new file mode 100644 index 0000000..f07eb23 --- /dev/null +++ b/scripts/Одна_плоскость_с_фазой.js @@ -0,0 +1,538 @@ +"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 - жёлтый + +// ***** БАЛАНСИРОВОЧНЫЙ КАЛЬКУЛЯТОР. ОДНА ПЛОСКОСТЬ с фазой ***** +// *************************************************************** + +// Получение входных сигналов + // Определение частоты вращения по параметру freq.dc + var freq = gtl.add_value_freq(gtl.analog_inputs[record.tachoOptions.tachoChannel]); + freq.time = 1; // длина (время) отрезка сигнала + freq.avg_cnt = 3; // количество усреднений + freq.dc = -0.05; // уровень, при переходе через который вычисляются периоды + // Настройки для спектров и АФЧХ + var frequency = 1000; // граничная частота + var resolution = 0.5; // частотное разрешение + var average = 3; // количество усреднений + var overlap = 0; // наложение + + // ФИЛЬТР 2...1000 Гц, полосовой фильтр для СКЗ виброскорости и спектра + var filter_2_1000 = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]); + filter_2_1000.kind = gtl.filter_iir.butterworth; + filter_2_1000.type = gtl.filter_iir.bandpass; + filter_2_1000.order = 6; + filter_2_1000.frequency = 502; // центральная частота полосового фильтра + filter_2_1000.width = 1000; // ширина полосы фильтра + var filter_2_1000v = gtl.add_intg(filter_2_1000); // интегрирование + filter_2_1000v.taps = 1; // степень интегрирования (скорость из ускорения - 1-нарное) + + // Спектр виброскорости для получения 1-й гармоники частоты вращения + var AUSPv = gtl.add_ausp(filter_2_1000v); // объявление переменной спектра + AUSPv.color = 0x00ff0000; // цвет спектра + AUSPv.name = "AUSPv"; // имя спектра + AUSPv.frequency = frequency; // граничная частота спектра + AUSPv.lines = AUSPv.frequency * 1/resolution; // разрешение спектра (количество линий) + AUSPv.average = average; // количество усреднений + AUSPv.unit = gtl.spec.unit; // отображение амплитуды в мм/с + AUSPv.smoothing_factor = 100; // усреднение средней линии + AUSPv.smoothed_line_color = 0xff004dff; // цвет средней линии + AUSPv.peak_level = 0.001; // порог обнаружения гармоник (необходим самый минимальный) + AUSPv.tolerance = AUSPv.resolution; // диапазон поиска гармоник +/- + // СКЗv + var RMSv_2_1000 = gtl.add_value_rms(filter_2_1000v); + RMSv_2_1000.time = 1; + RMSv_2_1000.avg_cnt = 3; + // СКЗa + var RMSa = gtl.add_value_rms(gtl.analog_inputs[signals[0].portNumber]); + RMSa.time = 1; + RMSa.avg_cnt = 3; + + // var idx = 1; // индекс канала вибрации (канал 0 - опорный) + // var cnt = record.signalsModel.length; // количество каналов вибрации + + // Спектр виброскорости (новый метод) + var AUSPv_pl = gtl.create_ausp( + { + "src" : filter_2_1000v, + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.spec.unit + } + ); + + // ФЧХ (новый метод) + var pfc_pl = gtl.create_pfc( + { + "src0" : filter_2_1000v, + "src1" : gtl.analog_inputs[record.tachoOptions.tachoChannel], + "frequency" : frequency, + "resolution" : resolution, + "average" : average, + "overlap" : overlap, + "window" : gtl.spec.rectangular, + "view" : gtl.phase.deg, + // "range" : gtl.phase.positive, + "is_single" : false + } + ); + // "range": gtl.phase.negative, + // "delay" : .1, // по умолчанию - 0 + // "start" : false // по умолчанию - true +// Объявление графических плоскостей для построения графиков + var plot_pfc = gtl.plots.add("ФЧХ"); // фазо-частотная характеристика + var plot_ausp = 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 m_test_ = gtl.options.customOptions.m_test; // модуль вектора пробного груза ** +let m_test_corner = gtl.options.customOptions.m_test_corner;// угол вектора пробного груза ** +var m_test; // модуль вектора пробного груза ** (конечное значение) +var m_test_calc; // масса пробного груза расчётная *** +let n = gtl.options.customOptions.n; // скорость вращения, об/мин ** (для вычисления массы пробного груза) +var FREQ_0 = n / 60; // частота вращения, об/мин *** (для определения амплитуды оборотной гармоники) +let R = gtl.options.customOptions.R; // радиус установки грузов ** (для вычисления массы пробного груза) +let P = gtl.options.customOptions.P; // масса ротора, грамм ** (для вычисления массы пробного груза) + +let A0_ = gtl.options.customOptions.A0; // модуль вектора начальной вибрации */** +var A0; // модуль вектора начальной вибрации */** (конечное значение) +let A0_phase_ = gtl.options.customOptions.A0_phase; // фаза вектора начальной вибрации */** +var A0_phase; // фаза вектора начальной вибрации */** (конечное значение) +let A1_ = gtl.options.customOptions.A1; // модуль вектора вибрации после установки пробного груза */** +let A1; // модуль вектора вибрации после установки пробного груза */** (конечное значение) +var A1_phase_ = gtl.options.customOptions.A1_phase; // фаза вектора вибрации после установки пробного груза */** +var A1_phase; // фаза вектора вибрации после установки пробного груза */** (конечное значение) +var dA; // модуль вектора дельты вибрации после установки пробного груза *** +var dA_phase; // фаза вектора дельты вибрации после установки пробного груза *** +let DCI_ = gtl.options.customOptions.DCI; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** +var DCI; // модуль (мм/с/граммы) динамического коэффициента влияния **/*** (конечное значение) +let DCI_phase_ = gtl.options.customOptions.DCI_phase; // фаза динамического коэффициента влияния **/*** +let DCI_phase; // фаза динамического коэффициента влияния **/*** (конечное значение) +var Mb; // модуль вектора балансировочного груза *** +var Mb_corner; // угол вектора балансировочного груза *** +var Mdisb; // масса дисбаланса *** +var Mdisb_corner; // угол расположения дисбаланса *** +var A2; // модуль вектора вибрации после установки балансировочного груза *** +var A2_phase; // фаза вектора вибрации после установки балансировочного груза *** + +// Переменные вспомогательные необходимые для расчётов +var A0_phase_X; // угол наклона вектора A0 к оси X +var A0_phase_Y; // угол наклона вектора A0 к оси Y +var A0_1_X; // начальная координата вектора A0 по оси X +var A0_2_X; // конечная координата вектора A0 по оси X +var A0_1_Y; // начальная координата вектора A0 по оси Y +var A0_2_Y; // конечная координата вектора A0 по оси Y + +var A1_phase_X; // угол наклона вектора A1 к оси X +var A1_phase_Y; // угол наклона вектора A1 к оси Y +var A1_1_X; // начальная координата вектора A1 по оси X +var A1_2_X; // конечная координата вектора A1 по оси X +var A1_1_Y; // начальная координата вектора A1 по оси Y +var A1_2_Y; // конечная координата вектора A1 по оси Y + +var dA_1_X; // начальная координата вектора dA по оси X +var dA_2_X; // конечная координата вектора dA по оси X +var dA_1_Y; // начальная координата вектора dA по оси Y +var dA_2_Y; // конечная координата вектора dA по оси Y + +var m_test_corner_X;// угол наклона вектора m_test к оси X +var m_test_corner_Y;// угол наклона вектора m_test к оси Y +var m_test_1_X; // начальная координата вектора m_test по оси X +var m_test_2_X; // конечная координата вектора m_test по оси X +var m_test_1_Y; // начальная координата вектора m_test по оси Y +var m_test_2_Y; // конечная координата вектора m_test по оси Y + + +// ***** РАСЧЁТЫ ***** +// gtl.diagnostic.interval = 15; +gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time, pfc_pl.acq_time) + 0.1; + +let state = record.tachoOptions.tachoState; // начальное состояние после выбора источника тахо сигнала + +function diagnose() { + +// Нестабильность частоты вращения +var freq_max = Math.max(...freq.values); +var freq_min = Math.min(...freq.values); +var instability = ((freq_max - freq_min) / freq.value) * 100; // * 100% + +switch (state) { + + case 0: // считаем частоту вращения и настраиваем спектры + var freq_max = Math.max(...freq.values); + var freq_min = Math.min(...freq.values); + var instability = (freq_max - freq_min) / freq.value; + + // if (instability > imp.tolerance()) { + if (instability > 0.3) { + gtl.log.info("Критическая нестабильность частоты вращения, %", instability * 100); + gtl.log.info("Результат:", "Диагностика прервана"); + //gtl.diagnostic.stop(); //принудительная остановка диагностики + + let __result = { + Result: false + }; + gtl.results = __result; + }; + + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time, pfc_pl.acq_time) + 0.1;; + state = 3; + break; + + case 1: // Частота вращения фиксированная + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 2: // Частота вращения из поля INFO (виброметр) + // Определение минимально необходимой длительности сигнала для проведения диагностики + gtl.diagnostic.interval = Math.max(AUSPv.acq_time, AUSPv_pl.acq_time, pfc_pl.acq_time) + 0.1; + state = 3; + break; + + case 3: // Выполняем анализ спектов + // Очистка партретов спектров + AUSPv.clear_harms_sets(); + + + let __AUSPv_tools = gtl.create_spec_tools( + { + data: AUSPv_pl.data, + df: AUSPv_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x00ff00 + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row_AUSPv = __AUSPv_tools.harms.add(freq.value, 3, 0x0000ff, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row_AUSPv.name = "F1v (гарм. ряд част. вращ.)"; // название гармонического ряда + // __row1.modulate(5, 2, 0x00ff00, 1); // добавление амплитудной модуляции для набора гармоник (частота, количество, цвет, вес) + + + let __pfc_tools = gtl.create_spec_tools( + { + data: pfc_pl.data, + df: pfc_pl.resolution, + base: { + factor: 100, + visible: true, + color: 0x0000ff + }, + peaks: { + color: 0xff0000, + visible: true, + level: 0.000001 + }, + harms: { + tolerance: 1 + } + }); + + let __row1_phase = __pfc_tools.harms.add(freq.value, 3, 0x00ff00, 1); // добавление набора гармоник (частота, количество, цвет, вес) + __row1_phase.name = "F1v_phase (гарм. ряд част. вращ.)"; // название гармонического ряда + +// Построение графиков + plot_ausp.add( + { + color: 0x0000ff, + name: "Спектр виброскорости", + x: AUSPv_pl.resolution, + y: AUSPv_pl.data, + spec_tools: __AUSPv_tools.to_json() + }); + plot_pfc.add( + { + color: 0xff0000, + name: "ФЧХ", + x: pfc_pl.resolution, + y: pfc_pl.data, + spec_tools: __pfc_tools.to_json() + }); + + let __result1 = __AUSPv_tools.to_json(); + let __result2 = __pfc_tools.to_json(); + + + // Амплитуда гармонического ряда частоты вращения + var F1_1_a = __result1.harms.rows[0].harms[0].ampl; + var F1_2_a = __result1.harms.rows[0].harms[1].ampl; + var F1_3_a = __result1.harms.rows[0].harms[2].ampl; + + // Частота гармонического ряда частоты вращения + var F1_1_f = __result1.harms.rows[0].harms[0].freq; + var F1_2_f = __result1.harms.rows[0].harms[1].freq; + var F1_3_f = __result1.harms.rows[0].harms[2].freq; + + // Фаза (амплитуда) гармонического ряда частоты вращения + var F1_1_ph = __result2.harms.rows[0].harms[0].ampl; + var F1_2_ph = __result2.harms.rows[0].harms[1].ampl; + var F1_3_ph = __result2.harms.rows[0].harms[2].ampl; + + // Проверка наличия оборотной гармоники и необходимости проведения баалнсировки + var test_balance = ""; // переменная для текста о необходимости проведения балансировки + if (F1_1_a >= RMSv_2_1000 * 0.4) // вклад оборотной гармоники в СКЗv + {test_balance = "необходимо провести балансировку";} + else {test_balance = "проведение балансировки не требуется или нецелесообразно";} + + // __result.data; - массив значений амплитуд составляющих спектра; + // __result.base.data; - массив значений средней линии; + // __result.peaks.data; - массив обнаруженных гармоник; + // __result.peaks.data[i]; - обращение к i - й обнаруженной гармонике и ее свойствам; + + // freq - частота обнаруженной гармоники; + // ampl - амплитудное значение обнаруженной гармоники; + // level - уровень обнаруженной гармоники над средней линией; + // index - индекс обнаруженной гармоники; + + // __result.harms.rows; - массив построенных гармонических рядов; + // __result.harms.rows[i]; - обращение к i - му гармоническому ряду; + // __result.harms.rows[i].harms; - массив гармоник i - го гармонического ряда; + // __result.harms.rows[i].harms[j]; - обращение к j - й гармонике и ее свойствам i - го гармонического ряда; + + // freq - частота гармоники указанного гармонического ряда; + // ampl - амплитудное значение гармоники указанного гармонического ряда; + // base - уровень средней линии под гармоникой указанного гармонического ряда; + // level - уровень гармоники над средней линией указанного гармонического ряда; + // is_present(true / false) - обнаружение гармоники указанного гармонического ряда; + +// РАСЧЁТЫ (балансировочный калькулятор) + + // Определение конечных значений переменных + // A0 начальная вибрация + if (A0_ != 0) {A0 = A0_} // принимает значение из опций + else {A0 = F1_1_a} // принимает значение из спектра сигнала + if (A0_phase_ != 0) {A0_phase = A0_phase_} // принимает значение из опций + else {A0_phase = F1_1_ph} // принимает значение из спектра сигнала + + // A1 вибрация после установки пробного груза + if (A1_ != 0) {A1 = A1_} // принимает значение из опций + else {A1 = F1_1_a} // принимает значение из спектра сигнала + if (A1_phase_ != 0) {A1_phase = A1_phase_} // принимает значение из опций + else {A1_phase = F1_1_ph} // принимает значение из спектра сигнала + + // вычисление массы пробного груза (если не выбране свой и есть данные для формулы) + m_test_calc = 804 * ((P * A0) / (R * n)); + // m_test масса пробного груза + if (m_test_ != 0) {m_test = m_test_} // принимает значение из опций + else {m_test = m_test_calc} // принимает значение из расчёта + + // определение угла наклона вектора 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 + A0_1_X = 0; + if (A0_phase <= 180) {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 + } else {A0_2_X = Math.abs(Math.cos(A0_phase_X * 3.1415/180)) * A0 * (-1)} + A0_1_Y = 0; + if (A0_phase <= 90 || A0_phase >= 270) {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 + } else {A0_2_Y = Math.abs(Math.cos(A0_phase_Y * 3.1415/180)) * A0 * (-1)} + + // определение угла наклона вектора 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)} + + // определение угла наклона вектора 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 + A1_1_X = 0; + if (A1_phase <= 180) {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 + } else {A1_2_X = Math.abs(Math.cos(A1_phase_X * 3.1415/180)) * A1 * (-1)} + A1_1_Y = 0; + if (A1_phase <= 90 || A1_phase >= 270) {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 + } else {A1_2_Y = Math.abs(Math.cos(A1_phase_Y * 3.1415/180)) * A1 * (-1)} + + // определение модуля вектора dA + dA_1_X = A0_2_X; + dA_2_X = A1_2_X; + dA_1_Y = A0_2_Y; + dA_2_Y = A1_2_Y; + dA = Math.sqrt(Math.pow(dA_2_X - dA_1_X, 2) + Math.pow(dA_2_Y - dA_1_Y, 2)) + + // определение фазы вектора dA + if ((dA_2_Y < dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 180 + (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if ((dA_2_Y > dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if ((dA_2_Y > dA_1_Y) && (dA_2_X < dA_1_X)) { + dA_phase = 360 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if ((dA_2_Y < dA_1_Y) && (dA_2_X > dA_1_X)) { + dA_phase = 180 - (((Math.acos((Math.abs(dA_2_Y - dA_1_Y)) / dA)) * 180 ) / 3.1415)} + if (dA_phase > 360) {dA_phase = dA_phase - 360} + + // определение модуля вектора DCI (ДКВ) + if (DCI_ != 0) {DCI = DCI_} // принимает значение из опций + else {DCI = dA / m_test} // принимает значение из расчётов + + // определение фазы вектора DCI + if (DCI_phase_ != 0) {DCI_phase = DCI_phase_} // принимает значение из опций + else {DCI_phase = dA_phase - m_test_corner} // вычисляется в скрипте + + // определение модуля вектора Mb + Mb = A0 / DCI; + // Mb = (m_test * A0) / dA; + + // определение угла вектора Mb + if ((A0_phase - DCI_phase + 180) < 360) { + Mb_corner = (A0_phase - DCI_phase + 180) + } else {Mb_corner = (A0_phase - DCI_phase + 180) - 360} + // if ((m_test_corner + A0_phase - dA_phase + 180) < 360) { + // Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) + // } else {Mb_corner = (m_test_corner + A0_phase - dA_phase + 180) - 360} + + // определение массы дисбаланса + Mdisb = Mb; // равен массе балансировочного груза + + // определение угла расположения дисбаланса + 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)} + + + +gtl.log.info("Mb (балансировочный груз)",Mb); +gtl.log.info("Mb_corner (угол установки груза)",Mb_corner); +gtl.log.info("Mdisb (дисбаланс)",Mdisb); +gtl.log.info("Mdisb_corner (угол расположения дисбаланса)",Mdisb_corner); +gtl.log.info("m_test (пробный груз введёный)",m_test); +gtl.log.info("m_test_calc (пробный груз расчётный)",m_test_calc); +gtl.log.info("RMSv_2_1000",RMSv_2_1000.value); +gtl.log.info("RMSa",RMSa.value); +gtl.log.info("Необходимость проведения балансировки",test_balance); +gtl.log.info("F1_3_ph (фаза)",F1_3_ph); +gtl.log.info("F1_3_a (ампл)",F1_3_a); +gtl.log.info("F1_3_f (част)",F1_3_f); +gtl.log.info("F1_2_ph (фаза)",F1_2_ph); +gtl.log.info("F1_2_a (ампл)",F1_2_a); +gtl.log.info("F1_2_f (част)",F1_2_f); +gtl.log.info("F1_1_ph (фаза)",F1_1_ph); +gtl.log.info("F1_1_a (ампл)",F1_1_a); +gtl.log.info("F1_1_f (част)",F1_1_f); +gtl.log.info("gtl.diagnostic.interval",gtl.diagnostic.interval); +gtl.log.info("Частота вращения freq.value", freq.value); +gtl.log.info("Нестабильность частоты вращения, %", instability*100); + + + // Выдача результата (results) + let __result3 = { + Частота_вращения_F1: freq.value, + Ампл_гарм_1F1: F1_1_a, + Фаза_част_вращ_F1: F1_1_ph, + Тестирование: test_balance, + Примен_пробный_груз: m_test, + Расч_масса_пробного_груза: m_test_calc, + Масса_баланс_груза: Mb, + Угол_баланс_груза: Mb_corner, + СКЗ_виброскор: RMSv_2_1000.value, + Нестаб_част_вращ: instability*100, + ДКВ_модуль: DCI, + ДКВ_фаза: DCI_phase + + }; + +gtl.results = {"result_ausp": __result1, + "result_pfc": __result2, + "result_общий": __result3}; + +gtl.diagnostic.stop(); + +break; + +default: + break; +} +} \ No newline at end of file