From f02795ea8388c1368f0e1d3f4fc214b28867f0f6 Mon Sep 17 00:00:00 2001 From: Maxim Date: Thu, 7 Aug 2025 20:20:59 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9E=D1=82=D0=BB=D0=B0=D0=B4=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BF=D1=80=D0=B4-?= =?UTF-8?q?=D0=BD,=20=D0=BC=D1=8B=D1=88=D0=B8=D0=BD=D1=8B=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=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 | 57 ++-- scenes/pribor-prd-n/pribor-prd-n.gd | 358 ++++++++++++++++---------- scenes/pribor-prd-n/pribor-prd-n.tscn | 4 +- 3 files changed, 260 insertions(+), 159 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 9e1bf40..b163a17 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -1,6 +1,6 @@ extends "res://scenes/контроль/прибор.gd" -const Constants = { +const Constants: Dictionary = { "IN_BLANK_PRD": 1, "OUT_BLANK_PRD": 13, "CI_1_OT_FS": 8, @@ -23,13 +23,13 @@ const Constants = { "ADDR_UG_LITERA_1": 0x106, "ADDR_UG_LITERA_2": 0x108, "ADDR_UG_LITERA_3": 0x10A, - "TEMP_THRESHOLD": 70, + "TEMP_THRESHOLD": 40, "POWER_THRESHOLD": 40, "TIMER_DELAY": 5.0, "dou_ray_nuber": 0x3, "attenutor_um_1": 0x7, "attenutor_um_2": 0x7, - "attenutor_um_3": 0x7, + "attenutor_um_3": 0x0, "POWER_UM": 75, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } @@ -37,9 +37,11 @@ enum STATE_MASHINE { INIT, FS_TURN_ON, FS_WORK, + UG_SET, UM_RUN, FS_TURN_OFF, - STOP_CONTROL + STOP_CONTROL, + AWAIT } # Основные переменные var current_fs: int = 1 @@ -58,9 +60,6 @@ var ug_work_3: int # Флаги и таймеры var control_timer: Timer = Timer.new() var mashine_timer: Timer = Timer.new() -var flag_check_dkm_1: bool = false -var flag_check_dkm_6: bool = false -var flag_check_dkm_7: bool = false var pribor: String # Результаты контроля var _control_results: Dictionary = { @@ -87,6 +86,9 @@ func on_state_mashine() -> void: STATE_MASHINE.INIT: if current_fs == 1 or current_fs == 6 or current_fs == 7: state = STATE_MASHINE.FS_TURN_ON + else: + on_control_result() + state = STATE_MASHINE.AWAIT STATE_MASHINE.FS_TURN_ON: _on_control_fs(true) @@ -106,17 +108,20 @@ func on_state_mashine() -> void: var prd_module = prd.prd_dict[unit_prd.name] prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]]) flag_timer_started = true + state = STATE_MASHINE.UG_SET + + STATE_MASHINE.UG_SET: + on_ug_setting() state = STATE_MASHINE.FS_WORK STATE_MASHINE.FS_TURN_OFF: _on_control_fs(false) power_control_result() - if current_fs == 1: - on_control_result() state = STATE_MASHINE.STOP_CONTROL STATE_MASHINE.STOP_CONTROL: flag_timer_started = false + flag_check_dkm = false match current_fs: 1: current_fs = 6 6: current_fs = 7 @@ -183,11 +188,15 @@ func on_data_received(unit_prd: Object) -> void: check_temperature_um(status) # Обработка данных ЭМС _process_ems_data(status) - - flag_check_dkm_1 = check_dkm(status, Constants.DKM_BIT_1) - flag_check_dkm_6 = check_dkm(status, Constants.DKM_BIT_6) - flag_check_dkm_7 = check_dkm(status, Constants.DKM_BIT_7) - if flag_check_dkm_1 or flag_check_dkm_6 or flag_check_dkm_7: + + if current_fs == 1 and _control_results.fs_1: + flag_check_dkm = check_dkm(status, Constants.DKM_BIT_1) + elif current_fs == 6 and _control_results.fs_6: + flag_check_dkm = check_dkm(status, Constants.DKM_BIT_6) + elif current_fs == 7 and _control_results.fs_7: + flag_check_dkm = check_dkm(status, Constants.DKM_BIT_7) + + if flag_check_dkm: _process_ukp_power(status) @@ -374,7 +383,7 @@ func _on_control_fs(mode: bool) -> void: var fs_params := { 1: {'freq': 450.0, 'width': 80.0}, 6: {'freq': 2450.0, 'width': 110.0}, - 7: {'freq': 5800.0, 'width': 110.0} + 7: {'freq': 4750.0, 'width': 110.0} } # Формируем выходные данные @@ -390,7 +399,6 @@ func _on_control_fs(mode: bool) -> void: params.width, sectors[current_fs - 1] if current_fs == 1 else sectors[current_fs - 5] ]) - signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM) @@ -417,14 +425,18 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void: for fs in packet_type_7: if fs in fs_mapping and fs_mapping[fs]["condition"]: var data = packet_type_7[fs] - var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs - if fs < 4: + if fs < 4 and current_fs == 1: _control_results["fs_1"] = (data.isg == 1) - elif fs <24: + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs + elif fs < 24 and current_fs == 6: _control_results["fs_6"] = (data.isg == 1) - else: + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs + elif fs > 23 and current_fs == 7: _control_results["fs_7"] = (data.isg == 1) + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs func on_ug_setting() -> void: @@ -443,8 +455,7 @@ func on_ug_setting() -> void: var prd_module = prd.prd_dict[unit_prd.name] prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result_1, Constants.ADDR_UG_LITERA_2, result_2, - Constants.ADDR_UG_LITERA_3, Constants.attenutor_um_3, - Constants.BASE_ADDR_EMS_G, 6666]]) + Constants.ADDR_UG_LITERA_3, Constants.attenutor_um_3]]) prd_module.cmd_array.append([unit_prd.CmdCode.READ_ISA, [Constants.ADDR_UG_LITERA_1, Constants.ADDR_UG_LITERA_2, Constants.ADDR_UG_LITERA_3]]) diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index 54f0e16..ff45d33 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -11,34 +11,54 @@ const Constants = { "POWER_UKP_2": 63, "DKM_BIT_2": 1, "DKM_BIT_3": 2, + "BASE_ADDR_EMS_G": 0x120, "ADDR_UG_LITERA_1": 0x106, "ADDR_UG_LITERA_2": 0x108, "TEMP_THRESHOLD": 70, "POWER_THRESHOLD": 40, - "TIMER_DELAY": 1.4, + "RAY_DOU": 3, + "ATT_UM_2": 0x7, + "ATT_UM_3": 0x7, + "TIMER_DELAY": 5.0, "POWER_UM": 70, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } +enum STATE_MASHINE { + INIT, + FS_TURN_ON, + FS_WORK, + UG_SET, + UM_RUN, + FS_TURN_OFF, + STOP_CONTROL, + AWAIT + } # Основные переменные -var count_packet_1:int = 0 +var current_fs: int = 2 +var state: int = STATE_MASHINE.INIT +var flag_check_dkm: bool = false +var flag_timer_started: bool = false + var count_packet_2:int = 0 -var power_array_1: Array = [] +var count_packet_3:int = 0 var power_array_2: Array = [] -var currecnt_unit: String -var ug_work_1: int +var power_array_3: Array = [] +var pribor: String var ug_work_2: int +var ug_work_3: int # Флаги и таймеры var control_timer: Timer = Timer.new() -var flag_timer_started: bool = false +var mashine_timer: Timer = Timer.new() + # Результаты контроля var _control_results: Dictionary = { "block_ip": false, # Проверка касет П1 и ИП МА2000 "temperature": true, # Проверка температур УМ - "dkm_1": false, # Проверка ДКМ "dkm_2": false, # Проверка ДКМ + "dkm_3": false, # Проверка ДКМ "power_ukp": false, # Мощность от УКП - "fs_1": false, # Проверка ФС - "fs_2": false, + "fs_2": false, # Проверка ФС + "fs_3": false, } @@ -48,16 +68,76 @@ func _ready() -> void: set_default_state() +func on_state_mashine() -> void: + match state: + STATE_MASHINE.INIT: + print('Текущий запуск current_fs: ', current_fs) + if current_fs == 2 or current_fs == 3: + state = STATE_MASHINE.FS_TURN_ON + else: + on_control_result() + state = STATE_MASHINE.AWAIT + + STATE_MASHINE.FS_TURN_ON: + print('FS_TURN_ON') + _on_control_fs(true) + control_timer.wait_time = Constants.TIMER_DELAY + control_timer.start() + state = STATE_MASHINE.FS_WORK + + STATE_MASHINE.FS_WORK: + print('FS_WORK') + if (current_fs == 2 and flag_check_dkm and not flag_timer_started) or \ + (current_fs == 3 and flag_check_dkm and not flag_timer_started): + state = STATE_MASHINE.UM_RUN + + STATE_MASHINE.UM_RUN: + print('UM_RUN') + var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) + var unit_prd = network.units[unit_key] + var prd_module = prd.prd_dict[unit_prd.name] + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]]) + flag_timer_started = true + state = STATE_MASHINE.UG_SET + + STATE_MASHINE.UG_SET: + print('UG_SET') + on_ug_setting() + state = STATE_MASHINE.FS_WORK + + STATE_MASHINE.FS_TURN_OFF: + print('FS_TURN_OFF') + _on_control_fs(false) + power_control_result() + state = STATE_MASHINE.STOP_CONTROL + + STATE_MASHINE.STOP_CONTROL: + print('STOP_CONTROL') + flag_timer_started = false + flag_check_dkm = false + match current_fs: + 2: current_fs = 3 + 3: current_fs = 0 + state = STATE_MASHINE.INIT + + func initialize_connections() -> void: signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state')) - var unit_name = get_meta('unit_name')[0] - var unit_prd = network.get_unit_instance(unit_name) - currecnt_unit = unit_prd.name + var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) + var unit_prd = network.units[unit_key] + var currecnt_unit = unit_prd.name + var parts = currecnt_unit.split('-') + pribor = parts[-1] unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) func setup_timer() -> void: + add_child(mashine_timer) + mashine_timer.connect('timeout', Callable(self, 'on_state_mashine')) + mashine_timer.wait_time = 0.5 + mashine_timer.start() + add_child(control_timer) control_timer.connect('timeout', Callable(self, 'on_stop_control')) control_timer.one_shot = true @@ -76,14 +156,14 @@ func set_default_state() -> void: func _enter_tree() -> void: $control_result.text = '' signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false)) - _on_control_fs(true) func _exit_tree() -> void: var unit_name = get_meta('unit_name')[0] var unit_prd = network.get_unit_instance(unit_name) var prd_module = prd.prd_dict[unit_prd.name] - prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_1, Constants.ADDR_UG_LITERA_2, ug_work_2]]) + + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_2, Constants.ADDR_UG_LITERA_2, ug_work_3]]) func on_line_changed(unit_prd: Object) -> void: @@ -101,11 +181,13 @@ func on_data_received(unit_prd: Object) -> void: # Обработка данных ЭМС _process_ems_data(status) - if flag_timer_started: - check_dkm(status, Constants.DKM_BIT_2) - check_dkm(status, Constants.DKM_BIT_3) - # Обработка мощности от УКП - _process_ukp_power(status) + if current_fs == 2 and _control_results.fs_2: + flag_check_dkm = check_dkm(status, Constants.DKM_BIT_2) + elif current_fs == 3 and _control_results.fs_3: + flag_check_dkm = check_dkm(status, Constants.DKM_BIT_3) + + # Обработка мощности от УКП + _process_ukp_power(status) # Обрабатывает данные ЭМС и обновляет UI панели @@ -191,63 +273,104 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: ## Проверка ДКМ -func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: +func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool: const DKM: int = 28 var status_dkm = status_prd[DKM] >> bit_dkm & 1 + #print('^: ', status_prd[DKM]) if bit_dkm == 1: $dou2_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_1"] = status_dkm + _control_results["dkm_2"] = status_dkm elif bit_dkm == 2: $dou3_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_2"] = status_dkm + _control_results["dkm_3"] = status_dkm + return status_dkm func _process_ukp_power(status: PackedByteArray) -> void: - ## Мощность УМ от УКП 1 - var arr_power_ukp_1: Array = [] - - if (status[0] >> 2) & 1: - for i_power in range(6): - var power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power) - arr_power_ukp_1.append(power_ukp_1) - - if count_packet_1 == 0: - power_array_1 = arr_power_ukp_1 - else: - for i in arr_power_ukp_1.size(): - if arr_power_ukp_1[i] > power_array_1[i]: - power_array_1[i] = arr_power_ukp_1[i] - var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') - for i in 6: - power_amplifier[i].value1 = '%d' % power_array_1[i] - power_amplifier[i].state = STATE_VAL.GOOD if power_array_1[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR - count_packet_1 += 1 + if current_fs == 2: + ## Мощность УМ от УКП 1 + var arr_power_ukp_1: Array = [] + if (status[0] >> 2) & 1: + var power_ukp_1: int + for i_power in range(6): + power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * i_power) + arr_power_ukp_1.append(power_ukp_1) - ## Мощность УМ от УКП 2 - var arr_power_ukp_2: Array = [] + if count_packet_2 == 0: + power_array_2 = arr_power_ukp_1 + else: + for i in arr_power_ukp_1.size(): + if arr_power_ukp_1[i] > power_array_2[i]: + power_array_2[i] = arr_power_ukp_1[i] - if (status[0] >> 2) & 1: - for i_power in range(6): - var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power) - arr_power_ukp_2.append(power_ukp_2) + for i in 6: + power_amplifier[i].value1 = '%d' % power_array_2[i] + power_amplifier[i].state = STATE_VAL.GOOD if power_array_2[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR + count_packet_2 += 1 - if count_packet_2 == 0: - power_array_2 = arr_power_ukp_2 - else: - for i in arr_power_ukp_2.size(): - if arr_power_ukp_2[i] > power_array_2[i]: - power_array_2[i] = arr_power_ukp_2[i] + elif current_fs == 3: + ## Мощность УМ от УКП 2 + var arr_power_ukp_2: Array = [] + if (status[0] >> 2) & 1: + for i_power in range(6): + var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power) + arr_power_ukp_2.append(power_ukp_2) - for i in 6: - power_amplifier[i+6].value1 = '%d' % power_array_2[i] - power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_2[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR + if count_packet_3 == 0: + power_array_3 = arr_power_ukp_2 + else: + for i in arr_power_ukp_2.size(): + if arr_power_ukp_2[i] > power_array_3[i]: + power_array_3[i] = arr_power_ukp_2[i] - count_packet_2 += 1 + for i in 6: + power_amplifier[i+6].value1 = '%d' % power_array_3[i] + power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_3[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR + count_packet_3 += 1 + + +func _on_control_fs(mode: bool) -> void: + # Конфигурация параметров для каждого прибора + var pribor_config := { + '1н': {'angle': 0.0, 'sectors': [4, 8]}, + '2н': {'angle': 90.0, 'sectors': [7, 11]}, + '3н': {'angle': 180.0, 'sectors': [6, 10]}, + '4н': {'angle': 270.0, 'sectors': [5, 9]}, + } + # Получаем конфигурацию для текущего прибора + var config: Dictionary = pribor_config.get(pribor) + var angle: float = config.angle + var sectors: Array = config.sectors + + # Конфигурация частот и ширин для каждого ФС + var fs_params := { + 2: {'freq': 900.0, 'width': 100.0}, + 3: {'freq': 1157.0, 'width': 100.0} + } + + # Формируем выходные данные + var interfer_name: String = 'k1' if mode else 'off' + var fs_arr: Array = [] + + if (state == STATE_MASHINE.FS_TURN_ON or state == STATE_MASHINE.FS_TURN_OFF): + if current_fs in fs_params: + var params = fs_params[current_fs] + fs_arr.append([ + angle, + params.freq, + params.width, + sectors[current_fs - 2] + ]) + signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM) + + +func power_control_result() -> void: + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') _control_results["power_ukp"] = true for amp in power_amplifier: if amp.state != STATE_VAL.GOOD: @@ -255,85 +378,51 @@ func _process_ukp_power(status: PackedByteArray) -> void: break -func _on_control_fs(mode: bool) -> void: - var parts = currecnt_unit.split('-') - var last_part = parts[-1] - var angle: float = 0.0 # -> ПРД-Н1; 90.0 -> ПРД-Н2; 180.0 -> ПРД-Н3; 270.0 -> ПРД-Н4 - var sector_1: float = 4 # -> ПРД-Н1; 7 -> ПРД-Н2; 6 -> ПРД-Н3; 5 -> ПРД-Н4; - var sector_2: float = 8 # -> ПРД-Н1; 11 -> ПРД-Н2; 10 -> ПРД-Н3; 9 -> ПРД-Н4; - if last_part == '2н': - angle = 90.0 - sector_1 = 7 - sector_2 = 11 - elif last_part == '3н': - angle = 180.0 - sector_1 = 6 - sector_2 = 10 - elif last_part == '4н': - angle = 270.0 - sector_1 = 5 - sector_2 = 9 - - var interfer_name: String = 'k1' if mode else 'off' - var freq_1: float = 860.0 # ФС_1 - var freq_2: float = 1137.0 # ФС_2 - var width_1: float = 110.0 # ФС_1 - var width_2: float = 110.0 # ФС_2 - - var fs_arr: Array = [[angle, freq_1, width_1, sector_1], [angle, freq_2, width_2, sector_2]] - signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM) - - func on_stop_control() -> void: - print_debug('Отсановка контроля ПРД') - _on_control_fs(false) - on_control_result() + state = STATE_MASHINE.FS_TURN_OFF + func on_fs_update_state(packet_type_7: Dictionary) -> void: - var parts = currecnt_unit.split('-') - var last_part = parts[-1] # Прибор - # Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора var fs_mapping = { - 4: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '1н' }, - 5: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '4н' }, - 6: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '3н' }, - 7: { "node": $kasseta_FS_ND/ref_A1, "condition": last_part == '2н' }, - 8: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '1н' }, - 9: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '4н' }, - 10: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '3н' }, - 11: { "node": $kasseta_FS_ND/ref_A2, "condition": last_part == '2н' } + 4: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '1н' }, + 5: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '4н' }, + 6: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '3н' }, + 7: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '2н' }, + 8: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '1н' }, + 9: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '4н' }, + 10: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '3н' }, + 11: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '2н' } } for fs in packet_type_7: if fs in fs_mapping and fs_mapping[fs]["condition"]: var data = packet_type_7[fs] - var state = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state - if fs < 8: - _control_results["fs_1"] = (data.isg == 1) - else: + if fs < 8 and current_fs == 2: _control_results["fs_2"] = (data.isg == 1) - if _control_results['fs_1'] and _control_results["fs_2"] and not flag_timer_started: - on_ug_setting() - control_timer.wait_time = Constants.TIMER_DELAY - control_timer.start() - flag_timer_started = true + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs + elif fs > 7 and current_fs == 3: + _control_results["fs_3"] = (data.isg == 1) + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs func on_ug_setting() -> void: - var unit_name = get_meta('unit_name')[0] - var unit_prd = network.get_unit_instance(unit_name) + var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) + var unit_prd = network.units[unit_key] + if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_1): - ug_work_1 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1] + ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_1] if unit_prd.isa_ports.has(Constants.ADDR_UG_LITERA_2): - ug_work_2 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2] - - const dou = 0x3 - const att = 0x7 - var result = ((att & 0x07) << 3) | (dou & 0x07) + ug_work_3 = unit_prd.isa_ports[Constants.ADDR_UG_LITERA_2] + var result_1 = ((Constants.ATT_UM_2 & 0x07) << 3) | (Constants.RAY_DOU & 0x07) + var result_2 = ((Constants.ATT_UM_3 & 0x07) << 3) | (Constants.RAY_DOU & 0x07) var prd_module = prd.prd_dict[unit_prd.name] - prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result, Constants.ADDR_UG_LITERA_2, result, 0x120, 6666]]) + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, result_1, + Constants.ADDR_UG_LITERA_2, result_2]]) + + prd_module.cmd_array.append([unit_prd.CmdCode.READ_ISA, [Constants.ADDR_UG_LITERA_1, Constants.ADDR_UG_LITERA_2]]) func on_mode_changed(in_tree: bool) -> void: @@ -342,24 +431,25 @@ func on_mode_changed(in_tree: bool) -> void: func on_control_result() -> void: + # Словарь соответствия ключей ошибок и нод + var error_nodes := { + 'fs_2': $kasseta_FS_ND/ref_A2, + 'fs_3': $kasseta_FS_ND/ref_A1, + } + # Проверка результатов и установка состояний var result: bool = true - for key in _control_results: if not _control_results[key]: - if key == 'fs_1': - $kasseta_FS_ND/ref_A1.state = STATE_VAL.ERROR - if key == 'fs_2': - $kasseta_FS_ND/ref_A2.state = STATE_VAL.ERROR result = false - print_debug('%s false' % key) + if error_nodes.has(key): + error_nodes[key].state = STATE_VAL.ERROR - var parts = currecnt_unit.split('-') - var last_part = parts[-1] # Прибор + # Установка текста и цвета результата + var status_text := 'неисправен' + var status_color := Color.CRIMSON if result: - $control_result.text = 'Прибор ПРД-%s исправен' % last_part - $control_result.add_theme_color_override("font_color", Color.AQUAMARINE) - else: - $control_result.text = 'Прибор ПРД-%s неисправен' % last_part - $control_result.add_theme_color_override("font_color", Color.CRIMSON) - await get_tree().create_timer(Constants.TIMER_DELAY).timeout - flag_timer_started = false + status_text = 'исправен' + status_color = Color.AQUAMARINE + + $control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text] + $control_result.add_theme_color_override("font_color", status_color) diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn index 53c3473..75697aa 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.tscn +++ b/scenes/pribor-prd-n/pribor-prd-n.tscn @@ -146,7 +146,7 @@ offset_bottom = 182.0 fname = "Блок ФС-3" rname = "A3" -[node name="ref_A1" parent="kasseta_FS_ND" instance=ExtResource("7_eoqf2")] +[node name="ref_A1" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")] offset_left = 105.0 offset_top = 32.0 offset_right = 155.0 @@ -155,7 +155,7 @@ fname = "Модуль ФС" rname = "A1" state = 2 -[node name="ref_A2" parent="kasseta_FS_ND" instance=ExtResource("7_eoqf2")] +[node name="ref_A2" parent="kasseta_FS_ND" groups=["default_reset"] instance=ExtResource("7_eoqf2")] offset_left = 155.0 offset_top = 32.0 offset_right = 205.0 From 230c25159c7adebaabb5c67f76303bb741190c8c Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 8 Aug 2025 00:36:02 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/pribor-prd-k.gd | 152 ++++++++++++++-------------- scenes/pribor-prd-n/pribor-prd-n.gd | 106 +++++++++---------- scenes/pribor-prd-v/pribor-prd-v.gd | 104 +++++++++---------- 3 files changed, 181 insertions(+), 181 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index b163a17..5de71e0 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -1,36 +1,36 @@ -extends "res://scenes/контроль/прибор.gd" +extends 'res://scenes/контроль/прибор.gd' const Constants: Dictionary = { - "IN_BLANK_PRD": 1, - "OUT_BLANK_PRD": 13, - "CI_1_OT_FS": 8, - "CI_6_OT_FS": 13, - "CI_7_OT_FS": 14, - "CI_1_B_UF": 3, - "CI_6_B_UF": 4, - "CI_7_B_UF": 5, - "CONST_MIN_TEMP": -25, - "MAXIMUM_CODE_ADC": 3796, - "MINIMUM_CODE_AD": 2660, - "TEMPERATURE_UKP_1": 47, - "TEMPERATURE_UKP_2": 79, - "POWER_UKP_1": 31, - "POWER_UKP_2": 63, - "DKM_BIT_1": 0, - "DKM_BIT_6": 5, - "DKM_BIT_7": 6, - "BASE_ADDR_EMS_G": 0x120, - "ADDR_UG_LITERA_1": 0x106, - "ADDR_UG_LITERA_2": 0x108, - "ADDR_UG_LITERA_3": 0x10A, - "TEMP_THRESHOLD": 40, - "POWER_THRESHOLD": 40, - "TIMER_DELAY": 5.0, - "dou_ray_nuber": 0x3, - "attenutor_um_1": 0x7, - "attenutor_um_2": 0x7, - "attenutor_um_3": 0x0, - "POWER_UM": 75, + 'IN_BLANK_PRD': 1, + 'OUT_BLANK_PRD': 13, + 'CI_1_OT_FS': 8, + 'CI_6_OT_FS': 13, + 'CI_7_OT_FS': 14, + 'CI_1_B_UF': 3, + 'CI_6_B_UF': 4, + 'CI_7_B_UF': 5, + 'CONST_MIN_TEMP': -25, + 'MAXIMUM_CODE_ADC': 3796, + 'MINIMUM_CODE_AD': 2660, + 'TEMPERATURE_UKP_1': 47, + 'TEMPERATURE_UKP_2': 79, + 'POWER_UKP_1': 31, + 'POWER_UKP_2': 63, + 'DKM_BIT_1': 0, + 'DKM_BIT_6': 5, + 'DKM_BIT_7': 6, + 'BASE_ADDR_EMS_G': 0x120, + 'ADDR_UG_LITERA_1': 0x106, + 'ADDR_UG_LITERA_2': 0x108, + 'ADDR_UG_LITERA_3': 0x10A, + 'TEMP_THRESHOLD': 40, + 'POWER_THRESHOLD': 40, + 'TIMER_DELAY': 5.0, + 'dou_ray_nuber': 0x3, + 'attenutor_um_1': 0x7, + 'attenutor_um_2': 0x7, + 'attenutor_um_3': 0x0, + 'POWER_UM': 75, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } enum STATE_MASHINE { @@ -63,15 +63,15 @@ var mashine_timer: Timer = Timer.new() var pribor: String # Результаты контроля var _control_results: Dictionary = { - "block_ip": false, # Проверка касет П1 и ИП МА2000 - "temperature": true, # Проверка температур УМ - "dkm_1": false, # Проверка ДКМ 1 - "dkm_6": false, # Проверка ДКМ 6 - "dkm_7": false, # Проверка ДКМ 7 - "power_ukp": false, # Мощность от УКП - "fs_1": false, # Проверка ФС 1 - "fs_6": false, # Проверка ФС 6 - "fs_7": false, # Проверка ФС 7 + 'block_ip': false, # Проверка касет П1 и ИП МА2000 + 'temperature': true, # Проверка температур УМ + 'dkm_1': false, # Проверка ДКМ 1 + 'dkm_6': false, # Проверка ДКМ 6 + 'dkm_7': false, # Проверка ДКМ 7 + 'power_ukp': false, # Мощность от УКП + 'fs_1': false, # Проверка ФС 1 + 'fs_6': false, # Проверка ФС 6 + 'fs_7': false, # Проверка ФС 7 } @@ -109,7 +109,7 @@ func on_state_mashine() -> void: prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]]) flag_timer_started = true state = STATE_MASHINE.UG_SET - + STATE_MASHINE.UG_SET: on_ug_setting() state = STATE_MASHINE.FS_WORK @@ -188,14 +188,14 @@ func on_data_received(unit_prd: Object) -> void: check_temperature_um(status) # Обработка данных ЭМС _process_ems_data(status) - + if current_fs == 1 and _control_results.fs_1: flag_check_dkm = check_dkm(status, Constants.DKM_BIT_1) elif current_fs == 6 and _control_results.fs_6: flag_check_dkm = check_dkm(status, Constants.DKM_BIT_6) elif current_fs == 7 and _control_results.fs_7: flag_check_dkm = check_dkm(status, Constants.DKM_BIT_7) - + if flag_check_dkm: _process_ukp_power(status) @@ -223,13 +223,13 @@ func check_block_ip(status_prd: PackedByteArray) -> void : const BYTE_DRY_CONTACT: int = 27 var block_config := { # Ключ: [бит, нода, имя для _control_results (опционально)] - "maa2000_1": [0, $maa2000_A23], - "maa2000_2": [1, $maa2000_A22], - "ip9_50_1": [2, $kasseta_p_1/ref_A26], - "ip9_50_2": [3, $kasseta_p_1/ref_A23], - "ip12_50_1": [4, $kasseta_p_1/ref_A24], - "ip9_50_3": [5, $kasseta_p_2/ref_A26], - "ip12_50_2": [6, $kasseta_p_2/ref_A23] + 'maa2000_1': [0, $maa2000_A23], + 'maa2000_2': [1, $maa2000_A22], + 'ip9_50_1': [2, $kasseta_p_1/ref_A26], + 'ip9_50_2': [3, $kasseta_p_1/ref_A23], + 'ip12_50_1': [4, $kasseta_p_1/ref_A24], + 'ip9_50_3': [5, $kasseta_p_2/ref_A26], + 'ip12_50_2': [6, $kasseta_p_2/ref_A23] } var ug_online: bool = (status_prd[0] >> 1) & 1 @@ -246,7 +246,7 @@ func check_block_ip(status_prd: PackedByteArray) -> void : else: node.state = STATE_VAL.NONE - _control_results["block_ip"] = all_good + _control_results['block_ip'] = all_good ## Проверка температур УМ от УКП @@ -282,14 +282,14 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool: if bit_dkm == 5 and current_fs == 6: $dou6_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_fs_kd/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_6"] = status_dkm + _control_results['dkm_6'] = status_dkm elif bit_dkm == 6 and current_fs == 7: $dou7_A8.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_7"] = status_dkm + _control_results['dkm_7'] = status_dkm elif bit_dkm == 0 and current_fs == 1: $kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_1"] = status_dkm + _control_results['dkm_1'] = status_dkm return status_dkm @@ -359,10 +359,10 @@ func _process_ukp_power(status: PackedByteArray) -> void: func power_control_result() -> void: var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') - _control_results["power_ukp"] = true + _control_results['power_ukp'] = true for amp in power_amplifier: if amp.state != STATE_VAL.GOOD: - _control_results["power_ukp"] = false + _control_results['power_ukp'] = false break @@ -409,34 +409,34 @@ func on_stop_control() -> void: func on_fs_update_state(packet_type_7: Dictionary) -> void: # Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора var fs_mapping = { - 0: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '1к' }, - 1: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '4к' }, - 2: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '3к' }, - 3: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '2к' }, - 20: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '1к' }, - 21: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '4к' }, - 22: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '3к' }, - 23: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '2к' }, - 24: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '1к' }, - 25: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '4к' }, - 26: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '3к' }, - 27: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '2к' }, + 0: { 'node': $kasseta_fs_kd/ref_A3, 'condition': pribor == '1к' }, + 1: { 'node': $kasseta_fs_kd/ref_A3, 'condition': pribor == '4к' }, + 2: { 'node': $kasseta_fs_kd/ref_A3, 'condition': pribor == '3к' }, + 3: { 'node': $kasseta_fs_kd/ref_A3, 'condition': pribor == '2к' }, + 20: { 'node': $kasseta_fs_kd/ref_A6, 'condition': pribor == '1к' }, + 21: { 'node': $kasseta_fs_kd/ref_A6, 'condition': pribor == '4к' }, + 22: { 'node': $kasseta_fs_kd/ref_A6, 'condition': pribor == '3к' }, + 23: { 'node': $kasseta_fs_kd/ref_A6, 'condition': pribor == '2к' }, + 24: { 'node': $kasseta_fs_kd/ref_A5, 'condition': pribor == '1к' }, + 25: { 'node': $kasseta_fs_kd/ref_A5, 'condition': pribor == '4к' }, + 26: { 'node': $kasseta_fs_kd/ref_A5, 'condition': pribor == '3к' }, + 27: { 'node': $kasseta_fs_kd/ref_A5, 'condition': pribor == '2к' }, } for fs in packet_type_7: - if fs in fs_mapping and fs_mapping[fs]["condition"]: + if fs in fs_mapping and fs_mapping[fs]['condition']: var data = packet_type_7[fs] if fs < 4 and current_fs == 1: - _control_results["fs_1"] = (data.isg == 1) + _control_results['fs_1'] = (data.isg == 1) var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs + fs_mapping[fs]['node'].state = state_fs elif fs < 24 and current_fs == 6: - _control_results["fs_6"] = (data.isg == 1) + _control_results['fs_6'] = (data.isg == 1) var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs + fs_mapping[fs]['node'].state = state_fs elif fs > 23 and current_fs == 7: - _control_results["fs_7"] = (data.isg == 1) + _control_results['fs_7'] = (data.isg == 1) var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs + fs_mapping[fs]['node'].state = state_fs func on_ug_setting() -> void: @@ -487,4 +487,4 @@ func on_control_result() -> void: status_color = Color.AQUAMARINE $control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text] - $control_result.add_theme_color_override("font_color", status_color) + $control_result.add_theme_color_override('font_color', status_color) diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index ff45d33..3c51a7b 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -1,26 +1,26 @@ -extends "res://scenes/контроль/прибор.gd" +extends 'res://scenes/контроль/прибор.gd' const Constants = { - "IN_BLANK_PRD": 1, - "OUT_BLANK_PRD": 13, - "CI_2_OT_FS": 9, - "CI_3_OT_FS": 10, - "CI_2_B_UF": 4, - "CI_3_B_UF": 5, - "POWER_UKP_1": 31, - "POWER_UKP_2": 63, - "DKM_BIT_2": 1, - "DKM_BIT_3": 2, - "BASE_ADDR_EMS_G": 0x120, - "ADDR_UG_LITERA_1": 0x106, - "ADDR_UG_LITERA_2": 0x108, - "TEMP_THRESHOLD": 70, - "POWER_THRESHOLD": 40, - "RAY_DOU": 3, - "ATT_UM_2": 0x7, - "ATT_UM_3": 0x7, - "TIMER_DELAY": 5.0, - "POWER_UM": 70, + 'IN_BLANK_PRD': 1, + 'OUT_BLANK_PRD': 13, + 'CI_2_OT_FS': 9, + 'CI_3_OT_FS': 10, + 'CI_2_B_UF': 4, + 'CI_3_B_UF': 5, + 'POWER_UKP_1': 31, + 'POWER_UKP_2': 63, + 'DKM_BIT_2': 1, + 'DKM_BIT_3': 2, + 'BASE_ADDR_EMS_G': 0x120, + 'ADDR_UG_LITERA_1': 0x106, + 'ADDR_UG_LITERA_2': 0x108, + 'TEMP_THRESHOLD': 70, + 'POWER_THRESHOLD': 40, + 'RAY_DOU': 3, + 'ATT_UM_2': 0x7, + 'ATT_UM_3': 0x7, + 'TIMER_DELAY': 5.0, + 'POWER_UM': 70, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } enum STATE_MASHINE { @@ -52,13 +52,13 @@ var mashine_timer: Timer = Timer.new() # Результаты контроля var _control_results: Dictionary = { - "block_ip": false, # Проверка касет П1 и ИП МА2000 - "temperature": true, # Проверка температур УМ - "dkm_2": false, # Проверка ДКМ - "dkm_3": false, # Проверка ДКМ - "power_ukp": false, # Мощность от УКП - "fs_2": false, # Проверка ФС - "fs_3": false, + 'block_ip': false, # Проверка касет П1 и ИП МА2000 + 'temperature': true, # Проверка температур УМ + 'dkm_2': false, # Проверка ДКМ + 'dkm_3': false, # Проверка ДКМ + 'power_ukp': false, # Мощность от УКП + 'fs_2': false, # Проверка ФС + 'fs_3': false, } @@ -99,7 +99,7 @@ func on_state_mashine() -> void: prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]]) flag_timer_started = true state = STATE_MASHINE.UG_SET - + STATE_MASHINE.UG_SET: print('UG_SET') on_ug_setting() @@ -137,7 +137,7 @@ func setup_timer() -> void: mashine_timer.connect('timeout', Callable(self, 'on_state_mashine')) mashine_timer.wait_time = 0.5 mashine_timer.start() - + add_child(control_timer) control_timer.connect('timeout', Callable(self, 'on_stop_control')) control_timer.one_shot = true @@ -162,7 +162,7 @@ func _exit_tree() -> void: var unit_name = get_meta('unit_name')[0] var unit_prd = network.get_unit_instance(unit_name) var prd_module = prd.prd_dict[unit_prd.name] - + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.ADDR_UG_LITERA_1, ug_work_2, Constants.ADDR_UG_LITERA_2, ug_work_3]]) @@ -185,7 +185,7 @@ func on_data_received(unit_prd: Object) -> void: flag_check_dkm = check_dkm(status, Constants.DKM_BIT_2) elif current_fs == 3 and _control_results.fs_3: flag_check_dkm = check_dkm(status, Constants.DKM_BIT_3) - + # Обработка мощности от УКП _process_ukp_power(status) @@ -234,7 +234,7 @@ func check_block_ip(status_prd: PackedByteArray) -> void : $kasseta_P_1/ref_A20.state = STATE_VAL.NONE $kasseta_P_1/ref_A21.state = STATE_VAL.NONE - _control_results["block_ip"] = ( + _control_results['block_ip'] = ( $maa2000_A23.state == STATE_VAL.GOOD and $maa2000_A22.state == STATE_VAL.GOOD and $kasseta_P_1/ref_A19.state == STATE_VAL.GOOD and @@ -260,7 +260,7 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: var tmp_1: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3) power_amplifier[i_temp].value0 = tmp_1 if tmp_1 > Constants.TEMP_THRESHOLD: - _control_results["temperature"] = false + _control_results['temperature'] = false var ukp2_online = (status_prd[0] >> 3) & 1 if ukp2_online: for i_temp in range(6): @@ -268,7 +268,7 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: var tmp_2: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3) power_amplifier[i_temp+6].value0 = tmp_2 if tmp_2 > Constants.TEMP_THRESHOLD: - _control_results["temperature"] = false + _control_results['temperature'] = false @@ -281,11 +281,11 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> bool: if bit_dkm == 1: $dou2_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_ND/ref_A4.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_2"] = status_dkm + _control_results['dkm_2'] = status_dkm elif bit_dkm == 2: $dou3_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_ND/ref_A3.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_3"] = status_dkm + _control_results['dkm_3'] = status_dkm return status_dkm @@ -371,10 +371,10 @@ func _on_control_fs(mode: bool) -> void: func power_control_result() -> void: var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') - _control_results["power_ukp"] = true + _control_results['power_ukp'] = true for amp in power_amplifier: if amp.state != STATE_VAL.GOOD: - _control_results["power_ukp"] = false + _control_results['power_ukp'] = false break @@ -385,26 +385,26 @@ func on_stop_control() -> void: func on_fs_update_state(packet_type_7: Dictionary) -> void: # Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора var fs_mapping = { - 4: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '1н' }, - 5: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '4н' }, - 6: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '3н' }, - 7: { "node": $kasseta_FS_ND/ref_A2, "condition": pribor == '2н' }, - 8: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '1н' }, - 9: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '4н' }, - 10: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '3н' }, - 11: { "node": $kasseta_FS_ND/ref_A1, "condition": pribor == '2н' } + 4: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '1н' }, + 5: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '4н' }, + 6: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '3н' }, + 7: { 'node': $kasseta_FS_ND/ref_A2, 'condition': pribor == '2н' }, + 8: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '1н' }, + 9: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '4н' }, + 10: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '3н' }, + 11: { 'node': $kasseta_FS_ND/ref_A1, 'condition': pribor == '2н' } } for fs in packet_type_7: - if fs in fs_mapping and fs_mapping[fs]["condition"]: + if fs in fs_mapping and fs_mapping[fs]['condition']: var data = packet_type_7[fs] if fs < 8 and current_fs == 2: - _control_results["fs_2"] = (data.isg == 1) + _control_results['fs_2'] = (data.isg == 1) var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs + fs_mapping[fs]['node'].state = state_fs elif fs > 7 and current_fs == 3: - _control_results["fs_3"] = (data.isg == 1) + _control_results['fs_3'] = (data.isg == 1) var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state_fs + fs_mapping[fs]['node'].state = state_fs func on_ug_setting() -> void: @@ -452,4 +452,4 @@ func on_control_result() -> void: status_color = Color.AQUAMARINE $control_result.text = 'Прибор ПРД-%s %s' % [pribor, status_text] - $control_result.add_theme_color_override("font_color", status_color) + $control_result.add_theme_color_override('font_color', status_color) diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 21fce08..8c159cb 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -1,22 +1,22 @@ -extends "res://scenes/контроль/прибор.gd" +extends 'res://scenes/контроль/прибор.gd' const Constants = { - "IN_BLANK_PRD": 1, - "OUT_BLANK_PRD": 13, - "CI_4_OT_FS": 11, - "CI_5_OT_FS": 12, - "CI_4_B_UF": 4, - "CI_5_B_UF": 5, - "POWER_UKP_1": 31, - "POWER_UKP_2": 63, - "DKM_BIT_3": 3, - "DKM_BIT_4": 4, - "ADDR_UG_LITERA_1": 0x106, - "ADDR_UG_LITERA_2": 0x108, - "TEMP_THRESHOLD": 70, - "POWER_THRESHOLD": 40, - "TIMER_DELAY": 1.4, - "POWER_UM": 70, + 'IN_BLANK_PRD': 1, + 'OUT_BLANK_PRD': 13, + 'CI_4_OT_FS': 11, + 'CI_5_OT_FS': 12, + 'CI_4_B_UF': 4, + 'CI_5_B_UF': 5, + 'POWER_UKP_1': 31, + 'POWER_UKP_2': 63, + 'DKM_BIT_3': 3, + 'DKM_BIT_4': 4, + 'ADDR_UG_LITERA_1': 0x106, + 'ADDR_UG_LITERA_2': 0x108, + 'TEMP_THRESHOLD': 70, + 'POWER_THRESHOLD': 40, + 'TIMER_DELAY': 1.4, + 'POWER_UM': 70, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } # Основные переменные @@ -32,13 +32,13 @@ var control_timer: Timer = Timer.new() var flag_timer_started: bool = false # Результаты контроля var _control_results: Dictionary = { - "block_ip": false, # Проверка касет П1 и ИП МА2000 - "temperature": true, # Проверка температур УМ - "dkm_1": false, # Проверка ДКМ - "dkm_2": false, # Проверка ДКМ - "power_ukp": false, # Мощность от УКП - "fs_1": false, # Проверка ФС - "fs_2": false, + 'block_ip': false, # Проверка касет П1 и ИП МА2000 + 'temperature': true, # Проверка температур УМ + 'dkm_1': false, # Проверка ДКМ + 'dkm_2': false, # Проверка ДКМ + 'power_ukp': false, # Мощность от УКП + 'fs_1': false, # Проверка ФС + 'fs_2': false, } @@ -138,7 +138,7 @@ func check_block_ip(status_prd: PackedByteArray) -> void: $kasseta_P_1/ref_A20.state = STATE_VAL.ERROR if ip9_50_2 else STATE_VAL.GOOD $kasseta_P_1/ref_A21.state = STATE_VAL.ERROR if ip12_50_1 else STATE_VAL.GOOD - _control_results["block_ip"] = ( + _control_results['block_ip'] = ( $maa2000_A23.state == STATE_VAL.GOOD and $maa2000_A22.state == STATE_VAL.GOOD and $kasseta_P_1/ref_A19.state == STATE_VAL.GOOD and @@ -150,18 +150,18 @@ func check_block_ip(status_prd: PackedByteArray) -> void: ## Проверка температур УМ от УКП func check_temperature_um(status_prd: PackedByteArray) -> void: const TEMP_CONSTANTS = { - "min_temp": -25, - "max_code": 3796, - "min_code": 2660, - "temp_factor": 115.0 / (3796 - 2660), - "offset": 3 # Корректировка температуры + 'min_temp': -25, + 'max_code': 3796, + 'min_code': 2660, + 'temp_factor': 115.0 / (3796 - 2660), + 'offset': 3 # Корректировка температуры } const TEMPERATURE_UKP_1: int = 47 const TEMPERATURE_UKP_2: int = 79 var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') # Сбрас флагов перед проверкой - _control_results["temperature"] = true + _control_results['temperature'] = true var ukp1_online: int = (status_prd[0] >> 2) & 1 if ukp1_online: @@ -170,7 +170,7 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: var tmp_1: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_1) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset']) power_amplifier[i_temp].value0 = tmp_1 if tmp_1 > Constants.TEMP_THRESHOLD: - _control_results["temperature"] = false + _control_results['temperature'] = false var ukp2_online = (status_prd[0] >> 3) & 1 if ukp2_online: @@ -179,7 +179,7 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: var tmp_2: int = round(TEMP_CONSTANTS['min_temp'] + (TEMP_CONSTANTS['max_code'] - temperature_ukp_2) * TEMP_CONSTANTS['temp_factor'] + TEMP_CONSTANTS['offset']) power_amplifier[i_temp+6].value0 = tmp_2 if tmp_2 > Constants.TEMP_THRESHOLD: - _control_results["temperature"] = false + _control_results['temperature'] = false ## Проверка ДКМ @@ -189,11 +189,11 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: if bit_dkm == Constants.DKM_BIT_3: $dou5_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_1"] = status_dkm + _control_results['dkm_1'] = status_dkm elif bit_dkm == Constants.DKM_BIT_4: $dou4_A5.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR $kasseta_FS_VD/ref_A6.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_2"] = status_dkm + _control_results['dkm_2'] = status_dkm # Обрабатывает данные ЭМС и обновляет UI панели @@ -254,10 +254,10 @@ func _process_ukp_power(status: PackedByteArray) -> void: count_packet_2 += 1 - _control_results["power_ukp"] = true + _control_results['power_ukp'] = true for amp in power_amplifier: if amp.state != STATE_VAL.GOOD: - _control_results["power_ukp"] = false + _control_results['power_ukp'] = false break @@ -302,25 +302,25 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void: # Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора var fs_mapping = { - 12: { "node": $kasseta_FS_VD/ref_A3, "condition": last_part == '1в' }, - 13: { "node": $kasseta_FS_VD/ref_A3, "condition": last_part == '4в' }, - 14: { "node": $kasseta_FS_VD/ref_A3, "condition": last_part == '3в' }, - 15: { "node": $kasseta_FS_VD/ref_A3, "condition": last_part == '2в' }, - 16: { "node": $kasseta_FS_VD/ref_A4, "condition": last_part == '1в' }, - 17: { "node": $kasseta_FS_VD/ref_A4, "condition": last_part == '4в' }, - 18: { "node": $kasseta_FS_VD/ref_A4, "condition": last_part == '3в' }, - 19: { "node": $kasseta_FS_VD/ref_A4, "condition": last_part == '2в' } + 12: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '1в' }, + 13: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '4в' }, + 14: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '3в' }, + 15: { 'node': $kasseta_FS_VD/ref_A3, 'condition': last_part == '2в' }, + 16: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '1в' }, + 17: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '4в' }, + 18: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '3в' }, + 19: { 'node': $kasseta_FS_VD/ref_A4, 'condition': last_part == '2в' } } for fs in packet_type_7: - if fs in fs_mapping and fs_mapping[fs]["condition"]: + if fs in fs_mapping and fs_mapping[fs]['condition']: var data = packet_type_7[fs] var state = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state + fs_mapping[fs]['node'].state = state if fs < 16: - _control_results["fs_1"] = (data.isg == 1) + _control_results['fs_1'] = (data.isg == 1) else: - _control_results["fs_2"] = (data.isg == 1) - if _control_results['fs_1'] and _control_results["fs_2"] and not flag_timer_started: + _control_results['fs_2'] = (data.isg == 1) + if _control_results['fs_1'] and _control_results['fs_2'] and not flag_timer_started: on_ug_setting() control_timer.wait_time = Constants.TIMER_DELAY control_timer.start() @@ -365,9 +365,9 @@ func on_control_result() -> void: var last_part = parts[-1] # Прибор if result: $control_result.text = 'Прибор ПРД-%s исправен' % last_part - $control_result.add_theme_color_override("font_color", Color.AQUAMARINE) + $control_result.add_theme_color_override('font_color', Color.AQUAMARINE) else: $control_result.text = 'Прибор ПРД-%s неисправен' % last_part - $control_result.add_theme_color_override("font_color", Color.CRIMSON) + $control_result.add_theme_color_override('font_color', Color.CRIMSON) await get_tree().create_timer(Constants.TIMER_DELAY).timeout flag_timer_started = false