From 68ab1b325dcc9dc5fdc701246b9da509a131b8a4 Mon Sep 17 00:00:00 2001 From: sasha80 Date: Mon, 23 Mar 2026 16:31:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20WIP=20=D0=9E=D1=82=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B8=D1=81=D1=82=D0=B5=D0=BA=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=82=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 +- scenes/эмс-тг/эмс-тг.gd | 49 ++++++++++++++++++--- scripts/network.gd | 2 +- scripts/{yems-info.gd => yemstg.gd} | 2 +- scripts/{yems-info.gd.uid => yemstg.gd.uid} | 0 5 files changed, 45 insertions(+), 10 deletions(-) rename scripts/{yems-info.gd => yemstg.gd} (96%) rename scripts/{yems-info.gd.uid => yemstg.gd.uid} (100%) diff --git a/project.godot b/project.godot index dd994222..1bc7aa1a 100644 --- a/project.godot +++ b/project.godot @@ -122,7 +122,7 @@ astrakb="*res://scripts/astra-kb.gd" prd="*res://scripts/prd.gd" navi="*res://scripts/navigation.gd" trassa="*res://scripts/trassa.gd" -yems_info="*res://scripts/yems-info.gd" +yemstg="*res://scripts/yemstg.gd" [debug] diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index bcd24f6c..8a160cc9 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -39,8 +39,8 @@ var table_cell_row: Array #endregion #region Заполняется во время работы -var yems_data_info: Dictionary[StringName, Dictionary] ## Доклады -var yems_data_cmd: Dictionary[StringName, Dictionary] ## Команды +var yems_info: Dictionary[StringName, Dictionary] ## Доклады +var yems_cmd: Dictionary[StringName, Dictionary] ## Команды ## Порядок следования кластеров в таблице. ## {имя_устройства: { имя_кластера: индекс_в_таблице } } var cnames_table: Dictionary[StringName, Dictionary] @@ -50,12 +50,18 @@ var pnames_scale: Dictionary[StringName, int] #endregion +enum CalsterStatus { + CLASTER_DELETED, + CLASTER_RUNNING +} + + func _ready() -> void: # Инициализировать переменные for i in index_to_unit_names.size(): var nm: = index_to_unit_names[i] name_to_index[nm] = i - yems_data_info[nm] = {} + yems_info[nm] = {} cnames_table[nm] = {} var btns_scales = get_tree().get_nodes_in_group('кнопки-шкалы') for node in btns_scales: @@ -75,7 +81,7 @@ func _ready() -> void: node.get_node('panel_tx').back_color = color_even # Подключить обработчик для приёма данных - for nm in yems_data_info: + for nm in yems_info: var yems_unit = network.get_unit_instance(nm) yems_unit.connect('data_received', on_data_received.bind(nm)) @@ -99,7 +105,7 @@ func _ready() -> void: ## Обрабатывает событие [b]data_received[/b] func on_data_received(data: Dictionary, nm: StringName): - var unit_data: = yems_data_info[nm] + var unit_data: = yems_info[nm] unit_data.merge(data, true) if not unit_data: return @@ -108,8 +114,36 @@ func on_data_received(data: Dictionary, nm: StringName): var indexes: = cnames_table[nm] # Идексы строк в таблице map_yems_data_to_table(unit_data, ctable, indexes) map_yems_data_to_scale(unit_data, claster_scale) - var inters: = find_inters(yems_data_info) + var inters: = find_inters(yems_info) map_inters_to_matrix(inters, $'матрица') + set_timeouts(yems_info) + + +func set_timeouts(info: Dictionary): + for nm in info: # nm - имя устройства + var unit_data = info[nm] + if not unit_data: continue + for cls in unit_data.mcls: # cls - один кластер + var timer_name = NodePath('%s_%s' % [nm, cls.cname]) + var timer = get_node_or_null(timer_name) + if not timer: + timer = Timer.new() + timer.name = timer_name + timer.one_shot = true + timer.connect('timeout', _on_timeout_ttl.bind(nm, cls.cname)) + add_child(timer) + print_debug('создан: %s' % timer_name) + timer.start(cls.ttl) + print_debug('пуск: %s' % timer_name) + + +func _on_timeout_ttl(nm, cname): + var timer_name = NodePath('%s_%s' % [nm, cname]) + var timer = get_node_or_null(timer_name) + if timer: + remove_child(timer) + timer.queue_free() + print_debug('удалён: %s' % timer_name) func map_inters_to_matrix(inters: Array, matrix: GridContainer) -> void: @@ -174,7 +208,8 @@ func find_inters(info: Dictionary) -> Array: if not unit_data: continue for cls in unit_data.mcls: # cls - один кластер - print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + #print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) + pass # заглушка для возвращаемых данных return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] diff --git a/scripts/network.gd b/scripts/network.gd index 2a20876c..e80ccbe0 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -1,7 +1,7 @@ @tool class_name Network extends Node -const YAU07_PROTO: = {'yau07tx': yau07.YaU07, 'iyems-tx': yems_info.YeMSInfo} +const YAU07_PROTO: = {'yau07tx': yau07.YaU07, 'iyems-tx': yemstg.YeMSTG} const UDP_PROTO: = {'capsrpb': capsrpb.CapsRpb, 'trassa': trassa.Trassa} const TCP_PROTO: = {'5p28': tcp5p28.TCP5P28} const SERIAL_PROTO: = {'spt25': spt25.SPT25} diff --git a/scripts/yems-info.gd b/scripts/yemstg.gd similarity index 96% rename from scripts/yems-info.gd rename to scripts/yemstg.gd index 572539a9..102a276b 100644 --- a/scripts/yems-info.gd +++ b/scripts/yemstg.gd @@ -1,7 +1,7 @@ extends Node -class YeMSInfo extends unit.Unit: +class YeMSTG extends unit.Unit: static var json_conv: = JSON.new() var online_timeout: float = 5000 ## Должен быть равен наибольшему времени дотоверности из всех кластеров var info: = Dictionary() ## Доклад о состоянии diff --git a/scripts/yems-info.gd.uid b/scripts/yemstg.gd.uid similarity index 100% rename from scripts/yems-info.gd.uid rename to scripts/yemstg.gd.uid