From b81c666b8b51b201461ecdbc3577d87da3a77eb8 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 1 Dec 2025 11:02:41 +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=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8A=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20+=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B0=D0=B1=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/pribor-prd-k.gd | 4 ++-- scenes/pribor-prd-n/pribor-prd-n.gd | 2 +- scenes/pribor-prd-v/pribor-prd-v.gd | 2 +- scenes/tabs-switch/lbl_ready.gd | 36 ++++++++++++++--------------- scenes/контроль/control_prd.gd | 2 +- scenes/контроль/контроль.tscn | 4 ++-- scripts/prd-ctl-config.gd | 16 ++++++------- scripts/prd.gd | 20 ++++++++-------- scripts/pribor-prd.gd | 10 ++++---- table/table.gd | 9 ++++---- 10 files changed, 52 insertions(+), 53 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 01546878..04da31fb 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -179,12 +179,12 @@ static func on_control_result(for_result_dic: Dictionary) -> void: var fs_1 = true if int(result_dic.fs_1) == 1 else false if fs_1 and block_kasseta_y5_prd_config_k['yau07']: for_result_dic.module_fs_1.state = STATE_VAL.GOOD if result_dic.dkm_1 else STATE_VAL.ERROR - + var fs_6 = true if int(result_dic.fs_6) == 1 else false if fs_6 and block_kasseta_y5_prd_config_k['yau07']: for_result_dic.module_fs_6.state = STATE_VAL.GOOD if result_dic.dkm_6 else STATE_VAL.ERROR for_result_dic.dou_6.state = STATE_VAL.GOOD if result_dic.dou_6 else STATE_VAL.ERROR - + var fs_7 = true if int(result_dic.fs_7) == 1 else false if fs_7 and block_kasseta_y5_prd_config_k['yau07']: for_result_dic.module_fs_7.state = STATE_VAL.GOOD if result_dic.dkm_7 else STATE_VAL.ERROR diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index b246c83e..8b16452a 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -170,7 +170,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void: if fs_2 and block_kasseta_y5_prd_config_n['yau07']: for_result_dic.module_fs_2.state = STATE_VAL.GOOD if result_dic.dkm_2 else STATE_VAL.ERROR for_result_dic.dou_2.state = STATE_VAL.GOOD if result_dic.dou_2 else STATE_VAL.ERROR - + var fs_3 = true if int(result_dic.fs_3) == 1 else false if fs_3 and block_kasseta_y5_prd_config_n['yau07']: for_result_dic.module_fs_3.state = STATE_VAL.GOOD if result_dic.dkm_3 else STATE_VAL.ERROR diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 0509a549..2229c2a2 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -166,7 +166,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void: if fs_5 and block_kasseta_y5_prd_config_v['yau07']: for_result_dic.module_fs_5.state = STATE_VAL.GOOD if result_dic.dkm_5 else STATE_VAL.ERROR for_result_dic.dou_5.state = STATE_VAL.GOOD if result_dic.dou_5 else STATE_VAL.ERROR - + var fs_4 = true if int(result_dic.fs_4) == 1 else false if fs_4 and block_kasseta_y5_prd_config_v['yau07']: for_result_dic.module_fs_4.state = STATE_VAL.GOOD if result_dic.dkm_4 else STATE_VAL.ERROR diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index 62c1e0df..19ecc2ea 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -22,17 +22,17 @@ class DeviceObserver: var device_name: String var status: Array = [false, false, false] # [online, operational, control_complete] var last_results: Dictionary = {} - + func update_online_state(online: bool) -> bool: if status[DEVICE_STATUS.ONLINE] != online: status[DEVICE_STATUS.ONLINE] = online return true return false - + func update_control_results(results: Dictionary) -> bool: var changed := false last_results = results.duplicate() - + if results.get('is_over_control', false): # Контроль завершен - проверяем все результаты var all_ok := true @@ -40,7 +40,7 @@ class DeviceObserver: if key != 'is_over_control' and not results[key]: all_ok = false break - + if status[DEVICE_STATUS.STATUS] != all_ok or status[DEVICE_STATUS.CONTROL] != true: status[DEVICE_STATUS.STATUS] = all_ok status[DEVICE_STATUS.CONTROL] = true @@ -50,7 +50,7 @@ class DeviceObserver: var basic_ok: bool = results.get('block_kasseta', false) and \ results.get('block_ip', false) and \ results.get('temperature', true) - + if status[DEVICE_STATUS.STATUS] != basic_ok or status[DEVICE_STATUS.CONTROL] != false: status[DEVICE_STATUS.STATUS] = basic_ok status[DEVICE_STATUS.CONTROL] = false @@ -63,10 +63,10 @@ var overall_prd_state: PRD_STATE = PRD_STATE.NONE func _ready() -> void: tooltip_text = 'Нет связи с приборами комплекса' add_theme_color_override("font_color", Color.BLACK) - + # Инициализация наблюдателей _initialize_observers() - + # Подписка на сигналы ПРД модулей for prd_module in prd.prd_dict.values(): # Подключаемся к контролю ПРД @@ -75,12 +75,12 @@ func _ready() -> void: # Подключаемся к онлайн-статусу ЯУ-07 if prd_module.unit_yau07: prd_module.unit_yau07.connect('line_changed', Callable(self, '_on_prd_online_changed').bind(prd_module)) - + # Подписка на УФ var unit_uf = network.get_unit_instance('уарэп-эмс') if unit_uf: unit_uf.data_received.connect(Callable(self, '_on_uf_status_receive')) - + # Инициализация начального состояния _recalculate_overall_state() @@ -88,11 +88,11 @@ func _ready() -> void: func _initialize_observers() -> void: var device_names := [ 'уарэп-яу07-1н', 'уарэп-яу07-1в', 'уарэп-яу07-1к', - 'уарэп-яу07-2н', 'уарэп-яу07-2в', 'уарэп-яу07-2к', + 'уарэп-яу07-2н', 'уарэп-яу07-2в', 'уарэп-яу07-2к', 'уарэп-яу07-3н', 'уарэп-яу07-3в', 'уарэп-яу07-3к', 'уарэп-яу07-4н', 'уарэп-яу07-4в', 'уарэп-яу07-4к' ] - + for device_name in device_names: device_observers[device_name] = DeviceObserver.new() device_observers[device_name].device_name = device_name @@ -126,11 +126,11 @@ func _recalculate_overall_state() -> void: var new_state := PRD_STATE.NONE var has_online_devices := false var all_operational := true - + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: has_online_devices = true - + if observer.status[DEVICE_STATUS.CONTROL]: # Если контроль завершен - строгая проверка if not observer.status[DEVICE_STATUS.STATUS]: @@ -141,12 +141,12 @@ func _recalculate_overall_state() -> void: if not observer.status[DEVICE_STATUS.STATUS]: all_operational = false # Не прерываем, чтобы проверить все устройства - + if has_online_devices: new_state = PRD_STATE.GOOD if all_operational else PRD_STATE.ERR else: new_state = PRD_STATE.NONE - + if overall_prd_state != new_state: overall_prd_state = new_state _update_display() @@ -154,7 +154,7 @@ func _recalculate_overall_state() -> void: func _update_display() -> void: var config: Dictionary = STATUS_CONFIG[overall_prd_state].duplicate() - + text = config.text modulate = config.color add_theme_color_override("font_color", config.font_color) @@ -190,7 +190,7 @@ func get_overall_status() -> Dictionary: var online_count := 0 var operational_count := 0 var control_complete_count := 0 - + for observer in device_observers.values(): if observer.status[DEVICE_STATUS.ONLINE]: online_count += 1 @@ -198,7 +198,7 @@ func get_overall_status() -> Dictionary: operational_count += 1 if observer.status[DEVICE_STATUS.CONTROL]: control_complete_count += 1 - + return { "overall_state": overall_prd_state, "online_devices": online_count, diff --git a/scenes/контроль/control_prd.gd b/scenes/контроль/control_prd.gd index 6e9a9d74..57602b9b 100644 --- a/scenes/контроль/control_prd.gd +++ b/scenes/контроль/control_prd.gd @@ -30,7 +30,7 @@ func _setup_styles() -> void: func _setup_signals() -> void: connect("pressed", Callable(self, "_on_pressed")) - + if not signaller: return var signals_to_connect := ["режим_работа", "режим_журнал", "режим_эмс", "режим_настройки", "режим_контроль"] diff --git a/scenes/контроль/контроль.tscn b/scenes/контроль/контроль.tscn index 873ab275..1e69ea84 100644 --- a/scenes/контроль/контроль.tscn +++ b/scenes/контроль/контроль.tscn @@ -253,8 +253,8 @@ animations = [{ [sub_resource type="ShaderMaterial" id="ShaderMaterial_71ec4"] shader = ExtResource("9_71ec4") -shader_parameter/grey = Vector3(0.14, 0.13, 0.13) -shader_parameter/orange = Vector3(0.95, 0.55, 0.05) +shader_parameter/white = Vector3(0.14, 0.13, 0.13) +shader_parameter/black = Vector3(0.95, 0.55, 0.05) shader_parameter/gamma = 2.0 [node name="Контроль" type="Panel"] diff --git a/scripts/prd-ctl-config.gd b/scripts/prd-ctl-config.gd index b5851062..c21ca4c8 100644 --- a/scripts/prd-ctl-config.gd +++ b/scripts/prd-ctl-config.gd @@ -154,7 +154,7 @@ func _ensure_config_exists() -> bool: # Проверяем, нужно ли обновить конфигурацию if _should_update_config(): return _update_config() - + # Если файл уже существует - все ок if FileAccess.file_exists(CONFIG_PATH): return true @@ -172,13 +172,13 @@ func _should_update_config() -> bool: # Если файла конфигурации нет - нужно создать if not FileAccess.file_exists(CONFIG_PATH): return true - + # Проверяем версию существующей конфигурации var config_file = FileAccess.open(CONFIG_PATH, FileAccess.READ) if config_file: var json_text = config_file.get_as_text() config_file.close() - + var json = JSON.new() if json.parse(json_text) == OK: var existing_version = json.data.get("config_version", "0.0.0") @@ -187,7 +187,7 @@ func _should_update_config() -> bool: else: # Если ошибка парсинга - нужно обновить return true - + return false @@ -196,16 +196,16 @@ func _should_update_config() -> bool: static func _compare_versions(version1: String, version2: String) -> int: var v1_parts = version1.split(".") var v2_parts = version2.split(".") - + for i in range(max(v1_parts.size(), v2_parts.size())): var v1_part = int(v1_parts[i]) if i < v1_parts.size() else 0 var v2_part = int(v2_parts[i]) if i < v2_parts.size() else 0 - + if v1_part < v2_part: return -1 elif v1_part > v2_part: return 1 - + return 0 @@ -216,7 +216,7 @@ func _update_config() -> bool: var backup_path = CONFIG_PATH + ".backup_v" + _current_version DirAccess.copy_absolute(CONFIG_PATH, backup_path) print("Создана резервная копия: ", backup_path) - + # Копируем актуальную конфигурацию return _copy_default_config() diff --git a/scripts/prd.gd b/scripts/prd.gd index cfe9e872..33f804f8 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -231,22 +231,22 @@ class PRD: execute_cmd() return execute_cmd() - + ## Мониторинг состояния юнита прд func set_prd_status() -> void: # Обновление статуса платы ЯУ-07 yemsg_board.set_status(unit_yau07.status) - + # Проверка онлайн-статусов основных модулей ug_online = (unit_yau07.status[0] >> 1) & 1 var ukp_1_online = (unit_yau07.status[0] >> 2) & 1 var ukp_2_online = (unit_yau07.status[0] >> 3) & 1 var ems_g_online = (unit_yau07.status[0] & 1) & 1 - + # Установка флага состояния УГ if not ug_online: set_ug_state = true - + # Проверка источников питания var ip_online: bool = _check_dry_contact(unit_yau07.status, prd_name) var check_temperature_um: bool = unit_control.flags.temperature_ok @@ -264,7 +264,7 @@ class PRD: serviceability = _set_serviceability_from_control_results(unit_control) else: serviceability = _set_serviceability_from_online_status(check_dic) - + ## Проверка онлайн-статуса сухих контактов static func _check_dry_contact(unit_yau07_status: PackedByteArray, self_name: String) -> bool: var bit_ip_config: Array = [0, 1, 2, 3, 4, 5, 6, 7] @@ -276,7 +276,7 @@ class PRD: if status: return false return true - + ## Установка состояния обслуживания на основе результатов контроля static func _set_serviceability_from_control_results(unit_ctrl: Object) -> int: var control_results = unit_ctrl.get_control_results() @@ -293,7 +293,7 @@ class PRD: all_ok = false break return STATE_DEVICE.GOOD if all_ok else STATE_DEVICE.ERROR - + ## Установка состояния обслуживания на основе онлайн-статусов static func _set_serviceability_from_online_status(check_dic: Dictionary) -> int: var all_online: bool = true @@ -302,8 +302,8 @@ class PRD: all_online = false break return STATE_DEVICE.NONE if all_online else STATE_DEVICE.ERROR - - + + func execute_cmd(): if not len(cmd_array): return if unit_yau07.cmd_state != unit_yau07.CmdState.DONE: return @@ -362,7 +362,7 @@ func _ready() -> void: if prd_dict.has(fs.prd_name): prd_dict[fs.prd_name].fs_dic[key] = fs fs.connect('update_modulation', prd_dict[fs.prd_name].on_update_modulation.bind(fs.index)) - + for key in FS_PRD.keys(): fs_caps_id[FS_PRD[key][1]] = key var unit_caps = network.get_unit_instance('уарэп-капсрпб') diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index bbef429b..656b5d84 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -296,7 +296,7 @@ func on_data_received(unit_pribor: Object) -> void: block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config, flags.no_trust_yau07) _set_control_result('block_kasseta', on_y5_control_result(block_kasseta_y5_config)) _set_control_result('temperature', flags.temperature_ok) - _set_control_result('block_ip', on_dry_control_result(block_ip_config)) + _set_control_result('block_ip', on_dry_control_result(block_ip_config)) if not flags.in_control: return if machine_timer.is_stopped(): return if flags.no_trust_yau07: return @@ -415,7 +415,7 @@ func _handle_fs_turn_on_state() -> void: state = STATE_MACHINE.FS_WORK -static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int: +static func take_ecm_id(ecm_dic: Dictionary, device_name: String, current_lit: int) -> int: # Получаем целевой nmfs из таблицы var target_nmfs: int = LITER_TO_NMFS.get(device_name, {}).get(current_lit, -1) if target_nmfs == -1: @@ -555,14 +555,14 @@ func _handle_ray_read_mode() -> void: func _handle_ray_write_mode(ray_num: int) -> void: if not _can_write_ray(): return - + if ray_num == 0 and current_litera != 1 and not control_timer.is_stopped(): control_timer.stop() # Установка луча if not flags.write_isa: _handle_ug_set_state(ray_num) flags.write_isa = true - + # Ожидание COUNT_PACK_POWER_RECIEVE пакетов от ЯУ-07 if count_packets_power < COUNT_PACK_POWER_RECIEVE: return state = STATE_MACHINE.READ_ISA @@ -1081,7 +1081,7 @@ static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary: else: for i_temp in 8: return_dic_temp[arr_um[i_temp]] = -999 # Заполняем нулями если УКП нет на связи - + if ukp2_online: for i_temp in 8: var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp) diff --git a/table/table.gd b/table/table.gd index 2379d434..ff5ceb25 100644 --- a/table/table.gd +++ b/table/table.gd @@ -322,6 +322,7 @@ func _set_row_selected(i_row: int, selected: bool = true) -> void: push_error('нет такого ряда: %d (всего %d рядов)\n' % [i_row, rows_count]) return if nodes.has(selector_key) and (not selected): + var node = nodes[node_key] var selector = nodes[selector_key] nodes.erase(selector_key) if is_instance_valid(selector): @@ -451,11 +452,9 @@ func remove_row(i_row: int): if nodes.has(sel_key): var selector = nodes[sel_key] - if is_instance_valid(selector): - var prnt = selector.get_parent() - if prnt: - prnt.remove_child(selector) - selector.queue_free() + var prnt = selector.get_parent() + prnt.remove_child(selector) + selector.queue_free() nodes.erase(sel_key) for i_col in columns: