19 Commits

Author SHA1 Message Date
TotMaxim
56e6aa4bb0 Merge remote-tracking branch 'origin/master'
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 19:43:26 +03:00
TotMaxim
2e6be9b4f1 Исправление качки
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 19:39:12 +03:00
MaD_CaT
a311e3201b Доработка. Доработка__Получить_угол_места_для_помехи_из_параметров_цели 2026-04-09 19:39:12 +03:00
TotMaxim
5032115b5d Добавлен результат проверки РТР в панель исправности комплекса
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 18:28:23 +03:00
TotMaxim
caebd4f05b Добавлены логи ошибок в журнал
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 15:49:06 +03:00
TotMaxim
b4e81218ab Доработка провекри сокетов в контроле 2026-04-09 15:39:39 +03:00
TotMaxim
1633a45c9b Доработка статуса контроля РТР
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 14:24:05 +03:00
TotMaxim
65a0164ec0 Доработка контроля РТР БПО 2026-04-09 13:14:07 +03:00
TotMaxim
0c30572f1e Доработка АФСП провекри 2026-04-09 11:25:18 +03:00
TotMaxim
08597ff7ce Merge remote-tracking branch 'origin/master' 2026-04-09 09:59:08 +03:00
TotMaxim
8abdc957ed Merge remote-tracking branch 'origin/master'
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-09 09:58:04 +03:00
TotMaxim
85b2f4eadd Доработка адресов ЭМС ТГ и флага изменнена пользователем частоты 2026-04-09 09:55:57 +03:00
TotMaxim
6294730bf8 Корректировка. Сообщения для отладки
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-05 17:25:10 +03:00
TotMaxim
f407578a44 Добавление анимации для прогресс баров в АФСП 2026-04-05 16:36:43 +03:00
TotMaxim
ec21282ba0 Обновление индикатора онлайн в контроле
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-05 16:29:57 +03:00
TotMaxim
38529ac0cc Обновление контроля АФСП
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-05 15:52:50 +03:00
TotMaxim
6db678b163 Смена литер фс в ПРД-К
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-05 10:05:16 +03:00
TotMaxim
124b75dbde Обновленный конфиг для SkySensor
Some checks failed
Локальный тест / test (push) Has been cancelled
2026-04-05 09:37:05 +03:00
MaD_CaT
803d2eff4f Доработка ЭМС-ТГ, команда 9 для КАПС РПБ 2026-04-04 10:47:13 +03:00
25 changed files with 1312 additions and 506 deletions

View File

@@ -9,13 +9,13 @@
"address": "127.0.0.1", "address": "127.0.0.1",
"coordinatesData": [ "coordinatesData": [
5, 5,
null,
null,
null,
0, 0,
null, 0,
null, 0,
null, 0,
0,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -51,16 +51,15 @@
"url": "127.0.0.1:2005" "url": "127.0.0.1:2005"
}, },
"address": "127.0.0.1", "address": "127.0.0.1",
"antennaVariation": "0,0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
0, 0,
0, 0,
0, 0,
3, 3,
null, 0,
null, 0,
null, 0,
0, 0,
0, 0,
0, 0,
@@ -87,7 +86,7 @@
"defaultProfileIds": [ "defaultProfileIds": [
"1" "1"
], ],
"enabled": true, "enabled": false,
"forbiddenZones": [ "forbiddenZones": [
{ {
"azimuth": 20, "azimuth": 20,
@@ -170,12 +169,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -229,12 +228,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -263,8 +262,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "2147483647", "start_freqency_hz": "2147483647",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -279,8 +277,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "2147483647", "start_freqency_hz": "2147483647",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -297,7 +294,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -381,12 +378,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -440,12 +437,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -474,8 +471,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "0", "start_freqency_hz": "0",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -490,8 +486,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "0", "start_freqency_hz": "0",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -508,7 +503,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -592,12 +587,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -651,12 +646,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -685,8 +680,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "4607182418800017408", "start_freqency_hz": "4607182418800017408",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -701,8 +695,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "4607182418800017408", "start_freqency_hz": "4607182418800017408",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -719,7 +712,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -803,12 +796,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -862,12 +855,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -896,8 +889,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "111818694921568", "start_freqency_hz": "111818694921568",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -912,8 +904,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "111818694921568", "start_freqency_hz": "111818694921568",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -930,7 +921,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -1014,12 +1005,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1073,12 +1064,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1107,8 +1098,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "126158551285552", "start_freqency_hz": "126158551285552",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -1123,8 +1113,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "126158551285552", "start_freqency_hz": "126158551285552",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -1141,7 +1130,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -1225,12 +1214,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1284,12 +1273,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1318,8 +1307,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "8315457377388211488", "start_freqency_hz": "8315457377388211488",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -1334,8 +1322,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "8315457377388211488", "start_freqency_hz": "8315457377388211488",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -1352,7 +1339,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -1436,12 +1423,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1495,12 +1482,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1529,8 +1516,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "30680773303284125", "start_freqency_hz": "30680773303284125",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -1545,8 +1531,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "30680773303284125", "start_freqency_hz": "30680773303284125",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -1563,7 +1548,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.0089202\",\"0.0138022 0.0116269\",\"0.011603 0.0136825\",\"0.00900388 0.0157386\",\"0.0061044 0.0167927\",\"0.0031049 0.0177467\",\"5.11347e-6 0.0181494\",\"-0.0030951 0.01775\",\"-0.0061956 0.0167989\",\"-0.00899614 0.015697\",\"-0.011597 0.0136921\",\"-0.0137978 0.0116366\",\"-0.0155986 0.00892859\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00621983\",\"-0.0155986 -0.00892821\",\"-0.0137978 -0.0116362\",\"-0.011597 -0.0136917\",\"-0.00899614 -0.0156966\",\"-0.0061956 -0.0167985\",\"-0.0030951 -0.0177496\",\"5.11326e-6 -0.018149\",\"0.0031049 -0.0177463\",\"0.0061044 -0.0167923\",\"0.00900388 -0.0157382\",\"0.011603 -0.0136821\",\"0.0138022 -0.0116265\",\"0.0156014 -0.00891982\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":0,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6336\",\"60.0787 30.6391\",\"60.0765 30.6432\",\"60.0739 30.6473\",\"60.071 30.6494\",\"60.068 30.6513\",\"60.0649 30.6521\",\"60.0618 30.6513\",\"60.0587 30.6494\",\"60.0559 30.6472\",\"60.0533 30.6432\",\"60.0511 30.6391\",\"60.0493 30.6336\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6033\",\"60.0493 30.5979\",\"60.0511 30.5924\",\"60.0533 30.5883\",\"60.0559 30.5843\",\"60.0587 30.5821\",\"60.0618 30.5802\",\"60.0649 30.5794\",\"60.068 30.5802\",\"60.071 30.5821\",\"60.0739 30.5842\",\"60.0765 30.5883\",\"60.0787 30.5924\",\"60.0805 30.5979\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -1603,6 +1588,7 @@
}, },
"PelengatorsTaskParams": [ "PelengatorsTaskParams": [
{ {
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -1635,6 +1621,7 @@
}, },
"PelengatorsTaskParams": [ "PelengatorsTaskParams": [
{ {
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -1667,6 +1654,7 @@
}, },
"PelengatorsTaskParams": [ "PelengatorsTaskParams": [
{ {
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -1742,17 +1730,16 @@
"url": "172.22.246.12:2006" "url": "172.22.246.12:2006"
}, },
"address": "172.22.246.12", "address": "172.22.246.12",
"antennaVariation": "0,0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
59.91069, 60.064529,
30.65539, 30.615309,
0, 0,
0, 0,
59.91069, 60.064529,
30.65539, 30.615309,
0,
0, 0,
30,
0, 0,
0, 0,
0, 0,
@@ -1781,7 +1768,7 @@
"enabled": true, "enabled": true,
"forbiddenZones": [ "forbiddenZones": [
], ],
"functionZone": "{\"default_radius\":5000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":-1,\"radius\":5000,\"total_zone\":[\"59.9557 30.6554\",\"59.955 30.6709\",\"59.9529 30.6862\",\"59.9496 30.7003\",\"59.9451 30.7132\",\"59.9396 30.7242\",\"59.9332 30.7331\",\"59.926 30.7397\",\"59.9185 30.7437\",\"59.9107 30.7451\",\"59.9029 30.7437\",\"59.8953 30.7396\",\"59.8882 30.733\",\"59.8818 30.724\",\"59.8762 30.713\",\"59.8717 30.7001\",\"59.8684 30.686\",\"59.8664 30.6709\",\"59.8657 30.6554\",\"59.8664 30.6399\",\"59.8684 30.6248\",\"59.8717 30.6107\",\"59.8762 30.5978\",\"59.8818 30.5867\",\"59.8882 30.5778\",\"59.8953 30.5712\",\"59.9029 30.5671\",\"59.9107 30.5657\",\"59.9185 30.5671\",\"59.926 30.5711\",\"59.9332 30.5777\",\"59.9396 30.5866\",\"59.9451 30.5976\",\"59.9496 30.6105\",\"59.9529 30.6248\",\"59.955 30.6399\"]}}}", "functionZone": "{\"default_radius\":5000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioReceive\",\"input_id\":-1,\"radius\":5000,\"total_zone\":[\"60.1095 30.6153\",\"60.1088 30.6309\",\"60.1067 30.6463\",\"60.1034 30.6604\",\"60.0989 30.6734\",\"60.0934 30.6844\",\"60.087 30.6934\",\"60.0798 30.7\",\"60.0723 30.704\",\"60.0645 30.7054\",\"60.0567 30.704\",\"60.0491 30.6999\",\"60.042 30.6933\",\"60.0356 30.6842\",\"60.03 30.6732\",\"60.0255 30.6602\",\"60.0222 30.6461\",\"60.0202 30.6309\",\"60.0195 30.6153\",\"60.0202 30.5997\",\"60.0222 30.5846\",\"60.0255 30.5704\",\"60.03 30.5575\",\"60.0356 30.5463\",\"60.042 30.5374\",\"60.0491 30.5307\",\"60.0567 30.5266\",\"60.0645 30.5252\",\"60.0723 30.5266\",\"60.0798 30.5306\",\"60.087 30.5373\",\"60.0934 30.5462\",\"60.0989 30.5572\",\"60.1034 30.5702\",\"60.1067 30.5846\",\"60.1088 30.5997\"]}}}",
"groupId": -1, "groupId": -1,
"groupName": "", "groupName": "",
"name": "АфС-П РТР", "name": "АфС-П РТР",
@@ -1850,12 +1837,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.615742206573483,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.615742206573483,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1909,12 +1896,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.615742206573483,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.615742206573483,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -1943,8 +1930,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -1959,8 +1945,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -1977,7 +1962,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.00897031\",\"0.0138022 0.0115768\",\"0.011603 0.0137326\",\"0.00900381 0.0155883\",\"0.00610448 0.016943\",\"0.00310487 0.0176965\",\"5.03159e-6 0.017999\",\"-0.00309513 0.0176998\",\"-0.00619552 0.0169493\",\"-0.00899621 0.0155466\",\"-0.011597 0.0137422\",\"-0.0137978 0.0115864\",\"-0.0155986 0.00897875\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00611951\",\"-0.0155986 -0.00897836\",\"-0.0137978 -0.011586\",\"-0.011597 -0.0137419\",\"-0.00899621 -0.0155462\",\"-0.00619552 -0.0169489\",\"-0.00309513 -0.0176995\",\"5.03138e-6 -0.0179986\",\"0.00310487 -0.0176962\",\"0.00610448 -0.0169427\",\"0.00900381 -0.0155879\",\"0.011603 -0.0137323\",\"0.0138022 -0.0115764\",\"0.0156014 -0.00896993\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6337\",\"60.0787 30.639\",\"60.0765 30.6433\",\"60.0739 30.647\",\"60.071 30.6497\",\"60.068 30.6512\",\"60.0649 30.6518\",\"60.0618 30.6512\",\"60.0587 30.6497\",\"60.0559 30.6469\",\"60.0533 30.6433\",\"60.0511 30.639\",\"60.0493 30.6337\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6035\",\"60.0493 30.5978\",\"60.0511 30.5925\",\"60.0533 30.5882\",\"60.0559 30.5846\",\"60.0587 30.5818\",\"60.0618 30.5803\",\"60.0649 30.5797\",\"60.068 30.5803\",\"60.071 30.5818\",\"60.0739 30.5845\",\"60.0765 30.5882\",\"60.0787 30.5925\",\"60.0805 30.5978\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -2061,12 +2046,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.064979661201995,
30.615334510803223,
0, 0,
0, 0,
0, 60.064979661201995,
0, 30.615334510803223,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2120,12 +2105,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.064979661201995,
30.615334510803223,
0, 0,
0, 0,
0, 60.064979661201995,
0, 30.615334510803223,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2154,8 +2139,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -2170,8 +2154,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -2188,7 +2171,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"1.52588e-7 1.91254e-7\",\"0.0156014 -0.00896993\",\"0.0171006 -0.00556204\",\"0.0179002 -0.00190395\",\"0.0179002 0.00190433\",\"0.0171006 0.00556242\",\"0.0156014 0.00897031\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.065 30.6153\",\"60.0806 30.5974\",\"60.0821 30.6042\",\"60.0829 30.6115\",\"60.0829 30.6192\",\"60.0821 30.6265\",\"60.0806 30.6333\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -2272,12 +2255,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.064733381937565,
30.61617136001587,
0, 0,
0, 0,
0, 60.064733381937565,
0, 30.61617136001587,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2331,12 +2314,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.064733381937565,
30.61617136001587,
0, 0,
0, 0,
0, 60.064733381937565,
0, 30.61617136001587,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2365,8 +2348,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -2381,8 +2363,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -2399,7 +2380,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.00897031\",\"0.0138022 0.0115768\",\"0.011603 0.0137326\",\"0.00900381 0.0155883\",\"0.00610448 0.016943\",\"0.00310487 0.0176965\",\"5.03159e-6 0.017999\",\"-0.00309513 0.0176998\",\"-0.00619552 0.0169493\",\"-0.00899621 0.0155466\",\"-0.011597 0.0137422\",\"-0.0137978 0.0115864\",\"-0.0155986 0.00897875\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00611951\",\"-0.0155986 -0.00897836\",\"-0.0137978 -0.011586\",\"-0.011597 -0.0137419\",\"-0.00899621 -0.0155462\",\"-0.00619552 -0.0169489\",\"-0.00309513 -0.0176995\",\"5.03138e-6 -0.0179986\",\"0.00310487 -0.0176962\",\"0.00610448 -0.0169427\",\"0.00900381 -0.0155879\",\"0.011603 -0.0137323\",\"0.0138022 -0.0115764\",\"0.0156014 -0.00896993\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0827 30.6162\",\"60.0824 30.6224\",\"60.0816 30.6284\",\"60.0803 30.6342\",\"60.0785 30.6394\",\"60.0763 30.6437\",\"60.0737 30.6474\",\"60.0708 30.6501\",\"60.0678 30.6516\",\"60.0647 30.6522\",\"60.0616 30.6516\",\"60.0585 30.6501\",\"60.0557 30.6473\",\"60.0531 30.6437\",\"60.0509 30.6394\",\"60.0491 30.6342\",\"60.0478 30.6284\",\"60.047 30.6224\",\"60.0467 30.6162\",\"60.047 30.6099\",\"60.0478 30.6039\",\"60.0491 30.5982\",\"60.0509 30.593\",\"60.0531 30.5886\",\"60.0557 30.585\",\"60.0585 30.5822\",\"60.0616 30.5807\",\"60.0647 30.5801\",\"60.0678 30.5807\",\"60.0708 30.5822\",\"60.0737 30.5849\",\"60.0763 30.5886\",\"60.0785 30.593\",\"60.0803 30.5982\",\"60.0816 30.6039\",\"60.0824 30.6099\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -2483,12 +2464,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2542,12 +2523,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2576,8 +2557,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -2592,8 +2572,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "7308901815584698669", "start_freqency_hz": "7308901815584698669",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -2610,7 +2589,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.00897031\",\"0.0138022 0.0115768\",\"0.011603 0.0137326\",\"0.00900381 0.0155883\",\"0.00610448 0.016943\",\"0.00310487 0.0176965\",\"5.03159e-6 0.017999\",\"-0.00309513 0.0176998\",\"-0.00619552 0.0169493\",\"-0.00899621 0.0155466\",\"-0.011597 0.0137422\",\"-0.0137978 0.0115864\",\"-0.0155986 0.00897875\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00611951\",\"-0.0155986 -0.00897836\",\"-0.0137978 -0.011586\",\"-0.011597 -0.0137419\",\"-0.00899621 -0.0155462\",\"-0.00619552 -0.0169489\",\"-0.00309513 -0.0176995\",\"5.03138e-6 -0.0179986\",\"0.00310487 -0.0176962\",\"0.00610448 -0.0169427\",\"0.00900381 -0.0155879\",\"0.011603 -0.0137323\",\"0.0138022 -0.0115764\",\"0.0156014 -0.00896993\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6337\",\"60.0787 30.639\",\"60.0765 30.6433\",\"60.0739 30.647\",\"60.071 30.6497\",\"60.068 30.6512\",\"60.0649 30.6518\",\"60.0618 30.6512\",\"60.0587 30.6497\",\"60.0559 30.6469\",\"60.0533 30.6433\",\"60.0511 30.639\",\"60.0493 30.6337\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6035\",\"60.0493 30.5978\",\"60.0511 30.5925\",\"60.0533 30.5882\",\"60.0559 30.5846\",\"60.0587 30.5818\",\"60.0618 30.5803\",\"60.0649 30.5797\",\"60.068 30.5803\",\"60.071 30.5818\",\"60.0739 30.5845\",\"60.0765 30.5882\",\"60.0787 30.5925\",\"60.0805 30.5978\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -2694,12 +2673,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2753,12 +2732,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2787,8 +2766,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "140359491022592", "start_freqency_hz": "140359491022592",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -2803,8 +2781,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "140359491022592", "start_freqency_hz": "140359491022592",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -2821,7 +2798,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.00897031\",\"0.0138022 0.0115768\",\"0.011603 0.0137326\",\"0.00900381 0.0155883\",\"0.00610448 0.016943\",\"0.00310487 0.0176965\",\"5.03159e-6 0.017999\",\"-0.00309513 0.0176998\",\"-0.00619552 0.0169493\",\"-0.00899621 0.0155466\",\"-0.011597 0.0137422\",\"-0.0137978 0.0115864\",\"-0.0155986 0.00897875\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00611951\",\"-0.0155986 -0.00897836\",\"-0.0137978 -0.011586\",\"-0.011597 -0.0137419\",\"-0.00899621 -0.0155462\",\"-0.00619552 -0.0169489\",\"-0.00309513 -0.0176995\",\"5.03138e-6 -0.0179986\",\"0.00310487 -0.0176962\",\"0.00610448 -0.0169427\",\"0.00900381 -0.0155879\",\"0.011603 -0.0137323\",\"0.0138022 -0.0115764\",\"0.0156014 -0.00896993\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6337\",\"60.0787 30.639\",\"60.0765 30.6433\",\"60.0739 30.647\",\"60.071 30.6497\",\"60.068 30.6512\",\"60.0649 30.6518\",\"60.0618 30.6512\",\"60.0587 30.6497\",\"60.0559 30.6469\",\"60.0533 30.6433\",\"60.0511 30.639\",\"60.0493 30.6337\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6035\",\"60.0493 30.5978\",\"60.0511 30.5925\",\"60.0533 30.5882\",\"60.0559 30.5846\",\"60.0587 30.5818\",\"60.0618 30.5803\",\"60.0649 30.5797\",\"60.068 30.5803\",\"60.071 30.5818\",\"60.0739 30.5845\",\"60.0765 30.5882\",\"60.0787 30.5925\",\"60.0805 30.5978\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -2905,12 +2882,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2964,12 +2941,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -2998,8 +2975,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "37", "start_freqency_hz": "37",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -3014,8 +2990,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "37", "start_freqency_hz": "37",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
@@ -3032,7 +3007,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0180002 1.9115e-7\",\"0.0177003 0.00310696\",\"0.0169007 0.00611367\",\"0.0156014 0.00897031\",\"0.0138022 0.0115768\",\"0.011603 0.0137326\",\"0.00900381 0.0155883\",\"0.00610448 0.016943\",\"0.00310487 0.0176965\",\"5.03159e-6 0.017999\",\"-0.00309513 0.0176998\",\"-0.00619552 0.0169493\",\"-0.00899621 0.0155466\",\"-0.011597 0.0137422\",\"-0.0137978 0.0115864\",\"-0.0155986 0.00897875\",\"-0.0168993 0.00611989\",\"-0.0176997 0.00311028\",\"-0.0179998 1.91357e-7\",\"-0.0176997 -0.0031099\",\"-0.0168993 -0.00611951\",\"-0.0155986 -0.00897836\",\"-0.0137978 -0.011586\",\"-0.011597 -0.0137419\",\"-0.00899621 -0.0155462\",\"-0.00619552 -0.0169489\",\"-0.00309513 -0.0176995\",\"5.03138e-6 -0.0179986\",\"0.00310487 -0.0176962\",\"0.00610448 -0.0169427\",\"0.00900381 -0.0155879\",\"0.011603 -0.0137323\",\"0.0138022 -0.0115764\",\"0.0156014 -0.00896993\",\"0.0169007 -0.00611328\",\"0.0177003 -0.00310658\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.628\",\"60.0805 30.6337\",\"60.0787 30.639\",\"60.0765 30.6433\",\"60.0739 30.647\",\"60.071 30.6497\",\"60.068 30.6512\",\"60.0649 30.6518\",\"60.0618 30.6512\",\"60.0587 30.6497\",\"60.0559 30.6469\",\"60.0533 30.6433\",\"60.0511 30.639\",\"60.0493 30.6337\",\"60.048 30.628\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6035\",\"60.0493 30.5978\",\"60.0511 30.5925\",\"60.0533 30.5882\",\"60.0559 30.5846\",\"60.0587 30.5818\",\"60.0618 30.5803\",\"60.0649 30.5797\",\"60.068 30.5803\",\"60.071 30.5818\",\"60.0739 30.5845\",\"60.0765 30.5882\",\"60.0787 30.5925\",\"60.0805 30.5978\",\"60.0818 30.6035\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -3116,12 +3091,12 @@
"address": "192.168.0.93", "address": "192.168.0.93",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -3175,12 +3150,12 @@
"antennaVariation": "0,0", "antennaVariation": "0,0",
"coordinatesData": [ "coordinatesData": [
5, 5,
60.06490470683785,
30.61574220657348,
0, 0,
0, 0,
0, 60.06490470683785,
0, 30.61574220657348,
0,
0,
0, 0,
0, 0,
0, 0,
@@ -3209,8 +3184,7 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "0", "start_freqency_hz": "0",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"default_jamming_task_parameters": { "default_jamming_task_parameters": {
"direction": { "direction": {
@@ -3225,13 +3199,12 @@
"frequency_step_hz": "200000", "frequency_step_hz": "200000",
"jump_delay_10ns": "0", "jump_delay_10ns": "0",
"start_freqency_hz": "0", "start_freqency_hz": "0",
"time_lfm_s": 5e-06, "time_lfm_s": 5e-06
"time_step_s": 1
}, },
"enable": true, "enable": true,
"id": 0, "id": 0,
"liter_gain": 100, "liter_gain": 100,
"name": "БРП #13:10.1.2.22:1201:tx.0:390-510:800-1065:1065-1210:1150-1280:1490-2000:2000-3500:3500-6100", "name": "ПРД Н2-2:10.1.2.22:1201:tx.0:390-510:800-1065:1065-1210:1150-1280:1490-2000:2000-3500:3500-6100",
"range": { "range": {
"from": "433000000", "from": "433000000",
"to": "435000000" "to": "435000000"
@@ -3243,7 +3216,7 @@
"timeout_sec": 60 "timeout_sec": 60
}, },
"enabled": true, "enabled": true,
"functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"0.0179864 0\",\"0.0177132 0.00312331\",\"0.0169017 0.00615172\",\"0.0155767 0.00899321\",\"0.0137784 0.0115614\",\"0.0115614 0.0137784\",\"0.00899321 0.0155767\",\"0.00615172 0.0169017\",\"0.00312331 0.0177132\",\"1.10135e-18 0.0179864\",\"-0.00312331 0.0177132\",\"-0.00615172 0.0169017\",\"-0.00899321 0.0155767\",\"-0.0115614 0.0137784\",\"-0.0137784 0.0115614\",\"-0.0155767 0.00899321\",\"-0.0169017 0.00615172\",\"-0.0177132 0.00312331\",\"-0.0179864 2.2027e-18\",\"-0.0177132 -0.00312331\",\"-0.0169017 -0.00615172\",\"-0.0155767 -0.00899321\",\"-0.0137784 -0.0115614\",\"-0.0115614 -0.0137784\",\"-0.00899321 -0.0155767\",\"-0.00615172 -0.0169017\",\"-0.00312331 -0.0177132\",\"-3.30405e-18 -0.0179864\",\"0.00312331 -0.0177132\",\"0.00615172 -0.0169017\",\"0.00899321 -0.0155767\",\"0.0115614 -0.0137784\",\"0.0137784 -0.0115614\",\"0.0155767 -0.00899321\",\"0.0169017 -0.00615172\",\"0.0177132 -0.00312331\"]}}}", "functionZone": "{\"default_radius\":2000,\"geometries\":{\"0\":{\"desc\":\"\",\"function_type\":\"RadioTransmit\",\"input_id\":-1,\"radius\":2000,\"total_zone\":[\"60.0829 30.6157\",\"60.0826 30.622\",\"60.0818 30.6281\",\"60.0805 30.6338\",\"60.0787 30.6389\",\"60.0765 30.6434\",\"60.0739 30.647\",\"60.0711 30.6496\",\"60.068 30.6512\",\"60.0649 30.6518\",\"60.0618 30.6512\",\"60.0587 30.6496\",\"60.0559 30.6469\",\"60.0533 30.6433\",\"60.0511 30.6389\",\"60.0493 30.6338\",\"60.048 30.6281\",\"60.0472 30.622\",\"60.0469 30.6157\",\"60.0472 30.6095\",\"60.048 30.6034\",\"60.0493 30.5977\",\"60.0511 30.5926\",\"60.0533 30.5881\",\"60.0559 30.5845\",\"60.0587 30.5819\",\"60.0618 30.5802\",\"60.0649 30.5797\",\"60.068 30.5802\",\"60.0711 30.5819\",\"60.0739 30.5845\",\"60.0765 30.5881\",\"60.0787 30.5926\",\"60.0805 30.5977\",\"60.0818 30.6034\",\"60.0826 30.6095\"]}}}",
"groupId": -1, "groupId": -1,
"impl_properties": { "impl_properties": {
"activatingTimeoutSec": 15, "activatingTimeoutSec": 15,
@@ -3276,7 +3249,7 @@
] ]
}, },
"ignored_perimeters": { "ignored_perimeters": {
"id_generator": 14340, "id_generator": 14471,
"perimeters": [ "perimeters": [
] ]
}, },
@@ -3303,6 +3276,7 @@
"task": { "task": {
"executor": "АфС-П РТР", "executor": "АфС-П РТР",
"executor_type": 1, "executor_type": 1,
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -3342,6 +3316,7 @@
"task": { "task": {
"executor": "АфС-П РТР", "executor": "АфС-П РТР",
"executor_type": 1, "executor_type": 1,
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -3381,6 +3356,7 @@
"task": { "task": {
"executor": "АфС-П РТР", "executor": "АфС-П РТР",
"executor_type": 1, "executor_type": 1,
"is_paused": false,
"pelengator_task_Antenna": { "pelengator_task_Antenna": {
"field_caption": "", "field_caption": "",
"field_id": "Авто" "field_id": "Авто"
@@ -3410,45 +3386,6 @@
} }
], ],
"type_id": "GroupSearchTask" "type_id": "GroupSearchTask"
},
{
"ShowAllSpectrumsInOne": false,
"executor": "Эмулятор пеленгатора",
"executor_type": 4,
"tasks": [
{
"task": {
"executor": "Эмулятор пеленгатора",
"executor_type": 1,
"pelengator_task_Antenna": {
"field_caption": "Антенна 1",
"field_id": "1"
},
"pelengator_task_Attenuator": 10,
"pelengator_task_Filter": 10000,
"pelengator_task_FilterStep": 1,
"pelengator_task_parameters": {
"field_autoBaseLine": true,
"field_baseline": -80,
"field_enabledStreams": [
"DirectionVsFreq",
"SpectrumDb"
],
"field_profiles": [
"1"
],
"field_targetSector": "{\"power_range\":{\"max\":0,\"min\":0},\"quality_range\":{\"max\":0,\"min\":0},\"sector\":{\"azimuth_max\":360,\"azimuth_min\":0,\"zenith_max\":110,\"zenith_min\":30}}"
},
"pelengator_task_show_forbidden_bands": true,
"save_snapshots": false,
"search_task_band": "1001000000 6000000000",
"show_all_signals_on_spectrum": false,
"show_target_signals_on_spectrum": true,
"type_id": "PelengatorSearchTask"
}
}
],
"type_id": "GroupSearchTask"
} }
] ]
} }

View File

@@ -20,8 +20,8 @@ script_export_mode=0
[preset.0.options] [preset.0.options]
custom_template/debug="" custom_template/debug="/home/user/temp/godot.linuxbsd.template_release.x86_64"
custom_template/release="" custom_template/release="/home/user/temp/godot.linuxbsd.template_release.x86_64"
debug/export_console_wrapper=0 debug/export_console_wrapper=0
binary_format/embed_pck=true binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true

View File

@@ -123,6 +123,7 @@ prd="*res://scripts/prd.gd"
navi="*res://scripts/navigation.gd" navi="*res://scripts/navigation.gd"
trassa="*res://scripts/trassa.gd" trassa="*res://scripts/trassa.gd"
yemstg="*res://scripts/yemstg.gd" yemstg="*res://scripts/yemstg.gd"
scouting="*res://scripts/rtr.gd"
[debug] [debug]

View File

@@ -97,8 +97,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 2" fname = "Канал 2"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[1].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[1].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[1].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[1].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[1]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[1]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[1]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[1]['TestPassed']"]
@@ -122,8 +122,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 3" fname = "Канал 3"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[2].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[2].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[2].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[2].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[2]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[2]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[2]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[2]['TestPassed']"]
@@ -147,8 +147,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 4" fname = "Канал 4"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[3].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[3].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[3].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[3].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[3]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[3]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[3]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[3]['TestPassed']"]
@@ -172,8 +172,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 5" fname = "Канал 5"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[4].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[4].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[4].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[4].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[4]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[4]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[4]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[4]['TestPassed']"]
@@ -197,8 +197,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 6" fname = "Канал 6"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[5].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[5].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[5].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[5].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[5]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[5]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[5]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[5]['TestPassed']"]
@@ -222,8 +222,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 7" fname = "Канал 7"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[6].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[6].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[6].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[6].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[6]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[6]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[6]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[6]['TestPassed']"]
@@ -247,8 +247,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Канал 8" fname = "Канал 8"
metadata/value0 = "SelfTest[1].SystemList[1].DevList[7].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[1].DevList[7].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[1].DevList[7].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[1].DevList[7].TestedParamList[0]['CurrentValue']"
metadata/value2 = "SelfTest[0].SystemList[1].DevList[7]['TestPassed']" metadata/value2 = "SelfTest[0].SystemList[1].DevList[7]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[1].DevList[7]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[1].DevList[7]['TestPassed']"]
@@ -800,7 +800,7 @@ offset_right = 580.0
offset_bottom = 115.0 offset_bottom = 115.0
tooltip_text = "Плата АЦП ADCS500" tooltip_text = "Плата АЦП ADCS500"
fname = "АЦП" fname = "АЦП"
metadata/state = ["SelfTest[4].SystemList[0].DevList[1]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[0].DevList[1]['TestPassed']"]
[node name="dsp" parent="." instance=ExtResource("4_mtf2n")] [node name="dsp" parent="." instance=ExtResource("4_mtf2n")]
layout_mode = 0 layout_mode = 0
@@ -809,7 +809,7 @@ offset_right = 580.0
offset_bottom = 60.0 offset_bottom = 60.0
tooltip_text = "Плата цифровой обработки сигналов BPL" tooltip_text = "Плата цифровой обработки сигналов BPL"
fname = "Сигн. проц." fname = "Сигн. проц."
metadata/state = ["SelfTest[4].SystemList[0].DevList[0]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[0].DevList[0]['TestPassed']"]
[node name="gen" parent="." instance=ExtResource("2_dmhrm")] [node name="gen" parent="." instance=ExtResource("2_dmhrm")]
layout_mode = 2 layout_mode = 2
@@ -827,8 +827,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Генератор" fname = "Генератор"
metadata/value0 = "SelfTest[1].SystemList[2].DevList[0].TestedParamList[0]['CurrentValue']" metadata/value0 = "SelfTest[0].SystemList[2].DevList[0].TestedParamList[0]['CurrentValue']"
metadata/value1 = "SelfTest[2].SystemList[2].DevList[0].TestedParamList[0]['CurrentValue']" metadata/value1 = "SelfTest[0].SystemList[2].DevList[0].TestedParamList[0]['CurrentValue']"
metadata/state = ["SelfTest[0].SystemList[2].DevList[0]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[2].DevList[0]['TestPassed']"]
[node name="rpu" parent="." instance=ExtResource("2_dmhrm")] [node name="rpu" parent="." instance=ExtResource("2_dmhrm")]
@@ -848,8 +848,8 @@ name_min_size0 = Vector2i(35, 20)
name_min_size1 = Vector2i(35, 20) name_min_size1 = Vector2i(35, 20)
name_min_size2 = Vector2i(35, 20) name_min_size2 = Vector2i(35, 20)
fname = "Приёмник 20...1000 МГц" fname = "Приёмник 20...1000 МГц"
metadata/value0 = "SelfTest[1].SystemList[0].DevList[0]['TestPassed']" metadata/value0 = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']"
metadata/value1 = "SelfTest[2].SystemList[0].DevList[0]['TestPassed']" metadata/value1 = "SelfTest[0].SystemList[0].DevList[0]['TestPassed']"
metadata/state = ["SelfTest[0].SystemList[0].DevList[3]['TestPassed']"] metadata/state = ["SelfTest[0].SystemList[0].DevList[3]['TestPassed']"]
[connection signal="pressed" from="konverter/grid/kanal1" to="." method="_on_item_pressed"] [connection signal="pressed" from="konverter/grid/kanal1" to="." method="_on_item_pressed"]

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://8ll27id5ajq1"] [gd_scene load_steps=3 format=3 uid="uid://8ll27id5ajq1"]
[ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_151rh"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_151rh"]
[ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_4vyhj"]
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_d7iti"] [ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_d7iti"]
[node name="pribor_afsp" type="Control"] [node name="pribor_afsp" type="Control"]
@@ -20,13 +19,6 @@ settings_path_to_url = "Адрес АФСП левого борта"
settings_path_to_wait_time = "Период опроса состояния АФСП, секунды" settings_path_to_wait_time = "Период опроса состояния АФСП, секунды"
metadata/DeviceName = &"Устройство РР левого борта" metadata/DeviceName = &"Устройство РР левого борта"
[node name="request" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("2_4vyhj")
[node name="timer" type="Timer" parent="request"]
autostart = true
[node name="bort" parent="." instance=ExtResource("3_d7iti")] [node name="bort" parent="." instance=ExtResource("3_d7iti")]
layout_mode = 0 layout_mode = 0
offset_left = 24.0 offset_left = 24.0
@@ -35,7 +27,4 @@ offset_right = 604.0
offset_bottom = 1216.78 offset_bottom = 1216.78
metadata/DeviceName = &"Устройство РР левого борта" metadata/DeviceName = &"Устройство РР левого борта"
[connection signal="child_entered_tree" from="request" to="request" method="_on_child_entered_tree"]
[connection signal="request_completed" from="request" to="." method="_on_request_completed"]
[connection signal="timeout" from="request/timer" to="request" method="_on_request_timer"]
[connection signal="pressed" from="bort" to="." method="_on_item_pressed"] [connection signal="pressed" from="bort" to="." method="_on_item_pressed"]

View File

@@ -1,7 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://5uv1idl3lqet"] [gd_scene load_steps=3 format=3 uid="uid://5uv1idl3lqet"]
[ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_tfses"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrl" path="res://scenes/pribor-afsp/pribor-afsp.gd" id="1_tfses"]
[ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="2_miwrd"]
[ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_xpxb5"] [ext_resource type="PackedScene" uid="uid://dnxq870xf6pkh" path="res://scenes/pribor-afsp/bort-afsp.tscn" id="3_xpxb5"]
[node name="pribor_afsp" type="Control"] [node name="pribor_afsp" type="Control"]
@@ -20,13 +19,6 @@ settings_path_to_url = "Адрес АФСП правого борта"
settings_path_to_wait_time = "Период опроса состояния АФСП, секунды" settings_path_to_wait_time = "Период опроса состояния АФСП, секунды"
metadata/DeviceName = &"Устройство РР правого борта" metadata/DeviceName = &"Устройство РР правого борта"
[node name="request" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("2_miwrd")
[node name="timer" type="Timer" parent="request"]
autostart = true
[node name="bort" parent="." instance=ExtResource("3_xpxb5")] [node name="bort" parent="." instance=ExtResource("3_xpxb5")]
layout_mode = 0 layout_mode = 0
offset_left = 12.0 offset_left = 12.0
@@ -35,7 +27,4 @@ offset_right = 592.0
offset_bottom = 1130.0 offset_bottom = 1130.0
metadata/DeviceName = &"Устройство РР правого борта" metadata/DeviceName = &"Устройство РР правого борта"
[connection signal="child_entered_tree" from="request" to="request" method="_on_child_entered_tree"]
[connection signal="request_completed" from="request" to="." method="_on_request_completed"]
[connection signal="timeout" from="request/timer" to="request" method="_on_request_timer"]
[connection signal="pressed" from="bort" to="." method="_on_item_pressed"] [connection signal="pressed" from="bort" to="." method="_on_item_pressed"]

View File

@@ -7,98 +7,145 @@ class_name pribor_afsp extends 'res://scenes/контроль/прибор.gd'
@export var settings_path_to_url: String = '' ## Должно быть в ProjectSettings @export var settings_path_to_url: String = '' ## Должно быть в ProjectSettings
@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings @export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings
signal receive_response_afp_bpo()
static var json_conv: JSON = JSON.new() static var json_conv: JSON = JSON.new()
static var node_maper = load('res://scenes/контроль/node-maper.gd') static var node_maper = load('res://scenes/контроль/node-maper.gd')
static var node_request: Node
static var node_request_timer: Node
var ctrl_pos = 0 var ctrl_pos = 0
# SystemName: "gen" DevList - там состояние связи с генератором по кан шине # SystemName: "gen" DevList - там состояние связи с генератором по кан шине
func _ready() -> void: func _ready() -> void:
ProjectSettings.connect('settings_changed', on_settings_chaged) # Подключаемся к сигналам в зависимости от борта
node_request = $request if this_afsp_name == 'Устройство РР левого борта':
node_request_timer = $request/timer scouting.response_received_afsp_left.connect(_on_response_received)
on_settings_chaged() else:
scouting.response_received_afsp_right.connect(_on_response_received)
# При старте отрисовываем последние данные (если есть)
_on_press_device()
func on_settings_chaged(): # Обработка полученного ответа от rtr
node_request.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path_to_url) func _on_response_received(response: String, success: bool) -> void:
node_request_timer.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time)) if not success:
tools.allways(node_request.request_url != null) log.error('Ошибка запроса или нет связи: %s' % response)
_reset_ui_to_zero()
func _on_request_completed(result, _response_code, headers, body: PackedByteArray):
var unit_instance: = network.get_unit_instance(unit_name)
if result != 0:
var rs = node_request.get_result_string(result)
log.error('\"%s\"' % rs)
if unit_instance.online:
unit_instance.online = false
unit_instance.emit_signal('line_changed', unit_instance)
return return
var json_str: String = body.get_string_from_utf8() # Парсим JSON строку
if not json_str: var parse_result = json_conv.parse(response)
push_error('не удаётся получить строку utf8 из данных (%s)' % headers) if parse_result != OK:
if unit_instance.online: var err = json_conv.get_error_message()
unit_instance.online = false push_error('разбор json прерван - "%s"' % err)
unit_instance.emit_signal('line_changed', unit_instance) _reset_ui_to_zero()
return return
var rc: = json_conv.parse(json_str) # Ищем имя прибора в JSON
if rc != Error.OK:
var err: = json_conv.get_error_message()
push_error('разбор json прерван - \"%s\" (%s)' % [err, headers])
if unit_instance.online:
unit_instance.online = false
unit_instance.emit_signal('line_changed', unit_instance)
return
var pp = [] var pp = []
tools.map_solid_to_array(prefix_path, pp) tools.map_solid_to_array(prefix_path, pp)
var ret_val = [null, false, 0] var ret_val = [null, false, 0]
var pp_copy = pp.duplicate(true) var pp_copy = pp.duplicate(true)
tools.get_value_by_path(json_conv.data, pp, ret_val) tools.get_value_by_path(json_conv.data, pp, ret_val)
if not ret_val[1]: if not ret_val[1]:
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]]) push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
_reset_ui_to_zero()
return return
var received_afsp_name: StringName = ret_val[0] var received_afsp_name: StringName = ret_val[0]
# Проверяем, что ответ от нужного прибора
if this_afsp_name != received_afsp_name: if this_afsp_name != received_afsp_name:
# TODO: Сюда попадаем, когда приходит от другого борта # Ответ от другого борта - игнорируем
#push_error('не известное устройство: \"%s\", ожидадось: \"%s\"' % [received_afsp_name, this_afsp_name])
return return
# Обновляем UI элементы из JSON
_update_ui(json_conv.data)
unit_instance.rx_tick = Time.get_ticks_msec()
if not unit_instance.online:
unit_instance.online = true
unit_instance.emit_signal('line_changed', unit_instance)
# Обновление интерфейса из JSON данных
func _update_ui(json_data: Dictionary) -> void:
# Конвертер
for child in $bort.get_node('konverter/grid').get_children(): for child in $bort.get_node('konverter/grid').get_children():
node_maper.map_value_to_item(json_conv.data, child, 'value0') node_maper.map_value_to_item_animated(json_data, child, 'value0')
node_maper.map_value_to_item(json_conv.data, child, 'value1') node_maper.map_value_to_item_animated(json_data, child, 'value1')
node_maper.map_value_to_item(json_conv.data, child, 'value2') node_maper.map_value_to_item_animated(json_data, child, 'value2')
node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0) node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Антенна 1
for child in $bort.get_node('antenna1/grid').get_children(): for child in $bort.get_node('antenna1/grid').get_children():
node_maper.map_value_to_item(json_conv.data, child, 'value0') node_maper.map_value_to_item_animated(json_data, child, 'value0')
node_maper.map_value_to_item(json_conv.data, child, 'value1') node_maper.map_value_to_item_animated(json_data, child, 'value1')
node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0) node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Антенна 2
for child in $bort.get_node('antenna2/grid').get_children(): for child in $bort.get_node('antenna2/grid').get_children():
node_maper.map_value_to_item(json_conv.data, child, 'value0') node_maper.map_value_to_item_animated(json_data, child, 'value0')
node_maper.map_value_to_item(json_conv.data, child, 'value1') node_maper.map_value_to_item_animated(json_data, child, 'value1')
node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0) node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
# Остальные элементы
for child in $bort.get_children(): for child in $bort.get_children():
node_maper.map_value_to_item(json_conv.data, child, 'value0') node_maper.map_value_to_item_animated(json_data, child, 'value0')
node_maper.map_value_to_item(json_conv.data, child, 'value1') node_maper.map_value_to_item_animated(json_data, child, 'value1')
node_maper.map_error_codes_to_item(json_conv.data, child, 'state', 0) node_maper.map_error_codes_to_item_animated(json_data, child, 'state', 0)
emit_signal('receive_response_afp_bpo')
# Сброс всех UI элементов в 0 (при отсутствии данных)
func _reset_ui_to_zero() -> void:
# Конвертер
for child in $bort.get_node('konverter/grid').get_children():
_reset_item_value(child)
# Антенна 1
for child in $bort.get_node('antenna1/grid').get_children():
_reset_item_value(child)
# Антенна 2
for child in $bort.get_node('antenna2/grid').get_children():
_reset_item_value(child)
# Остальные элементы
for child in $bort.get_children():
_reset_item_value(child)
# Сброс конкретного элемента в 0
func _reset_item_value(item) -> void:
item.set('value0', 0)
item.set('value1', 0)
item.set('value2', 0)
item.set('state', 0)
# Отрисовывание при нажатии на прибор
func _on_press_device() -> void:
# Проверяем, есть ли сохраненные данные в rtr
var has_data = false
var last_response = ""
if this_afsp_name == 'Устройство РР левого борта':
has_data = scouting.has_afsp_left_success()
if has_data: last_response = scouting.get_afsp_left_response()
else:
has_data = scouting.has_afsp_right_success()
if has_data: last_response = scouting.get_afsp_right_response()
# Если есть данные - парсим и отображаем
if has_data and not last_response.is_empty():
var parse_result = json_conv.parse(last_response)
if parse_result == OK:
# Проверяем, что это данные именно от этого прибора
var pp = []
tools.map_solid_to_array(prefix_path, pp)
var ret_val = [null, false, 0]
tools.get_value_by_path(json_conv.data, pp, ret_val)
if ret_val[1] and ret_val[0] == this_afsp_name:
_update_ui(json_conv.data)
return
# Если данных нет или они не подходят - сбрасываем в 0
_reset_ui_to_zero()
## Вызывается при клике мыши на элементе. ## Вызывается при клике мыши на элементе.

View File

@@ -4,64 +4,53 @@ class_name pribor_rtr extends 'res://scenes/контроль/прибор.gd'
@export var prefix_path: String = '' ## Должно быть в JSON @export var prefix_path: String = '' ## Должно быть в JSON
@export var this_bpo1_name: String = '' ## Должно быть в JSON @export var this_bpo1_name: String = '' ## Должно быть в JSON
@export var this_bpo2_name: String = '' ## Должно быть в JSON @export var this_bpo2_name: String = '' ## Должно быть в JSON
@export var unit_name1: StringName= '' ## Должно быть в settings.gd @export var unit_name1: StringName = '' ## Должно быть в settings.gd
@export var unit_name2: StringName= '' ## Должно быть в settings.gd @export var unit_name2: StringName = '' ## Должно быть в settings.gd
@export var settings_path1_to_url: String = '' ## Должно быть в ProjectSettings @export var settings_path1_to_url: String = '' ## Должно быть в ProjectSettings
@export var settings_path2_to_url: String = '' ## Должно быть в ProjectSettings @export var settings_path2_to_url: String = '' ## Должно быть в ProjectSettings
@export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings @export var settings_path_to_wait_time: String = '' ## Должно быть в ProjectSettings
signal receive_response_afp_bpo()
static var json_conv: JSON = JSON.new() static var json_conv: JSON = JSON.new()
static var node_maper = load('res://scenes/контроль/node-maper.gd') static var node_maper = load('res://scenes/контроль/node-maper.gd')
static var node_request_1: Node
static var node_request_timer_1: Node
static var node_request_2: Node
static var node_request_timer_2: Node
var ctrl_pos = 110 var ctrl_pos = 110
var bort_to_node_name = {} var bort_to_node_name = {}
var bort_to_unit_name = {} var bort_to_unit_name = {}
func _ready() -> void: func _ready() -> void:
ProjectSettings.connect('settings_changed', on_settings_changed) scouting.response_received_bpo_left.connect(_on_response_received_left)
node_request_1 = $request1 scouting.response_received_bpo_right.connect(_on_response_received_right)
node_request_timer_1 = $request1/timer
node_request_2 = $request2
node_request_timer_2 = $request2/timer
on_settings_changed() on_settings_changed()
find_labels(self) find_labels(self)
_on_press_device()
func on_settings_changed(): func on_settings_changed():
bort_to_node_name.merge({this_bpo1_name: 'grid_bpo_a1', this_bpo2_name: 'grid_bpo_a2'}, true) bort_to_node_name.merge({this_bpo1_name: 'grid_bpo_a1', this_bpo2_name: 'grid_bpo_a2'}, true)
bort_to_unit_name.merge({this_bpo1_name: unit_name1, this_bpo2_name: unit_name2}) bort_to_unit_name.merge({this_bpo1_name: unit_name1, this_bpo2_name: unit_name2}, true)
node_request_1.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path1_to_url)
node_request_timer_1.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
node_request_2.request_url = ProjectSettings.get_setting('application/config/%s' % settings_path2_to_url)
node_request_timer_2.wait_time = float(ProjectSettings.get_setting('application/config/%s' % settings_path_to_wait_time))
assert(node_request_1.request_url != null)
assert(node_request_2.request_url != null)
# Обработка ответа от первого бпо
func _on_request_completed(result, _response_code, headers, body: PackedByteArray): func _on_response_received_left(response: String, success: bool) -> void:
if result != 0: if not success:
var rs = node_request_1.get_result_string(result) log.error('Ошибка запроса или нет связи (левый): %s' % response)
push_error('\"%s\"' % rs) _reset_grid('grid_bpo_a1')
return return
_parse_and_update_ui(response)
var json_str: = body.get_string_from_utf8() # Обработка ответа от второго бпо
if not json_str: func _on_response_received_right(response: String, success: bool) -> void:
push_error('не удаётся получить строку из utf8-данных (%s)' % headers) if not success:
log.error('Ошибка запроса или нет связи (правый): %s' % response)
_reset_grid('grid_bpo_a2')
return return
_parse_and_update_ui(response)
# Оригинальный парсинг из _on_request_completed
func _parse_and_update_ui(json_str: String) -> void:
var rc: = json_conv.parse(json_str) var rc: = json_conv.parse(json_str)
if rc != Error.OK: if rc != Error.OK:
var err = json_conv.get_error_message() var err = json_conv.get_error_message()
push_error('разбор json прерван - \"%s\" (%s)' % [err, headers]) push_error('разбор json прерван - %s' % err)
return return
var pp: = [] var pp: = []
@@ -69,45 +58,96 @@ func _on_request_completed(result, _response_code, headers, body: PackedByteArra
var ret_val = [null, false, 0] var ret_val = [null, false, 0]
var pp_copy = pp.duplicate(true) var pp_copy = pp.duplicate(true)
tools.get_value_by_path(json_conv.data, pp, ret_val) tools.get_value_by_path(json_conv.data, pp, ret_val)
if not ret_val[1]: if not ret_val[1]:
push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]]) push_error('путь %s не найден (%s)' % [pp_copy, ret_val[2]])
return return
if not bort_to_node_name.has(ret_val[0]): var device_name: String = ret_val[0]
push_error('не известное устройство: \"%s\"' % ret_val[0])
if not bort_to_node_name.has(device_name):
push_error('не известное устройство: %s' % device_name)
return return
var node_name = bort_to_node_name[ret_val[0]] var node_name = bort_to_node_name[device_name]
var bort_node = get_node(node_name) var bort_node = get_node(node_name)
var unit_name = bort_to_unit_name[ret_val[0]] # Обновляем UI только для конкретного грида
var unit_instance = network.get_unit_instance(unit_name)
unit_instance.rx_tick = Time.get_ticks_msec()
if not unit_instance.online:
unit_instance.online = true
unit_instance.emit_signal('line_changed', unit_instance)
for item in bort_node.get_children(): for item in bort_node.get_children():
node_maper.map_value_to_item(json_conv.data, item, 'state') node_maper.map_value_to_item(json_conv.data, item, 'state')
# Обновляем групповые индикаторы
_update_group_indicators_original()
# Оригинальное обновление групповых индикаторов
func _update_group_indicators_original() -> void:
# Сначала сбрасываем все
if has_node('yas_bpo_a1'):
$yas_bpo_a1.state = 0
if has_node('yas_bpo_a2'):
$yas_bpo_a2.state = 0
if has_node('mod_pit_g1'):
$mod_pit_g1.state = 0
# Проверяем обе группы и устанавливаем если есть активные
var items = get_tree().get_nodes_in_group('управляется-по-шине-1') var items = get_tree().get_nodes_in_group('управляется-по-шине-1')
for node in items: for node in items:
if node.state == 1: if node.has_method('get') and node.get('state') == 1:
$yas_bpo_a1.state = 1 if has_node('yas_bpo_a1'):
$yas_bpo_a1.state = 1
break break
items = get_tree().get_nodes_in_group('управляется-по-шине-2') items = get_tree().get_nodes_in_group('управляется-по-шине-2')
for node in items: for node in items:
if node.state == 1: if node.has_method('get') and node.get('state') == 1:
$yas_bpo_a2.state = 1 if has_node('yas_bpo_a2'):
$yas_bpo_a2.state = 1
break break
items = get_tree().get_nodes_in_group('потребитель-питания') items = get_tree().get_nodes_in_group('потребитель-питания')
for node in items: for node in items:
if node.state == 1: if node.has_method('get') and node.get('state') == 1:
$mod_pit_g1.state = 1 if has_node('mod_pit_g1'):
$mod_pit_g1.state = 1
break break
emit_signal('receive_response_afp_bpo') # Сброс конкретного грида
func _reset_grid(grid_name: String) -> void:
if has_node(grid_name):
for item in get_node(grid_name).get_children():
_reset_item_value(item)
_update_group_indicators_original()
# Сброс всех UI элементов в 0 (при отсутствии данных)
func _reset_ui_to_zero() -> void:
_reset_grid('grid_bpo_a1')
_reset_grid('grid_bpo_a2')
# Сброс конкретного элемента в 0
func _reset_item_value(item) -> void:
if item.has_method('set'):
item.set('value0', 0)
item.set('value1', 0)
item.set('value2', 0)
item.set('state', 0)
# Отрисовывание при нажатии на прибор
func _on_press_device() -> void:
# Проверяем левый борт
if scouting.has_bpo_left_success():
var response = scouting.get_bpo_left_response()
if not response.is_empty():
_parse_and_update_ui(response)
else:
_reset_grid('grid_bpo_a1')
# Проверяем правый борт
if scouting.has_bpo_right_success():
var response = scouting.get_bpo_right_response()
if not response.is_empty():
_parse_and_update_ui(response)
else:
_reset_grid('grid_bpo_a2')
func find_labels(node1: Node): func find_labels(node1: Node):
if node1 is Label: if node1 is Label:
@@ -123,3 +163,9 @@ func find_labels(node1: Node):
node1.set_meta('tooltip_set', true) node1.set_meta('tooltip_set', true)
for child in node1.get_children(): for child in node1.get_children():
find_labels(child) find_labels(child)
## Вызывается при клике мыши на элементе.
func _on_item_pressed(block_a: Control):
var metas = block_a.get_meta_list()
for n in metas:
var _v = block_a.get_meta(n)

View File

@@ -1,9 +1,8 @@
[gd_scene load_steps=5 format=3 uid="uid://5uv1idl3lqea"] [gd_scene load_steps=4 format=3 uid="uid://5uv1idl3lqea"]
[ext_resource type="Script" uid="uid://d0jwv5opi3mrk" path="res://scenes/pribor-afsp/pribor-bpo.gd" id="1_bhc4e"] [ext_resource type="Script" uid="uid://d0jwv5opi3mrk" path="res://scenes/pribor-afsp/pribor-bpo.gd" id="1_bhc4e"]
[ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_jp6m0"] [ext_resource type="PackedScene" uid="uid://d3iqb5e4g81m5" path="res://scenes/контроль/элемент-г.tscn" id="2_jp6m0"]
[ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="3_jcpjs"] [ext_resource type="PackedScene" uid="uid://p2suppildvq0" path="res://scenes/контроль/элемент-в.tscn" id="3_jcpjs"]
[ext_resource type="Script" uid="uid://bux47vkw71w1t" path="res://scenes/контроль/request.gd" id="4_crej3"]
[node name="pribor_bpo" type="Control"] [node name="pribor_bpo" type="Control"]
layout_mode = 3 layout_mode = 3
@@ -198,22 +197,3 @@ offset_bottom = 362.0
show_rname = false show_rname = false
self_size = Vector2i(50, 145) self_size = Vector2i(50, 145)
fname = "Яч. связи" fname = "Яч. связи"
[node name="request1" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("4_crej3")
[node name="timer" type="Timer" parent="request1"]
autostart = true
[node name="request2" type="HTTPRequest" parent="."]
use_threads = true
script = ExtResource("4_crej3")
[node name="timer" type="Timer" parent="request2"]
autostart = true
[connection signal="request_completed" from="request1" to="." method="_on_request_completed"]
[connection signal="timeout" from="request1/timer" to="request1" method="_on_request_timer"]
[connection signal="request_completed" from="request2" to="." method="_on_request_completed"]
[connection signal="timeout" from="request2/timer" to="request2" method="_on_request_timer"]

View File

@@ -58,7 +58,7 @@ offset_right = 205.0
offset_bottom = 183.0 offset_bottom = 183.0
fname = "Модуль ФС" fname = "Модуль ФС"
rname = "A3" rname = "A3"
metadata/fs = "fs_6" metadata/fs = "fs_7"
[node name="ref_A5" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")] [node name="ref_A5" parent="." groups=["default_reset", "fs_group"] instance=ExtResource("3_kqnvt")]
offset_left = 205.0 offset_left = 205.0
@@ -67,7 +67,7 @@ offset_right = 255.0
offset_bottom = 183.0 offset_bottom = 183.0
fname = "Модуль ФС" fname = "Модуль ФС"
rname = "A2" rname = "A2"
metadata/fs = "fs_7" metadata/fs = "fs_6"
[node name="ref_A7" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")] [node name="ref_A7" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")]
offset_left = 255.0 offset_left = 255.0

View File

@@ -109,9 +109,9 @@ func on_press_device(_name_davice: String) -> void:
control_data['power_amplifier'] = get_tree().get_nodes_in_group('power_amplifier') control_data['power_amplifier'] = get_tree().get_nodes_in_group('power_amplifier')
control_data['default_reset_array_node'] = get_tree().get_nodes_in_group('default_reset') control_data['default_reset_array_node'] = get_tree().get_nodes_in_group('default_reset')
control_data['module_fs_1'] = $kasseta_fs_kd/ref_A2 control_data['module_fs_1'] = $kasseta_fs_kd/ref_A2
control_data['module_fs_6'] = $kasseta_fs_kd/ref_A4 control_data['module_fs_6'] = $kasseta_fs_kd/ref_A7
control_data['dou_6'] = $dou6_A7 control_data['dou_6'] = $dou6_A7
control_data['module_fs_7'] = $kasseta_fs_kd/ref_A7 control_data['module_fs_7'] = $kasseta_fs_kd/ref_A4
control_data['dou_7'] = $dou7_A8 control_data['dou_7'] = $dou7_A8
on_control_result(control_data) on_control_result(control_data)

View File

@@ -12,6 +12,13 @@ enum DEVICE_STATUS {
CONTROL # Контроль завершен CONTROL # Контроль завершен
} }
# Состояния сервиса для RTR устройств
enum RTR_SERVICEABILITY {
NO_CONNECTION = 0, # Нет связи
PASSED = 1, # Все тесты пройдены
ERROR = 2 # Есть ошибки
}
const STATUS_CONFIG := { const STATUS_CONFIG := {
DEVICE_STATE.NONE: {'text': 'Нет связи', 'color': Color.WHITE, 'font_color': Color.BLACK}, DEVICE_STATE.NONE: {'text': 'Нет связи', 'color': Color.WHITE, 'font_color': Color.BLACK},
DEVICE_STATE.GOOD: {'text': 'Исправно', 'color': Color.GREEN, 'font_color': Color.BLACK}, DEVICE_STATE.GOOD: {'text': 'Исправно', 'color': Color.GREEN, 'font_color': Color.BLACK},
@@ -22,6 +29,9 @@ class DeviceObserver:
var device_name: String var device_name: String
var status: Array = [false, false, false] # [online, operational, control_complete] var status: Array = [false, false, false] # [online, operational, control_complete]
var last_results: Dictionary = {} var last_results: Dictionary = {}
# Для RTR устройств
var rtr_serviceability: int = RTR_SERVICEABILITY.NO_CONNECTION
func update_online_state(online: bool) -> bool: func update_online_state(online: bool) -> bool:
if status[DEVICE_STATUS.ONLINE] != online: if status[DEVICE_STATUS.ONLINE] != online:
@@ -55,11 +65,28 @@ class DeviceObserver:
status[DEVICE_STATUS.CONTROL] = false status[DEVICE_STATUS.CONTROL] = false
changed = true changed = true
return changed return changed
func update_rtr_serviceability(state: int) -> bool:
if rtr_serviceability != state:
rtr_serviceability = state
# Обновляем operational статус на основе RTR
var new_operational = (state == RTR_SERVICEABILITY.PASSED)
if status[DEVICE_STATUS.STATUS] != new_operational:
status[DEVICE_STATUS.STATUS] = new_operational
return true
return false
var device_observers: Dictionary = {} var device_observers: Dictionary = {}
var overall_prd_state: DEVICE_STATE = DEVICE_STATE.NONE var overall_prd_state: DEVICE_STATE = DEVICE_STATE.NONE
var status_uf: int = DEVICE_STATE.NONE # Статус УФ (УАРЭП-ЭМС) var status_uf: int = DEVICE_STATE.NONE # Статус УФ (УАРЭП-ЭМС)
# Добавляем наблюдателей для RTR устройств
var rtr_device_names := [
'rtr_afsp_left',
'rtr_afsp_right',
'rtr_bpo' # Общий для левого и правого БПО
]
func _ready() -> void: func _ready() -> void:
tooltip_text = 'Нет связи с приборами комплекса' tooltip_text = 'Нет связи с приборами комплекса'
add_theme_color_override('font_color', Color.BLACK) add_theme_color_override('font_color', Color.BLACK)
@@ -78,11 +105,20 @@ func _ready() -> void:
# Подписка на УФ # Подписка на УФ
signaller.connect('update_uf_serviceability', _on_uf_status_receive) signaller.connect('update_uf_serviceability', _on_uf_status_receive)
# Подписка на сигналы RTR (через signaller или напрямую)
_connect_rtr_signals()
# Инициализация начального состояния # Инициализация начального состояния
_recalculate_overall_state() _recalculate_overall_state()
func _connect_rtr_signals() -> void:
scouting.connect('serviceability_rtr_afsp_left', Callable(self, '_on_rtr_afsp_left_serviceability'))
scouting.connect('serviceability_rtr_afsp_right', Callable(self, '_on_rtr_afsp_right_serviceability'))
scouting.connect('serviceability_rtr_bpo', Callable(self, '_on_rtr_bpo_serviceability'))
func _initialize_observers() -> void: func _initialize_observers() -> void:
var device_names := [ var device_names := [
'уарэп-яу07-1н', 'уарэп-яу07-1в', 'уарэп-яу07-1к', 'уарэп-яу07-1н', 'уарэп-яу07-1в', 'уарэп-яу07-1к',
@@ -94,6 +130,69 @@ func _initialize_observers() -> void:
for device_name in device_names: for device_name in device_names:
device_observers[device_name] = DeviceObserver.new() device_observers[device_name] = DeviceObserver.new()
device_observers[device_name].device_name = device_name device_observers[device_name].device_name = device_name
# Инициализируем наблюдателей для RTR устройств
for rtr_name in rtr_device_names:
device_observers[rtr_name] = DeviceObserver.new()
device_observers[rtr_name].device_name = rtr_name
# Обработчики сигналов RTR
func _on_rtr_afsp_left_serviceability(state: int) -> void:
var observer: DeviceObserver = device_observers.get('rtr_afsp_left')
if not observer:
return
var changed = false
if observer.update_rtr_serviceability(state):
changed = true
var is_online = (state != RTR_SERVICEABILITY.NO_CONNECTION)
if observer.update_online_state(is_online):
changed = true
if changed:
_recalculate_overall_state()
else:
_update_display()
func _on_rtr_afsp_right_serviceability(state: int) -> void:
var observer: DeviceObserver = device_observers.get('rtr_afsp_right')
if not observer:
return
var changed = false
if observer.update_rtr_serviceability(state):
changed = true
var is_online = (state != RTR_SERVICEABILITY.NO_CONNECTION)
if observer.update_online_state(is_online):
changed = true
if changed:
_recalculate_overall_state()
else:
_update_display()
func _on_rtr_bpo_serviceability(state: int) -> void:
var observer: DeviceObserver = device_observers.get('rtr_bpo')
if not observer:
return
var changed = false
if observer.update_rtr_serviceability(state):
changed = true
var is_online = (state != RTR_SERVICEABILITY.NO_CONNECTION)
if observer.update_online_state(is_online):
changed = true
if changed:
_recalculate_overall_state()
else:
_update_display()
func _on_prd_online_changed(line_status: Object, prd_module: Object) -> void: func _on_prd_online_changed(line_status: Object, prd_module: Object) -> void:
@@ -123,7 +222,12 @@ func _recalculate_overall_state() -> void:
var has_online_prd := false var has_online_prd := false
var all_prd_operational := true var all_prd_operational := true
for observer in device_observers.values(): for observer_key in device_observers.keys():
# Пропускаем RTR устройства при подсчете ПРД
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE]: if observer.status[DEVICE_STATUS.ONLINE]:
has_online_prd = true has_online_prd = true
@@ -142,15 +246,35 @@ func _recalculate_overall_state() -> void:
prd_state = DEVICE_STATE.ERR prd_state = DEVICE_STATE.ERR
else: else:
prd_state = DEVICE_STATE.NONE prd_state = DEVICE_STATE.NONE
# Проверяем статус RTR устройств
var rtr_state := DEVICE_STATE.NONE
var has_online_rtr := false
var all_rtr_operational := true
for rtr_name in rtr_device_names:
var observer = device_observers.get(rtr_name)
if observer and observer.status[DEVICE_STATUS.ONLINE]:
has_online_rtr = true
if not observer.status[DEVICE_STATUS.STATUS]:
all_rtr_operational = false
if has_online_rtr:
if all_rtr_operational:
rtr_state = DEVICE_STATE.GOOD
else:
rtr_state = DEVICE_STATE.ERR
else:
rtr_state = DEVICE_STATE.NONE
# Комбинируем статусы по правилу: # Комбинируем статусы по правилу:
# 1. Если хоть один ERROR → ERROR # 1. Если хоть один ERROR → ERROR
# 2. Если нет ERROR и хоть один GOOD → GOOD # 2. Если нет ERROR и хоть один GOOD → GOOD
# 3. Иначе → NONE # 3. Иначе → NONE
if prd_state == DEVICE_STATE.ERR or status_uf == DEVICE_STATE.ERR: if prd_state == DEVICE_STATE.ERR or status_uf == DEVICE_STATE.ERR or rtr_state == DEVICE_STATE.ERR:
new_state = DEVICE_STATE.ERR new_state = DEVICE_STATE.ERR
elif prd_state == DEVICE_STATE.GOOD or status_uf == DEVICE_STATE.GOOD: elif prd_state == DEVICE_STATE.GOOD or status_uf == DEVICE_STATE.GOOD or rtr_state == DEVICE_STATE.GOOD:
new_state = DEVICE_STATE.GOOD new_state = DEVICE_STATE.GOOD
else: else:
new_state = DEVICE_STATE.NONE new_state = DEVICE_STATE.NONE
@@ -174,6 +298,7 @@ func _get_tooltip_text() -> String:
# Получаем статистику по ПРД # Получаем статистику по ПРД
var prd_summary = _get_prd_summary() var prd_summary = _get_prd_summary()
var uf_status_str = _get_uf_status_text() var uf_status_str = _get_uf_status_text()
var rtr_summary = _get_rtr_summary()
match overall_prd_state: match overall_prd_state:
DEVICE_STATE.NONE: DEVICE_STATE.NONE:
@@ -185,6 +310,7 @@ func _get_tooltip_text() -> String:
tooltip += '\n\nСтатус ПРД систем: ' + prd_summary tooltip += '\n\nСтатус ПРД систем: ' + prd_summary
tooltip += '\nСтатус УФ: ' + uf_status_str tooltip += '\nСтатус УФ: ' + uf_status_str
tooltip += '\nСтатус RTR: ' + rtr_summary
# Детализация по источникам статуса # Детализация по источникам статуса
tooltip += '\n\nСостояние систем:' tooltip += '\n\nСостояние систем:'
@@ -192,7 +318,10 @@ func _get_tooltip_text() -> String:
# ПРД системы # ПРД системы
var prd_ok_count = 0 var prd_ok_count = 0
var prd_total = 0 var prd_total = 0
for observer in device_observers.values(): for observer_key in device_observers.keys():
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE]: if observer.status[DEVICE_STATUS.ONLINE]:
prd_total += 1 prd_total += 1
if observer.status[DEVICE_STATUS.STATUS]: if observer.status[DEVICE_STATUS.STATUS]:
@@ -202,15 +331,67 @@ func _get_tooltip_text() -> String:
# УФ система # УФ система
tooltip += '\nУФ: ' + _get_uf_status_text() tooltip += '\nУФ: ' + _get_uf_status_text()
# RTR системы
tooltip += '\nRTR:'
for rtr_name in rtr_device_names:
var observer = device_observers.get(rtr_name)
if observer:
var status_text = _get_rtr_status_text(observer.rtr_serviceability)
var display_name = _get_rtr_display_name(rtr_name)
tooltip += '\n - %s: %s' % [display_name, status_text]
return tooltip return tooltip
func _get_rtr_summary() -> String:
var online_count := 0
var operational_count := 0
for rtr_name in rtr_device_names:
var observer = device_observers.get(rtr_name)
if observer and observer.status[DEVICE_STATUS.ONLINE]:
online_count += 1
if observer.status[DEVICE_STATUS.STATUS]:
operational_count += 1
if online_count == 0:
return 'Нет связи'
else:
return '%d/%d исправно' % [operational_count, online_count]
func _get_rtr_status_text(state: int) -> String:
match state:
RTR_SERVICEABILITY.NO_CONNECTION:
return 'Нет связи'
RTR_SERVICEABILITY.PASSED:
return 'Исправен'
RTR_SERVICEABILITY.ERROR:
return 'Ошибка'
_:
return 'Неизвестно'
func _get_rtr_display_name(rtr_key: String) -> String:
match rtr_key:
'rtr_afsp_left':
return 'АФСП Л'
'rtr_afsp_right':
return 'АФСП П'
'rtr_bpo':
return 'РТР'
_:
return rtr_key.replace('rtr_', '')
func _get_prd_summary() -> String: func _get_prd_summary() -> String:
var online_count := 0 var online_count := 0
var operational_count := 0 var operational_count := 0
for observer in device_observers.values(): for observer_key in device_observers.keys():
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE]: if observer.status[DEVICE_STATUS.ONLINE]:
online_count += 1 online_count += 1
if observer.status[DEVICE_STATUS.STATUS]: if observer.status[DEVICE_STATUS.STATUS]:
@@ -235,14 +416,20 @@ func _get_uf_status_text() -> String:
func _has_prd_errors() -> bool: func _has_prd_errors() -> bool:
for observer in device_observers.values(): for observer_key in device_observers.keys():
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE] and not observer.status[DEVICE_STATUS.STATUS]: if observer.status[DEVICE_STATUS.ONLINE] and not observer.status[DEVICE_STATUS.STATUS]:
return true return true
return false return false
func _has_operational_prd() -> bool: func _has_operational_prd() -> bool:
for observer in device_observers.values(): for observer_key in device_observers.keys():
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE] and observer.status[DEVICE_STATUS.STATUS]: if observer.status[DEVICE_STATUS.ONLINE] and observer.status[DEVICE_STATUS.STATUS]:
return true return true
return false return false
@@ -257,7 +444,8 @@ func get_device_status(device_name: String) -> Dictionary:
'operational': observer.status[DEVICE_STATUS.STATUS], 'operational': observer.status[DEVICE_STATUS.STATUS],
'control_complete': observer.status[DEVICE_STATUS.CONTROL], 'control_complete': observer.status[DEVICE_STATUS.CONTROL],
'last_results': observer.last_results.duplicate(), 'last_results': observer.last_results.duplicate(),
'status_uf': status_uf 'status_uf': status_uf,
'rtr_serviceability': observer.rtr_serviceability if device_name.begins_with('rtr_') else -1
} }
return {} return {}
@@ -267,7 +455,10 @@ func get_overall_status() -> Dictionary:
var operational_count := 0 var operational_count := 0
var control_complete_count := 0 var control_complete_count := 0
for observer in device_observers.values(): for observer_key in device_observers.keys():
if observer_key.begins_with('rtr_'):
continue
var observer = device_observers[observer_key]
if observer.status[DEVICE_STATUS.ONLINE]: if observer.status[DEVICE_STATUS.ONLINE]:
online_count += 1 online_count += 1
if observer.status[DEVICE_STATUS.STATUS]: if observer.status[DEVICE_STATUS.STATUS]:
@@ -279,7 +470,8 @@ func get_overall_status() -> Dictionary:
'overall_state': overall_prd_state, 'overall_state': overall_prd_state,
'online_devices': online_count, 'online_devices': online_count,
'operational_devices': operational_count, 'operational_devices': operational_count,
'total_devices': device_observers.size(), 'total_devices': device_observers.size() - len(rtr_device_names), # Исключаем RTR
'control_complete_devices': control_complete_count, 'control_complete_devices': control_complete_count,
'uf_status': status_uf 'uf_status': status_uf,
'rtr_status': _get_rtr_summary()
} }

View File

@@ -642,29 +642,6 @@ class Tile:
self.y = y0 self.y = y0
self.z = z0 self.z = z0
# Возвращает расстояние в метрах между двумя точками на карте
func haversine_m(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
# Радиус Земли в метрах
const R: = 6372795.0
# Преобразование градусов в радианы
var rlat1: = deg_to_rad(lat1)
var rlon1: = deg_to_rad(lon1)
var rlat2: = deg_to_rad(lat2)
var rlon2: = deg_to_rad(lon2)
# вычисление длины большого круга
var cl1: = cos(rlat1)
var cl2: = cos(rlat2)
var sl1: = sin(rlat1)
var sl2: = sin(rlat2)
var delta: = rlon2 - rlon1
var cdelta: = cos(delta)
var sdelta: = sin(delta)
var y: = sqrt(pow(cl2 * sdelta, 2.0) + pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2.0))
var x: = sl1 * sl2 + cl1 * cl2 * cdelta
var ad: = atan2(y, x)
var dist: = ad * R
return dist
func remove_closest_dot(screen_pos: Vector2) -> bool: func remove_closest_dot(screen_pos: Vector2) -> bool:
var closest_dot = find_at_screen_position(screen_pos) var closest_dot = find_at_screen_position(screen_pos)

View File

@@ -1,6 +1,5 @@
extends Node extends Node
static func map_value_to_item(data, item, value_name: StringName): static func map_value_to_item(data, item, value_name: StringName):
var meta = item.get_meta(value_name, '') var meta = item.get_meta(value_name, '')
if meta == '': if meta == '':
@@ -17,7 +16,6 @@ static func map_value_to_item(data, item, value_name: StringName):
else: else:
push_error('не найден путь %s (%s) для $%s.%s (%s)' % [paths_copy, ret_val[2], item.name, value_name, item.tooltip_text]) push_error('не найден путь %s (%s) для $%s.%s (%s)' % [paths_copy, ret_val[2], item.name, value_name, item.tooltip_text])
static func map_error_codes_to_item(data, item, value_name: StringName, value_init: int): static func map_error_codes_to_item(data, item, value_name: StringName, value_init: int):
var metas = item.get_meta(value_name, '') var metas = item.get_meta(value_name, '')
if not (metas is Array): if not (metas is Array):
@@ -38,3 +36,52 @@ static func map_error_codes_to_item(data, item, value_name: StringName, value_in
item.set(value_name, test_res) item.set(value_name, test_res)
else: else:
item.set(value_name, value_init) item.set(value_name, value_init)
# Плавное обновление с анимацией
static func map_value_to_item_animated(data, item, value_name: StringName):
var meta = item.get_meta(value_name, '')
if meta == '' or not (meta is String): return
var paths: = Array()
tools.map_solid_to_array(meta, paths)
var ret_val: = [null, false, 0]
tools.get_value_by_path(data, paths, ret_val)
if ret_val[1]:
_animate_property(item, value_name, ret_val[0])
else:
push_error('не найден путь для $%s.%s' % [item.name, value_name])
static func map_error_codes_to_item_animated(data, item, value_name: StringName, value_init: int):
var metas = item.get_meta(value_name, '')
if not (metas is Array): return
var paths: = Array()
var values: = Array()
for meta in metas:
tools.map_solid_to_array(meta, paths)
var ret_val: = [null, false, 0]
tools.get_value_by_path(data, paths, ret_val)
if ret_val[1]:
values.append(ret_val[0])
else:
push_error('не найден путь для $%s.%s' % [item.name, value_name])
var target_value: int
if values.size() == metas.size():
target_value = 1 if values.count(true) == values.size() else 2
else:
target_value = value_init
_animate_property(item, value_name, target_value)
static func _animate_property(item, property: StringName, target_value):
var current = item.get(property)
if typeof(current) != typeof(target_value): return
if current == target_value: return
# Исправление: преобразуем StringName в String для NodePath
var tween = item.create_tween()
tween.set_trans(Tween.TRANS_QUINT)
tween.set_ease(Tween.EASE_OUT)
tween.tween_property(item, NodePath(String(property)), target_value, 0.3)

View File

@@ -29,6 +29,7 @@ func get_result_string(result: Result):
func _on_request_timer(): func _on_request_timer():
print('_on_request_timer: ', Time.get_ticks_msec())
if HTTPClient.Status.STATUS_DISCONNECTED != get_http_client_status(): if HTTPClient.Status.STATUS_DISCONNECTED != get_http_client_status():
return return
var rc: = request(request_url) var rc: = request(request_url)

View File

@@ -123,6 +123,15 @@ func _ready():
signaller.conn(signaller.режим_настройки, on_mode_changed) signaller.conn(signaller.режим_настройки, on_mode_changed)
signaller.conn(signaller.режим_эмс, on_mode_changed) signaller.conn(signaller.режим_эмс, on_mode_changed)
signaller.connect('debag_control_pressed', Callable(self, 'on_debag_button_pressed')) signaller.connect('debag_control_pressed', Callable(self, 'on_debag_button_pressed'))
scouting.request_sent_afsp_left.connect(_on_request_sent_left.bind($pribor_afsp_1))
scouting.response_received_afsp_left.connect(_on_response_received.bind($pribor_afsp_1))
scouting.request_sent_afsp_right.connect(_on_request_sent_left.bind($pribor_afsp_2))
scouting.response_received_afsp_right.connect(_on_response_received.bind($pribor_afsp_2))
scouting.request_sent_bpo_left.connect(_on_request_sent_left.bind($pribor_rtr))
scouting.response_received_bpo_left.connect(_on_response_received.bind($pribor_rtr))
scouting.serviceability_rtr_afsp_left.connect(on_serviceability_rtr.bind($pribor_afsp_1))
scouting.serviceability_rtr_afsp_right.connect(on_serviceability_rtr.bind($pribor_afsp_2))
scouting.serviceability_rtr_bpo.connect(on_serviceability_rtr.bind($pribor_rtr))
func online_change_arr(_u, conn_node, pribor_meta): func online_change_arr(_u, conn_node, pribor_meta):
@@ -166,25 +175,19 @@ func on_pribor_press(pribor_path, header_text, pribor_node):
pribor.add_to_group('pribor_items') pribor.add_to_group('pribor_items')
add_child(pribor) add_child(pribor)
update_pribor_items_visibility() update_pribor_items_visibility()
if pribor_node.get_meta('unit_name')[0] == 'уарэп-афсп-левый' or pribor_node.get_meta('unit_name')[0] == 'уарэп-афсп-правый':
pribor.node_request.connect('send_http_request', Callable(self, 'on_send_http_request').bind(pribor_node, pribor.node_request_timer.wait_time))
pribor.connect('receive_response_afp_bpo', Callable(self, 'on_receive_response_afp_bpo').bind(pribor_node))
if pribor_node.get_meta('unit_name')[0] == 'уарэп-бпо-1' or pribor_node.get_meta('unit_name')[0] == 'уарэп-бпо-2':
pribor.node_request_1.connect('send_http_request', Callable(self, 'on_send_http_request').bind(pribor_node, pribor.node_request_timer_1.wait_time))
pribor.connect('receive_response_afp_bpo', Callable(self, 'on_receive_response_afp_bpo').bind(pribor_node))
#signal receive_response_afp_bpo
# Вызов при отправке запроса на селфтест АФСП # Вызов при отправке запроса на селфтест АФСП и РТР
func on_send_http_request(node: Node, time_req: float) -> void: func _on_request_sent_left(_url: String, node: Node) -> void:
node.progress_max_value = 100 node.progress_max_value = 100
node.progress_value = 0 node.progress_value = 0
node.progress_visible = true node.progress_visible = true
node.timeout_tween = time_req node.timeout_tween = float(ProjectSettings.get_setting('application/config/%s' % 'Период опроса состояния АФСП, секунды'))
func on_receive_response_afp_bpo(node: Node) -> void: func _on_response_received(_response: String, _success: bool, node: Node):
node.progress_value = 100 node.progress_value = 100
node.progress_visible = false
## Прием сигналов о текущем состояниях приборах ## Прием сигналов о текущем состояниях приборах
@@ -196,6 +199,10 @@ func on_update_uf_serviceability(uf_serviceaability: int, uf_pribor: Node) -> vo
uf_pribor.state = uf_serviceaability uf_pribor.state = uf_serviceaability
func on_serviceability_rtr(state: int, node_rtr: Node)-> void:
node_rtr.state = state
func _on_chk_show_functional_toggled(toggled_on: bool) -> void: func _on_chk_show_functional_toggled(toggled_on: bool) -> void:
if cur_pribor_node: if cur_pribor_node:
cur_pribor_node.show_functional = toggled_on cur_pribor_node.show_functional = toggled_on

View File

@@ -228,7 +228,6 @@ func _on_scale_selected(val: bool, nm: StringName):
update_table(ctable, new_indexes) update_table(ctable, new_indexes)
map_yems_info_to_table(unit_info, ctable, indexes) map_yems_info_to_table(unit_info, ctable, indexes)
connect_cmd_handlers(nm, ctable, new_indexes) connect_cmd_handlers(nm, ctable, new_indexes)
on_data_received(unit_info, nm)
## Обновляет результат выполнения команды оператора ## Обновляет результат выполнения команды оператора

View File

@@ -1,5 +1,7 @@
class_name Iterfer extends Node class_name Iterfer extends Node
const default_um: = 5.0 ## Угол места по умолчанию
## Представление помехи. ## Представление помехи.
## Режимы помехи. ## Режимы помехи.
@@ -92,7 +94,7 @@ const EXCLUDE_INTERFER = ['srni1', 'srnm2', 'srngps', 'svi1', 'svm2']
const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей. const ID_INTERFERS_LEN = 63 ## Размер пула номеров целей.
const INTERFER_OFF = 'off' const INTERFER_OFF = 'off'
const INTERFER_IQFILE = 'IQ-файл' const INTERFER_IQFILE = 'IQ-файл'
const POW_DEFAULT: float = 50.0 const POW_DEFAULT: float = 80.0
const PERIOD_DEFAULT = 7.5 const PERIOD_DEFAULT = 7.5
const MIN_WIDTH_COEF = 1.0 const MIN_WIDTH_COEF = 1.0
const MIN_RESEND_TIMEOUT = 0.05 const MIN_RESEND_TIMEOUT = 0.05
@@ -115,9 +117,12 @@ var fs_closed: Dictionary ## Словарь секторо
var width_coef: float = 1.5 ## Коэффициент расширения полосы var width_coef: float = 1.5 ## Коэффициент расширения полосы
var now: = 0.0 ## Время с момента запуска var now: = 0.0 ## Время с момента запуска
var resend_timeout: float = 1.0 ## Время повторной отправки команды var resend_timeout: float = 1.0 ## Время повторной отправки команды
var trim = 0.0 ## Килевая качка
var roll = 0.0 ## Бортовая качка
signal send_ecms(time_now) ## Сигнал отправки помех, если настало время signal send_ecms(time_now) ## Сигнал отправки помех, если настало время
var unit_nav: unit.Unit ## Навигация
## Сеанс помехи. ## Сеанс помехи.
class Interfer: class Interfer:
@@ -136,6 +141,10 @@ class Interfer:
var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ var nmfs: int = 0 ## Номер модуля ФС в нумерации СТЦ
var priority: int = 0 ## Приоритет помехи var priority: int = 0 ## Приоритет помехи
var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе var active: bool = false ## Флаг, что фиксируется мощность на выходном усилителе
var freq_change = false ## Флаг, что частота изменнена пользователем
var bort = false ## Признак бортовая или килевая качка
var trim_roll = 0.0 ## Качка для конкретной помехи
var trim_roll_manual = false ## Флаг что ум задан оператором
func _to_string() -> String: func _to_string() -> String:
return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni]
@@ -172,9 +181,25 @@ class Interfer:
var param = self.get(value_key) var param = self.get(value_key)
if param == null: if param == null:
params[value_key] = value params[value_key] = value
elif value_key == 'um':
trim_roll_manual = true
params[value_key] = value
set_um()
else: else:
self.set(value_key, value) self.set(value_key, value)
if value_key == 'freq':
freq_change = true
func set_um():
if not self.trim_roll_manual:
self.um = params.get('um', default_um) + self.trim_roll
else:
self.um = params.get('um', default_um)
if (self.um < settings.UM_MIN):
self.um = settings.UM_MIN
elif (self.um > settings.UM_MAX):
self.um = settings.UM_MAX
signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи. signal interfer_preparing(ecm: Interfer) ## Вызывается в момент запуска помехи.
signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи. signal interfer_run(ecm: Interfer) ## Вызывается в момент начала работы помехи.
signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке.
@@ -220,8 +245,8 @@ func _ready() -> void:
threats.connect('threats_resized', Callable(self, 'on_threats_resized')) threats.connect('threats_resized', Callable(self, 'on_threats_resized'))
threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms)) threats.connect('threat_update', Callable(self, 'on_threats_update').bind(ecms))
ProjectSettings.connect('settings_changed', on_settings_changed) ProjectSettings.connect('settings_changed', on_settings_changed)
var unit_nav: = network.get_unit_instance('навигация') unit_nav = network.get_unit_instance('навигация')
unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps)) unit_nav.connect('data_received', on_nav_data_received.bind(unit_caps, ecms))
connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps)) connect('send_ecms', Callable(self, 'on_send_ecms').bind(ecms, unit_caps))
call_deferred('emit_signal', 'interfer_resized', ecms) call_deferred('emit_signal', 'interfer_resized', ecms)
@@ -229,8 +254,9 @@ func _ready() -> void:
func on_trenazh_mode(val: bool): trenazh_mode = val func on_trenazh_mode(val: bool): trenazh_mode = val
func on_nav_data_received(coords: Dictionary, unit_caps): func on_nav_data_received(coords: Dictionary, unit_caps, ecms):
var ship_time = Time.get_datetime_dict_from_system() var ship_time = Time.get_datetime_dict_from_system()
var update_bk_kk = false
course = coords.get('k', 0.0) course = coords.get('k', 0.0)
var data_to_json = { var data_to_json = {
'ts': 8, 'ts': 8,
@@ -248,9 +274,23 @@ func on_nav_data_received(coords: Dictionary, unit_caps):
'minute': ship_time['minute'], 'minute': ship_time['minute'],
'second': ship_time['second'],} 'second': ship_time['second'],}
var json_data = JSON.stringify(data_to_json).to_utf8_buffer() var json_data = JSON.stringify(data_to_json).to_utf8_buffer()
if data_to_json['roll'] != roll:
roll = data_to_json['roll']
update_bk_kk = true
if data_to_json['trim'] != trim:
trim = data_to_json['trim']
update_bk_kk = true
unit_caps.tx_stack.append(json_data) unit_caps.tx_stack.append(json_data)
msg8_num += 1 msg8_num += 1
msg8_num %= 0xffffffff msg8_num %= 0xffffffff
if update_bk_kk:
for ecm in ecms.values():
if ecm.bort:
ecm.trim_roll = roll
else:
ecm.trim_roll = trim
ecm.set_um()
signaller.emit_signal('interfer_new', ecm)
func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void: func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void:
@@ -283,6 +323,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary) -> void:
if thrs[ecm_i] == th_id: if thrs[ecm_i] == th_id:
var ecm = ecms[ecm_i] var ecm = ecms[ecm_i]
ecm.params['freq'] = thr.freq ecm.params['freq'] = thr.freq
ecm.params['um'] = get_um(thr.lat, thr.lon, thr.alt)
ecm.kni = fposmod(thr.aoa - course, 360) ecm.kni = fposmod(thr.aoa - course, 360)
call_ecm_proc(ecm) call_ecm_proc(ecm)
if ecm.nmfs in gos_nmfs or prd.fs_caps_id[ecm.nmfs] in fs_closed: if ecm.nmfs in gos_nmfs or prd.fs_caps_id[ecm.nmfs] in fs_closed:
@@ -386,6 +427,7 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
var id = item.id var id = item.id
param['freq'] = item.freq param['freq'] = item.freq
param['width'] = item.width * width_coef param['width'] = item.width * width_coef
param['um'] = get_um(item.lat, item.lon, item.alt)
if item.rparams.has('period'): if item.rparams.has('period'):
param['period'] = item.rparams['period'] param['period'] = item.rparams['period']
if (item.rkrp != '') and item.fflags.rkrp and auto_enabled: if (item.rkrp != '') and item.fflags.rkrp and auto_enabled:
@@ -406,6 +448,15 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v
interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power)
## Возвращает угол места до заданной цели
## [param lat] -
## [param lon] -
## [param alt] - высота
func get_um(lat: float, lon: float, alt: float) -> float:
var dist = tools.haversine_m(lat, lon, unit_nav.latlon.x, unit_nav.latlon.y)
return rad_to_deg(atan(alt / dist)) if dist > 0.0 else default_um
func on_interfer_rcv(interfer_params: Array, unit0, unit_caps, ecms) -> void: func on_interfer_rcv(interfer_params: Array, unit0, unit_caps, ecms) -> void:
var err: bool = false var err: bool = false
var mode = interfer_params[0] var mode = interfer_params[0]
@@ -469,11 +520,12 @@ func interfer_create(_u, interfer_name, ecms, param, kni, id, dict, source_inter
ecm.params = param ecm.params = param
ecm.powp = power ecm.powp = power
ecm.source_interfer = source_interfer ecm.source_interfer = source_interfer
ecm.um = param.get('um', 15.0) # Значение по умолчанию
if source_interfer == SOURCE_INTERFER[0]: if source_interfer == SOURCE_INTERFER[0]:
if thrs_dict.has(dict[ispp]): if thrs_dict.has(dict[ispp]):
ecm.priority = thrs_dict[dict[ispp]].priority ecm.priority = thrs_dict[dict[ispp]].priority
call_ecm_proc(ecm) call_ecm_proc(ecm)
set_bort(ecm)
ecm.set_um()
var set_nmfs_ok = set_nmfs(ecm) var set_nmfs_ok = set_nmfs(ecm)
if set_nmfs_ok != Error.OK: if set_nmfs_ok != Error.OK:
log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp]) log.error('Ошибка выбора модуля ФС для помехи: %s' %[ecm.ispp])
@@ -541,7 +593,8 @@ func call_diap(ecm, ecm_params: Dictionary):
var band = fs_index_arr[0] / 4 var band = fs_index_arr[0] / 4
if ecm_params['files'].has(band): if ecm_params['files'].has(band):
ecm.params['filename'] = ecm_params['files'][band][0] ecm.params['filename'] = ecm_params['files'][band][0]
ecm.params['freq'] = ecm_params['files'][band][1] if not ecm.freq_change:
ecm.params['freq'] = ecm_params['files'][band][1]
func call_pdchm(ecm, ecm_params: Dictionary): func call_pdchm(ecm, ecm_params: Dictionary):
@@ -719,3 +772,18 @@ func on_send_ecms(time_now, ecms, unit_caps):
func _process(delta: float) -> void: func _process(delta: float) -> void:
now += delta now += delta
emit_signal('send_ecms', now) emit_signal('send_ecms', now)
func set_bort(ecm: Interfer):
var sec = 0
for sect in prd.FS_SECTORS.keys():
if ecm.kni >= prd.FS_SECTORS[sect][0] and ecm.kni <= prd.FS_SECTORS[sect][1]:
sec = sect
if (sec == 0) or (sec == 2):
ecm.bort = false
else:
ecm.bort = true
if ecm.bort:
ecm.trim_roll = roll
else:
ecm.trim_roll = trim

View File

@@ -13,6 +13,7 @@ class NaviSource extends unit.Unit:
var data: = {} ## Принятые данные var data: = {} ## Принятые данные
var source_addr: = [] ## Адрес отправителя var source_addr: = [] ## Адрес отправителя
const akng_mode = {0:'тестовый', 1:'основной', 2:'резервный', 3:'аварийный'} const akng_mode = {0:'тестовый', 1:'основной', 2:'резервный', 3:'аварийный'}
static var latlon: Vector2 ## Текущие координаты
func _to_string() -> String: func _to_string() -> String:
return String('NaviSource: %s %s' % [self.name, 'на связи' if online else 'отключен']) return String('NaviSource: %s %s' % [self.name, 'на связи' if online else 'отключен'])
func _init(nm): func _init(nm):
@@ -40,8 +41,10 @@ class NaviSource extends unit.Unit:
if flags & (1 << 1): if flags & (1 << 1):
data['k'] = rx_data.decode_float(8) # Курс, градусы (0.0 - Север) data['k'] = rx_data.decode_float(8) # Курс, градусы (0.0 - Север)
if flags & (1 << 2): if flags & (1 << 2):
data['latitude'] = float(rx_data.decode_s32(12) * 180) / pow_2_30 # Широта, градусы latlon.x = float(rx_data.decode_s32(12) * 180) / pow_2_30 # Широта, градусы
data['longitude'] = float(rx_data.decode_s32(16) * 180) / pow_2_30 # Долгота, градусы latlon.y = float(rx_data.decode_s32(16) * 180) / pow_2_30 # Долгота, градусы
data['latitude'] = latlon.x
data['longitude'] = latlon.y
if flags & (1 << 3): if flags & (1 << 3):
data['speed'] = rx_data.decode_float(20) # Скорость, м/с data['speed'] = rx_data.decode_float(20) # Скорость, м/с
data['err'] = rx_data.decode_u16(24) # data['err'] = rx_data.decode_u16(24) #

View File

@@ -445,12 +445,11 @@ func _handle_fs_work_state() -> void:
(current_litera == 6 and control_results.fs_6) or \ (current_litera == 6 and control_results.fs_6) or \
(current_litera == 7 and control_results.fs_7) or \ (current_litera == 7 and control_results.fs_7) or \
(current_litera == 1 and control_results.fs_1): (current_litera == 1 and control_results.fs_1):
if not block_kasseta_y5_config['yau07']:
_set_status('Ожидание данных от ЯУ-07...')
return # НЕ переходим дальше пока нет данных от сервиса МП550
if flags.only_fs: if flags.only_fs:
state = STATE_MACHINE.IN_EMS_STOP state = STATE_MACHINE.IN_EMS_STOP
elif not block_kasseta_y5_config['yau07']:
_set_status('Ожидание данных от МП550 сервиса...')
return
else: else:
state = STATE_MACHINE.UG_SET_RAY_5 if current_litera == 1 else STATE_MACHINE.UG_SET_RAY_CTRL state = STATE_MACHINE.UG_SET_RAY_5 if current_litera == 1 else STATE_MACHINE.UG_SET_RAY_CTRL
@@ -470,7 +469,7 @@ func _handle_check_kasseta_state() -> void:
_set_status('Перегрев УМ') _set_status('Перегрев УМ')
state = STATE_MACHINE.IN_EMS_STOP state = STATE_MACHINE.IN_EMS_STOP
else: else:
flags.flag_only_fs = true flags.only_fs = true
_set_status('Касета У5: ERROR, Проверка ФС.') _set_status('Касета У5: ERROR, Проверка ФС.')
state = STATE_MACHINE.FS_TURN_ON state = STATE_MACHINE.FS_TURN_ON
@@ -554,8 +553,7 @@ func _handle_ray_read_mode() -> void:
## Обработка записи состояния луча ## Обработка записи состояния луча
func _handle_ray_write_mode(ray_num: int) -> void: func _handle_ray_write_mode(ray_num: int) -> void:
if not _can_write_ray(): if not _can_write_ray(): return
return
if (ray_num == 6 or ray_num == 5) and not control_timer.is_stopped(): if (ray_num == 6 or ray_num == 5) and not control_timer.is_stopped():
control_timer.stop() control_timer.stop()
@@ -1057,9 +1055,9 @@ static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dicti
y5_config.yau07 = not flag_not_trust y5_config.yau07 = not flag_not_trust
if y5_config.yau07: if y5_config.yau07:
y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1) y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1)
y5_config.ug = (status_prd[0] >> 1) & 1 y5_config.ug = (status_prd[0] >> 1) & 1 != 0
y5_config.ukp1 = (status_prd[0] >> 2) & 1 y5_config.ukp1 = (status_prd[0] >> 2) & 1 != 0
y5_config.ukp2 = (status_prd[0] >> 3) & 1 y5_config.ukp2 = (status_prd[0] >> 3) & 1 != 0
return y5_config return y5_config

503
scripts/rtr.gd Normal file
View File

@@ -0,0 +1,503 @@
class_name rtr
extends Node
#region Перечисления
enum State {
IDLE,
REQUESTING_AFSP_LEFT,
REQUESTING_AFSP_RIGHT,
REQUESTING_BPO_LEFT,
REQUESTING_BPO_RIGHT,
WAITING_TIMEOUT
}
#endregion
#region Сигналы
# Сигналы отправки запроса
signal request_sent_afsp_left(url: String)
signal request_sent_afsp_right(url: String)
signal request_sent_bpo_left(url: String)
signal request_sent_bpo_right(url: String)
# Сигналы получения ответа
signal response_received_afsp_left(response: String, success: bool)
signal response_received_afsp_right(response: String, success: bool)
signal response_received_bpo_left(response: String, success: bool)
signal response_received_bpo_right(response: String, success: bool)
# Сигналы исправности (0 - нет связи, 1 - всё пройдено, 2 - есть ошибки)
signal serviceability_rtr_afsp_left(state: int)
signal serviceability_rtr_afsp_right(state: int)
signal serviceability_rtr_bpo(state: int) # Общий для левого и правого БПО
#endregion
#region Константы
const RESULT_STRINGS = {
HTTPRequest.Result.RESULT_SUCCESS: 'Запрос успешен',
HTTPRequest.Result.RESULT_CHUNKED_BODY_SIZE_MISMATCH: 'Несоответствие размеров частей сообщения',
HTTPRequest.Result.RESULT_CANT_CONNECT: 'Запрос не выполнен при подключении',
HTTPRequest.Result.RESULT_CANT_RESOLVE: 'Запрос не выполнен при разрешении',
HTTPRequest.Result.RESULT_CONNECTION_ERROR: 'Запрос не выполнен из-за ошибки соединения',
HTTPRequest.Result.RESULT_TLS_HANDSHAKE_ERROR: 'Запрос не выполнен на TLS рукопожатии',
HTTPRequest.Result.RESULT_NO_RESPONSE: 'Запрос не имеет ответа (пока)',
HTTPRequest.Result.RESULT_BODY_SIZE_LIMIT_EXCEEDED: 'Запрос превысил максимальный размер',
HTTPRequest.Result.RESULT_BODY_DECOMPRESS_FAILED: 'Не удалось распаковать сообщение',
HTTPRequest.Result.RESULT_REQUEST_FAILED: 'Запрос не удался',
HTTPRequest.Result.RESULT_DOWNLOAD_FILE_CANT_OPEN: 'Невозможно открыть файл загрузки',
HTTPRequest.Result.RESULT_DOWNLOAD_FILE_WRITE_ERROR: 'Невозможно записать в файл загрузки',
HTTPRequest.Result.RESULT_REDIRECT_LIMIT_REACHED: 'Достигнут лимит перенаправлений',
HTTPRequest.Result.RESULT_TIMEOUT: 'Время истекло'
}
#endregion
#region Переменные
var http_request: HTTPRequest
var addresses: Dictionary
var current_state: State = State.IDLE
var current_url: String = ''
var timeout_timer: Timer
# Результаты запросов АФСП
var last_response_afsp_left: String = ''
var last_response_afsp_right: String = ''
var last_error_afsp_left: String = ''
var last_error_afsp_right: String = ''
# Результаты запросов БПО
var last_response_bpo_left: String = ''
var last_response_bpo_right: String = ''
var last_error_bpo_left: String = ''
var last_error_bpo_right: String = ''
# Статус online для каждого борта
var online_afsp_left: bool = false
var online_afsp_right: bool = false
var online_bpo_left: bool = false
var online_bpo_right: bool = false
# Состояния исправности для БПО
var bpo_left_state: int = 0 # 0 - нет связи, 1 - успешно, 2 - ошибка
var bpo_right_state: int = 0
var last_success_time_afsp_left: int = 0
var last_success_time_afsp_right: int = 0
var last_success_time_bpo_left: int = 0
var last_success_time_bpo_right: int = 0
var timeout: float
var current_device_type: String = ''
#endregion
#region Инициализация
func _ready() -> void:
http_request = HTTPRequest.new()
add_child(http_request)
http_request.request_completed.connect(_on_request_completed)
timeout_timer = Timer.new()
add_child(timeout_timer)
timeout_timer.timeout.connect(_on_timeout)
timeout_timer.one_shot = true
signaller.conn(signaller.start_contol_device, Callable(self, '_on_start_contol_device'))
#endregion
#region Публичные методы
func get_result_string(result: int) -> String:
return RESULT_STRINGS.get(result, '<неизвестный код результата HTTPRequest - %d>' % result)
# Геттеры АФСП
func get_afsp_left_response() -> String:
return last_response_afsp_left
func get_afsp_right_response() -> String:
return last_response_afsp_right
func get_afsp_left_error() -> String:
return last_error_afsp_left
func get_afsp_right_error() -> String:
return last_error_afsp_right
func has_afsp_left_success() -> bool:
return not last_response_afsp_left.is_empty()
func has_afsp_right_success() -> bool:
return not last_response_afsp_right.is_empty()
func is_afsp_left_online() -> bool:
return online_afsp_left
func is_afsp_right_online() -> bool:
return online_afsp_right
# Геттеры БПО
func get_bpo_left_response() -> String:
return last_response_bpo_left
func get_bpo_right_response() -> String:
return last_response_bpo_right
func get_bpo_left_error() -> String:
return last_error_bpo_left
func get_bpo_right_error() -> String:
return last_error_bpo_right
func has_bpo_left_success() -> bool:
return not last_response_bpo_left.is_empty()
func has_bpo_right_success() -> bool:
return not last_response_bpo_right.is_empty()
func is_bpo_left_online() -> bool:
return online_bpo_left
func is_bpo_right_online() -> bool:
return online_bpo_right
# Обновление статуса online
func _update_online_status(device: String, side: String, is_online: bool) -> void:
var unit_name = ''
if device == 'afsp':
unit_name = 'уарэп-афсп-' + ('левый' if side == 'left' else 'правый')
else:
unit_name = 'уарэп-бпо-' + ('1' if side == 'left' else '2')
var unit_instance = network.get_unit_instance(unit_name)
if unit_instance:
unit_instance.rx_tick = Time.get_ticks_msec()
if unit_instance.online != is_online:
unit_instance.online = is_online
unit_instance.emit_signal('line_changed', unit_instance)
#endregion
#region Обработчики сигналов
func _on_start_contol_device() -> void:
if current_state != State.IDLE:
return
# Сбрасываем предыдущие результаты
last_response_afsp_left = ''
last_response_afsp_right = ''
last_error_afsp_left = ''
last_error_afsp_right = ''
last_response_bpo_left = ''
last_response_bpo_right = ''
last_error_bpo_left = ''
last_error_bpo_right = ''
bpo_left_state = 0
bpo_right_state = 0
addresses['Адрес АФСП левого борта'] = ProjectSettings.get_setting('application/config/%s' % 'Адрес АФСП левого борта')
addresses['Адрес АФСП правого борта'] = ProjectSettings.get_setting('application/config/%s' % 'Адрес АФСП правого борта')
addresses['Адрес БПО левого борта'] = ProjectSettings.get_setting('application/config/%s' % 'Адрес БПО левого борта')
addresses['Адрес БПО правого борта'] = ProjectSettings.get_setting('application/config/%s' % 'Адрес БПО правого борта')
timeout = float(ProjectSettings.get_setting('application/config/%s' % 'Период опроса состояния АФСП, секунды'))
# Начинаем с запроса к АФСП левого борта
_request_next(State.REQUESTING_AFSP_LEFT)
func _on_request_completed(result: int, response_code: int, _headers: PackedStringArray, body: PackedByteArray) -> void:
if current_state == State.WAITING_TIMEOUT:
return
timeout_timer.stop()
var current_time = Time.get_ticks_msec()
var is_afsp = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_AFSP_RIGHT)
var is_left = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_BPO_LEFT)
var side_str = 'left' if is_left else 'right'
var device_str = 'afsp' if is_afsp else 'bpo'
if response_code == 200:
var response_text = body.get_string_from_utf8()
_save_response(response_text)
var test_passed_all = _check_all_tests_passed(response_text)
_update_success_time(device_str, side_str, current_time)
_update_online_status(device_str, side_str, true)
_emit_response_signal(device_str, side_str, response_text, true)
var serviceability_state = 1 if test_passed_all else 2
if is_afsp:
_emit_afsp_serviceability_signal(side_str, serviceability_state)
else:
_update_bpo_state(side_str, serviceability_state)
_emit_bpo_serviceability_signal()
_on_request_finished()
else:
var error_msg = 'HTTP ошибка %d: %s' % [response_code, get_result_string(result)]
log.message(Logger.ERROR, error_msg)
_save_error(error_msg)
_update_online_status(device_str, side_str, false)
_emit_response_signal(device_str, side_str, error_msg, false)
if is_afsp:
_emit_afsp_serviceability_signal(side_str, 0)
else:
_update_bpo_state(side_str, 0)
_emit_bpo_serviceability_signal()
_on_request_finished()
func _update_bpo_state(side: String, state: int) -> void:
if side == 'left':
bpo_left_state = state
else:
bpo_right_state = state
func _calculate_bpo_combined_state() -> int:
# Если оба не на связи -> 0
if bpo_left_state == 0 and bpo_right_state == 0:
return 0
# Если хоть один с ошибкой -> 2
if bpo_left_state == 2 or bpo_right_state == 2:
return 2
# Если один не на связи (0), а другой успешно (1) -> 1
if (bpo_left_state == 0 and bpo_right_state == 1) or (bpo_left_state == 1 and bpo_right_state == 0):
return 1
# Оба успешно -> 1
if bpo_left_state == 1 and bpo_right_state == 1:
return 1
# По умолчанию
return 0
func _emit_bpo_serviceability_signal() -> void:
var combined_state = _calculate_bpo_combined_state()
emit_signal('serviceability_rtr_bpo', combined_state)
func _state_to_string(state: int) -> String:
match state:
0: return 'нет связи'
1: return 'успешно'
2: return 'ошибка'
return 'неизвестно'
func _emit_afsp_serviceability_signal(side: String, state: int) -> void:
if side == 'left':
emit_signal('serviceability_rtr_afsp_left', state)
else:
emit_signal('serviceability_rtr_afsp_right', state)
func _check_all_tests_passed(response_text: String) -> bool:
var json = JSON.new()
if json.parse(response_text) != OK:
log.message(Logger.ERROR, '[rtr] Ошибка парсинга JSON')
return false
var data = json.data
var self_tests = data.get('SelfTest', [])
var all_passed = true
for test in self_tests:
var system_list = test.get('SystemList', [])
for system in system_list:
# Рекурсивно проверяем систему и её подсистемы
if not _check_system_passed(system):
all_passed = false
# Не прерываем цикл, чтобы найти все ошибки
return all_passed
# Рекурсивная функция для проверки SystemList и вывода ошибок
func _check_system_passed(system: Dictionary) -> bool:
var system_passed = true
# Проверяем устройства в текущей системе
var dev_list = system.get('DevList', [])
for dev in dev_list:
var test_passed = dev.get('TestPassed', false)
if not test_passed:
system_passed = false
# Формируем читаемое имя устройства для вывода
var dev_name = dev.get('DevName', 'Неизвестное устройство')
var dev_id = dev.get('DevId', '?')
var error_text = dev.get('ErrorText', 'Нет описания ошибки')
print_debug('[rtr] НАЙДЕНА ОШИБКА! Устройство: %s (ID: %s). TestPassed: false. Причина: %s' % [dev_name, dev_id, error_text])
# Рекурсивно проверяем вложенные подсистемы
var sub_systems = system.get('SystemList', [])
for sub in sub_systems:
if not _check_system_passed(sub):
system_passed = false
return system_passed
# Исправленная функция подсчета (использует Dictionary для передачи по ссылке)
func _count_tests_in_system(system: Dictionary, counters: Dictionary) -> void:
var dev_list = system.get('DevList', [])
for dev in dev_list:
counters['total'] += 1
if dev.get('TestPassed', false):
counters['passed'] += 1
var sub_systems = system.get('SystemList', [])
for sub in sub_systems:
_count_tests_in_system(sub, counters)
func _on_timeout() -> void:
var was_state = current_state
current_state = State.WAITING_TIMEOUT
http_request.cancel_request()
var is_afsp = (was_state == State.REQUESTING_AFSP_LEFT or was_state == State.REQUESTING_AFSP_RIGHT)
var is_left = (was_state == State.REQUESTING_AFSP_LEFT or was_state == State.REQUESTING_BPO_LEFT)
var side_str = 'left' if is_left else 'right'
var device_str = 'afsp' if is_afsp else 'bpo'
var timeout_msg = 'Таймаут %.1f секунд - %s' % [timeout, get_result_string(HTTPRequest.Result.RESULT_TIMEOUT)]
_save_error(timeout_msg)
_update_online_status(device_str, side_str, false)
_emit_response_signal(device_str, side_str, timeout_msg, false)
if is_afsp:
_emit_afsp_serviceability_signal(side_str, 0)
else:
_update_bpo_state(side_str, 0)
_emit_bpo_serviceability_signal()
_on_request_finished()
#endregion
#region Управление запросами
func _request_next(next_state: State) -> void:
current_state = next_state
current_device_type = 'afsp' if (next_state == State.REQUESTING_AFSP_LEFT or next_state == State.REQUESTING_AFSP_RIGHT) else 'bpo'
match current_state:
State.REQUESTING_AFSP_LEFT:
current_url = addresses.get('Адрес АФСП левого борта', '')
State.REQUESTING_AFSP_RIGHT:
current_url = addresses.get('Адрес АФСП правого борта', '')
State.REQUESTING_BPO_LEFT:
current_url = addresses.get('Адрес БПО левого борта', '')
State.REQUESTING_BPO_RIGHT:
current_url = addresses.get('Адрес БПО правого борта', '')
State.IDLE:
return
if current_url.is_empty():
push_error('URL не задан для ', current_state)
var error_msg = 'URL не задан'
_save_error(error_msg)
var is_afsp = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_AFSP_RIGHT)
var is_left = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_BPO_LEFT)
var side_str = 'left' if is_left else 'right'
var device_str = 'afsp' if is_afsp else 'bpo'
_update_online_status(device_str, side_str, false)
_emit_response_signal(device_str, side_str, error_msg, false)
if is_afsp:
_emit_afsp_serviceability_signal(side_str, 0)
else:
_update_bpo_state(side_str, 0)
_emit_bpo_serviceability_signal()
_on_request_finished()
return
match current_state:
State.REQUESTING_AFSP_LEFT:
emit_signal('request_sent_afsp_left', current_url)
State.REQUESTING_AFSP_RIGHT:
emit_signal('request_sent_afsp_right', current_url)
State.REQUESTING_BPO_LEFT:
emit_signal('request_sent_bpo_left', current_url)
State.REQUESTING_BPO_RIGHT:
emit_signal('request_sent_bpo_right', current_url)
timeout_timer.start(timeout)
var error = http_request.request(current_url)
if error != OK:
log.message(Logger.ERROR, 'Ошибка запроса: %s' & error)
var error_msg = 'Ошибка запроса: ' + error_string(error)
_save_error(error_msg)
var is_afsp = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_AFSP_RIGHT)
var is_left = (current_state == State.REQUESTING_AFSP_LEFT or current_state == State.REQUESTING_BPO_LEFT)
var side_str = 'left' if is_left else 'right'
var device_str = 'afsp' if is_afsp else 'bpo'
_update_online_status(device_str, side_str, false)
_emit_response_signal(device_str, side_str, error_msg, false)
if is_afsp:
_emit_afsp_serviceability_signal(side_str, 0)
else:
_update_bpo_state(side_str, 0)
_emit_bpo_serviceability_signal()
_on_request_finished()
func _on_request_finished() -> void:
match current_state:
State.REQUESTING_AFSP_LEFT:
_request_next(State.REQUESTING_AFSP_RIGHT)
State.REQUESTING_AFSP_RIGHT:
_request_next(State.REQUESTING_BPO_LEFT)
State.REQUESTING_BPO_LEFT:
_request_next(State.REQUESTING_BPO_RIGHT)
State.REQUESTING_BPO_RIGHT, State.WAITING_TIMEOUT:
current_state = State.IDLE
#endregion
#region Сохранение результатов
func _save_response(response: String) -> void:
match current_state:
State.REQUESTING_AFSP_LEFT:
last_response_afsp_left = response
State.REQUESTING_AFSP_RIGHT:
last_response_afsp_right = response
State.REQUESTING_BPO_LEFT:
last_response_bpo_left = response
State.REQUESTING_BPO_RIGHT:
last_response_bpo_right = response
func _save_error(error: String) -> void:
match current_state:
State.REQUESTING_AFSP_LEFT:
last_error_afsp_left = error
State.REQUESTING_AFSP_RIGHT:
last_error_afsp_right = error
State.REQUESTING_BPO_LEFT:
last_error_bpo_left = error
State.REQUESTING_BPO_RIGHT:
last_error_bpo_right = error
func _update_success_time(device: String, side: String, time: int) -> void:
if device == 'afsp':
if side == 'left':
last_success_time_afsp_left = time
else:
last_success_time_afsp_right = time
else:
if side == 'left':
last_success_time_bpo_left = time
else:
last_success_time_bpo_right = time
func _emit_response_signal(device: String, side: String, response: String, success: bool) -> void:
if device == 'afsp':
if side == 'left':
emit_signal('response_received_afsp_left', response, success)
else:
emit_signal('response_received_afsp_right', response, success)
else:
if side == 'left':
emit_signal('response_received_bpo_left', response, success)
else:
emit_signal('response_received_bpo_right', response, success)
#endregion

1
scripts/rtr.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://ctqcvjqjb1av3

View File

@@ -28,13 +28,13 @@ var UnitProfiles: Dictionary[StringName, Array] = { \
'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'], 'навигация': ['navi', ['*', 60000, true, true ], 'IP-адрес на котором принимают сообщения от навигации'],
# < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий > # < Название: [протокол, [адрес, порт, широковещательное, привязывать], комментарий >
'эмс-ведущий': ['iyems-rx', ['127.0.0.1', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'], 'эмс-ведущий': ['iyems-rx', ['192.168.11.105', 61000, false, true], 'IP-адрес для приёма докладов от информационных ЭМС устройств'],
'эмс-ор63': ['iyems-tx', ['127.0.0.1', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-ор63': ['iyems-tx', ['192.168.11.200', 61001, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-454': ['iyems-tx', ['127.0.0.1', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-454': ['iyems-tx', ['192.168.11.200', 61002, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-го': ['iyems-tx', ['127.0.0.1', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-го': ['iyems-tx', ['192.168.11.200', 61003, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-рлс1': ['iyems-tx', ['127.0.0.1', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-рлс1': ['iyems-tx', ['192.168.11.200', 61004, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-рлс2': ['iyems-tx', ['127.0.0.1', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-рлс2': ['iyems-tx', ['192.168.11.200', 61005, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-ннвс': ['iyems-tx', ['127.0.0.1', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-ннвс': ['iyems-tx', ['192.168.11.200', 61006, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-изделие7': ['iyems-tx', ['127.0.0.1', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-изделие7': ['iyems-tx', ['127.0.0.1', 61007, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],
'эмс-изделие8': ['iyems-tx', ['127.0.0.1', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'], 'эмс-изделие8': ['iyems-tx', ['127.0.0.1', 61008, false, false], 'IP-адрес для передачи команд информационному ЭМС устройству'],

View File

@@ -1,7 +1,7 @@
extends Node extends Node
## Работа с целями. ## Работа с целями.
const MSG9_RESEND_TIMEOUT = 1.0 ## Время повторной отправки пакета 9 const MSG9_RESEND_TIMEOUT = 3.0 ## Время повторной отправки пакета 9
## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10) ## Режимы работы АФСП и БПО (Протокол ТНИИС-СТЦ, пункт 2.5.10)
enum AFSP_BPO_MODE { enum AFSP_BPO_MODE {
@@ -217,10 +217,7 @@ func send_msg9(unit_caps):
func on_timer_msg9(unit_caps, timer_msg9): func on_timer_msg9(unit_caps, timer_msg9):
if bpo_mode != bpo_mode_rx: send_msg9(unit_caps)
send_msg9(unit_caps)
else:
timer_msg9.stop()
func on_caps_line_changed(unit_caps, timer_msg9): func on_caps_line_changed(unit_caps, timer_msg9):

View File

@@ -197,6 +197,30 @@ func set_bits(v, a, m):
return (~m) & v | a & m return (~m) & v | a & m
# Возвращает расстояние в метрах между двумя точками на карте
func haversine_m(lat1: float, lon1: float, lat2: float, lon2: float) -> float:
# Радиус Земли в метрах
const R: = 6372795.0
# Преобразование градусов в радианы
var rlat1: = deg_to_rad(lat1)
var rlon1: = deg_to_rad(lon1)
var rlat2: = deg_to_rad(lat2)
var rlon2: = deg_to_rad(lon2)
# вычисление длины большого круга
var cl1: = cos(rlat1)
var cl2: = cos(rlat2)
var sl1: = sin(rlat1)
var sl2: = sin(rlat2)
var delta: = rlon2 - rlon1
var cdelta: = cos(delta)
var sdelta: = sin(delta)
var y: = sqrt(pow(cl2 * sdelta, 2.0) + pow(cl1 * sl2 - sl1 * cl2 * cdelta, 2.0))
var x: = sl1 * sl2 + cl1 * cl2 * cdelta
var ad: = atan2(y, x)
var dist: = ad * R
return dist
func fill_files_table(tbl: table, folder: String, rows_types: Array): func fill_files_table(tbl: table, folder: String, rows_types: Array):
var dir: = DirAccess.open(folder) var dir: = DirAccess.open(folder)
if dir == null: if dir == null: