comment
This commit is contained in:
commit
fa0b01096b
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"_001_Радиус_установки_грузов_мм": 2000,
|
||||
"_002_Масса_ротора_г": 17000,
|
||||
"_003_ДКВ_модуль_мм_с_г": 0.028,
|
||||
"_004_ДКВ_фаза_град": -242.6,
|
||||
"_005_Допуст_ост_дисб_г_мм": 405845.10488433315
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"_001_Частота_вращения_Гц": 16.666666666666668,
|
||||
"_002_Радиус_установки_грузов_мм": 2000,
|
||||
"_003_Масса_ротора_кг": 17000,
|
||||
"_004_Допуст_ост_дисб_г_мм": 405845.10488433315
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"_001_Примен_пробный_груз": 150,
|
||||
"_002_Расч_пробный_груз": 820.08
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"_001_Радиус_установки_грузов_мм": 2000,
|
||||
"_002_Масса_ротора_г": 17000,
|
||||
"_003_Допуст_ост_дисб_г_мм": 405845.10488433315,
|
||||
"_004_Част_вращ_обмин": 1000
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"_001_Примен_пробный_груз": 500,
|
||||
"_002_Угол_устан_пробн_груза": 250,
|
||||
"_003_Расч_пробный_груз": 546.72,
|
||||
"_004_Част_вращ_обмин": 1000
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"_001_Радиус_установки_грузов_пл1_мм": 2000,
|
||||
"_002_Радиус_установки_грузов_пл2_мм": 2000,
|
||||
"_003_Масса_ротора_кг": 17000,
|
||||
"_004_Допуст_ост_дисб_г_мм": 405845.10488433315
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"_001_Примен_пробный_груз_пл_1": 300,
|
||||
"_002_Угол_устан_пробн_груза_пл_1": 250,
|
||||
"_003_Расч_пробный_груз_пл_1": 546.72
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"autoStartRecorder": false,
|
||||
"expendTreeOnStart": true,
|
||||
"lastTag": "шаг 6",
|
||||
"projectTitle": "Балансировочный калькулятор",
|
||||
"syncURL": "",
|
||||
"useSync": false,
|
||||
"vacuumOnStart": false,
|
||||
"version": 1
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[
|
||||
]
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -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}"
|
||||
}
|
||||
]
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
|
@ -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": [
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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": [
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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": [
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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": [
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,5 @@
|
|||
<root>
|
||||
<child color="0" gain="1" is_couping="0" is_iepe="0" is_inverting="0" name="1V202 #123" node="gtl::hw::player_analog_input" offset="0" reference="1" scale="1" sensitivity="1" unit=""/>
|
||||
<child color="0" gain="1" is_couping="0" is_iepe="0" is_inverting="0" name="1V202 #124" node="gtl::hw::player_analog_input" offset="0" reference="1" scale="1" sensitivity="1" unit=""/>
|
||||
<child color="0" gain="1" is_couping="0" is_iepe="0" is_inverting="0" name="8V91D #001" node="gtl::hw::player_analog_input" offset="0" reference="1" scale="1" sensitivity="1" unit=""/>
|
||||
</root>
|
||||
|
|
@ -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": [
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
// }
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
// }
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
// }
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
// }
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue