new_vers
This commit is contained in:
parent
bcc5f6b461
commit
0aa99eb2b6
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"autoStartRecorder": false,
|
"autoStartRecorder": false,
|
||||||
"expendTreeOnStart": true,
|
"expendTreeOnStart": true,
|
||||||
"lastTag": "частотный отклик freq-1000 resol-10 (искл 4,7,8)",
|
"lastTag": "4096Гц_разр1[4]",
|
||||||
"projectTitle": "Частотный отклик",
|
"projectTitle": "Частотный отклик",
|
||||||
"projectUUID": "{91ae6936-d7c1-41f2-ac73-1fb5692a4011}",
|
"projectUUID": "{91ae6936-d7c1-41f2-ac73-1fb5692a4011}",
|
||||||
"reportOptions": {
|
"reportOptions": {
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -43,277 +43,7 @@
|
||||||
"cbdZ1": 0,
|
"cbdZ1": 0,
|
||||||
"cbdZ2": 0,
|
"cbdZ2": 0,
|
||||||
"cbdZ3": 0,
|
"cbdZ3": 0,
|
||||||
"customOptionsString": "{\n\"ranges\": [\n{\n\"max\": 13.766053515625,\n\"min\": 13.355623828125\n},\n{\n\"max\": 17.592342578125,\n\"min\": 17.181912892625\n},\n{\n\"max\": 21.179315234374997,\n\"min\": 20.768885546874998\n},\n{\n\"max\": 24.162000781249997,\n\"min\": 23.751571093749998\n},\n{\n\"max\": 27.704744921874997,\n\"min\": 27.294315234375\n},\n{\n\"max\": 32.293602343749995,\n\"min\": 31.883172656249997\n},\n{\n\"max\": 37.146190234375,\n\"min\": 36.735760546875\n},\n{\n\"max\": 40.513612109374996,\n\"min\": 40.103182421875\n},\n{\n\"max\": 44.100897265624994,\n\"min\": 43.690467578124995\n}\n],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 1000,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 10\n}",
|
"customOptionsString": "{\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 4096,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 1\n}",
|
||||||
"dpt_K": 0,
|
|
||||||
"dpt_M": 0,
|
|
||||||
"dpt_N": 0,
|
|
||||||
"dpt_freq": 50,
|
|
||||||
"elType": 0,
|
|
||||||
"groupType": 0,
|
|
||||||
"gtZ1": 0,
|
|
||||||
"gtZ2": 0,
|
|
||||||
"isQMLViewActive": false,
|
|
||||||
"isRouteStarter": false,
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"U_freq": 50,
|
|
||||||
"async_N_rotor": 0,
|
|
||||||
"bdD1": 0,
|
|
||||||
"bdD2": 0,
|
|
||||||
"bdL": 0,
|
|
||||||
"bsAngle": 0,
|
|
||||||
"bsInnerD": 0,
|
|
||||||
"bsModelName": "",
|
|
||||||
"bsOuterD": 0,
|
|
||||||
"bsRollerCount": 0,
|
|
||||||
"bsRollerD": 0,
|
|
||||||
"bsVendor": "",
|
|
||||||
"cbdZ1": 0,
|
|
||||||
"cbdZ2": 0,
|
|
||||||
"cbdZ3": 0,
|
|
||||||
"customOptionsString": "{}",
|
|
||||||
"dpt_K": 0,
|
|
||||||
"dpt_M": 0,
|
|
||||||
"dpt_N": 0,
|
|
||||||
"dpt_freq": 50,
|
|
||||||
"elType": 0,
|
|
||||||
"groupType": 0,
|
|
||||||
"gtZ1": 0,
|
|
||||||
"gtZ2": 0,
|
|
||||||
"isQMLViewActive": false,
|
|
||||||
"isRouteStarter": false,
|
|
||||||
"items": [
|
|
||||||
],
|
|
||||||
"masterScriptName": "",
|
|
||||||
"name": "СТ верх горизонталь",
|
|
||||||
"nodeType": 2,
|
|
||||||
"objectType": 0,
|
|
||||||
"pgN": 0,
|
|
||||||
"pgZ1": 0,
|
|
||||||
"pgZ2": 0,
|
|
||||||
"pgZ3": 0,
|
|
||||||
"pmBlades": 0,
|
|
||||||
"pointComment": "",
|
|
||||||
"qmlScriptName": "default_point.qml",
|
|
||||||
"rbAngle": 0,
|
|
||||||
"rbInnerD": 0,
|
|
||||||
"rbModelName": "",
|
|
||||||
"rbOuterD": 0,
|
|
||||||
"rbRollerCount": 0,
|
|
||||||
"rbRollerD": 0,
|
|
||||||
"rbVendor": "",
|
|
||||||
"scriptName": "Частотный_отклик v12.js",
|
|
||||||
"sync_M_rotor": 0,
|
|
||||||
"sync_M_stator": 0,
|
|
||||||
"tachoRatio": 1,
|
|
||||||
"trBlades": 0,
|
|
||||||
"uuid": "{1ee51458-2b67-4738-8832-24a883abe26a}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"U_freq": 50,
|
|
||||||
"async_N_rotor": 0,
|
|
||||||
"bdD1": 0,
|
|
||||||
"bdD2": 0,
|
|
||||||
"bdL": 0,
|
|
||||||
"bsAngle": 0,
|
|
||||||
"bsInnerD": 0,
|
|
||||||
"bsModelName": "",
|
|
||||||
"bsOuterD": 0,
|
|
||||||
"bsRollerCount": 0,
|
|
||||||
"bsRollerD": 0,
|
|
||||||
"bsVendor": "",
|
|
||||||
"cbdZ1": 0,
|
|
||||||
"cbdZ2": 0,
|
|
||||||
"cbdZ3": 0,
|
|
||||||
"customOptionsString": "{}",
|
|
||||||
"dpt_K": 0,
|
|
||||||
"dpt_M": 0,
|
|
||||||
"dpt_N": 0,
|
|
||||||
"dpt_freq": 50,
|
|
||||||
"elType": 0,
|
|
||||||
"groupType": 0,
|
|
||||||
"gtZ1": 0,
|
|
||||||
"gtZ2": 0,
|
|
||||||
"isQMLViewActive": false,
|
|
||||||
"isRouteStarter": false,
|
|
||||||
"items": [
|
|
||||||
],
|
|
||||||
"masterScriptName": "",
|
|
||||||
"name": "СТ верх вертикаль",
|
|
||||||
"nodeType": 2,
|
|
||||||
"objectType": 0,
|
|
||||||
"pgN": 0,
|
|
||||||
"pgZ1": 0,
|
|
||||||
"pgZ2": 0,
|
|
||||||
"pgZ3": 0,
|
|
||||||
"pmBlades": 0,
|
|
||||||
"pointComment": "",
|
|
||||||
"qmlScriptName": "default_point.qml",
|
|
||||||
"rbAngle": 0,
|
|
||||||
"rbInnerD": 0,
|
|
||||||
"rbModelName": "",
|
|
||||||
"rbOuterD": 0,
|
|
||||||
"rbRollerCount": 0,
|
|
||||||
"rbRollerD": 0,
|
|
||||||
"rbVendor": "",
|
|
||||||
"scriptName": "freq_response 2.js",
|
|
||||||
"sync_M_rotor": 0,
|
|
||||||
"sync_M_stator": 0,
|
|
||||||
"tachoRatio": 1,
|
|
||||||
"trBlades": 0,
|
|
||||||
"uuid": "{d5f70fb9-1e58-4e23-b3e8-5270c02d0904}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"U_freq": 50,
|
|
||||||
"async_N_rotor": 0,
|
|
||||||
"bdD1": 0,
|
|
||||||
"bdD2": 0,
|
|
||||||
"bdL": 0,
|
|
||||||
"bsAngle": 0,
|
|
||||||
"bsInnerD": 0,
|
|
||||||
"bsModelName": "",
|
|
||||||
"bsOuterD": 0,
|
|
||||||
"bsRollerCount": 0,
|
|
||||||
"bsRollerD": 0,
|
|
||||||
"bsVendor": "",
|
|
||||||
"cbdZ1": 0,
|
|
||||||
"cbdZ2": 0,
|
|
||||||
"cbdZ3": 0,
|
|
||||||
"customOptionsString": "{}",
|
|
||||||
"dpt_K": 0,
|
|
||||||
"dpt_M": 0,
|
|
||||||
"dpt_N": 0,
|
|
||||||
"dpt_freq": 50,
|
|
||||||
"elType": 0,
|
|
||||||
"groupType": 0,
|
|
||||||
"gtZ1": 0,
|
|
||||||
"gtZ2": 0,
|
|
||||||
"isQMLViewActive": false,
|
|
||||||
"isRouteStarter": false,
|
|
||||||
"items": [
|
|
||||||
],
|
|
||||||
"masterScriptName": "",
|
|
||||||
"name": "СТ низ горизонталь",
|
|
||||||
"nodeType": 2,
|
|
||||||
"objectType": 0,
|
|
||||||
"pgN": 0,
|
|
||||||
"pgZ1": 0,
|
|
||||||
"pgZ2": 0,
|
|
||||||
"pgZ3": 0,
|
|
||||||
"pmBlades": 0,
|
|
||||||
"pointComment": "",
|
|
||||||
"qmlScriptName": "default_point.qml",
|
|
||||||
"rbAngle": 0,
|
|
||||||
"rbInnerD": 0,
|
|
||||||
"rbModelName": "",
|
|
||||||
"rbOuterD": 0,
|
|
||||||
"rbRollerCount": 0,
|
|
||||||
"rbRollerD": 0,
|
|
||||||
"rbVendor": "",
|
|
||||||
"scriptName": "freq_response 2.js",
|
|
||||||
"sync_M_rotor": 0,
|
|
||||||
"sync_M_stator": 0,
|
|
||||||
"tachoRatio": 1,
|
|
||||||
"trBlades": 0,
|
|
||||||
"uuid": "{da645bbe-04b5-4d5e-86de-3b5ba633addc}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"U_freq": 50,
|
|
||||||
"async_N_rotor": 0,
|
|
||||||
"bdD1": 0,
|
|
||||||
"bdD2": 0,
|
|
||||||
"bdL": 0,
|
|
||||||
"bsAngle": 0,
|
|
||||||
"bsInnerD": 0,
|
|
||||||
"bsModelName": "",
|
|
||||||
"bsOuterD": 0,
|
|
||||||
"bsRollerCount": 0,
|
|
||||||
"bsRollerD": 0,
|
|
||||||
"bsVendor": "",
|
|
||||||
"cbdZ1": 0,
|
|
||||||
"cbdZ2": 0,
|
|
||||||
"cbdZ3": 0,
|
|
||||||
"customOptionsString": "{}",
|
|
||||||
"dpt_K": 0,
|
|
||||||
"dpt_M": 0,
|
|
||||||
"dpt_N": 0,
|
|
||||||
"dpt_freq": 50,
|
|
||||||
"elType": 0,
|
|
||||||
"groupType": 0,
|
|
||||||
"gtZ1": 0,
|
|
||||||
"gtZ2": 0,
|
|
||||||
"isQMLViewActive": false,
|
|
||||||
"isRouteStarter": false,
|
|
||||||
"items": [
|
|
||||||
],
|
|
||||||
"masterScriptName": "",
|
|
||||||
"name": "СТ низ вертикаль",
|
|
||||||
"nodeType": 2,
|
|
||||||
"objectType": 0,
|
|
||||||
"pgN": 0,
|
|
||||||
"pgZ1": 0,
|
|
||||||
"pgZ2": 0,
|
|
||||||
"pgZ3": 0,
|
|
||||||
"pmBlades": 0,
|
|
||||||
"pointComment": "",
|
|
||||||
"qmlScriptName": "default_point.qml",
|
|
||||||
"rbAngle": 0,
|
|
||||||
"rbInnerD": 0,
|
|
||||||
"rbModelName": "",
|
|
||||||
"rbOuterD": 0,
|
|
||||||
"rbRollerCount": 0,
|
|
||||||
"rbRollerD": 0,
|
|
||||||
"rbVendor": "",
|
|
||||||
"scriptName": "freq_response.js",
|
|
||||||
"sync_M_rotor": 0,
|
|
||||||
"sync_M_stator": 0,
|
|
||||||
"tachoRatio": 1,
|
|
||||||
"trBlades": 0,
|
|
||||||
"uuid": "{5aba8185-bd6d-4469-a877-366899f020e9}"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"masterScriptName": "",
|
|
||||||
"name": "Частотный отклик по размеченным сигналам",
|
|
||||||
"nodeType": 1,
|
|
||||||
"objectType": 0,
|
|
||||||
"pgN": 0,
|
|
||||||
"pgZ1": 0,
|
|
||||||
"pgZ2": 0,
|
|
||||||
"pgZ3": 0,
|
|
||||||
"pmBlades": 0,
|
|
||||||
"pointComment": "",
|
|
||||||
"qmlScriptName": "",
|
|
||||||
"rbAngle": 0,
|
|
||||||
"rbInnerD": 0,
|
|
||||||
"rbModelName": "",
|
|
||||||
"rbOuterD": 0,
|
|
||||||
"rbRollerCount": 0,
|
|
||||||
"rbRollerD": 0,
|
|
||||||
"rbVendor": "",
|
|
||||||
"scriptName": "",
|
|
||||||
"sync_M_rotor": 0,
|
|
||||||
"sync_M_stator": 0,
|
|
||||||
"tachoRatio": 1,
|
|
||||||
"trBlades": 0,
|
|
||||||
"uuid": "{4309f187-2cb5-463c-a4cd-520050c00401}"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"U_freq": 50,
|
|
||||||
"async_N_rotor": 0,
|
|
||||||
"bdD1": 0,
|
|
||||||
"bdD2": 0,
|
|
||||||
"bdL": 0,
|
|
||||||
"bsAngle": 0,
|
|
||||||
"bsInnerD": 0,
|
|
||||||
"bsModelName": "",
|
|
||||||
"bsOuterD": 0,
|
|
||||||
"bsRollerCount": 0,
|
|
||||||
"bsRollerD": 0,
|
|
||||||
"bsVendor": "",
|
|
||||||
"cbdZ1": 0,
|
|
||||||
"cbdZ2": 0,
|
|
||||||
"cbdZ3": 0,
|
|
||||||
"customOptionsString": "{\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 40000,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 100\n}",
|
|
||||||
"dpt_K": 0,
|
"dpt_K": 0,
|
||||||
"dpt_M": 0,
|
"dpt_M": 0,
|
||||||
"dpt_N": 0,
|
"dpt_N": 0,
|
||||||
|
|
@ -583,7 +313,7 @@
|
||||||
"cbdZ1": 0,
|
"cbdZ1": 0,
|
||||||
"cbdZ2": 0,
|
"cbdZ2": 0,
|
||||||
"cbdZ3": 0,
|
"cbdZ3": 0,
|
||||||
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 13.4652234375,\n \"min\": 13.3556140625\n },\n {\n \"max\": 17.291522265625,\n \"min\": 17.181912890625\n },\n {\n \"max\": 20.87848515625,\n \"min\": 20.76887578125\n },\n {\n \"max\": 23.86118046875,\n \"min\": 23.751571093749998\n },\n {\n \"max\": 27.403924609375,\n \"min\": 27.294315234375\n },\n {\n \"max\": 31.992782031249998,\n \"min\": 31.883172656249997\n },\n {\n \"max\": 36.845369921875,\n \"min\": 36.735760546875\n },\n {\n \"max\": 40.212791796874995,\n \"min\": 40.103182421875\n },\n {\n \"max\": 43.80007695312499,\n \"min\": 43.690467578124995\n }\n ],\n\n\"remove_resp_arr\": [4,7,8],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 1000,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 10\n}",
|
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 15.3656140625,\n \"min\": 13.3556140625\n },\n {\n \"max\": 19.191912890624998,\n \"min\": 17.181912890625\n },\n {\n \"max\": 22.77887578125,\n \"min\": 20.76887578125\n },\n {\n \"max\": 25.76157109375,\n \"min\": 23.751571093749998\n },\n {\n \"max\": 29.30431534374997,\n \"min\": 27.294315234375\n },\n {\n \"max\": 32.893172656249995,\n \"min\": 31.883172656249997\n },\n {\n \"max\": 38.745760546875,\n \"min\": 36.735760546875\n },\n {\n \"max\": 42.113182421874995,\n \"min\": 40.103182421875\n },\n {\n \"max\": 45.70046757812499,\n \"min\": 43.690467578124995\n }\n ],\n\n\"window_spec_force_comment\": \"окно спектра силы\",\n\"window_spec_force\": \"gtl.spec.rectangular\",\n\n\"window_spec_vibr_comment\": \"окно спектра вибрации\",\n\"window_spec_vibr\": \"gtl.spec.rectangular\",\n\n\"remove_resp_arr_comment\": \"удары, которые нужно исключить из усреднения\",\n\"remove_resp_arr\": [4,6],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 4096,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 0.5\n}",
|
||||||
"dpt_K": 0,
|
"dpt_K": 0,
|
||||||
"dpt_M": 0,
|
"dpt_M": 0,
|
||||||
"dpt_N": 0,
|
"dpt_N": 0,
|
||||||
|
|
@ -1015,7 +745,7 @@
|
||||||
"cbdZ1": 0,
|
"cbdZ1": 0,
|
||||||
"cbdZ2": 0,
|
"cbdZ2": 0,
|
||||||
"cbdZ3": 0,
|
"cbdZ3": 0,
|
||||||
"customOptionsString": "{\n\"ranges\": [\n{\n\"max\": 13.766053515625,\n\"min\": 13.355623828125\n},\n{\n\"max\": 17.592342578125,\n\"min\": 17.181912892625\n},\n{\n\"max\": 21.179315234374997,\n\"min\": 20.768885546874998\n},\n{\n\"max\": 24.162000781249997,\n\"min\": 23.751571093749998\n},\n{\n\"max\": 27.704744921874997,\n\"min\": 27.294315234375\n},\n{\n\"max\": 32.293602343749995,\n\"min\": 31.883172656249997\n},\n{\n\"max\": 37.146190234375,\n\"min\": 36.735760546875\n},\n{\n\"max\": 40.513612109374996,\n\"min\": 40.103182421875\n},\n{\n\"max\": 44.100897265624994,\n\"min\": 43.690467578124995\n}\n],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 10000,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 10\n}",
|
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 14.3656140625,\n \"min\": 13.3556140625\n },\n {\n \"max\": 18.191912890625,\n \"min\": 17.181912890625\n },\n {\n \"max\": 21.77887578125,\n \"min\": 20.76887578125\n },\n {\n \"max\": 24.76157109375,\n \"min\": 23.751571093749998\n },\n {\n \"max\": 28.304315234375,\n \"min\": 27.294315234375\n },\n {\n \"max\": 32.893172656249995,\n \"min\": 31.883172656249997\n },\n {\n \"max\": 37.745760546875,\n \"min\": 36.735760546875\n },\n {\n \"max\": 41.113182421874995,\n \"min\": 40.103182421875\n },\n {\n \"max\": 44.70046757812499,\n \"min\": 43.690467578124995\n }\n ],\n\n\"window_spec_force_comment\": \"окно спектра силы\",\n\"window_spec_force\": \"gtl.spec.rectangular\",\n\n\"window_spec_vibr_comment\": \"окно спектра вибрации\",\n\"window_spec_vibr\": \"gtl.spec.rectangular\",\n\n\"remove_resp_arr_comment\": \"удары, которые нужно исключить из усреднения\",\n\"remove_resp_arr\": [3,4],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 4096,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 1\n}",
|
||||||
"dpt_K": 0,
|
"dpt_K": 0,
|
||||||
"dpt_M": 0,
|
"dpt_M": 0,
|
||||||
"dpt_N": 0,
|
"dpt_N": 0,
|
||||||
|
|
@ -1074,7 +804,7 @@
|
||||||
"rbRollerCount": 0,
|
"rbRollerCount": 0,
|
||||||
"rbRollerD": 0,
|
"rbRollerD": 0,
|
||||||
"rbVendor": "",
|
"rbVendor": "",
|
||||||
"scriptName": "freq_response 2.js",
|
"scriptName": "freq_response_multichannel_new.js",
|
||||||
"sync_M_rotor": 0,
|
"sync_M_rotor": 0,
|
||||||
"sync_M_stator": 0,
|
"sync_M_stator": 0,
|
||||||
"tachoRatio": 1,
|
"tachoRatio": 1,
|
||||||
|
|
@ -1083,7 +813,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"masterScriptName": "",
|
"masterScriptName": "",
|
||||||
"name": "Новый объект",
|
"name": "Частотный отклик \"верх горизонталь\" все каналы",
|
||||||
"nodeType": 1,
|
"nodeType": 1,
|
||||||
"objectType": 0,
|
"objectType": 0,
|
||||||
"pgN": 0,
|
"pgN": 0,
|
||||||
|
|
@ -1106,6 +836,330 @@
|
||||||
"tachoRatio": 1,
|
"tachoRatio": 1,
|
||||||
"trBlades": 0,
|
"trBlades": 0,
|
||||||
"uuid": "{a5e1df73-9f23-451b-83f1-719a5ec4bb7e}"
|
"uuid": "{a5e1df73-9f23-451b-83f1-719a5ec4bb7e}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 3.9452332031250004,\n \"min\": 2.935233203125\n },\n {\n \"max\": 12.82114140625,\n \"min\": 11.81114140625\n },\n {\n \"max\": 15.887362109375,\n \"min\": 14.877362109375\n },\n {\n \"max\": 18.64137578125,\n \"min\": 17.63137578125\n },\n {\n \"max\": 21.4958875,\n \"min\": 20.485887499999997\n },\n {\n \"max\": 24.302557421875,\n \"min\": 23.292557421875\n },\n {\n \"max\": 27.007244921875,\n \"min\": 25.997244921874998\n },\n {\n \"max\": 39.888377734375,\n \"min\": 28.878377734374997\n },\n {\n \"max\": 33.000780078125,\n \"min\": 31.990780078125\n },\n {\n \"max\": 36.1985828125,\n \"min\": 35.1885828125\n }\n ],\n\n\"window_spec_force_comment\": \"окно спектра силы\",\n\"window_spec_force\": \"gtl.spec.rectangular\",\n\n\"window_spec_vibr_comment\": \"окно спектра вибрации\",\n\"window_spec_vibr\": \"gtl.spec.rectangular\",\n\n\"remove_resp_arr_comment\": \"удары, которые нужно исключить из усреднения\",\n\"remove_resp_arr\": [1,3,4,9],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 4096,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 1\n}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "СТ верх вертикаль",
|
||||||
|
"nodeType": 2,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "default_point.qml",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "freq_response_multichannel_new.js",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{d5f70fb9-1e58-4e23-b3e8-5270c02d0904}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "Частотный отклик \"верх вертикаль\" все каналы",
|
||||||
|
"nodeType": 1,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{e5d691d4-86bb-443f-888c-a1e6d84baab3}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 3.610701953125,\n \"min\": 2.600701953125\n },\n {\n \"max\": 5.802049609375,\n \"min\": 4.792049609375\n },\n {\n \"max\": 8.326619921875,\n \"min\": 7.3166199218750005\n },\n {\n \"max\": 10.77871953125,\n \"min\": 9.76871953125\n },\n {\n \"max\": 13.341903125,\n \"min\": 12.331903125\n },\n {\n \"max\": 16.122684375000002,\n \"min\": 15.112684375\n },\n {\n \"max\": 18.762537890625,\n \"min\": 17.752537890625\n },\n {\n \"max\": 21.7115515625,\n \"min\": 20.701551562499997\n },\n {\n \"max\": 24.54731328125,\n \"min\": 23.537313281249997\n }\n ],\n\n\"window_spec_force_comment\": \"окно спектра силы\",\n\"window_spec_force\": \"gtl.spec.rectangular\",\n\n\"window_spec_vibr_comment\": \"окно спектра вибрации\",\n\"window_spec_vibr\": \"gtl.spec.rectangular\",\n\n\"remove_resp_arr_comment\": \"удары, которые нужно исключить из усреднения\",\n\"remove_resp_arr\": [0,2,3,4,5,6,7,8],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 1024,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 1\n}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "СТ низ горизонталь",
|
||||||
|
"nodeType": 2,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "default_point.qml",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "freq_response_multichannel_new.js",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{da645bbe-04b5-4d5e-86de-3b5ba633addc}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "Частотный отклик \"низ горизонталь\" все каналы",
|
||||||
|
"nodeType": 1,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{66c77abc-0e7f-4323-8948-b64e1699cfad}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{\n \"ranges\": [\n {\n \"max\": 3.365506640625,\n \"min\": 2.3555066406250003\n },\n {\n \"max\": 5.5229744921875,\n \"min\": 4.5197449218750005\n },\n {\n \"max\": 7.533407031125,\n \"min\": 6.5234090312500005\n },\n {\n \"max\": 9.59793828125,\n \"min\": 8.58793828125\n },\n {\n \"max\": 11.86055546875,\n \"min\": 10.85055546875\n },\n {\n \"max\": 14.112264453125,\n \"min\": 13.102264453125\n },\n {\n \"max\": 16.379608203125002,\n \"min\": 15.369608203125\n },\n {\n \"max\": 18.68203984375,\n \"min\": 17.67203984375\n },\n {\n \"max\": 20.864783984375,\n \"min\": 19.8547839984374997\n }\n ],\n\n\"window_spec_force_comment\": \"окно спектра силы\",\n\"window_spec_force\": \"gtl.spec.rectangular\",\n\n\"window_spec_vibr_comment\": \"окно спектра вибрации\",\n\"window_spec_vibr\": \"gtl.spec.rectangular\",\n\n\"remove_resp_arr_comment\": \"удары, которые нужно исключить из усреднения\",\n\"remove_resp_arr\": [4],\n\n\"frequency_comment\": \"граничная частота спектра\",\n\"frequency\": 1024,\n\n\"view_comment\": \"отображение амплитуды спектра в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view\": 0,\n\n\"view_freq_resp_comment\": \"отображение амплитуды частотного отклика в дБ или линейных единицах: 1 - db, 0 - unit\",\n\"view_freq_resp\": 0,\n\n\"average_comment\": \"усреднение спектра\",\n\"average\": 1,\n\n\"overlap_comment\": \"наложение сигнала для спектра\",\n\"overlap\": 0,\n\n\"variant_freq_resp_comment\": \"вариант вычисления частотного отклика: 0 - через кросс, 1 - через автоспектр\",\n\"variant_freq_resp\": 0,\n\n\"thresh_level_comment\": \"уровень удара для засчитывания импульса\",\n\"thresh_level\": 500,\n\n\"time_impulse_comment\": \"длина импульса, если не задано вручную, то вычисляется в скрипте\",\n\"time_impulse\": 0,\n\n\"resolution_comment\": \"разрешение спектра\",\n\"resolution\": 1\n}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"U_freq": 50,
|
||||||
|
"async_N_rotor": 0,
|
||||||
|
"bdD1": 0,
|
||||||
|
"bdD2": 0,
|
||||||
|
"bdL": 0,
|
||||||
|
"bsAngle": 0,
|
||||||
|
"bsInnerD": 0,
|
||||||
|
"bsModelName": "",
|
||||||
|
"bsOuterD": 0,
|
||||||
|
"bsRollerCount": 0,
|
||||||
|
"bsRollerD": 0,
|
||||||
|
"bsVendor": "",
|
||||||
|
"cbdZ1": 0,
|
||||||
|
"cbdZ2": 0,
|
||||||
|
"cbdZ3": 0,
|
||||||
|
"customOptionsString": "{}",
|
||||||
|
"dpt_K": 0,
|
||||||
|
"dpt_M": 0,
|
||||||
|
"dpt_N": 0,
|
||||||
|
"dpt_freq": 50,
|
||||||
|
"elType": 0,
|
||||||
|
"groupType": 0,
|
||||||
|
"gtZ1": 0,
|
||||||
|
"gtZ2": 0,
|
||||||
|
"isQMLViewActive": false,
|
||||||
|
"isRouteStarter": false,
|
||||||
|
"items": [
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "СТ низ вертикаль",
|
||||||
|
"nodeType": 2,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "default_point.qml",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "freq_response_multichannel_new.js",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{5aba8185-bd6d-4469-a877-366899f020e9}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"masterScriptName": "",
|
||||||
|
"name": "Частотный отклик \"низ вертикаль\" все каналы",
|
||||||
|
"nodeType": 1,
|
||||||
|
"objectType": 0,
|
||||||
|
"pgN": 0,
|
||||||
|
"pgZ1": 0,
|
||||||
|
"pgZ2": 0,
|
||||||
|
"pgZ3": 0,
|
||||||
|
"pmBlades": 0,
|
||||||
|
"pointComment": "",
|
||||||
|
"qmlScriptName": "",
|
||||||
|
"rbAngle": 0,
|
||||||
|
"rbInnerD": 0,
|
||||||
|
"rbModelName": "",
|
||||||
|
"rbOuterD": 0,
|
||||||
|
"rbRollerCount": 0,
|
||||||
|
"rbRollerD": 0,
|
||||||
|
"rbVendor": "",
|
||||||
|
"scriptName": "",
|
||||||
|
"sync_M_rotor": 0,
|
||||||
|
"sync_M_stator": 0,
|
||||||
|
"tachoRatio": 1,
|
||||||
|
"trBlades": 0,
|
||||||
|
"uuid": "{0a32cd83-1f67-4edd-8af6-47cd5c5b12a7}"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"masterScriptName": "master_script.js",
|
"masterScriptName": "master_script.js",
|
||||||
|
|
|
||||||
|
|
@ -1,213 +0,0 @@
|
||||||
export function getResponse(args) {
|
|
||||||
let force = args.spec_force; //спектр силы
|
|
||||||
let vibro = args.spec_vibro; //спектр вибрации
|
|
||||||
let type = args.type; //способ вычисления отклика
|
|
||||||
let view = args.view; //способ отображения спектра в линейных единицах или дБ
|
|
||||||
|
|
||||||
/* Алгоритм
|
|
||||||
1. Получить спектры ускорения и силы в комплексном виде (вибропреобразователь и молоток).
|
|
||||||
2. Преобразовать спектр силы (молотка) в комплексно-сопряжённый вид.
|
|
||||||
3. Получить кросс-спектр (перекрёстный) между ускорением и силой.
|
|
||||||
4. Вычислить деление кросс-спектра на спектр силы.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Кросс-спектры
|
|
||||||
Сигнал силы в комплексно-сопряжённом виде
|
|
||||||
сигнал вибрации умножается на сигнал силы, а НЕ наоборот
|
|
||||||
умножение комплексных чисел по формуле:
|
|
||||||
(a1+b1i)*(a2+b2i)=(a1*a2-b1*b2)*(a1*b2+b1*a2)i
|
|
||||||
(a1*a2-b1*b2) - действительная часть
|
|
||||||
(a1*b2+b1*a2)i - мнимая часть
|
|
||||||
*/
|
|
||||||
|
|
||||||
let n = force.data.length; // длина массива спектра
|
|
||||||
let cross_real = new Float64Array(n); // типизированный массив для действительной части
|
|
||||||
let cross_imag = new Float64Array(n); // типизированный массив для мнимой части
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const vReal = vibro.real[i]; // действительная часть спектра вибрации
|
|
||||||
const vImag = vibro.imag[i]; // мнимая часть спектра вибрации
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = -force.imag[i]; // мнимая часть спектра силы сразу берём с обратным знаком
|
|
||||||
|
|
||||||
cross_real[i] = vReal * fReal - vImag * fImag;
|
|
||||||
cross_imag[i] = vReal * fImag + vImag * fReal;
|
|
||||||
}
|
|
||||||
|
|
||||||
// let cross_real2 = getCrossSpectrum(vibro.real, vibro.imag, force.real, force.imag).reXY;
|
|
||||||
// gtl.log.info('Амплитуда кросс', cross_real)
|
|
||||||
// gtl.log.info('Амплитуда кросс 2', cross_real2)
|
|
||||||
|
|
||||||
/* Вычисление частотного отклика
|
|
||||||
деление комплексных чисел по формуле:
|
|
||||||
(a+bi)/(c+di)=(a*c-b*d)*(a*d+b*c)i
|
|
||||||
(a*c-b*d) - действительная часть
|
|
||||||
(a*d+b*c)i - мнимая часть
|
|
||||||
*/
|
|
||||||
let resp_real = new Float64Array(n); // типизированный массив для действительной части
|
|
||||||
let resp_imag = new Float64Array(n); // типизированный массив для мнимой части
|
|
||||||
if (type == 0) {
|
|
||||||
// Вариант 1: Частотный отклик как деление кросс-спектра вибрации и силы на автоспектр силы
|
|
||||||
// ОШИБКА в моей формуле вычисления частотного отклика
|
|
||||||
// ИПРАВИЛ на:
|
|
||||||
// деление комплексных чисел по формуле:
|
|
||||||
// (a+bi)/(c+di)=(a*c + b*d)/(c^2 + d^2) + (c*b - a*d)/(c^2 + d^2)i
|
|
||||||
// (a*c + b*d)/(c^2 + d^2) - действительная часть
|
|
||||||
// (c*b - a*d)/(c^2 + d^2)i - мнимая часть
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const cReal = cross_real[i]; // действительная часть кросс спектра
|
|
||||||
const cImag = cross_imag[i]; // мнимая часть кросс спектра
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = force.imag[i]; // мнимая часть спектра силы
|
|
||||||
|
|
||||||
const denominator = fReal * fReal + fImag * fImag;
|
|
||||||
resp_real[i] = (cReal * fReal + cImag * fImag) / denominator;
|
|
||||||
resp_imag[i] = (fReal * cImag - cReal * fImag) / denominator;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Вариант 2: Частотный отклик как деление автоспектра вибрации на автоспектр силы
|
|
||||||
// Канал[j] / Канал[0]
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const vReal = vibro.real[i]; // действительная часть спектра вибрации
|
|
||||||
const vImag = vibro.imag[i]; // мнимая часть спектра вибрации
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = force.imag[i]; // мнимая часть спектра силы
|
|
||||||
|
|
||||||
const denominator = fReal * fReal + fImag * fImag;
|
|
||||||
resp_real[i] = (vReal * fReal + vImag * fImag) / denominator;
|
|
||||||
resp_imag[i] = (fReal * vImag - vReal * fImag) / denominator;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// запись массива амплитуды и фазы
|
|
||||||
let resp_ampl = new Float64Array(n); // типизированный массив для амплитуды
|
|
||||||
let resp_phase = new Float64Array(n); // типизированный массив для фазы
|
|
||||||
const RAD_TO_DEG = 180 / Math.PI; //перевод радиан в градусы
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const rReal = resp_real[i]; // действительная часть спектра отклика
|
|
||||||
const rImag = resp_imag[i]; // мнимая часто спектра отклика
|
|
||||||
|
|
||||||
resp_ampl[i] = Math.sqrt(rReal * rReal + rImag * rImag);
|
|
||||||
if (view > 0) { resp_ampl = resp_ampl.map((item) => (item = 20 * Math.log10(item / 1e-6))) }; //переводим в дБ
|
|
||||||
resp_phase[i] = Math.atan2(rImag, rReal) * RAD_TO_DEG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Приводим фазу к диапазону [0°, 360°]
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
resp_phase[i] = resp_phase[i] % 360;
|
|
||||||
if (resp_phase[i] < 0) { resp_phase[i] += 360 }
|
|
||||||
}
|
|
||||||
|
|
||||||
let resp2 = getFrequencyResponse(vibro.real, vibro.imag, force.real, force.imag);
|
|
||||||
let resp_ampl2 = resp2.magnitude;
|
|
||||||
let resp_phase2 = resp2.phase;
|
|
||||||
|
|
||||||
// gtl.log.info('Амплитуда отклика', resp_ampl[0]);
|
|
||||||
// gtl.log.info('Амплитуда отклика 2', resp_ampl2[0]);
|
|
||||||
// gtl.log.info('Фаза отклика', resp_phase[0]);
|
|
||||||
// gtl.log.info('Фаза отклика 2', resp_phase2[0]);
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: resp_ampl2,
|
|
||||||
phase: resp_phase2,
|
|
||||||
resolution: force.resolution
|
|
||||||
}
|
|
||||||
}; //рассчет перекрестного спектра
|
|
||||||
|
|
||||||
export function getAvgArray(arrays) {
|
|
||||||
const length = arrays[0].length; //длина вложенного массива
|
|
||||||
const result = new Array(length); //новый массив фиксированной длины, чтобы не пушить
|
|
||||||
const numArrays = arrays.length; //количество вложенных массивов
|
|
||||||
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
let sum = 0;
|
|
||||||
for (let j = 0; j < numArrays; j++) { sum += arrays[j][i] }
|
|
||||||
result[i] = sum / numArrays;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}; //вычисление среднего массива
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function getCrossSpectrum(reX, imX, reY, imY) {
|
|
||||||
const n = reX.length;
|
|
||||||
const reXY = new Array(n); // действительная часть
|
|
||||||
const imXY = new Array(n); // мнимая часть
|
|
||||||
const power = new Array(n); // мощность кросс-спектра
|
|
||||||
let phase = new Array(n); // фаза (радианы)
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
// Комплексное сопряжение спектра imY* (мнимая часть спектра силы сразу берём с обратным знаком)
|
|
||||||
const a = reX[i], b = imX[i]; // X(f) = a + ib
|
|
||||||
const c = reY[i], d = -imY[i]; // Y(f) = c + id
|
|
||||||
|
|
||||||
// Почастотное умножение
|
|
||||||
reXY[i] = a * c - b * d; // действительная часть
|
|
||||||
imXY[i] = b * c + a * d; // мнимания часть
|
|
||||||
|
|
||||||
// Мощность кросс-спектра
|
|
||||||
power[i] = reXY[i] * reXY[i] + imXY[i] * imXY[i];
|
|
||||||
|
|
||||||
// Фаза = arctan(Im/Re)
|
|
||||||
phase[i] = Math.atan2(imXY[i], reXY[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return { reXY, imXY, power, phase };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function getFrequencyResponse(reX, imX, reY, imY) {
|
|
||||||
const n = reX.length;
|
|
||||||
const magnitude = new Array(n); // амплитуда (линейная)
|
|
||||||
const magnitudeDB = new Array(n); // амплитуда (дБ)
|
|
||||||
let phase = new Array(n); // фаза (радианы)
|
|
||||||
const RAD_TO_DEG = 180 / Math.PI; //перевод радиан в градусы
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const a = reX[i], b = imX[i]; // X(f) = a + ib
|
|
||||||
const c = reY[i], d = imY[i]; // Y(f) = c + id
|
|
||||||
|
|
||||||
// Знаменатель
|
|
||||||
const denominator = c * c + d * d; // знаменатель исходный вариант
|
|
||||||
// const denominator = a * a + b * b; // знаменатель вариант 2
|
|
||||||
|
|
||||||
// Избегаем деления на ноль
|
|
||||||
if (Math.abs(denominator) < 1e-10) {
|
|
||||||
magnitude[i] = 0;
|
|
||||||
magnitudeDB[i] = -Infinity;
|
|
||||||
phase[i] = 0;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Почастотное умножение
|
|
||||||
const reH = (a * c + b * d) / denominator; // действительная часть
|
|
||||||
const imH = (c * b - a * d) / denominator; // мнимая часть исходный вариант
|
|
||||||
// const imH = (a * d - b * c) / denominator; // мнимая часть вариант 2 (поменял местами вычитаемые)
|
|
||||||
|
|
||||||
// Амплитуда
|
|
||||||
magnitude[i] = Math.sqrt(reH * reH + imH * imH);
|
|
||||||
|
|
||||||
// Амплитуда в дБ
|
|
||||||
magnitudeDB[i] = 20 * Math.log10(magnitude[i] / 1e-6);
|
|
||||||
|
|
||||||
// Приводим фазу сразу к диапазону [0°, 360°]
|
|
||||||
phase[i] = Math.atan2(imH, reH) * RAD_TO_DEG % 360;
|
|
||||||
if (phase[i] < 0) { phase[i] += 360 };
|
|
||||||
}
|
|
||||||
|
|
||||||
return { magnitude, magnitudeDB, phase };
|
|
||||||
}
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
||||||
export function getResponse(args) {
|
|
||||||
let force = args.spec_force; //спектр силы
|
|
||||||
let vibro = args.spec_vibro; //спектр вибрации
|
|
||||||
let type = args.type; //способ вычисления отклика
|
|
||||||
let view = args.view; //способ отображения спектра в линейных единицах или дБ
|
|
||||||
|
|
||||||
/* Алгоритм
|
|
||||||
1. Получить спектры ускорения и силы в комплексном виде (вибропреобразователь и молоток).
|
|
||||||
2. Преобразовать спектр силы (молотка) в комплексно-сопряжённый вид.
|
|
||||||
3. Получить кросс-спектр (перекрёстный) между ускорением и силой.
|
|
||||||
4. Вычислить деление кросс-спектра на спектр силы.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Кросс-спектры
|
|
||||||
Сигнал силы в комплексно-сопряжённом виде
|
|
||||||
сигнал вибрации умножается на сигнал силы, а НЕ наоборот
|
|
||||||
умножение комплексных чисел по формуле:
|
|
||||||
(a1+b1i)*(a2+b2i)=(a1*a2-b1*b2)*(a1*b2+b1*a2)i
|
|
||||||
(a1*a2-b1*b2) - действительная часть
|
|
||||||
(a1*b2+b1*a2)i - мнимая часть
|
|
||||||
*/
|
|
||||||
|
|
||||||
let n = force.data.length; // длина массива спектра
|
|
||||||
let cross_real = new Float64Array(n); // типизированный массив для действительной части
|
|
||||||
let cross_imag = new Float64Array(n); // типизированный массив для мнимой части
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const vReal = vibro.real[i]; // действительная часть спектра вибрации
|
|
||||||
const vImag = vibro.imag[i]; // мнимая часть спектра вибрации
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = -force.imag[i]; // мнимая часть спектра силы сразу берём с обратным знаком
|
|
||||||
|
|
||||||
cross_real[i] = vReal * fReal - vImag * fImag;
|
|
||||||
cross_imag[i] = vReal * fImag + vImag * fReal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Вычисление частотного отклика
|
|
||||||
деление комплексных чисел по формуле:
|
|
||||||
(a+bi)/(c+di)=(a*c-b*d)*(a*d+b*c)i
|
|
||||||
(a*c-b*d) - действительная часть
|
|
||||||
(a*d+b*c)i - мнимая часть
|
|
||||||
*/
|
|
||||||
let resp_real = new Float64Array(n); // типизированный массив для действительной части
|
|
||||||
let resp_imag = new Float64Array(n); // типизированный массив для мнимой части
|
|
||||||
|
|
||||||
// ОШИБКА в моей формуле вычисления частотного отклика
|
|
||||||
// ИПРАВИЛ на:
|
|
||||||
// деление комплексных чисел по формуле:
|
|
||||||
// (a+bi)/(c+di)=(a*c + b*d)/(c^2 + d^2) + (c*b - a*d)/(c^2 + d^2)i
|
|
||||||
// (a*c + b*d)/(c^2 + d^2) - действительная часть
|
|
||||||
// (c*b - a*d)/(c^2 + d^2)i - мнимая часть
|
|
||||||
// ПЕРЕВОД формулы в используемые переменные:
|
|
||||||
// const CF = fReal * fReal + fImag * fImag;
|
|
||||||
// resp_real[i] = (cReal * fReal + cImag * fImag) / CF;
|
|
||||||
// resp_imag[i] = (fReal * cImag - cReal * fImag) / CF;
|
|
||||||
|
|
||||||
if (type == 0) {
|
|
||||||
// Вариант 1: Частотный отклик как деление кросс-спектра вибрации и силы на автоспектр силы
|
|
||||||
// (Канал[0] & Канал[j]) / Канал[0]
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const cReal = cross_real[i]; // действительная часть кросс спектра
|
|
||||||
const cImag = cross_imag[i]; // мнимая часть кросс спектра
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = force.imag[i]; // мнимая часть спектра силы
|
|
||||||
|
|
||||||
const CF = fReal * fReal + fImag * fImag;
|
|
||||||
resp_real[i] = (cReal * fReal + cImag * fImag) / CF;
|
|
||||||
resp_imag[i] = (fReal * cImag - cReal * fImag) / CF;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Вариант 2: Частотный отклик как деление автоспектра вибрации на автоспектр силы
|
|
||||||
// Канал[j] / Канал[0]
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const vReal = vibro.real[i]; // действительная часть спектра вибрации
|
|
||||||
const vImag = vibro.imag[i]; // мнимая часть спектра вибрации
|
|
||||||
const fReal = force.real[i]; // действительная часть спектра силы
|
|
||||||
const fImag = force.imag[i]; // мнимая часть спектра силы
|
|
||||||
|
|
||||||
const VF = vReal * vReal + fImag * fImag;
|
|
||||||
resp_real[i] = (vReal * fReal - vImag * fImag) / VF;
|
|
||||||
resp_imag[i] = (fReal * vImag + vReal * fImag) / VF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// запись массива амплитуды и фазы
|
|
||||||
let resp_ampl = new Float64Array(n); // типизированный массив для амплитуды
|
|
||||||
let resp_phase = new Float64Array(n); // типизированный массив для фазы
|
|
||||||
const RAD_TO_DEG = 180 / Math.PI; //перевод радиан в градусы
|
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const rReal = resp_real[i]; // действительная часть спектра отклика
|
|
||||||
const rImag = resp_imag[i]; // мнимая часто спектра отклика
|
|
||||||
|
|
||||||
resp_ampl[i] = Math.sqrt(rReal * rReal + rImag * rImag);
|
|
||||||
if (view > 0) { resp_ampl = resp_ampl.map((item) => (item = 20 * Math.log10(item / 1e-6))) }; //переводим в дБ
|
|
||||||
resp_phase[i] = Math.atan2(rImag, rReal) * RAD_TO_DEG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Приводим фазу к диапазону [0°, 360°]
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
resp_phase[i] = resp_phase[i] % 360;
|
|
||||||
if (resp_phase[i] < 0) { resp_phase[i] += 360 }
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: resp_ampl,
|
|
||||||
phase: resp_phase,
|
|
||||||
resolution: force.resolution
|
|
||||||
}
|
|
||||||
}; //рассчет перекрестного спектра
|
|
||||||
|
|
@ -0,0 +1,188 @@
|
||||||
|
"use strict";
|
||||||
|
let signals = gtl.options.record.signalsModel;
|
||||||
|
let options = gtl.options;
|
||||||
|
let record = gtl.options.record;
|
||||||
|
let point = gtl.options.point;
|
||||||
|
let getResponse = gtl.import("getResponse.js").getResponse;
|
||||||
|
let getAvgArray = gtl.import("getResponse.js").getAvgArray;
|
||||||
|
|
||||||
|
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
||||||
|
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
||||||
|
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
||||||
|
let plot_avg_resp = gtl.plots.add("Средний частотный отклик"); // средний частотный отклик
|
||||||
|
|
||||||
|
// Цвета
|
||||||
|
// #ff0000 - красный
|
||||||
|
// #00ff00 - зелёный
|
||||||
|
// #0000ff - синий
|
||||||
|
// #00ddff - голубой
|
||||||
|
// #ff3dcc - фиолетовый
|
||||||
|
// #ffff00 - жёлтый
|
||||||
|
|
||||||
|
// Настройки для спектров и АФЧХ
|
||||||
|
let frequency = gtl.options.customOptions.frequency; // граничная частота
|
||||||
|
let resolution = gtl.options.customOptions.resolution; // частотное разрешение
|
||||||
|
let lines = 1 / resolution; // количество линий
|
||||||
|
let average = gtl.options.customOptions.average; // количество усреднений
|
||||||
|
let overlap = gtl.options.customOptions.overlap; // наложение
|
||||||
|
let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра unit/dB (0/1)
|
||||||
|
let view = gtl.spec.unit; // значение view по умолчанию
|
||||||
|
let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0)
|
||||||
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
||||||
|
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
||||||
|
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
||||||
|
let remove_resp_arr = gtl.options.customOptions.remove_resp_arr;
|
||||||
|
gtl.log.info("remove_resp_arr", remove_resp_arr);
|
||||||
|
|
||||||
|
// Задание диапазона сигнала для анализа
|
||||||
|
// let ranges = gtl.player.stored_ranges;
|
||||||
|
let ranges = gtl.options.customOptions.ranges;
|
||||||
|
gtl.player.custom_ranges = ranges; // задание диапазонов плеера
|
||||||
|
|
||||||
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
||||||
|
gtl.log.info("Количество сигналов", signals.length);
|
||||||
|
gtl.log.info("Граничная частота спектров", frequency);
|
||||||
|
gtl.log.info("Частотное разрешение спектров", resolution);
|
||||||
|
|
||||||
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
|
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
||||||
|
let channel = 1; //номер первого канала вибрации
|
||||||
|
let window_spec_force = gtl.options.customOptions.window_spec_force; // окно спектра силы
|
||||||
|
let window_spec_vibr = gtl.options.customOptions.window_spec_vibr; // окно спектра вибрации
|
||||||
|
|
||||||
|
|
||||||
|
let force = gtl.create_ausp({
|
||||||
|
src: src_force, // сигнал силы
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_force,
|
||||||
|
view: view
|
||||||
|
});
|
||||||
|
|
||||||
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
||||||
|
let ausps = []; //массив объектов спектров вибрации по каналам
|
||||||
|
let phases = []; //массив объектов ФЧХ по каналам
|
||||||
|
let ausps_data = []; //массив данных спектров после каздого удара
|
||||||
|
let resps_data = []; //массив данных откликов после каждого удара
|
||||||
|
|
||||||
|
for (let i = channel; i < signals.length; i++) { }; //цикл по каналам
|
||||||
|
|
||||||
|
let ausp = gtl.create_ausp({
|
||||||
|
src: gtl.analog_inputs[signals[channel].portNumber], // сырой сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_vibr,
|
||||||
|
view: spec_view
|
||||||
|
});
|
||||||
|
|
||||||
|
let phase_delta = gtl.create_pfc({
|
||||||
|
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
||||||
|
src1: gtl.analog_inputs[signals[channel].portNumber], // сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: gtl.phase.deg,
|
||||||
|
range: gtl.phase.positive,
|
||||||
|
is_single: false
|
||||||
|
});
|
||||||
|
|
||||||
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_impulse = time_impulse_ == 0 ? 1/resolution : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
|
let tries = 0; // циклы диагностки
|
||||||
|
let is_ranges = false; // состояние готовности диапазонов
|
||||||
|
|
||||||
|
/* Функция диагностики.
|
||||||
|
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
||||||
|
После этого происходит добавление массива пользовательских диапазонов в плеер, отрисовка (при необходимости) сигнала триггера
|
||||||
|
Затем устанавливается интервал запуска функции диагностики, равный временному окну диапазона и запускается отсчет циклов (попыток) диагностики
|
||||||
|
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
||||||
|
*/
|
||||||
|
|
||||||
|
gtl.diagnostic.interval = time_impulse; // первичный интервал запуска функции диагностики
|
||||||
|
gtl.log.info('Время импульса', time_impulse);
|
||||||
|
|
||||||
|
function diagnose() {
|
||||||
|
|
||||||
|
if (!is_ranges) {
|
||||||
|
is_ranges = true; // пользовательские диапазоны готовы
|
||||||
|
gtl.log.info('creating ranges', true);
|
||||||
|
gtl.log.info('ranges', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
gtl.log.info("Количество диапазонов в плеере", ranges.length);
|
||||||
|
gtl.log.info("Установленный интервал запуска диагностики", time_impulse);
|
||||||
|
gtl.log.info("acq_time", gtl.acq_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tries > 0) {
|
||||||
|
gtl.log.info("Количество элементов массива force", force.data.length);
|
||||||
|
gtl.log.info("Количество элементов массива ausp", ausp.data.length);
|
||||||
|
gtl.log.info('diagnostic', `Цикл диагностики ${tries} - ${true}`);
|
||||||
|
gtl.log.info('Диапазон плеера', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
|
||||||
|
// Отображаем спектр силы
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0xff00f7,
|
||||||
|
name: `Спектр силы - удар №${tries}, N`,
|
||||||
|
x: force.resolution,
|
||||||
|
y: force.data,
|
||||||
|
tags: [`Спектр силы, N`]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем автоспектр вибрации
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0x34C924,
|
||||||
|
name: `Спектр канала 1 - удар №${tries}, g`,
|
||||||
|
x: ausp.resolution,
|
||||||
|
y: ausp.data,
|
||||||
|
tags: ["Cпектр вибрации, g"]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Вычисляем спектр отклика
|
||||||
|
let rsp = getResponse({
|
||||||
|
spec_force: force, //спектр силы
|
||||||
|
spec_vibro: ausp, //спектр вибрации
|
||||||
|
type: variant_freq_resp, //способ вычисления отклика
|
||||||
|
view: 0 //способ отображения спектра в линейных единицах или дБ
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем спектр отклика
|
||||||
|
plot_resp_ampl.add({
|
||||||
|
color: 0x3b30b6,
|
||||||
|
name: `Амплитуда частотного отклика канала 1 - удар №${tries}, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: rsp.data,
|
||||||
|
tags: ["Амплитуда частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
ausps_data.push(ausp.data);
|
||||||
|
resps_data.push(rsp.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
tries++;
|
||||||
|
if (tries > ranges.length) {
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `processing...`);
|
||||||
|
|
||||||
|
const avgResponse = getAvgArray(resps_data, remove_resp_arr); //вычисляем средний отклик
|
||||||
|
|
||||||
|
// Отображаем средний спектр отклика
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0xff3dcc,
|
||||||
|
name: `Амплитуда среднего частотного отклика, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse,
|
||||||
|
tags: ["Амплитуда среднего частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `done!`);
|
||||||
|
gtl.diagnostic.stop();
|
||||||
|
|
||||||
|
}; // останавливаем диагностику после окончания диапазонов
|
||||||
|
}
|
||||||
|
|
@ -47,6 +47,9 @@ gtl.log.info("Частотное разрешение спектров", resolut
|
||||||
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
||||||
let channel = 1; //номер первого канала вибрации
|
let channel = 1; //номер первого канала вибрации
|
||||||
|
let window_spec_force = gtl.options.customOptions.window_spec_force; // окно спектра силы
|
||||||
|
let window_spec_vibr = gtl.options.customOptions.window_spec_vibr; // окно спектра вибрации
|
||||||
|
|
||||||
|
|
||||||
let force = gtl.create_ausp({
|
let force = gtl.create_ausp({
|
||||||
src: src_force, // сигнал силы
|
src: src_force, // сигнал силы
|
||||||
|
|
@ -54,7 +57,7 @@ let force = gtl.create_ausp({
|
||||||
resolution: resolution,
|
resolution: resolution,
|
||||||
average: average,
|
average: average,
|
||||||
overlap: overlap,
|
overlap: overlap,
|
||||||
window: gtl.spec.rectangular,
|
window: window_spec_force,
|
||||||
view: view
|
view: view
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -72,7 +75,7 @@ let ausp = gtl.create_ausp({
|
||||||
resolution: resolution,
|
resolution: resolution,
|
||||||
average: average,
|
average: average,
|
||||||
overlap: overlap,
|
overlap: overlap,
|
||||||
window: gtl.spec.rectangular,
|
window: window_spec_vibr,
|
||||||
view: spec_view
|
view: spec_view
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -91,6 +94,7 @@ let phase_delta = gtl.create_pfc({
|
||||||
|
|
||||||
let time_window = 0.0001 // временное окно наблюдения
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_impulse = time_impulse_ == 0 ? 1/resolution : time_impulse_; // условие выбора длительности импульса
|
||||||
// let time_pre = time_window / 2; // время предыстории
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
// let ranges = []; // массив диапазонов для импульсов
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
let tries = 0; // циклы диагностки
|
let tries = 0; // циклы диагностки
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,191 @@
|
||||||
|
"use strict";
|
||||||
|
let signals = gtl.options.record.signalsModel;
|
||||||
|
let options = gtl.options;
|
||||||
|
let record = gtl.options.record;
|
||||||
|
let point = gtl.options.point;
|
||||||
|
let getResponse = gtl.import("getResponse.js").getResponse;
|
||||||
|
let getAvgArray = gtl.import("getResponse.js").getAvgArray;
|
||||||
|
|
||||||
|
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
||||||
|
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
||||||
|
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
||||||
|
let plot_avg_resp = gtl.plots.add("Средний частотный отклик"); // средний частотный отклик
|
||||||
|
|
||||||
|
// Цвета
|
||||||
|
// #ff0000 - красный
|
||||||
|
// #00ff00 - зелёный
|
||||||
|
// #0000ff - синий
|
||||||
|
// #00ddff - голубой
|
||||||
|
// #ff3dcc - фиолетовый
|
||||||
|
// #ffff00 - жёлтый
|
||||||
|
|
||||||
|
// Настройки для спектров и АФЧХ
|
||||||
|
let frequency = gtl.options.customOptions.frequency; // граничная частота
|
||||||
|
let resolution = gtl.options.customOptions.resolution; // частотное разрешение
|
||||||
|
let lines = 1 / resolution; // количество линий
|
||||||
|
let average = gtl.options.customOptions.average; // количество усреднений
|
||||||
|
let overlap = gtl.options.customOptions.overlap; // наложение
|
||||||
|
let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра unit/dB (0/1)
|
||||||
|
let view = gtl.spec.unit; // значение view по умолчанию
|
||||||
|
let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0)
|
||||||
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
||||||
|
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
||||||
|
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
||||||
|
|
||||||
|
// Задание диапазона сигнала для анализа
|
||||||
|
// let ranges = gtl.player.stored_ranges;
|
||||||
|
let ranges = gtl.options.customOptions.ranges;
|
||||||
|
gtl.player.custom_ranges = ranges; // задание диапазонов плеера
|
||||||
|
|
||||||
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
||||||
|
gtl.log.info("Количество сигналов", signals.length);
|
||||||
|
gtl.log.info("Граничная частота спектров", frequency);
|
||||||
|
gtl.log.info("Частотное разрешение спектров", resolution);
|
||||||
|
|
||||||
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
|
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
||||||
|
let channel = 1; //номер первого канала вибрации
|
||||||
|
|
||||||
|
let force = gtl.create_ausp({
|
||||||
|
src: src_force, // сигнал силы
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: view
|
||||||
|
});
|
||||||
|
|
||||||
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
||||||
|
let ausps = []; //массив объектов спектров вибрации по каналам
|
||||||
|
let phases = []; //массив объектов ФЧХ по каналам
|
||||||
|
let ausps_data = []; //массив данных спектров после каздого удара
|
||||||
|
let resps_data = []; //массив данных откликов после каждого удара
|
||||||
|
|
||||||
|
for (let i = channel; i < signals.length; i++) { }; //цикл по каналам
|
||||||
|
|
||||||
|
let ausp = gtl.create_ausp({
|
||||||
|
src: gtl.analog_inputs[signals[channel].portNumber], // сырой сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: spec_view
|
||||||
|
});
|
||||||
|
|
||||||
|
let phase_delta = gtl.create_pfc({
|
||||||
|
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
||||||
|
src1: gtl.analog_inputs[signals[channel].portNumber], // сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: gtl.phase.deg,
|
||||||
|
range: gtl.phase.positive,
|
||||||
|
is_single: false
|
||||||
|
});
|
||||||
|
|
||||||
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
|
let tries = 0; // циклы диагностки
|
||||||
|
let is_ranges = false; // состояние готовности диапазонов
|
||||||
|
|
||||||
|
/* Функция диагностики.
|
||||||
|
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
||||||
|
После этого происходит добавление массива пользовательских диапазонов в плеер, отрисовка (при необходимости) сигнала триггера
|
||||||
|
Затем устанавливается интервал запуска функции диагностики, равный временному окну диапазона и запускается отсчет циклов (попыток) диагностики
|
||||||
|
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
||||||
|
*/
|
||||||
|
|
||||||
|
gtl.diagnostic.interval = time_impulse; // первичный интервал запуска функции диагностики
|
||||||
|
gtl.log.info('Время импульса', time_impulse);
|
||||||
|
|
||||||
|
function diagnose() {
|
||||||
|
|
||||||
|
if (!is_ranges) {
|
||||||
|
is_ranges = true; // пользовательские диапазоны готовы
|
||||||
|
gtl.log.info('creating ranges', true);
|
||||||
|
gtl.log.info('ranges', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
gtl.log.info("Количество диапазонов в плеере", ranges.length);
|
||||||
|
gtl.log.info("Установленный интервал запуска диагностики", time_impulse);
|
||||||
|
gtl.log.info("acq_time", gtl.acq_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tries > 0) {
|
||||||
|
gtl.log.info("Количество элементов массива force", force.data.length);
|
||||||
|
gtl.log.info("Количество элементов массива ausp", ausp.data.length);
|
||||||
|
gtl.log.info('diagnostic', `Цикл диагностики ${tries} - ${true}`);
|
||||||
|
gtl.log.info('Диапазон плеера', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
|
||||||
|
// Отображаем спектр силы
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0xff00f7,
|
||||||
|
name: `Спектр силы - удар №${tries}, N`,
|
||||||
|
x: force.resolution,
|
||||||
|
y: force.data,
|
||||||
|
tags: [`Спектр силы, N`]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем автоспектр вибрации
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0x34C924,
|
||||||
|
name: `Спектр канала 1 - удар №${tries}, g`,
|
||||||
|
x: ausp.resolution,
|
||||||
|
y: ausp.data,
|
||||||
|
tags: ["Cпектр вибрации, g"]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Вычисляем спектр отклика
|
||||||
|
let rsp = getResponse({
|
||||||
|
spec_force: force, //спектр силы
|
||||||
|
spec_vibro: ausp, //спектр вибрации
|
||||||
|
type: variant_freq_resp, //способ вычисления отклика
|
||||||
|
view: 0 //способ отображения спектра в линейных единицах или дБ
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем спектр отклика
|
||||||
|
plot_resp_ampl.add({
|
||||||
|
color: 0x3b30b6,
|
||||||
|
name: `Амплитуда частотного отклика канала 1 - удар №${tries}, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: rsp.data,
|
||||||
|
tags: ["Амплитуда частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
ausps_data.push(ausp.data);
|
||||||
|
resps_data.push(rsp.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
tries++;
|
||||||
|
if (tries > ranges.length) {
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `processing...`);
|
||||||
|
|
||||||
|
const avgResponse = getAvgArray(resps_data,[4,7,8]); //вычисляем средний отклик
|
||||||
|
const avgResponse_2 = getAvgArray(resps_data,[]); //вычисляем средний отклик
|
||||||
|
|
||||||
|
// Отображаем средний спектр отклика
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0xff3dcc,
|
||||||
|
name: `Амплитуда среднего частотного отклика, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse,
|
||||||
|
tags: ["Амплитуда среднего частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0x0000ff,
|
||||||
|
name: `Амплитуда среднего частотного отклика, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse_2,
|
||||||
|
tags: ["Амплитуда среднего частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `done!`);
|
||||||
|
gtl.diagnostic.stop();
|
||||||
|
|
||||||
|
}; // останавливаем диагностику после окончания диапазонов
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,251 @@
|
||||||
|
"use strict";
|
||||||
|
let signals = gtl.options.record.signalsModel;
|
||||||
|
let options = gtl.options;
|
||||||
|
let record = gtl.options.record;
|
||||||
|
let point = gtl.options.point;
|
||||||
|
let getResponse = gtl.import("getResponse.js").getResponse;
|
||||||
|
let getAvgArray = gtl.import("getResponse.js").getAvgArray;
|
||||||
|
|
||||||
|
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
||||||
|
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
||||||
|
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
||||||
|
let plot_avg_resp = gtl.plots.add("Средний частотный отклик"); // средний частотный отклик
|
||||||
|
|
||||||
|
// Цвета
|
||||||
|
// #ff0000 - красный
|
||||||
|
// #00ff00 - зелёный
|
||||||
|
// #0000ff - синий
|
||||||
|
// #00ddff - голубой
|
||||||
|
// #ff3dcc - фиолетовый
|
||||||
|
// #ffff00 - жёлтый
|
||||||
|
|
||||||
|
// Настройки для спектров и АФЧХ
|
||||||
|
let frequency = gtl.options.customOptions.frequency; // граничная частота
|
||||||
|
let resolution = gtl.options.customOptions.resolution; // частотное разрешение
|
||||||
|
let lines = 1 / resolution; // количество линий
|
||||||
|
let average = gtl.options.customOptions.average; // количество усреднений
|
||||||
|
let overlap = gtl.options.customOptions.overlap; // наложение
|
||||||
|
let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра unit/dB (0/1)
|
||||||
|
let view = gtl.spec.unit; // значение view по умолчанию
|
||||||
|
let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0)
|
||||||
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
||||||
|
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
||||||
|
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
||||||
|
let remove_resp_arr = gtl.options.customOptions.remove_resp_arr;
|
||||||
|
gtl.log.info("remove_resp_arr", remove_resp_arr);
|
||||||
|
|
||||||
|
// Задание диапазона сигнала для анализа
|
||||||
|
// let ranges = gtl.player.stored_ranges;
|
||||||
|
let ranges = gtl.options.customOptions.ranges;
|
||||||
|
gtl.player.custom_ranges = ranges; // задание диапазонов плеера
|
||||||
|
|
||||||
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
||||||
|
gtl.log.info("Количество сигналов", signals.length);
|
||||||
|
gtl.log.info("Граничная частота спектров", frequency);
|
||||||
|
gtl.log.info("Частотное разрешение спектров", resolution);
|
||||||
|
|
||||||
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
|
let src_force; // источник сигнала силы
|
||||||
|
let channel = 1; // номер первого канала вибрации
|
||||||
|
let window_spec_force = gtl.options.customOptions.window_spec_force; // окно спектра силы
|
||||||
|
let window_spec_vibr = gtl.options.customOptions.window_spec_vibr; // окно спектра вибрации
|
||||||
|
|
||||||
|
let signal_source = gtl.options.customOptions.signal_source; // выбор источника сигнала: 0 - сырой / 1 - фильтр
|
||||||
|
let left_bord_filt = gtl.options.customOptions.left_bord_filt; // левая граница фильтра
|
||||||
|
let right_bord_filt = gtl.options.customOptions.right_bord_filt; // правая граница фильтра
|
||||||
|
let order_filt = gtl.options.customOptions.order_filt; // порядок фильтра
|
||||||
|
let kind_filt = gtl.options.customOptions.kind_filt; // тип окна фильтра gtl.filter_iir.butterworth
|
||||||
|
let width_filt; // полоса пропускания фильтра
|
||||||
|
width_filt = right_bord_filt - left_bord_filt;
|
||||||
|
let freq_filt; // центральная частота фильтра
|
||||||
|
freq_filt = right_bord_filt - width_filt/2;
|
||||||
|
|
||||||
|
// СИГНАЛ СИЛЫ (молоток)
|
||||||
|
|
||||||
|
// Фильтрация
|
||||||
|
let filter_force = gtl.add_filter_iir(gtl.analog_inputs[signals[0].portNumber]);
|
||||||
|
filter_force.kind = kind_filt;
|
||||||
|
filter_force.type = gtl.filter_iir.bandpass;
|
||||||
|
filter_force.order = order_filt;
|
||||||
|
filter_force.frequency = freq_filt; // центральная частота полосового фильтра
|
||||||
|
filter_force.width = width_filt; // ширина полосы фильтра
|
||||||
|
|
||||||
|
// Выбор источника сигнала силы: фильтр / сырой сигнал
|
||||||
|
if (signal_source == 1)
|
||||||
|
{
|
||||||
|
src_force = filter_force; // источник фильтр
|
||||||
|
}
|
||||||
|
else if (signal_source == 0)
|
||||||
|
{
|
||||||
|
src_force = gtl.analog_inputs[signals[0].portNumber]; // источник cырой сигнал
|
||||||
|
}
|
||||||
|
|
||||||
|
let force = gtl.create_ausp({
|
||||||
|
src: src_force,
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_force,
|
||||||
|
view: view
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// СИГНАЛЫ ВИБРАЦИИ (отклик)
|
||||||
|
|
||||||
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
||||||
|
let srs_vibr; // источник сигнала вибрации
|
||||||
|
let ausps = []; //массив объектов спектров вибрации по каналам
|
||||||
|
let ausp_arr = [];
|
||||||
|
let phases = []; //массив объектов ФЧХ по каналам
|
||||||
|
let phase_arr
|
||||||
|
let ausps_data = []; //массив данных спектров после каждого удара
|
||||||
|
let resps_data = []; //массив данных откликов после каждого удара
|
||||||
|
|
||||||
|
// Цикл по каналам
|
||||||
|
for (let j = channel; j < signals.length; j++) {
|
||||||
|
|
||||||
|
// Фильтрация
|
||||||
|
let filter_vibr = gtl.add_filter_iir(gtl.analog_inputs[signals[j].portNumber]);
|
||||||
|
filter_vibr.kind = kind_filt;
|
||||||
|
filter_vibr.type = gtl.filter_iir.bandpass;
|
||||||
|
filter_vibr.order = order_filt;
|
||||||
|
filter_vibr.frequency = freq_filt; // центральная частота полосового фильтра
|
||||||
|
filter_vibr.width = width_filt; // ширина полосы фильтра
|
||||||
|
|
||||||
|
// Выбор источника сигнала вибрации: фильтр / сырой сигнал
|
||||||
|
if (signal_source == 1)
|
||||||
|
{
|
||||||
|
src_vibr = filter_vibr; // источник фильтр
|
||||||
|
}
|
||||||
|
else if (signal_source == 0)
|
||||||
|
{
|
||||||
|
src_vibr = gtl.analog_inputs[signals[j].portNumber]; // источник cырой сигнал
|
||||||
|
}
|
||||||
|
|
||||||
|
let ausp = gtl.create_ausp({
|
||||||
|
src: src_vibr, // сырой сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_vibr,
|
||||||
|
view: spec_view
|
||||||
|
});
|
||||||
|
|
||||||
|
let phase_delta = gtl.create_pfc({
|
||||||
|
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
||||||
|
src1: src_vibr, // сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: gtl.phase.deg,
|
||||||
|
range: gtl.phase.positive,
|
||||||
|
is_single: false
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
// Запись массивовм спектров вибрации
|
||||||
|
ausp_arr.push(ausp);
|
||||||
|
phase_arr.push(phase_delta);
|
||||||
|
|
||||||
|
|
||||||
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
|
let tries = 0; // циклы диагностки
|
||||||
|
let is_ranges = false; // состояние готовности диапазонов
|
||||||
|
|
||||||
|
/* Функция диагностики.
|
||||||
|
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
||||||
|
После этого происходит добавление массива пользовательских диапазонов в плеер, отрисовка (при необходимости) сигнала триггера
|
||||||
|
Затем устанавливается интервал запуска функции диагностики, равный временному окну диапазона и запускается отсчет циклов (попыток) диагностики
|
||||||
|
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
||||||
|
*/
|
||||||
|
|
||||||
|
gtl.diagnostic.interval = time_impulse; // первичный интервал запуска функции диагностики
|
||||||
|
gtl.log.info('Время импульса', time_impulse);
|
||||||
|
|
||||||
|
function diagnose() {
|
||||||
|
|
||||||
|
if (!is_ranges) {
|
||||||
|
is_ranges = true; // пользовательские диапазоны готовы
|
||||||
|
gtl.log.info('creating ranges', true);
|
||||||
|
gtl.log.info('ranges', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
gtl.log.info("Количество диапазонов в плеере", ranges.length);
|
||||||
|
gtl.log.info("Установленный интервал запуска диагностики", time_impulse);
|
||||||
|
gtl.log.info("acq_time", gtl.acq_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tries > 0) {
|
||||||
|
gtl.log.info("Количество элементов массива force", force.data.length);
|
||||||
|
gtl.log.info("Количество спектров вибрации ausp_arr", ausp_arr.data.length);
|
||||||
|
gtl.log.info('diagnostic', `Цикл диагностики ${tries} - ${true}`);
|
||||||
|
gtl.log.info('Диапазон плеера', JSON.stringify(gtl.player.custom_ranges));
|
||||||
|
|
||||||
|
// Отображаем спектр силы
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0xff00f7,
|
||||||
|
name: `Спектр силы - удар №${tries}, N`,
|
||||||
|
x: force.resolution,
|
||||||
|
y: force.data,
|
||||||
|
tags: [`Спектр силы, N`]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем автоспектр вибрации
|
||||||
|
// по всем каналам
|
||||||
|
for (let j = 0; j < ausp_arr.length; j++) {
|
||||||
|
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0x34C924,
|
||||||
|
name: `Спектр канала ${j+1} - удар №${tries}, g`,
|
||||||
|
x: ausp_arr[j].resolution,
|
||||||
|
y: ausp_arr[j].data,
|
||||||
|
tags: ["Cпектр вибрации, g"]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Вычисляем спектр отклика
|
||||||
|
let rsp = getResponse({
|
||||||
|
spec_force: force, //спектр силы
|
||||||
|
spec_vibro: ausp_arr[j], //спектр вибрации
|
||||||
|
type: variant_freq_resp, //способ вычисления отклика
|
||||||
|
view: 0 //способ отображения спектра в линейных единицах или дБ
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем спектр отклика
|
||||||
|
plot_resp_ampl.add({
|
||||||
|
color: 0x3b30b6,
|
||||||
|
name: `Амплитуда частотного отклика канала ${j+1} - удар №${tries}, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: rsp.data,
|
||||||
|
tags: ["Амплитуда частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
ausps_data.push(ausp.data);
|
||||||
|
resps_data.push(rsp.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
tries++;
|
||||||
|
if (tries > ranges.length) {
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `processing...`);
|
||||||
|
|
||||||
|
const avgResponse = getAvgArray(resps_data, remove_resp_arr); //вычисляем средний отклик
|
||||||
|
|
||||||
|
// Отображаем средний спектр отклика
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0xff3dcc,
|
||||||
|
name: `Амплитуда среднего частотного отклика, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse,
|
||||||
|
tags: ["Амплитуда среднего частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `done!`);
|
||||||
|
gtl.diagnostic.stop();
|
||||||
|
|
||||||
|
}; // останавливаем диагностику после окончания диапазонов
|
||||||
|
}
|
||||||
|
|
@ -4,10 +4,12 @@ let options = gtl.options;
|
||||||
let record = gtl.options.record;
|
let record = gtl.options.record;
|
||||||
let point = gtl.options.point;
|
let point = gtl.options.point;
|
||||||
let getResponse = gtl.import("getResponse.js").getResponse;
|
let getResponse = gtl.import("getResponse.js").getResponse;
|
||||||
|
let getAvgArray = gtl.import("getResponse.js").getAvgArray;
|
||||||
|
|
||||||
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
||||||
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
||||||
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
||||||
|
let plot_avg_resp = gtl.plots.add("Средний частотный отклик"); // средний частотный отклик
|
||||||
|
|
||||||
// Цвета
|
// Цвета
|
||||||
// #ff0000 - красный
|
// #ff0000 - красный
|
||||||
|
|
@ -29,9 +31,13 @@ let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображ
|
||||||
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
||||||
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
||||||
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
||||||
|
let remove_resp_arr = gtl.options.customOptions.remove_resp_arr;
|
||||||
|
gtl.log.info("remove_resp_arr", remove_resp_arr);
|
||||||
|
|
||||||
// Задание диапазона сигнала для анализа
|
// Задание диапазона сигнала для анализа
|
||||||
// let ranges = gtl.player.stored_ranges;
|
// let ranges = gtl.player.stored_ranges;
|
||||||
|
let ranges = gtl.options.customOptions.ranges;
|
||||||
|
gtl.player.custom_ranges = ranges; // задание диапазонов плеера
|
||||||
|
|
||||||
// Спектры каналов ускорения (каналы датчиков вибрации)
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
||||||
gtl.log.info("Количество сигналов", signals.length);
|
gtl.log.info("Количество сигналов", signals.length);
|
||||||
|
|
@ -41,36 +47,45 @@ gtl.log.info("Частотное разрешение спектров", resolut
|
||||||
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
||||||
let channel = 1; //номер первого канала вибрации
|
let channel = 1; //номер первого канала вибрации
|
||||||
|
let window_spec_force = gtl.options.customOptions.window_spec_force; // окно спектра силы
|
||||||
|
let window_spec_vibr = gtl.options.customOptions.window_spec_vibr; // окно спектра вибрации
|
||||||
|
|
||||||
|
//формируем спектр силы
|
||||||
let force = gtl.create_ausp({
|
let force = gtl.create_ausp({
|
||||||
src: src_force, // сигнал силы
|
src: src_force, // сигнал силы
|
||||||
frequency: frequency,
|
frequency: frequency,
|
||||||
resolution: resolution,
|
resolution: resolution,
|
||||||
average: average,
|
average: average,
|
||||||
overlap: overlap,
|
overlap: overlap,
|
||||||
window: gtl.spec.rectangular,
|
window: window_spec_force,
|
||||||
view: view
|
view: view
|
||||||
});
|
});
|
||||||
|
|
||||||
// Спектр амплитудный для цикла по всем каналам вибрации
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
||||||
let ausps = []; //массив объектов спектров вибрации по каналам
|
let ausps = []; //массив объектов спектров вибрации по каналам
|
||||||
let phases = []; //массив объектов ФЧХ по каналам
|
let phases = []; //массив объектов ФЧХ по каналам
|
||||||
for (let i = 1; i <= signals.length -1; i++) {
|
let hits_data = {}; //объект результатов по каждому удару
|
||||||
|
|
||||||
|
// let ausps_data = []; //массив данных спектров после каждого удара
|
||||||
|
// let resps_data = []; //массив данных амплитуды откликов после каждого удара
|
||||||
|
// let resps_phase = []; //массив данных фазы откликов после каждого удара
|
||||||
|
|
||||||
|
|
||||||
|
for (let i = 1; i <= signals.length - 1; i++) {
|
||||||
let ausp = gtl.create_ausp({
|
let ausp = gtl.create_ausp({
|
||||||
src: gtl.analog_inputs[signals[i].portNumber], // сырой сигнал вибрации
|
src: gtl.analog_inputs[signals[i].portNumber], // сырой сигнал вибрации
|
||||||
frequency: frequency,
|
frequency: frequency,
|
||||||
resolution: resolution,
|
resolution: resolution,
|
||||||
average: average,
|
average: average,
|
||||||
overlap: overlap,
|
overlap: overlap,
|
||||||
window: gtl.spec.rectangular,
|
window: window_spec_vibr,
|
||||||
view: spec_view
|
view: spec_view
|
||||||
});
|
});
|
||||||
ausps.push(ausp);
|
ausps.push(ausp);
|
||||||
}; //цикл по каналам
|
|
||||||
|
|
||||||
let phase_delta = gtl.create_pfc({
|
let phase_delta = gtl.create_pfc({
|
||||||
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
||||||
src1: gtl.analog_inputs[signals[channel].portNumber], // сигнал вибрации
|
src1: gtl.analog_inputs[signals[i].portNumber], // сигнал вибрации
|
||||||
frequency: frequency,
|
frequency: frequency,
|
||||||
resolution: resolution,
|
resolution: resolution,
|
||||||
average: average,
|
average: average,
|
||||||
|
|
@ -79,38 +94,19 @@ let phase_delta = gtl.create_pfc({
|
||||||
view: gtl.phase.deg,
|
view: gtl.phase.deg,
|
||||||
range: gtl.phase.positive,
|
range: gtl.phase.positive,
|
||||||
is_single: false
|
is_single: false
|
||||||
});
|
});
|
||||||
|
phases.push(phase_delta);
|
||||||
|
|
||||||
|
}; //цикл по каналам
|
||||||
|
|
||||||
let time_window = 0.0001 // временное окно наблюдения
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
let time_pre = time_window / 2; // время предыстории
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
let ranges = []; // массив диапазонов для импульсов
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
let tries = 0; // циклы диагностки
|
let tries = 0; // циклы диагностики
|
||||||
let is_ranges = false; // состояние готовности диапазонов
|
let is_ranges = false; // состояние готовности диапазонов
|
||||||
|
|
||||||
// Порог для отслеживание импульсов
|
|
||||||
let __thresh = gtl.create_moving_thresh({
|
|
||||||
src: src_force,
|
|
||||||
name: "thresh",
|
|
||||||
time: time_window,
|
|
||||||
level: thresh_level
|
|
||||||
});
|
|
||||||
|
|
||||||
__thresh.triggered.connect(thresh_triggered_event); //подключаем функцию
|
|
||||||
// Функция получения диапазонов импульсов
|
|
||||||
function thresh_triggered_event(flag, sample) {
|
|
||||||
if (is_ranges) return;
|
|
||||||
if (flag) {
|
|
||||||
let start = (sample / __thresh.rate) - time_pre; //время срабатывания триггера
|
|
||||||
gtl.log.info("trigger on time", start);
|
|
||||||
|
|
||||||
let range = {
|
|
||||||
min: start,
|
|
||||||
max: start + time_impulse
|
|
||||||
};
|
|
||||||
ranges.push(range); //добавляем диапазон в массив
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Функция диагностики.
|
/* Функция диагностики.
|
||||||
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
||||||
|
|
@ -119,25 +115,24 @@ function thresh_triggered_event(flag, sample) {
|
||||||
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
gtl.diagnostic.interval = gtl.options.record.playerTime; // первичный интервал запуска функции диагностики
|
gtl.diagnostic.interval = gtl.options.record.playerTime; // первичный интервал запуска функции диагностики
|
||||||
gtl.log.info('Время импульса', time_impulse);
|
gtl.log.info('Время импульса', time_impulse);
|
||||||
|
|
||||||
function diagnose() {
|
function diagnose() {
|
||||||
if (!is_ranges) {
|
|
||||||
gtl.player.custom_ranges = ranges; // добавляем пользовательские диапазоны в плеер
|
|
||||||
gtl.results = { ranges: ranges }; // добавляем диапазоны в результат
|
|
||||||
gtl.log.info('creating ranges', true);
|
|
||||||
gtl.log.info('ranges', JSON.stringify(ranges));
|
|
||||||
is_ranges = true; // пользовательские диапазоны готовы
|
|
||||||
gtl.diagnostic.interval = time_impulse; // задаем время запуска функции диагностики, равное длине импульса
|
|
||||||
|
|
||||||
gtl.log.info("Количество диапазонов в плеере", ranges.length);
|
let resps_data = []; //массив данных амплитуды откликов после каждого удара
|
||||||
gtl.log.info("Установленный интервал запуска диагностики", time_impulse);
|
let resps_phase = []; //массив данных фазы откликов после каждого удара
|
||||||
gtl.log.info("acq_time", gtl.acq_time);
|
|
||||||
}
|
if (tries > 0) {
|
||||||
|
|
||||||
|
for (let i = 0; i < ausps.length; i++) {
|
||||||
|
|
||||||
|
|
||||||
if (tries > 0) {
|
|
||||||
gtl.log.info('diagnostic', `Цикл диагностики ${tries} - ${true}`)
|
gtl.log.info('diagnostic', `Цикл диагностики ${tries} - ${true}`)
|
||||||
|
|
||||||
|
|
||||||
// Отображаем спектр силы
|
// Отображаем спектр силы
|
||||||
plot_ausp.add({
|
plot_ausp.add({
|
||||||
color: 0xff00f7,
|
color: 0xff00f7,
|
||||||
|
|
@ -147,12 +142,10 @@ function diagnose() {
|
||||||
tags: [`Спектр силы, N`]
|
tags: [`Спектр силы, N`]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
for (let i = 0; i < ausps.length; i++) {
|
|
||||||
// Отображаем автоспектр вибрации
|
// Отображаем автоспектр вибрации
|
||||||
plot_ausp.add({
|
plot_ausp.add({
|
||||||
color: 0x34C924,
|
color: 0x34C924,
|
||||||
name: `Спектр канала ${i+1} - удар №${tries}, g`,
|
name: `Спектр канала ${i + 1} - удар №${tries}, g`,
|
||||||
x: ausps[i].resolution,
|
x: ausps[i].resolution,
|
||||||
y: ausps[i].data,
|
y: ausps[i].data,
|
||||||
tags: ["Cпектр вибрации, g"]
|
tags: ["Cпектр вибрации, g"]
|
||||||
|
|
@ -169,7 +162,7 @@ function diagnose() {
|
||||||
// Отображаем спектр отклика
|
// Отображаем спектр отклика
|
||||||
plot_resp_ampl.add({
|
plot_resp_ampl.add({
|
||||||
color: 0x3b30b6,
|
color: 0x3b30b6,
|
||||||
name: `Амплитуда частотного отклика канала ${i+1} - удар №${tries}, g/N`,
|
name: `Амплитуда частотного отклика канала ${i + 1} - удар №${tries}, g/N`,
|
||||||
x: resolution,
|
x: resolution,
|
||||||
y: rsp.data,
|
y: rsp.data,
|
||||||
tags: ["Амплитуда частотного отклика, g/N"]
|
tags: ["Амплитуда частотного отклика, g/N"]
|
||||||
|
|
@ -178,15 +171,47 @@ function diagnose() {
|
||||||
// Отображаем фазовый спектр отклика
|
// Отображаем фазовый спектр отклика
|
||||||
plot_resp_phase.add({
|
plot_resp_phase.add({
|
||||||
color: 0xff3dcc,
|
color: 0xff3dcc,
|
||||||
name: `Фаза частотного отклика канала ${i+1} - удар №${tries}, °`,
|
name: `Фаза частотного отклика канала ${i + 1} - удар №${tries}, °`,
|
||||||
x: resolution,
|
x: resolution,
|
||||||
y: rsp.phase,
|
y: rsp.phase,
|
||||||
tags: ["Фаза частотного отклика, °"]
|
tags: ["Фаза частотного отклика, °"]
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
// ausps_data.push(ausps.data);
|
||||||
|
resps_data.push(rsp.data);
|
||||||
|
resps_phase.push(rsp.phase);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tries++;
|
tries++; // увеличение счётчика
|
||||||
if (tries > ranges.length) gtl.diagnostic.stop(); // останавливаем диагностику после окончания диапазонов
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (tries > ranges.length) {
|
||||||
|
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `processing...`);
|
||||||
|
|
||||||
|
const avgResponse = getAvgArray(resps_data, remove_resp_arr); //вычисляем средний отклик
|
||||||
|
|
||||||
|
// Отображаем средний спектр отклика
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0xff3dcc,
|
||||||
|
name: `Амплитуда среднего частотного отклика канала ${i + 1}, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse,
|
||||||
|
tags: ["Амплитуда среднего частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
gtl.log.info('Вычисление среднего отклика', `done!`);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gtl.diagnostic.stop(); // останавливаем диагностику после окончания диапазонов
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,206 @@
|
||||||
|
"use strict";
|
||||||
|
let signals = gtl.options.record.signalsModel;
|
||||||
|
let options = gtl.options;
|
||||||
|
let record = gtl.options.record;
|
||||||
|
let point = gtl.options.point;
|
||||||
|
let getResponse = gtl.import("getResponse.js").getResponse;
|
||||||
|
let getAvgArray = gtl.import("getResponse.js").getAvgArray;
|
||||||
|
|
||||||
|
let plot_ausp = gtl.plots.add("Спектры по каналам"); // спектры по каналам вибрации
|
||||||
|
let plot_resp_ampl = gtl.plots.add("Частотный отклик по каналам (амплитуда)"); // амплитудные спектры по каналам вибрации
|
||||||
|
let plot_resp_phase = gtl.plots.add("Частотный отклик по каналам (фаза)"); // фазовые спектры по каналам вибрации
|
||||||
|
let plot_avg_resp = gtl.plots.add("Средний частотный отклик"); // средний частотный отклик
|
||||||
|
|
||||||
|
// Цвета
|
||||||
|
// #ff0000 - красный
|
||||||
|
// #00ff00 - зелёный
|
||||||
|
// #0000ff - синий
|
||||||
|
// #00ddff - голубой
|
||||||
|
// #ff3dcc - фиолетовый
|
||||||
|
// #ffff00 - жёлтый
|
||||||
|
|
||||||
|
// Настройки для спектров и АФЧХ
|
||||||
|
let frequency = gtl.options.customOptions.frequency; // граничная частота
|
||||||
|
let resolution = gtl.options.customOptions.resolution; // частотное разрешение
|
||||||
|
let lines = 1 / resolution; // количество линий
|
||||||
|
let average = gtl.options.customOptions.average; // количество усреднений
|
||||||
|
let overlap = gtl.options.customOptions.overlap; // наложение
|
||||||
|
let view_ = gtl.options.customOptions.view; // отображение амплитуды спектра unit/dB (0/1)
|
||||||
|
let view = gtl.spec.unit; // значение view по умолчанию
|
||||||
|
let view_freq_resp = gtl.options.customOptions.view_freq_resp; // отображение амплитуды спектра частотного отклика db / unit (1 / 0)
|
||||||
|
let variant_freq_resp = gtl.options.customOptions.variant_freq_resp; // вариант вычисления: 0 - через кросс, 1 - через автоспектр
|
||||||
|
let thresh_level = gtl.options.customOptions.thresh_level; // уровень удара для засчитывания импульса
|
||||||
|
let time_impulse_ = gtl.options.customOptions.time_impulse; // задание длины импульса из опций
|
||||||
|
let remove_resp_arr = gtl.options.customOptions.remove_resp_arr;
|
||||||
|
gtl.log.info("remove_resp_arr", remove_resp_arr);
|
||||||
|
|
||||||
|
// Задание диапазона сигнала для анализа
|
||||||
|
// let ranges = gtl.player.stored_ranges;
|
||||||
|
let ranges = gtl.options.customOptions.ranges;
|
||||||
|
gtl.player.custom_ranges = ranges; // задание диапазонов плеера
|
||||||
|
|
||||||
|
// Спектры каналов ускорения (каналы датчиков вибрации)
|
||||||
|
gtl.log.info("Количество сигналов", signals.length);
|
||||||
|
gtl.log.info("Граничная частота спектров", frequency);
|
||||||
|
gtl.log.info("Частотное разрешение спектров", resolution);
|
||||||
|
|
||||||
|
let spec_view = view_ == 0 ? gtl.spec.unit : gtl.spec.db; // условие отображения спектров в дБ или линейном виде
|
||||||
|
let src_force = gtl.analog_inputs[signals[0].portNumber]; // источник сигнала силы
|
||||||
|
let channel = 1; //номер первого канала вибрации
|
||||||
|
let window_spec_force = gtl.options.customOptions.window_spec_force; // окно спектра силы
|
||||||
|
let window_spec_vibr = gtl.options.customOptions.window_spec_vibr; // окно спектра вибрации
|
||||||
|
|
||||||
|
//формируем спектр силы
|
||||||
|
let force = gtl.create_ausp({
|
||||||
|
src: src_force, // сигнал силы
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_force,
|
||||||
|
view: view
|
||||||
|
});
|
||||||
|
|
||||||
|
// Спектр амплитудный для цикла по всем каналам вибрации
|
||||||
|
let ausps = []; //массив объектов спектров вибрации по каналам
|
||||||
|
let phases = []; //массив объектов ФЧХ по каналам
|
||||||
|
let hits_data = {}; //объект результатов по каждому удару
|
||||||
|
|
||||||
|
for (let i = 1; i <= signals.length - 1; i++) {
|
||||||
|
let ausp = gtl.create_ausp({
|
||||||
|
src: gtl.analog_inputs[signals[i].portNumber], // сырой сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: window_spec_vibr,
|
||||||
|
view: spec_view
|
||||||
|
});
|
||||||
|
ausps.push(ausp);
|
||||||
|
|
||||||
|
let phase_delta = gtl.create_pfc({
|
||||||
|
src0: src_force, // сигнал силы, относительно него вычисляем дельту фазы
|
||||||
|
src1: gtl.analog_inputs[signals[i].portNumber], // сигнал вибрации
|
||||||
|
frequency: frequency,
|
||||||
|
resolution: resolution,
|
||||||
|
average: average,
|
||||||
|
overlap: overlap,
|
||||||
|
window: gtl.spec.rectangular,
|
||||||
|
view: gtl.phase.deg,
|
||||||
|
range: gtl.phase.positive,
|
||||||
|
is_single: false
|
||||||
|
});
|
||||||
|
phases.push(phase_delta);
|
||||||
|
|
||||||
|
}; //цикл по каналам
|
||||||
|
|
||||||
|
let time_window = 0.0001 // временное окно наблюдения
|
||||||
|
let time_impulse = time_impulse_ == 0 ? gtl.acq_time + 0.01 : time_impulse_; // условие выбора длительности импульса
|
||||||
|
// let time_pre = time_window / 2; // время предыстории
|
||||||
|
// let ranges = []; // массив диапазонов для импульсов
|
||||||
|
let tries = 1; // циклы диагностики
|
||||||
|
let is_ranges = false; // состояние готовности диапазонов
|
||||||
|
|
||||||
|
/* Функция диагностики.
|
||||||
|
Первый запуск функции диагностики происходит после проигрывания всего сигнала и определения массива диапазонов по срабатыванию триггера
|
||||||
|
После этого происходит добавление массива пользовательских диапазонов в плеер, отрисовка (при необходимости) сигнала триггера
|
||||||
|
Затем устанавливается интервал запуска функции диагностики, равный временному окну для анализа импульса и запускается отсчет циклов (попыток) диагностики
|
||||||
|
Как только количество циклов (попыток) сравнивается с количеством установленных пользовательских диапазонов, диагностика останавливается
|
||||||
|
*/
|
||||||
|
|
||||||
|
gtl.diagnostic.interval = gtl.options.record.playerTime; // первичный интервал запуска функции диагностики
|
||||||
|
gtl.log.info('Время импульса', time_impulse);
|
||||||
|
|
||||||
|
function diagnose() {
|
||||||
|
let resps_data = []; //массив данных амплитуды откликов после каждого удара
|
||||||
|
let resps_phase = []; //массив данных фазы откликов после каждого удара
|
||||||
|
|
||||||
|
for (let i = 0; i < ausps.length; i++) {
|
||||||
|
gtl.log.info('diagnostic', `Удар ${tries} - Канал ${i + 1}`)
|
||||||
|
|
||||||
|
// Отображаем спектр силы
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0xff00f7,
|
||||||
|
name: `Удар №${tries}, N - Спектр силы`,
|
||||||
|
x: force.resolution,
|
||||||
|
y: force.data,
|
||||||
|
tags: [`Спектр силы, N`]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем автоспектр вибрации
|
||||||
|
plot_ausp.add({
|
||||||
|
color: 0x34C924,
|
||||||
|
name: `Удар №${tries}, g - Спектр канала ${i + 1}`,
|
||||||
|
x: ausps[i].resolution,
|
||||||
|
y: ausps[i].data,
|
||||||
|
tags: ["Cпектр вибрации, g"]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Вычисляем спектр отклика
|
||||||
|
let rsp = getResponse({
|
||||||
|
spec_force: force, //спектр силы
|
||||||
|
spec_vibro: ausps[i], //спектр вибрации
|
||||||
|
type: variant_freq_resp, //способ вычисления отклика
|
||||||
|
view: 0 //способ отображения спектра в линейных единицах или дБ
|
||||||
|
});
|
||||||
|
|
||||||
|
// Отображаем спектр отклика
|
||||||
|
plot_resp_ampl.add({
|
||||||
|
color: 0x3b30b6,
|
||||||
|
name: `Удар №${tries}, g/N - Отклик канала ${i + 1}`,
|
||||||
|
x: resolution,
|
||||||
|
y: rsp.data,
|
||||||
|
tags: ["Амплитуда частотного отклика, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
// // Отображаем фазовый спектр отклика
|
||||||
|
// plot_resp_phase.add({
|
||||||
|
// color: 0xff3dcc,
|
||||||
|
// name: `Удар №${tries}, ° - Фаза частотного отклика канала ${i + 1}`,
|
||||||
|
// x: resolution,
|
||||||
|
// y: rsp.phase,
|
||||||
|
// tags: ["Фаза частотного отклика, °"]
|
||||||
|
// });
|
||||||
|
|
||||||
|
resps_data.push(rsp.data); //добавляем отклики по каждому каналу (амплитуда)
|
||||||
|
resps_phase.push(rsp.phase); //добавляем отклики по каждому каналу (фаза)
|
||||||
|
}
|
||||||
|
|
||||||
|
//собираем данные удара по всем каналам
|
||||||
|
hits_data[`hit${tries}`] = {
|
||||||
|
resps_data: resps_data,
|
||||||
|
resps_phase: resps_phase
|
||||||
|
}
|
||||||
|
|
||||||
|
tries++; // увеличение счётчика
|
||||||
|
|
||||||
|
if (tries > ranges.length) {
|
||||||
|
gtl.log.info('Вычисление среднего отклика по каналам', `processing...`);
|
||||||
|
// gtl.results = hits_data; //добавляем результат по всем ударам в ПО
|
||||||
|
|
||||||
|
for (let i = 0; i < ausps.length; i++) {
|
||||||
|
gtl.log.info(`Формируем данные по Каналу ${i + 1}`, `processing...`);
|
||||||
|
let channelData = [];
|
||||||
|
let channelPhase = [];
|
||||||
|
|
||||||
|
for (const hitKey in hits_data) {
|
||||||
|
let hit = hits_data[hitKey];
|
||||||
|
// gtl.log.info(`Канал ${i + 1}, удар ${hitKey}`, JSON.stringify(hit.resps_data[i]));
|
||||||
|
channelData.push(hit.resps_data[i]);
|
||||||
|
channelPhase.push(hit.resps_phase[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let avgResponse = getAvgArray(channelData, remove_resp_arr); //вычисляем средний отклик
|
||||||
|
plot_avg_resp.add({
|
||||||
|
color: 0xff3dcc,
|
||||||
|
name: `Усредн.отклик кан.${i + 1}, g/N`,
|
||||||
|
x: resolution,
|
||||||
|
y: avgResponse,
|
||||||
|
tags: ["Усреднённый отклик, g/N"]
|
||||||
|
});
|
||||||
|
|
||||||
|
gtl.log.info(`Вычисление среднего отклика по Каналу ${i + 1}`, `done!`);
|
||||||
|
}
|
||||||
|
gtl.diagnostic.stop(); // останавливаем диагностику после окончания диапазонов
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue