From 88b350cdbaeb8e5d819727ed7fcf48f56a9d04bb Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Mon, 1 Dec 2025 13:37:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80.=20=D0=A2=D0=B0=D0=B1=D1=83=D0=BB=D1=8F=D1=86=D0=B8?= =?UTF-8?q?=D1=8F?= 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 ++++++++++++++--------------- scripts/prd.gd | 20 ++++++++-------- scripts/pribor-prd.gd | 17 +++++++------- 6 files changed, 41 insertions(+), 40 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/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..d7e6f1e7 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 @@ -999,12 +999,13 @@ static func on_ug_setting(prd_unit: Object, settings_ug: Dictionary, prd_cmd_arr var result: int if cur_litera in [2, 4, 6]: result = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) - prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result]]) + prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result]]) elif cur_litera in [3, 5, 7]: result = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_2, result]]) elif cur_litera == 1: - result = ((settings_ug.ATT_UM_2 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) + result = ((settings_ug.ATT_UM_1 & 0x07) << 3) | (settings_ug.RAY_DOU_NUM & 0x07) + prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_1, result]]) prd_cmd_array.append([prd_unit.CmdCode.WRITE_ISA, [settings_ug.ADDR_UG_LITERA_3, settings_ug.ATT_UM_3]]) return true @@ -1081,7 +1082,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) @@ -1152,7 +1153,7 @@ static func on_fs_state(packet_type_7: Dictionary, fs_mapping: Dictionary, fs_re ## Вспомогательная функция для проверки применения правила static func _should_apply_rule(fs_num: int, rule: Dictionary, results: Dictionary) -> bool: - return bool(fs_num >= rule.min and fs_num < rule.max) and results.has(rule.key) + return bool(fs_num >= rule.min and fs_num <= rule.max) and results.has(rule.key) ## Получение мощности при выполнении контроля