From 58070353bbb8f8e8bb5208972fe939fe8ec4d580 Mon Sep 17 00:00:00 2001 From: Maxim Date: Fri, 1 Aug 2025 01:26:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BB=D0=B0=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BC=D0=B0=D1=88=D0=B8=D0=BD=D0=B0=20=D1=81=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=9F=D0=A0=D0=94-=D0=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-k/kasseta-fs-kd.tscn | 6 +- scenes/pribor-prd-k/pribor-prd-k.gd | 266 ++++++++++++++----------- scenes/pribor-prd-n/pribor-prd-n.gd | 4 +- scenes/контроль/кассета.gd | 2 - scenes/контроль/прибор.gd | 2 - scenes/контроль/элемент-я.gd | 2 - table/table.gd | 4 +- 7 files changed, 161 insertions(+), 125 deletions(-) diff --git a/scenes/pribor-prd-k/kasseta-fs-kd.tscn b/scenes/pribor-prd-k/kasseta-fs-kd.tscn index 9e71df4a..d2192131 100644 --- a/scenes/pribor-prd-k/kasseta-fs-kd.tscn +++ b/scenes/pribor-prd-k/kasseta-fs-kd.tscn @@ -34,7 +34,7 @@ offset_bottom = 183.0 fname = "Блок ФС-1" rname = "A4" -[node name="ref_A3" parent="." instance=ExtResource("3_kqnvt")] +[node name="ref_A3" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")] offset_left = 55.0 offset_top = 33.0 offset_right = 105.0 @@ -50,7 +50,7 @@ offset_bottom = 183.0 fname = "Блок ФС-2" rname = "A2" -[node name="ref_A6" parent="." instance=ExtResource("3_kqnvt")] +[node name="ref_A6" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")] offset_left = 155.0 offset_top = 33.0 offset_right = 205.0 @@ -58,7 +58,7 @@ offset_bottom = 183.0 fname = "Модуль ФС" rname = "A5" -[node name="ref_A5" parent="." instance=ExtResource("3_kqnvt")] +[node name="ref_A5" parent="." groups=["default_reset"] instance=ExtResource("3_kqnvt")] offset_left = 205.0 offset_top = 33.0 offset_right = 255.0 diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index 6cc1c781..5b1944ff 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -25,31 +25,35 @@ const Constants = { "ADDR_UG_LITERA_3": 0x10A, "TEMP_THRESHOLD": 70, "POWER_THRESHOLD": 40, - "TIMER_DELAY": 4.0, + "TIMER_DELAY": 5.0, "dou_ray_nuber": 0x3, "attenutor_um_1": 0x7, "attenutor_um_2": 0x7, "attenutor_um_3": 0x7, - "POWER_UM": 15, + "POWER_UM": 75, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } -enum STATE_MASHINE { INIT, - FS_1_TURN_ON, - FS_2_TURN_ON, - FS_3_TURN_ON, - FS_1_WORK, - FS_2_WORK, - FS_3_WORK, - UM_RUN, - READ_ISA, - FS_1_TURN_OFF, - FS_2_TURN_OFF, - FS_3_TURN_OFF, - STOP_CONTROL } +enum STATE_MASHINE { INIT, + FS_1_TURN_ON, + FS_6_TURN_ON, + FS_7_TURN_ON, + FS_1_WORK, + FS_6_WORK, + FS_7_WORK, + UM_RUN_1, + UM_RUN_6, + UM_RUN_7, + FS_1_TURN_OFF, + FS_6_TURN_OFF, + FS_7_TURN_OFF, + STOP_CONTROL_1, + STOP_CONTROL_6, + STOP_CONTROL_7 } # Основные переменные var state: int = STATE_MASHINE.INIT var count_packet_1:int = 0 -var count_packet_2:int = 0 +var count_packet_6:int = 0 +var count_packet_7:int = 0 var power_array_1: Array = [] var power_array_2: Array = [] var ug_work_1: int @@ -59,18 +63,21 @@ var ug_work_3: int var control_timer: Timer = Timer.new() var mashine_timer: Timer = Timer.new() var flag_timer_started: bool = false -var flag_check_dkm_3: bool = false +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 = { "block_ip": false, # Проверка касет П1 и ИП МА2000 "temperature": true, # Проверка температур УМ - "dkm_1": false, # Проверка ДКМ - "dkm_2": false, # Проверка ДКМ + "dkm_1": false, # Проверка ДКМ 1 + "dkm_6": false, # Проверка ДКМ 6 + "dkm_7": false, # Проверка ДКМ 7 "power_ukp": false, # Мощность от УКП - "fs_1": false, # Проверка ФС - "fs_2": false, - "fs_3": false, + "fs_1": false, # Проверка ФС 1 + "fs_6": false, # Проверка ФС 6 + "fs_7": false, # Проверка ФС 7 } @@ -83,50 +90,86 @@ func _ready() -> void: func on_state_mashine() -> void: match state: STATE_MASHINE.INIT: - print('Стадия включения') - state = STATE_MASHINE.FS_3_TURN_ON - - STATE_MASHINE.FS_3_TURN_ON: - print('Включение фс 3') + state = STATE_MASHINE.FS_1_TURN_ON + + STATE_MASHINE.FS_6_TURN_ON: _on_control_fs(true) control_timer.wait_time = Constants.TIMER_DELAY control_timer.start() - state = STATE_MASHINE.FS_3_WORK - - STATE_MASHINE.FS_3_WORK: - print('FS 3 должен работать') - flag_check_dkm_3 = true - if _control_results["fs_3"] and not flag_timer_started: - state = STATE_MASHINE.UM_RUN - - STATE_MASHINE.UM_RUN: - print('Должна идти жара') + state = STATE_MASHINE.FS_6_WORK + + STATE_MASHINE.FS_6_WORK: + if flag_check_dkm_6 and not flag_timer_started: + state = STATE_MASHINE.UM_RUN_6 + + STATE_MASHINE.UM_RUN_6: 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.FS_3_WORK - - STATE_MASHINE.READ_ISA: - print('READ_ISA') + state = STATE_MASHINE.FS_6_WORK + + STATE_MASHINE.FS_6_TURN_OFF: + _on_control_fs(false) + power_control_result() + state = STATE_MASHINE.STOP_CONTROL_6 + + STATE_MASHINE.FS_7_TURN_ON: + _on_control_fs(true) + control_timer.wait_time = Constants.TIMER_DELAY + control_timer.start() + state = STATE_MASHINE.FS_7_WORK + + STATE_MASHINE.FS_7_WORK: + if flag_check_dkm_7 and not flag_timer_started: + state = STATE_MASHINE.UM_RUN_7 + + STATE_MASHINE.UM_RUN_7: 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.READ_ISA, [Constants.BASE_ADDR_EMS_G]]) - - STATE_MASHINE.FS_3_TURN_OFF: - print('Отключение ФС') - flag_check_dkm_3 = false + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [Constants.BASE_ADDR_EMS_G, 6666]]) + flag_timer_started = true + state = STATE_MASHINE.FS_7_WORK + + STATE_MASHINE.FS_7_TURN_OFF: _on_control_fs(false) power_control_result() on_control_result() - state = STATE_MASHINE.STOP_CONTROL - - STATE_MASHINE.STOP_CONTROL: - print('STOP_CONTROL') - - + state = STATE_MASHINE.STOP_CONTROL_7 + + STATE_MASHINE.FS_1_TURN_ON: + _on_control_fs(true) + control_timer.wait_time = Constants.TIMER_DELAY + control_timer.start() + state = STATE_MASHINE.FS_1_WORK + + STATE_MASHINE.FS_1_WORK: + if not flag_timer_started: + state = STATE_MASHINE.UM_RUN_1 + + STATE_MASHINE.UM_RUN_1: + 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.FS_1_WORK + + STATE_MASHINE.FS_1_TURN_OFF: + _on_control_fs(false) + power_control_result() + state = STATE_MASHINE.STOP_CONTROL_1 + + STATE_MASHINE.STOP_CONTROL_1: + flag_timer_started = false + state = STATE_MASHINE.FS_6_TURN_ON + STATE_MASHINE.STOP_CONTROL_6: + flag_timer_started = false + state = STATE_MASHINE.FS_7_TURN_ON + STATE_MASHINE.STOP_CONTROL_7: + flag_timer_started = false func initialize_connections() -> void: @@ -145,7 +188,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 @@ -188,17 +231,12 @@ func on_data_received(unit_prd: Object) -> void: check_temperature_um(status) # Обработка данных ЭМС _process_ems_data(status) - - if flag_check_dkm_3: - check_dkm(status, Constants.DKM_BIT_7) + + 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: _process_ukp_power(status) - - - #if flag_timer_started: - #check_dkm(status, Constants.DKM_BIT_1) - #check_dkm(status, Constants.DKM_BIT_6) - # Обработка мощности от УКП - #_process_ukp_power(status) # Обрабатывает данные ЭМС и обновляет UI панели @@ -292,28 +330,46 @@ 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 - if bit_dkm == 5: + if bit_dkm == 5 and state == STATE_MASHINE.FS_6_WORK: $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 + elif bit_dkm == 6 and state == STATE_MASHINE.FS_7_WORK: + $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 + elif bit_dkm == 0 and state == STATE_MASHINE.FS_1_WORK: $kasseta_fs_kd/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR _control_results["dkm_1"] = status_dkm - elif bit_dkm == 6: - $dou7_A8.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_2"] = status_dkm - elif bit_dkm == 0: - $kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR - _control_results["dkm_3"] = status_dkm + return status_dkm + - func _process_ukp_power(status: PackedByteArray) -> void: var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') if state == STATE_MASHINE.FS_1_WORK: - pass - elif state == STATE_MASHINE.FS_2_WORK: + ## Мощность от УМ (УКП) литеры 1 + var arr_power_ukp_1: Array = [] + var power_ukp_1: int + power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7) + 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] + + power_amplifier[6].value1 = '%d' % power_array_1[0] + power_amplifier[6].state = STATE_VAL.GOOD if power_array_1[0] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR + + count_packet_1 += 1 + + elif state == STATE_MASHINE.FS_6_WORK: ## Мощность УМ от УКП 1 var arr_power_ukp_1: Array = [] if (status[0] >> 2) & 1: @@ -321,23 +377,20 @@ func _process_ukp_power(status: PackedByteArray) -> void: 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) - # Мощность от УМ (УКП) литеры 3 - power_ukp_1 = status.decode_u16(Constants.POWER_UKP_1 + 2 * 7) - arr_power_ukp_1.append(power_ukp_1) - if count_packet_1 == 0: + if count_packet_6 == 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] - for i in 7: + 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.TEMP_THRESHOLD else STATE_VAL.ERROR - count_packet_1 += 1 - - elif state == STATE_MASHINE.FS_3_WORK: + count_packet_6 += 1 + + elif state == STATE_MASHINE.FS_7_WORK: ## Мощность УМ от УКП 2 var arr_power_ukp_2: Array = [] if (status[0] >> 2) & 1: @@ -345,7 +398,7 @@ func _process_ukp_power(status: PackedByteArray) -> void: var power_ukp_2 = status.decode_u16(Constants.POWER_UKP_2 + 2 * i_power) arr_power_ukp_2.append(power_ukp_2) - if count_packet_2 == 0: + if count_packet_7 == 0: power_array_2 = arr_power_ukp_2 else: for i in arr_power_ukp_2.size(): @@ -356,7 +409,7 @@ func _process_ukp_power(status: PackedByteArray) -> void: power_amplifier[i+7].value1 = '%d' % power_array_2[i] power_amplifier[i+7].state = STATE_VAL.GOOD if power_array_2[i] > Constants.TEMP_THRESHOLD else STATE_VAL.ERROR - count_packet_2 += 1 + count_packet_7 += 1 func power_control_result() -> void: @@ -369,7 +422,7 @@ func power_control_result() -> void: func _on_control_fs(mode: bool) -> void: - var angle: float = 0.0 + var angle: float = 0.0 var sector_1: float = 0 var sector_2: float = 20 var sector_3: float = 24 @@ -390,36 +443,30 @@ func _on_control_fs(mode: bool) -> void: sector_3 = 25 var interfer_name: String = 'k1' if mode else 'off' - var freq_1: float = 490.0 # ФС_1 + var freq_1: float = 450.0 # ФС_1 var freq_2: float = 2450.0 # ФС_2 var freq_3: float = 5800.0 # ФС_3 - var width_1: float = 100.0 # ФС_1 + var width_1: float = 80.0 # ФС_1 var width_2: float = 110.0 # ФС_2 var width_3: float = 110.0 # ФС_3 - + var fs_arr: Array = [] - if state == STATE_MASHINE.FS_1_WORK: + if state == STATE_MASHINE.FS_1_TURN_ON or state == STATE_MASHINE.FS_1_TURN_OFF: fs_arr.append([angle, freq_1, width_1, sector_1]) - elif state == STATE_MASHINE.FS_2_WORK: + elif state == STATE_MASHINE.FS_6_TURN_ON or state == STATE_MASHINE.FS_6_TURN_OFF: fs_arr.append([angle, freq_2, width_2, sector_2]) - elif STATE_MASHINE.FS_3_WORK: + elif STATE_MASHINE.FS_7_TURN_ON or state == STATE_MASHINE.FS_7_TURN_OFF: fs_arr.append([angle, freq_3, width_3, sector_3]) - - print('FS arr = ', fs_arr) signaller.emit_signal('interfer_init', interfer_name, fs_arr, Constants.POWER_UM) func on_stop_control() -> void: - print_debug('Отсановка контроля ПРД') if state == STATE_MASHINE.FS_1_WORK: state = STATE_MASHINE.FS_1_TURN_OFF - elif state == STATE_MASHINE.FS_2_WORK: - state = STATE_MASHINE.FS_2_TURN_OFF - elif state == STATE_MASHINE.FS_3_WORK: - state = STATE_MASHINE.FS_3_TURN_OFF - print_debug('state = ', state) - #_on_control_fs(false) - #on_control_result() + elif state == STATE_MASHINE.FS_6_WORK: + state = STATE_MASHINE.FS_6_TURN_OFF + elif state == STATE_MASHINE.FS_7_WORK: + state = STATE_MASHINE.FS_7_TURN_OFF func on_fs_update_state(packet_type_7: Dictionary) -> void: @@ -446,14 +493,9 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void: if fs < 4: _control_results["fs_1"] = (data.isg == 1) elif fs <24: - _control_results["fs_2"] = (data.isg == 1) + _control_results["fs_6"] = (data.isg == 1) else: - _control_results["fs_3"] = (data.isg == 1) - #if _control_results["fs_1"] and _control_results["fs_2"] and _control_results["fs_3"] and not flag_timer_started: - #on_ug_setting() - #control_timer.wait_time = Constants.TIMER_DELAY - #control_timer.start() - #flag_timer_started = true + _control_results["fs_7"] = (data.isg == 1) func on_ug_setting() -> void: @@ -490,12 +532,12 @@ func on_control_result() -> void: if not _control_results[key]: if key == 'fs_1': $kasseta_fs_kd/ref_A3.state = STATE_VAL.ERROR - if key == 'fs_2': + if key == 'fs_6': $kasseta_fs_kd/ref_A6.state = STATE_VAL.ERROR - if key == 'fs_3': + if key == 'fs_7': $kasseta_fs_kd/ref_A5.state = STATE_VAL.ERROR result = false - print_debug('%s false' % key) + #print_debug('%s false' % key) if result: $control_result.text = 'Прибор ПРД-%s исправен' % pribor diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index c54ddb9a..e9b4b521 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -71,7 +71,7 @@ func set_default_state() -> void: for group in get_tree().get_nodes_in_group('power_amplifier'): group.state = STATE_VAL.NONE - + func _enter_tree() -> void: $control_result.text = '' @@ -283,7 +283,7 @@ func _on_control_fs(mode: bool) -> void: 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('Отсановка контроля ПРД') diff --git a/scenes/контроль/кассета.gd b/scenes/контроль/кассета.gd index a91fc7a1..d933848e 100644 --- a/scenes/контроль/кассета.gd +++ b/scenes/контроль/кассета.gd @@ -1,5 +1,3 @@ -@tool - extends NinePatchRect """ diff --git a/scenes/контроль/прибор.gd b/scenes/контроль/прибор.gd index b33f2231..0f5b74a1 100644 --- a/scenes/контроль/прибор.gd +++ b/scenes/контроль/прибор.gd @@ -1,5 +1,3 @@ -@tool - extends Control """ diff --git a/scenes/контроль/элемент-я.gd b/scenes/контроль/элемент-я.gd index 01b0e31d..4b34a883 100644 --- a/scenes/контроль/элемент-я.gd +++ b/scenes/контроль/элемент-я.gd @@ -1,5 +1,3 @@ -@tool - extends Control @export var textures: Array diff --git a/table/table.gd b/table/table.gd index 4d6e220c..fa0be948 100644 --- a/table/table.gd +++ b/table/table.gd @@ -599,8 +599,8 @@ func set_node_frame(i_col: int, i_row: int, node_name: String, val: int) -> void func set_node_editable(i_col: int, i_row: int, val: bool) -> void: var key: = get_node_key(NODE_KEY_FORMAT, i_col, i_row) nodes[key].editable = val - - + + ## Устанавливает контекстное меню для ячейки таблицы. Ячейка должна иметь свойство [param context_menu].[br] ## [param i_col] - Индекс колонки.[br] ## [param i_row] - Индекс ряда.[br]