Доработка мини баров + сообщения оператору

This commit is contained in:
TotMaxim
2025-11-18 16:12:39 +03:00
parent 38c2aa9f80
commit 3fb2601aca
4 changed files with 220 additions and 55 deletions

View File

@@ -17,8 +17,11 @@ func _ready() -> void:
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -70
# Подписываемся на сигналы
unit_prd_k.connect('control_is_over', Callable(self, 'on_press_device'))
#unit_prd_k.power_amplify = power_amplifier
unit_prd_k.connect('status_updated', Callable(self, '_on_status_updated'))
# Устанавливаем начальный статус
_update_status_text(unit_prd_k.get_current_status())
on_press_device()
@@ -52,8 +55,8 @@ static func set_default_state(default_reset_array_node: Array, power_amplifier_a
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
if unit_prd_k:
_update_status_text(unit_prd_k.get_current_status())
func _exit_tree() -> void:
@@ -104,13 +107,8 @@ func on_press_device() -> void:
var dou_6: Node = $dou6_A7
var module_fs_7: Node = $kasseta_fs_kd/ref_A7
var dou_7: Node = $dou7_A8
var control_data: Dictionary = unit_prd_k.get_control_results()
var for_control_result: Dictionary = {
'control_is_over': unit_prd_k.flag_control_is_over,
'result_dic': unit_prd_k.control_results,
'power_dic': unit_prd_k.power_result,
'block_kasseta_y5_config': unit_prd_k.block_kasseta_y5_config,
'block_ip_config': unit_prd_k.block_ip_config,
'temperature_um' : unit_prd_k.temperature_um,
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
@@ -124,6 +122,7 @@ func on_press_device() -> void:
'module_fs_7': module_fs_7,
'dou_7': dou_7,
}
for_control_result.merge(control_data, true)
on_control_result(for_control_result)
@@ -169,12 +168,6 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
if block_kasseta_y5_prd_config_k['yau07']:
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
var result: bool = true
for device in result_dic.values():
if not device:
result = false
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
func find_labels(node1: Node):
if node1 is Label:
@@ -190,3 +183,20 @@ func find_labels(node1: Node):
node1.set_meta("tooltip_set", true)
for child in node1.get_children():
find_labels(child)
func _on_status_updated(status_text: String) -> void:
_update_status_text(status_text)
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_k.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_k.self_name])

View File

@@ -17,7 +17,11 @@ func _ready() -> void:
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -70
# Подписываемся на сигналы
unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device'))
unit_prd_n.connect('status_updated', Callable(self, '_on_status_updated'))
# Устанавливаем начальный статус
_update_status_text(unit_prd_n.get_current_status())
start_control()
on_press_device()
@@ -50,8 +54,8 @@ static func set_default_state(default_reset_array_node: Array, power_amplifier_a
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
if unit_prd_n:
_update_status_text(unit_prd_n.get_current_status())
func _exit_tree() -> void:
@@ -94,13 +98,8 @@ func on_press_device() -> void:
var dou_2: Node = $dou2_A5
var module_fs_3: Node = $kasseta_FS_ND/ref_A3
var dou_3: Node = $dou3_A6
var control_data: Dictionary = unit_prd_n.get_control_results()
var for_control_result: Dictionary = {
'control_is_over': unit_prd_n.flag_control_is_over,
'result_dic': unit_prd_n.control_results,
'power_dic': unit_prd_n.power_result,
'block_kasseta_y5_config': unit_prd_n.block_kasseta_y5_config,
'block_ip_config': unit_prd_n.block_ip_config,
'temperature_um' : unit_prd_n.temperature_um,
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
@@ -113,6 +112,7 @@ func on_press_device() -> void:
'module_fs_3': module_fs_3,
'dou_3': dou_3,
}
for_control_result.merge(control_data, true)
on_control_result(for_control_result)
@@ -154,12 +154,6 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
if block_kasseta_y5_prd_config_n['yau07']:
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
var result: bool = true
for device in result_dic.values():
if not device:
result = false
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
func find_labels(node1: Node):
@@ -176,3 +170,20 @@ func find_labels(node1: Node):
node1.set_meta("tooltip_set", true)
for child in node1.get_children():
find_labels(child)
func _on_status_updated(status_text: String) -> void:
_update_status_text(status_text)
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_n.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_n.self_name])

View File

@@ -17,7 +17,11 @@ func _ready() -> void:
var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier')
for temp in power_amplifier:
temp.value1 = -70
# Подписываемся на сигналы
unit_prd_v.connect('control_is_over', Callable(self, 'on_press_device'))
unit_prd_v.connect('status_updated', Callable(self, '_on_status_updated'))
# Устанавливаем начальный статус
_update_status_text(unit_prd_v.get_current_status())
on_press_device()
@@ -49,8 +53,8 @@ static func set_default_state(default_reset_array_node: Array, power_amplifier_a
func _enter_tree() -> void:
if Engine.is_editor_hint():
return
$control_result.text = 'Ожидается запуск контроля ...' # TODO: Необходимо сделать пулл сообщений
$control_result.add_theme_color_override('font_color', Color.ALICE_BLUE)
if unit_prd_v:
_update_status_text(unit_prd_v.get_current_status())
func _exit_tree() -> void:
@@ -93,25 +97,19 @@ func on_press_device() -> void:
var dou_4: Node = $dou4_A5
var module_fs_5: Node = $kasseta_FS_VD/ref_A2
var dou_5: Node = $dou5_A6
var control_data = unit_prd_v.get_control_results()
var for_control_result: Dictionary = {
'control_is_over': unit_prd_v.flag_control_is_over,
'result_dic': unit_prd_v.control_results,
'power_dic': unit_prd_v.power_result,
'block_kasseta_y5_config': unit_prd_v.block_kasseta_y5_config,
'block_ip_config': unit_prd_v.block_ip_config,
'temperature_um' : unit_prd_v.temperature_um,
'nodes_y5': nodes_y5,
'node_ip_power_arr': node_ip_power_arr,
'fs_nodes': fs_nodes,
'power_amplifier': power_amplifier,
'default_reset_array_node': default_reset_array_node,
'POWER_THRESHOLD': unit_prd_v.constants.POWER_THRESHOLD,
'name_prd': unit_prd_v.self_name,
'module_fs_4': module_fs_4,
'dou_4': dou_4,
'module_fs_5': module_fs_5,
'dou_5': dou_5,
}
for_control_result.merge(control_data, true)
on_control_result(for_control_result)
@@ -154,13 +152,6 @@ static func on_control_result(for_result_dic: Dictionary) -> void:
if block_kasseta_y5_prd_config_v['yau07']:
power_fill(for_result_dic.power_dic, for_result_dic.result_dic, for_result_dic.power_amplifier, for_result_dic.POWER_THRESHOLD)
var result: bool = true
for device in result_dic.values():
if not device:
result = false
log.message(Logger.INFO, 'Прибор ПРД-%s %s' % [for_result_dic.name_prd, ['неисправен', 'исправен'][int(result)]])
func find_labels(node1: Node):
if node1 is Label:
@@ -176,3 +167,20 @@ func find_labels(node1: Node):
node1.set_meta("tooltip_set", true)
for child in node1.get_children():
find_labels(child)
func _on_status_updated(status_text: String) -> void:
_update_status_text(status_text)
func _update_status_text(text: String) -> void:
$control_result.text = text
# Можно добавить смену цвета в зависимости от статуса
if "Ошибка" in text or "неисправен" in text:
$control_result.add_theme_color_override('font_color', Color.RED)
log.message(Logger.INFO, 'Прибор ПРД-%s неисправен' % [unit_prd_v.self_name])
elif "Ограничена" in text or "Предупреждение" in text:
$control_result.add_theme_color_override('font_color', Color.YELLOW)
elif "исправен" in text or "завершён" in text:
$control_result.add_theme_color_override('font_color', Color.GREEN)
log.message(Logger.INFO, 'Прибор ПРД-%s исправен' % [unit_prd_v.self_name])

View File

@@ -3,7 +3,18 @@ extends Node
# Константы
const CONFIG_PATH = "user://config/setting_prd_control.json"
const DEFAULT_CONFIG_PATH = "res://config/setting_prd_control.json"
# Добавляем константы для прогресса
const PROGRESS_INIT: float = 5.0
const PROGRESS_FS_TURN_ON: float = 10.0
const PROGRESS_FS_WORK: float = 20.0
const PROGRESS_CHECK_KASSETA: float = 25.0
const PROGRESS_WRITE_ISA: float = 30.0
const PROGRESS_READ_ISA: float = 35.0
const PROGRESS_UG_SET_RAY: float = 40.0
const PROGRESS_RAY_STATES: float = 50.0
const PROGRESS_COMPLETE: float = 100.0
# Для маппинга (Возможно уберу в будущем, но это не точно)
const RAY_m5: String = "RAY_m5"
const RAY_5: String = "RAY_5"
const RAY_15: String = "RAY_15"
@@ -80,7 +91,16 @@ var machine_timer: Timer = Timer.new()
var cc: int = 0
var cmd_array: Array
signal control_is_over()
# Добавляем переменные для отслеживания прогресса
var total_fs_to_check: int = 0
var completed_fs_count: int = 0
var current_fs_progress: float = 0.0
# Переменная для текущего статуса
var current_status: String = "Ожидание запуска контроля"
# Сигналы Класса
signal control_is_over() # Когда контроль все!
signal status_updated(status_text: String) # Сигнал для обновления статуса
signal update_progress(progress_value: float)
signal update_max_value_progress(max_progress_value: int)
@@ -362,6 +382,7 @@ func state_control_machine() -> void:
## 'Выполняется инициализация ФС-%s' % current_litera
func _handle_init_state() -> void:
if current_litera in [1, 2, 3, 4, 5, 6, 7]:
_set_status("Инициализация ФС-%s" % current_litera)
var flag_ecm: bool = false
for key in ecms:
var params = ecms[key].params.freq
@@ -375,12 +396,18 @@ func _handle_init_state() -> void:
flag_control_is_over = true
control_results = on_control_result(block_ip_config, control_results)
power_result = prep_power(power_for_litera, self_name)
emit_signal('control_is_over')
machine_timer.stop()
var result: bool = true
for device in control_results.values():
if not device:
result = false
_set_status("Прибор ПРД-%s: %s" % [self_name, ['неисправен', 'исправен'][int(result)]])
emit_signal('control_is_over')
##'Выполняется включение ФС-%s' % current_litera
func _handle_fs_turn_on_state() -> void:
_set_status("Включение ФС-%s" % current_litera)
manage_fs(true, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
control_timer.wait_time = constants.TIMER_DELAY
control_timer.start()
@@ -388,6 +415,7 @@ func _handle_fs_turn_on_state() -> void:
##'Выполняется проверка ФС-%s' % current_litera
func _handle_fs_work_state() -> void:
_set_status("Проверка ФС-%s" % current_litera)
if (current_litera == 2 and control_results.fs_2) or \
(current_litera == 3 and control_results.fs_3) or \
(current_litera == 4 and control_results.fs_4) or \
@@ -400,6 +428,7 @@ func _handle_fs_work_state() -> void:
## Подготовка к настройки и записи в УГ
func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
_set_status("Настройка угла %s" % _get_ray_name(RAY_DOU_NUM))
var dic_att := {
'RAY_DOU_NUM': RAY_DOU_NUM,
'ADDR_UG_LITERA_1': constants.ADDR_UG_LITERA_1,
@@ -421,25 +450,76 @@ func _handle_ug_set_state(RAY_DOU_NUM: int) -> void:
flag_write_isa = on_ug_setting(unit_prd, dic_att, cmd_array)
## Функция для продвижения статуса прогресс бара
func progressbar_status() -> void:
if current_litera == 0:
progress_value = PROGRESS_COMPLETE
await get_tree().create_timer(0.5).timeout
progress_value = 0
return
# Базовый прогресс в зависимости от состояния
var base_progress: float = 0.0
match state:
STATE_MACHINE.INIT:
cc += 10 if current_litera in [3, 5, 6, 7] else 0
if control_timer.get_time_left() > 0:
progress_value = cc + control_timer.get_wait_time() - control_timer.get_time_left()
if current_litera == 0:
progress_value = 0
base_progress = PROGRESS_INIT
STATE_MACHINE.FS_TURN_ON:
base_progress = PROGRESS_FS_TURN_ON
STATE_MACHINE.FS_WORK:
base_progress = PROGRESS_FS_WORK
STATE_MACHINE.CHEK_KASSETA_Y5:
base_progress = PROGRESS_CHECK_KASSETA
STATE_MACHINE.WRITE_ISA:
base_progress = PROGRESS_WRITE_ISA
STATE_MACHINE.READ_ISA:
base_progress = PROGRESS_READ_ISA
STATE_MACHINE.UG_SET_RAY:
base_progress = PROGRESS_UG_SET_RAY
STATE_MACHINE.UG_SET_RAY_0, STATE_MACHINE.UG_SET_RAY_1:
base_progress = PROGRESS_RAY_STATES
STATE_MACHINE.UG_SET_RAY_2:
base_progress = PROGRESS_RAY_STATES + 10.0
STATE_MACHINE.UG_SET_RAY_3:
base_progress = PROGRESS_RAY_STATES + 20.0
STATE_MACHINE.UG_SET_RAY_4:
base_progress = PROGRESS_RAY_STATES + 30.0
STATE_MACHINE.UG_SET_RAY_5:
base_progress = PROGRESS_RAY_STATES + 40.0
STATE_MACHINE.IN_EMS_STOP, STATE_MACHINE.FS_TURN_OFF, STATE_MACHINE.STOP_CONTROL:
base_progress = PROGRESS_COMPLETE
# Плавное заполнение во время ожидания таймера
if control_timer.time_left > 0 and state != STATE_MACHINE.STOP_CONTROL:
var timer_progress = (control_timer.wait_time - control_timer.time_left) / control_timer.wait_time
base_progress = lerp(base_progress - 5.0, base_progress, timer_progress)
# Распределяем прогресс по ФС
if total_fs_to_check > 0:
var progress_per_fs = PROGRESS_COMPLETE / total_fs_to_check
current_fs_progress = base_progress
progress_value = (completed_fs_count * progress_per_fs) + (current_fs_progress * progress_per_fs / PROGRESS_COMPLETE)
else:
progress_value = base_progress
progress_value = clamp(progress_value, 0.0, PROGRESS_COMPLETE)
##'Выполняется отключение ФС-%s' % current_litera
func _handle_fs_turn_off_state() -> void:
_set_status("Отключение ФС-%s" % current_litera)
flag_fs_status_ok = false
manage_fs(false, self_name, pribor_config, fs_parameters, current_litera, constants.POWER_UM)
##'Выполняется завершение проверки ФС-%s' % current_litera
func _handle_stop_control_state() -> void:
_set_status("Завершение контроля ФС-%s" % current_litera)
# Увеличиваем счетчик завершенных ФС
completed_fs_count += 1
_advance_to_next_fs()
state = STATE_MACHINE.INIT
@@ -454,6 +534,9 @@ func _advance_to_next_fs() -> void:
5: current_litera = 0
6: current_litera = 7
7: current_litera = 0
# Сбрасываем прогресс текущей ФС при переходе к следующей
if current_litera != 0:
current_fs_progress = 0.0
######################################
@@ -475,6 +558,7 @@ func on_interfer_resized(ecms_dic: Dictionary) -> void:
func _on_start_contol_device()-> void:
_set_status("Подготовка к контролю")
_determine_self_name()
machine_timer.wait_time = constants.STATE_MASHINE_TIMER
machine_timer.start()
@@ -510,8 +594,19 @@ func _determine_self_name() -> void:
control_results = device_data_config.get("control_results", {})
current_litera = device_config.get("start_litera", 0)
# Определяем общее количество ФС для контроля
match self_name:
'', '', '', '':
total_fs_to_check = 3 # Литеры 1, 6, 7
'', '', '', '':
total_fs_to_check = 2 # Литеры 2, 3
'', '', '', '':
total_fs_to_check = 2 # Литеры 4, 5
progress_value = 0
call_deferred('emit_signal', 'update_max_value_progress', device_config.get("progress_max", 20))
completed_fs_count = 0
current_fs_progress = 0.0
call_deferred('emit_signal', 'update_max_value_progress', 100)
func _load_block_config(config, config_type: String) -> Dictionary:
@@ -564,12 +659,15 @@ func on_stop_control() -> void:
func on_mode_changed(in_tree: bool) -> void:
flag_in_control = in_tree
if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет
_set_status("Ожидание запуска контроля")
flag_control_is_over = false
progress_value = 0
machine_timer.stop()
state = STATE_MACHINE.INIT
_handle_fs_turn_off_state()
#prd_v_module.cmd_array.append([unit_prd_v.CmdCode.WRITE_ISA, [constants_v.ADDR_UG_LITERA_1, ug_work_1, constants_v.ADDR_UG_LITERA_2, ug_work_2]])
else:
_set_status("Ожидание запуска контроля")
func _process_dkm_status(status: PackedByteArray) -> void:
@@ -916,3 +1014,41 @@ static func check_dou_result(control_dic: Dictionary, power_dic: Dictionary, pri
control_dic[dou] = all_dou_ok
return control_dic
# Сеттер для статуса
func _set_status(new_status: String) -> void:
if current_status != new_status:
current_status = new_status
call_deferred('emit_signal', 'status_updated', new_status)
# Геттер для текущего статуса (чтобы можно было забрать в любой момент)
func get_current_status() -> String:
return current_status
func _get_ray_name(ray_num: int) -> String:
match ray_num:
0: return "-5°"
1: return ""
2: return "15°"
3: return "25°"
4: return "35°"
5: return "45°"
6: return "ДКМ"
_: return "неизвестный угол"
# Геттер для результатов контроля
func get_control_results() -> Dictionary:
return {
'control_is_over': flag_control_is_over,
'result_dic': control_results,
'power_dic': power_result,
'block_kasseta_y5_config': block_kasseta_y5_config,
'block_ip_config': block_ip_config,
'temperature_um': temperature_um,
'POWER_THRESHOLD': constants.POWER_THRESHOLD,
'name_prd': self_name
}