Доработка. WIP Отработка истекания времени кластера

This commit is contained in:
sasha80
2026-03-23 16:31:12 +03:00
parent 1cb3985c70
commit 68ab1b325d
5 changed files with 45 additions and 10 deletions

View File

@@ -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]

View File

@@ -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]]

View File

@@ -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}

View File

@@ -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() ## Доклад о состоянии