WIP Исправление. Рассинхрон данных во время работы контроля.
This commit is contained in:
@@ -37,16 +37,16 @@ func on_data_received(yau: Object) -> void:
|
|||||||
'''Обработка полученных данных от УФ'''
|
'''Обработка полученных данных от УФ'''
|
||||||
var new_ems_status = control_ems(yau.status)
|
var new_ems_status = control_ems(yau.status)
|
||||||
var status_changed = false
|
var status_changed = false
|
||||||
|
|
||||||
# Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн'
|
# Обновляем только ключи КЭМС/ЭМС, сохраняя 'УФ-онлайн'
|
||||||
for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']:
|
for key in ['КЭМС-Б1', 'ЭМС-Б1', 'ЭМС-Б2', 'ИП220-27Б']:
|
||||||
var old_value = uf_status.get(key, false)
|
var old_value = uf_status.get(key, false)
|
||||||
var new_value = new_ems_status.get(key, false)
|
var new_value = new_ems_status.get(key, false)
|
||||||
|
|
||||||
if old_value != new_value:
|
if old_value != new_value:
|
||||||
uf_status[key] = new_value
|
uf_status[key] = new_value
|
||||||
status_changed = true
|
status_changed = true
|
||||||
|
|
||||||
if status_changed:
|
if status_changed:
|
||||||
update_serviceability()
|
update_serviceability()
|
||||||
#endregion
|
#endregion
|
||||||
@@ -64,7 +64,7 @@ func is_operational() -> bool:
|
|||||||
func update_serviceability() -> void:
|
func update_serviceability() -> void:
|
||||||
'''Обновление общего статуса сервисабельности'''
|
'''Обновление общего статуса сервисабельности'''
|
||||||
var new_serviceability: int = STATE_VAL.GOOD
|
var new_serviceability: int = STATE_VAL.GOOD
|
||||||
|
|
||||||
# Проверяем онлайн-статус
|
# Проверяем онлайн-статус
|
||||||
if uf_status.get('УФ-онлайн', false) == false:
|
if uf_status.get('УФ-онлайн', false) == false:
|
||||||
new_serviceability = STATE_VAL.NONE
|
new_serviceability = STATE_VAL.NONE
|
||||||
@@ -84,7 +84,7 @@ static func control_ems(status: Array) -> Dictionary:
|
|||||||
var status_dic: Dictionary = {}
|
var status_dic: Dictionary = {}
|
||||||
if status.is_empty() or status.size() < 3:
|
if status.is_empty() or status.size() < 3:
|
||||||
return status_dic
|
return status_dic
|
||||||
|
|
||||||
status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1)
|
status_dic['КЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 0) & 1) and bool((status[StatusIndex.SOCKETS] >> 3) & 1)
|
||||||
status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1)
|
status_dic['ЭМС-Б1'] = bool((status[StatusIndex.SOCKETS] >> 1) & 1) and bool((status[StatusIndex.SOCKETS] >> 4) & 1)
|
||||||
status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1)
|
status_dic['ЭМС-Б2'] = bool((status[StatusIndex.SOCKETS] >> 2) & 1) and bool((status[StatusIndex.SOCKETS] >> 5) & 1)
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ class DeviceObserver:
|
|||||||
|
|
||||||
func update_control_results(results: Dictionary) -> bool:
|
func update_control_results(results: Dictionary) -> bool:
|
||||||
var changed := false
|
var changed := false
|
||||||
last_results = results.duplicate()
|
|
||||||
|
|
||||||
if results.get('is_over_control', false):
|
if results.get('is_over_control', false):
|
||||||
# Контроль завершен - проверяем все результаты
|
# Контроль завершен - проверяем все результаты
|
||||||
@@ -162,8 +161,7 @@ func _recalculate_overall_state() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _update_display() -> void:
|
func _update_display() -> void:
|
||||||
var config: Dictionary = STATUS_CONFIG[overall_prd_state].duplicate()
|
var config: Dictionary
|
||||||
|
|
||||||
text = config.text
|
text = config.text
|
||||||
modulate = config.color
|
modulate = config.color
|
||||||
add_theme_color_override("font_color", config.font_color)
|
add_theme_color_override("font_color", config.font_color)
|
||||||
@@ -258,7 +256,7 @@ func get_device_status(device_name: String) -> Dictionary:
|
|||||||
"online": observer.status[DEVICE_STATUS.ONLINE],
|
"online": observer.status[DEVICE_STATUS.ONLINE],
|
||||||
"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,
|
||||||
"status_uf": status_uf
|
"status_uf": status_uf
|
||||||
}
|
}
|
||||||
return {}
|
return {}
|
||||||
|
|||||||
@@ -560,7 +560,7 @@ func set_fs_color(ecms):
|
|||||||
|
|
||||||
|
|
||||||
func update_fs_colors():
|
func update_fs_colors():
|
||||||
var fs_colors = $canvas.fs_default_colors.duplicate()
|
var fs_colors = $canvas.fs_default_colors
|
||||||
for key in fs_active.keys():
|
for key in fs_active.keys():
|
||||||
fs_colors[key] = color_ecm
|
fs_colors[key] = color_ecm
|
||||||
for key in fs_emit.keys():
|
for key in fs_emit.keys():
|
||||||
|
|||||||
@@ -654,7 +654,7 @@ func get_krp(threat: threats.Threat):
|
|||||||
if not ecm_params.has('files'): continue
|
if not ecm_params.has('files'): continue
|
||||||
if typeof(ecm_params['files']) == TYPE_DICTIONARY:
|
if typeof(ecm_params['files']) == TYPE_DICTIONARY:
|
||||||
for value in ecm_params['files'].values():
|
for value in ecm_params['files'].values():
|
||||||
if typeof(value) == TYPE_STRING:
|
if typeof(value) == TYPE_STRING:
|
||||||
if value == threat.rparams['filename']:
|
if value == threat.rparams['filename']:
|
||||||
krp = key
|
krp = key
|
||||||
return krp
|
return krp
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ func _process(_delta: float) -> void:
|
|||||||
func on_data_received(unit_pribor: Object) -> void:
|
func on_data_received(unit_pribor: Object) -> void:
|
||||||
var status: PackedByteArray = unit_pribor.status
|
var status: PackedByteArray = unit_pribor.status
|
||||||
if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return
|
if status.size() < 100: push_error('Принимаемые значения от ЯУ-07б:%s не коррентны. (размер пакета: %d)' % [self_name, status.size()]); return
|
||||||
|
|
||||||
temperature_um = check_temperature_um(status)
|
temperature_um = check_temperature_um(status)
|
||||||
flags.temperature_ok = check_overheating(temperature_um)
|
flags.temperature_ok = check_overheating(temperature_um)
|
||||||
block_ip_config = check_block_ip(status, block_ip_config)
|
block_ip_config = check_block_ip(status, block_ip_config)
|
||||||
@@ -1140,7 +1140,7 @@ static func _create_fs_mapping(s_name: String) -> Dictionary:
|
|||||||
|
|
||||||
## Получение статуса ФС
|
## Получение статуса ФС
|
||||||
static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary:
|
static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_results: Dictionary, fs_rules_config: Array) -> Dictionary:
|
||||||
var updated_results := fs_results.duplicate()
|
var updated_results := fs_results
|
||||||
for fs_num in packet_type_7:
|
for fs_num in packet_type_7:
|
||||||
if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']):
|
if not (fs_num in fs_mapping and fs_mapping[fs_num]['condition']):
|
||||||
continue
|
continue
|
||||||
@@ -1209,19 +1209,19 @@ static func power_um_ukp(status: PackedByteArray, litera: int, pwr_result: Array
|
|||||||
static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array:
|
static func update_max_power_values(power_data: Array, max_power_values: Array) -> Array:
|
||||||
if power_data.size() != 6:
|
if power_data.size() != 6:
|
||||||
if max_power_values.is_empty():
|
if max_power_values.is_empty():
|
||||||
max_power_values = power_data.duplicate()
|
max_power_values = power_data
|
||||||
elif power_data[0] > max_power_values[0]:
|
elif power_data[0] > max_power_values[0]:
|
||||||
max_power_values = power_data.duplicate()
|
max_power_values = power_data
|
||||||
return max_power_values
|
return max_power_values
|
||||||
|
|
||||||
if max_power_values.is_empty():
|
if max_power_values.is_empty():
|
||||||
max_power_values = power_data.duplicate()
|
max_power_values = power_data
|
||||||
else:
|
else:
|
||||||
for i in 6:
|
for i in 6:
|
||||||
if power_data[i] > max_power_values[i]:
|
if power_data[i] > max_power_values[i]:
|
||||||
max_power_values[i] = power_data[i]
|
max_power_values[i] = power_data[i]
|
||||||
|
|
||||||
return max_power_values.duplicate()
|
return max_power_values
|
||||||
|
|
||||||
|
|
||||||
## Подготовка принятых данных по контролю для передачи в сцену
|
## Подготовка принятых данных по контролю для передачи в сцену
|
||||||
@@ -1322,7 +1322,7 @@ func _deep_copy_power_structure() -> Dictionary:
|
|||||||
for litera in power_for_litera:
|
for litera in power_for_litera:
|
||||||
copy[litera] = {}
|
copy[litera] = {}
|
||||||
for ray_type in power_for_litera[litera]:
|
for ray_type in power_for_litera[litera]:
|
||||||
copy[litera][ray_type] = power_for_litera[litera][ray_type].duplicate()
|
copy[litera][ray_type] = power_for_litera[litera][ray_type]
|
||||||
return copy
|
return copy
|
||||||
|
|
||||||
## Восстановление состояний по умолчанию
|
## Восстановление состояний по умолчанию
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ func _ready() -> void:
|
|||||||
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
signaller.connect('rto_threat_unsel_all', Callable(self, 'on_rto_threat_unsel_all').bind(threats))
|
||||||
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats))
|
signaller.connect('threat_selected', Callable(self, 'on_threat_selected').bind(threats))
|
||||||
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
|
signaller.connect('interfer_init', Callable(self, 'on_interfer_init').bind(threats))
|
||||||
|
|
||||||
ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats))
|
ProjectSettings.connect('settings_changed', on_settings_changed.bind(threats))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user