Доработка. WIP Формирование команд оператором
This commit is contained in:
@@ -81,7 +81,7 @@ enum ClasterMode {
|
||||
|
||||
|
||||
## Состояние кластера. Значения должны соответствовать состояниям [b]six-state-button[/b]
|
||||
enum ClasterState {
|
||||
enum ClasterResult {
|
||||
WAITING = 0, ## Ожидание даннных
|
||||
DONE = 1, ## Выполнено
|
||||
MISSMATCH = 2 ## Несоответствие
|
||||
@@ -166,36 +166,36 @@ func _on_scale_selected(val: bool, nm: StringName):
|
||||
func map_cvi_to_table(unit_cvi: Dictionary, ctable: GDTable, indexes: Dictionary):
|
||||
for cname in indexes:
|
||||
var i_row = indexes[cname]
|
||||
var state_rxe: = ClasterState.WAITING
|
||||
var state_txe: = ClasterState.WAITING
|
||||
var result_rxe: = ClasterResult.WAITING
|
||||
var result_txe: = ClasterResult.WAITING
|
||||
if unit_cvi.has(cname):
|
||||
state_rxe = unit_cvi[cname]['state_rxe']
|
||||
state_txe = unit_cvi[cname]['state_txe']
|
||||
ctable.set_node_property(column_cmd_rx, i_row, 'state', int(state_rxe))
|
||||
ctable.set_node_property(column_cmd_tx, i_row, 'state', int(state_txe))
|
||||
result_rxe = unit_cvi[cname]['result_rxe']
|
||||
result_txe = unit_cvi[cname]['result_txe']
|
||||
ctable.set_node_property(column_cmd_rx, i_row, 'state', int(result_rxe))
|
||||
ctable.set_node_property(column_cmd_tx, i_row, 'state', int(result_txe))
|
||||
|
||||
|
||||
func update_cmd_vs_info(nm: StringName):
|
||||
if yems_info.has(nm):
|
||||
return
|
||||
var unit_info = yems_info[nm]
|
||||
if not unit_info.has('mcls'):
|
||||
return
|
||||
if not yems_cmd.has(nm):
|
||||
return
|
||||
var unit_cvi = {}
|
||||
var unit_cmd = yems_cmd[nm]
|
||||
for cls_info in unit_info.mcls:
|
||||
var claster_cvi = {}
|
||||
claster_cvi['state_txe'] = ClasterState.WAITING
|
||||
claster_cvi['state_rxe'] = ClasterState.WAITING
|
||||
var unit_cmd = yems_cmd[nm]
|
||||
var result_rxe = ClasterResult.DONE
|
||||
var result_txe = ClasterResult.DONE
|
||||
if not unit_cmd.has(cls_info.cname):
|
||||
unit_cvi[cls_info.cname] = \
|
||||
{ 'result_rxe': ClasterResult.DONE,
|
||||
'result_txe': ClasterResult.DONE }
|
||||
continue
|
||||
var cls_cmd = unit_cmd[cls_info.cname]
|
||||
claster_cvi['state_rxe'] = ClasterState.DONE if cls_info.rxe == cls_cmd.rxe else ClasterState.MISSMATCH
|
||||
claster_cvi['state_txe'] = ClasterState.DONE if cls_info.txe == cls_cmd.txe else ClasterState.MISSMATCH
|
||||
unit_cvi[cls_info.cname] = claster_cvi
|
||||
cmd_vs_info[nm] = unit_cvi
|
||||
if cls_cmd.has('rxe'):
|
||||
result_rxe = ClasterResult.DONE if (cls_info.rxe == cls_cmd.rxe) else ClasterResult.MISSMATCH
|
||||
if cls_cmd.has('txe'):
|
||||
result_txe = ClasterResult.DONE if (cls_info.txe == cls_cmd.txe) else ClasterResult.MISSMATCH
|
||||
unit_cvi[cls_info.cname] = \
|
||||
{ 'result_rxe': result_rxe,
|
||||
'result_txe': result_txe }
|
||||
cmd_vs_info[nm].merge(unit_cvi, true)
|
||||
|
||||
|
||||
## Подключает обработчики команд к таблице кластеров
|
||||
@@ -247,7 +247,7 @@ func on_data_received(data: Dictionary, nm: StringName):
|
||||
map_cvi_to_table(unit_cvi, ctable, indexes)
|
||||
|
||||
|
||||
# Объединяет списки кластеров принятых от устройства
|
||||
# Объединяет список кластеров принятых от устройства со списком сохранённым
|
||||
func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary):
|
||||
var drx: = {}
|
||||
for cls in data_rx.mcls:
|
||||
@@ -256,23 +256,30 @@ func unit_info_merge(unit_info: Dictionary, data_rx: Dictionary):
|
||||
for cls in unit_info.mcls:
|
||||
dinfo[cls.cname] = cls
|
||||
dinfo.merge(drx, true)
|
||||
unit_info.merge(data_rx, true)
|
||||
unit_info.mcls = dinfo.values()
|
||||
|
||||
|
||||
func cmd_to_unit(nm: StringName):
|
||||
var unit_yemstg: = network.get_unit_instance(nm)
|
||||
# Проверить, что предидущие отправлены
|
||||
if unit_yemstg.cmd_state != unit.Unit.CmdState.DONE:
|
||||
return
|
||||
# Команда формируется из докладов (данных принятых из сети от устройств)
|
||||
var cmd = yems_info[nm]
|
||||
# Переписать новыми значениями из команды заданной оператором
|
||||
cmd['mtype'] = 'cmd'
|
||||
# Сформировать команду из докладов (данных принятых из сети от устройств)
|
||||
var unit_info_copy = yems_info[nm].duplicate(true)
|
||||
var unit_cmd = yems_cmd[nm]
|
||||
for cls_info in cmd.mcls:
|
||||
unit_info_copy['mtype'] = 'cmd'
|
||||
# Выбрать только работающие кластеры (время которых ещё не истекло)
|
||||
var mcls = unit_info_copy.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING)
|
||||
for cls_info in mcls:
|
||||
# Если для это кластера есть команда оператора
|
||||
if unit_cmd.has(cls_info.cname):
|
||||
# Переписать новыми значениями из команды заданной оператором
|
||||
var cmd_cls = unit_cmd[cls_info.cname]
|
||||
cls_info.merge(cmd_cls, true)
|
||||
unit_yemstg.cmd.merge(cmd, true)
|
||||
cls_info.erase('status')
|
||||
# Передать команду сетевому стеку
|
||||
unit_yemstg.cmd.merge(unit_info_copy, true)
|
||||
unit_yemstg.cmd_state = unit.Unit.CmdState.SEND
|
||||
|
||||
|
||||
@@ -352,6 +359,8 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic
|
||||
ctable.set_row_text(i_row, row_text)
|
||||
ctable.set_node_property(column_cmd_rx, i_row, 'pressed', cls.rxe)
|
||||
ctable.set_node_property(column_cmd_tx, i_row, 'pressed', cls.txe)
|
||||
ctable.set_node_property(column_cmd_rx, i_row, 'state', ClasterResult.WAITING)
|
||||
ctable.set_node_property(column_cmd_tx, i_row, 'state', ClasterResult.WAITING)
|
||||
|
||||
|
||||
## Находит пересечения диапазонов
|
||||
@@ -363,8 +372,9 @@ func find_inters(info: Dictionary) -> Array:
|
||||
# nm - имя устройства
|
||||
var unit_data = info[nm]
|
||||
if not unit_data: continue
|
||||
# cls - один кластер
|
||||
for cls in unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING):
|
||||
var clasters = unit_data.mcls.filter(func(c): return c.status == ClasterStatus.RUNNING)
|
||||
for cls in clasters:
|
||||
# cls - один кластер
|
||||
var cfb = float(cls.cfb)
|
||||
var wfb = float(cls.wfb) / 2.0
|
||||
# расчёт границ частотных диапазонов
|
||||
@@ -424,14 +434,15 @@ func map_yems_info_to_scale(unit_info: Dictionary, claster_scale: GridContainer)
|
||||
var scale_rx: = claster_scale.get_node('panel_rx')
|
||||
# Получить шкалу передатчика
|
||||
var scale_tx: = claster_scale.get_node('panel_tx')
|
||||
# Проверить что диапазон работает
|
||||
if cls.status == ClasterStatus.RUNNING: # Диапазон работает (информация обновляется)
|
||||
# Диапазон работает (информация обновляется)
|
||||
if cls.status == ClasterStatus.RUNNING:
|
||||
# Отобразить диапазон приёмника, в соответствии с разрешением
|
||||
var color_rxe: = color_enabled if cls.get('rxe', false) else color_disabled
|
||||
scale_rx.set_range(cls.cname, l, h, color_rxe)
|
||||
# Отобразить диапазон передатчика, в соответствии с разрешением
|
||||
var color_txe: = color_enabled if cls.get('txe', false) else color_disabled
|
||||
scale_tx.set_range(cls.cname, l, h, color_txe)
|
||||
elif cls.status == ClasterStatus.DELETED: # Диапазон удалён (информация не обновляется)
|
||||
# Диапазон удалён (информация не обновляется)
|
||||
elif cls.status == ClasterStatus.DELETED:
|
||||
scale_rx.del_range(cls.cname)
|
||||
scale_tx.del_range(cls.cname)
|
||||
|
||||
Reference in New Issue
Block a user