From 217281ce5170df5328269ae6d80892ae39766183 Mon Sep 17 00:00:00 2001 From: TotMaxim Date: Sun, 16 Nov 2025 19:30:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=BE=D0=BD=D0=B8=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3=D0=B0=20=D1=82=D0=B5=D0=BC=D0=BF=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D1=83=D1=80=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB?= =?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 | 13 +++++++- scenes/pribor-prd-n/pribor-prd-n.gd | 43 ++++++++++++++---------- scenes/pribor-prd-n/pribor-prd-n.tscn | 12 +++---- scenes/pribor-prd-v/pribor-prd-v.gd | 13 +++++++- scenes/tabs-switch/lbl_ready.gd | 2 +- scenes/tabs-switch/tab-switch.tscn | 30 ++++++++--------- scenes/контроль/блок-в.tscn | 8 ++--- scripts/pribor-prd.gd | 48 +++++++++++++++++++++------ 8 files changed, 113 insertions(+), 56 deletions(-) diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 3cb20205..15b3f48c 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -62,6 +62,14 @@ func _exit_tree() -> void: #prd_k_module.cmd_array.append([unit_prd_k.CmdCode.WRITE_ISA, [constants_k.ADDR_UG_LITERA_1, ug_work_1, constants_k.ADDR_UG_LITERA_2, ug_work_2, constants_k.ADDR_UG_LITERA_3, ug_work_3]]) +static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void: + for i_node_temperature in temperature_arr_node: + var temperature_meta: String = i_node_temperature.get_meta('um') + var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE + if not temperature_dic.has(temperature_meta): return + i_node_temperature.value1 = temperature_dic[temperature_meta] + + static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void: for i_powapm in power_amplifier: var powamp_meta: String = i_powapm.get_meta('um') @@ -98,6 +106,7 @@ func on_press_device() -> void: '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, @@ -114,7 +123,8 @@ func on_press_device() -> void: func on_control_result(for_result_dic: Dictionary) -> void: - ## If control is end + temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um) + var block_kasseta_y5_prd_config_k: Dictionary = for_result_dic.block_kasseta_y5_config var nodes_y5: Array = for_result_dic.nodes_y5 for node_y5 in nodes_y5: @@ -132,6 +142,7 @@ func on_control_result(for_result_dic: Dictionary) -> void: if block_ip_config_k.has(meta_ip) and block_kasseta_y5_prd_config_k.ug: power_supply.state = STATE_VAL.GOOD if block_ip_config_k[meta_ip][1] else STATE_VAL.ERROR + ## If control is end var result_dic: Dictionary = for_result_dic.result_dic for f in for_result_dic.fs_nodes: var fs_meta: String = f.get_meta('fs') diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index fb0046c5..6b58662d 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -17,6 +17,8 @@ func _ready() -> void: var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') for temp in power_amplifier: temp.value1 = -70 + temp.max_value1 = 70 + temp.min_value1 = -40 unit_prd_n.connect('control_is_over', Callable(self, 'on_press_device')) #unit_prd_n.power_amplify = power_amplifier on_press_device() @@ -60,28 +62,33 @@ func _exit_tree() -> void: #prd_n_module.cmd_array.append([unit_prd_n.CmdCode.WRITE_ISA, [constants_n.ADDR_UG_LITERA_1, ug_work_1, constants_n.ADDR_UG_LITERA_2, ug_work_2]]) -static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void: - for i_powapm in power_amplifier: - var powamp_meta: String = i_powapm.get_meta('um') +static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void: + for i_node_temperature in temperature_arr_node: + var temperature_meta: String = i_node_temperature.get_meta('um') + var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE + if not temperature_dic.has(temperature_meta): return + i_node_temperature.value1 = temperature_dic[temperature_meta] + + +static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier_arr_node: Array, POWER_THRESHOLD: int) -> void: + for i_node_powapm in power_amplifier_arr_node: + var powamp_meta: String = i_node_powapm.get_meta('um') var status = STATE_VAL.GOOD if pow_dic else STATE_VAL.NONE if not pow_dic.has(powamp_meta): return - if pow_dic[powamp_meta].size() < 6: - status = STATE_VAL.ERROR - else: - if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return - if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return - i_powapm.value0 = pow_dic[powamp_meta] - for i_p in pow_dic[powamp_meta]: - if i_p < POWER_THRESHOLD: - status = STATE_VAL.ERROR - i_powapm.state = status + if powamp_meta in ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6'] and not fs_result.fs_2: return + if powamp_meta in ['um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12'] and not fs_result.fs_3: return + i_node_powapm.value0 = pow_dic[powamp_meta] + for i_p in pow_dic[powamp_meta]: + if i_p < POWER_THRESHOLD: + status = STATE_VAL.ERROR + i_node_powapm.state = status func on_press_device() -> void: var nodes_y5: Array = get_tree().get_nodes_in_group('y-5') var node_ip_power_arr: Array = get_tree().get_nodes_in_group('power_supply') var fs_nodes: Array = get_tree().get_nodes_in_group('fs_group') - var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + var power_amplifier_arr_node: Array = get_tree().get_nodes_in_group('power_amplifier') var module_fs_2: Node = $kasseta_FS_ND/ref_A4 var dou_2: Node = $dou2_A5 var module_fs_3: Node = $kasseta_FS_ND/ref_A3 @@ -91,10 +98,11 @@ func on_press_device() -> void: '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, - 'power_amplifier': power_amplifier, + 'power_amplifier': power_amplifier_arr_node, 'POWER_THRESHOLD': unit_prd_n.constants.POWER_THRESHOLD, 'name_prd': unit_prd_n.self_name, 'module_fs_2': module_fs_2, @@ -106,7 +114,8 @@ func on_press_device() -> void: func on_control_result(for_result_dic: Dictionary) -> void: - ## If control is end + temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um) + var block_kasseta_y5_prd_config_n: Dictionary = for_result_dic.block_kasseta_y5_config var nodes_y5: Array = for_result_dic.nodes_y5 for node_y5 in nodes_y5: @@ -124,6 +133,7 @@ func on_control_result(for_result_dic: Dictionary) -> void: if block_ip_config_n.has(meta_ip) and block_kasseta_y5_prd_config_n.ug: power_supply.state = STATE_VAL.GOOD if block_ip_config_n[meta_ip][1] else STATE_VAL.ERROR + ## If control is end var result_dic: Dictionary = for_result_dic.result_dic for f in for_result_dic.fs_nodes: var fs_meta: String = f.get_meta('fs') @@ -140,7 +150,6 @@ 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: diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn index a12b1ab5..68571cef 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.tscn +++ b/scenes/pribor-prd-n/pribor-prd-n.tscn @@ -374,7 +374,7 @@ fname = "УМ1535А" rname = "A13" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_7" +metadata/um = "um_9" [node name="um1535_A14" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 @@ -386,7 +386,7 @@ fname = "УМ1535А" rname = "A14" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_8" +metadata/um = "um_10" [node name="um1535_A15" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 @@ -398,7 +398,7 @@ fname = "УМ1535А" rname = "A15" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_9" +metadata/um = "um_11" [node name="um1535_A16" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 @@ -410,7 +410,7 @@ fname = "УМ1535А" rname = "A16" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_10" +metadata/um = "um_12" [node name="um1535_A17" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 @@ -422,7 +422,7 @@ fname = "УМ1535А" rname = "A17" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_11" +metadata/um = "um_13" [node name="um1535_A18" parent="." groups=["power_amplifier"] instance=ExtResource("7_bnnv3")] layout_mode = 0 @@ -434,7 +434,7 @@ fname = "УМ1535А" rname = "A18" value0_info = "Мощность, Вт" value1_info = "Температура,°C" -metadata/um = "um_12" +metadata/um = "um_14" [node name="control_result" type="Label" parent="."] layout_mode = 0 diff --git a/scenes/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index b01521e5..1993ed14 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -59,6 +59,14 @@ func _exit_tree() -> void: #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]]) +static func temperature_fill(temperature_arr_node: Array, temperature_dic: Dictionary)->void: + for i_node_temperature in temperature_arr_node: + var temperature_meta: String = i_node_temperature.get_meta('um') + var status = STATE_VAL.GOOD if temperature_dic else STATE_VAL.NONE + if not temperature_dic.has(temperature_meta): return + i_node_temperature.value1 = temperature_dic[temperature_meta] + + static func power_fill(pow_dic: Dictionary, fs_result: Dictionary, power_amplifier: Array, POWER_THRESHOLD: int) -> void: for i_powapm in power_amplifier: var powamp_meta: String = i_powapm.get_meta('um') @@ -137,6 +145,7 @@ func on_press_device() -> void: '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, @@ -152,7 +161,8 @@ func on_press_device() -> void: static func on_control_result(for_result_dic: Dictionary) -> void: - ## If control is end + temperature_fill(for_result_dic.power_amplifier, for_result_dic.temperature_um) + var block_kasseta_y5_prd_config_v: Dictionary = for_result_dic.block_kasseta_y5_config var nodes_y5: Array = for_result_dic.nodes_y5 for node_y5 in nodes_y5: @@ -169,6 +179,7 @@ static func on_control_result(for_result_dic: Dictionary) -> void: if block_ip_config_v.has(meta_ip) and block_kasseta_y5_prd_config_v.ug: power_supply.state = STATE_VAL.GOOD if block_ip_config_v[meta_ip][1] else STATE_VAL.ERROR + ## If control is end var result_dic: Dictionary = for_result_dic.result_dic for f in for_result_dic.fs_nodes: var fs_meta: String = f.get_meta('fs') diff --git a/scenes/tabs-switch/lbl_ready.gd b/scenes/tabs-switch/lbl_ready.gd index f35d4eda..b0893677 100644 --- a/scenes/tabs-switch/lbl_ready.gd +++ b/scenes/tabs-switch/lbl_ready.gd @@ -4,7 +4,7 @@ const STATUS_GOOD := {"text": "Исправно", "color": Color.GREEN, "font_co const STATUS_BAD := {"text": "Отказ", "color": Color.RED, "font_color": Color.WHITE} var _is_uf_status_initialized: bool = false var is_prd_operational: bool = true -var is_uf_operational: bool = false +var is_uf_operational: bool = true func _ready() -> void: diff --git a/scenes/tabs-switch/tab-switch.tscn b/scenes/tabs-switch/tab-switch.tscn index f8649dec..6836d835 100644 --- a/scenes/tabs-switch/tab-switch.tscn +++ b/scenes/tabs-switch/tab-switch.tscn @@ -79,21 +79,6 @@ visible = false layout_mode = 2 metadata/_tab_index = 5 -[node name="lbl_ready" type="Label" parent="."] -layout_mode = 0 -offset_left = 1504.0 -offset_right = 1600.0 -offset_bottom = 27.0 -tooltip_text = "Готовность аппаратуры к работе" -mouse_filter = 0 -theme_override_font_sizes/font_size = 14 -theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22") -text = "Нет связи" -horizontal_alignment = 1 -vertical_alignment = 1 -script = ExtResource("8_tidwt") -metadata/_edit_lock_ = true - [node name="remote_control" type="Label" parent="."] layout_mode = 2 offset_left = 1242.0 @@ -125,5 +110,20 @@ toggle_mode = true text = "Тренаж" script = ExtResource("9_41d34") +[node name="lbl_ready" type="Label" parent="."] +layout_mode = 0 +offset_left = 1504.0 +offset_right = 1600.0 +offset_bottom = 27.0 +tooltip_text = "Готовность аппаратуры к работе" +mouse_filter = 0 +theme_override_font_sizes/font_size = 14 +theme_override_styles/normal = SubResource("StyleBoxFlat_o1r22") +text = "Нет связи" +horizontal_alignment = 1 +vertical_alignment = 1 +script = ExtResource("8_tidwt") +metadata/_edit_lock_ = true + [connection signal="tab_changed" from="tab_switch" to="tab_switch" method="_on_tab_changed"] [connection signal="toggled" from="тренаж_режим" to="tab_switch" method="_on_button_trenaj_toggled"] diff --git a/scenes/контроль/блок-в.tscn b/scenes/контроль/блок-в.tscn index 578fee59..b55f585c 100644 --- a/scenes/контроль/блок-в.tscn +++ b/scenes/контроль/блок-в.tscn @@ -35,7 +35,7 @@ signal pressed(control: PanelContainer) if not is_inside_tree(): return $margin/vbox/grid1/level7.value = v - $margin/vbox/grid1/level7.tint_progress = Color.RED if v > 70 else Color.WHITE + $margin/vbox/grid1/level7.tint_progress = Color.RED if v >= 70 else Color.GOLD if v >= 60 else Color.WHITE @export var min_value0: float: @@ -191,8 +191,8 @@ func _enter_tree_defered(): $margin/vbox/grid0/rname.text = rname $margin/vbox/grid0/fname.text = fname $margin/vbox/grid0/state.texture = textures[state] - else: - push_warning('обращение к %s вне дерева' % self) + #else: + #push_warning('обращение к %s вне дерева' % self) TODO: пишеться только когда заходишь в проект а дальше не используется func get_level_nodes() -> Array: @@ -477,7 +477,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 tooltip_text = " Текущее: 56.00 -Диапазон: -50.00…120.00" +Диапазон: -40.00…70.00" mouse_filter = 0 min_value = -50.0 max_value = 120.0 diff --git a/scripts/pribor-prd.gd b/scripts/pribor-prd.gd index a92df2a3..23865d78 100644 --- a/scripts/pribor-prd.gd +++ b/scripts/pribor-prd.gd @@ -31,7 +31,9 @@ var pribor_config: Dictionary var fs_parameters: Dictionary var block_ip_config: Dictionary var block_kasseta_y5_config: Dictionary +var temperature_um: Dictionary var control_results: Dictionary +var power_result: Dictionary var self_name: String var state: int = 0 var current_litera: int @@ -39,8 +41,8 @@ var flag_write_isa: bool = false var flag_fs_status_ok: bool = false var flag_si_fs_input: bool = false var flag_si_fs_output: bool = false +var flag_in_control: bool = false var unit_prd: Object -var power_result: Dictionary var control_timer: Timer = Timer.new() var ems_6666_timer: Timer = Timer.new() var machine_timer: Timer = Timer.new() @@ -134,11 +136,12 @@ func _process(_delta: float) -> void: ## Пакеты от ЯУ-07 func on_data_received(unit_pribor: Object) -> void: + if not flag_in_control: return var status: PackedByteArray = unit_pribor.status socket_status_ems_g(status) block_kasseta_y5_config = check_block_kasseta_y5(status, block_kasseta_y5_config) block_ip_config = check_block_ip(status, block_ip_config) - + temperature_um = check_temperature_um(status) if machine_timer.is_stopped(): return @@ -479,14 +482,14 @@ func setup_timer() -> void: func on_mode_changed(in_tree: bool) -> void: + flag_in_control = in_tree if not in_tree: ## TODO: Дополнительная проверка если контроль идет, если нет, то смысла вызывать нет progress_value = 0 machine_timer.stop() state = state_machine_enum.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: - pass + func _process_dkm_status(status: PackedByteArray) -> void: @@ -611,13 +614,36 @@ static func check_block_kasseta_y5(status_prd: PackedByteArray, y5_config: Dicti ## Мониторинг температуры -static func check_temperature(status_prd: PackedByteArray, y5_config: Dictionary) -> Dictionary: - y5_config.yau07 = true - y5_config.ems = (status_prd[0] & 1) and ((status_prd[0] >> 4) & 1) - y5_config.ug = (status_prd[0] >> 1) & 1 - y5_config.ukp1 = (status_prd[0] >> 2) & 1 - y5_config.ukp2 = (status_prd[0] >> 3) & 1 - return y5_config +static func check_temperature_um(status_prd: PackedByteArray) -> Dictionary: + const Constants: Dictionary = { + 'CONST_MIN_TEMP': -25, + 'MAXIMUM_CODE_ADC': 3796, + 'MINIMUM_CODE_AD': 2660, + 'TEMPERATURE_UKP_1': 47, + 'TEMPERATURE_UKP_2': 79, + } + const arr_um: Array = ['um_1', 'um_2', 'um_3', 'um_4', 'um_5', 'um_6', 'um_7', 'um_8', 'um_9', 'um_10', 'um_11', 'um_12', 'um_13', 'um_14', 'um_15', 'um_16'] + const TEMP: float = 115.0 / (Constants.MAXIMUM_CODE_ADC - Constants.MINIMUM_CODE_AD) + var return_dic_temp: Dictionary + var ukp1_online: int = (status_prd[0] >> 2) & 1 + var ukp2_online = (status_prd[0] >> 3) & 1 + + if ukp1_online: + var tmp_1: int + var temperature_ukp_1: int + for i_temp in 8: + temperature_ukp_1 = status_prd.decode_u16(Constants.TEMPERATURE_UKP_1 + 2 * i_temp) + tmp_1 = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3) + return_dic_temp[arr_um[i_temp]] = tmp_1 + + + if ukp2_online: + for i_temp in 8: + var temperature_ukp_2: int = status_prd.decode_u16(Constants.TEMPERATURE_UKP_2 + 2 * i_temp) + var tmp_2: int = round(Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3) + return_dic_temp[arr_um[i_temp+8]] = tmp_2 + + return return_dic_temp ## Проверка ДКМ