diff --git a/scenes/pribor-prd-v/pribor-prd-v.tscn b/scenes/pribor-prd-v/pribor-prd-v.tscn index fa342304..d7af4360 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.tscn +++ b/scenes/pribor-prd-v/pribor-prd-v.tscn @@ -399,3 +399,13 @@ theme_override_font_sizes/font_size = 10 text = "Out ems 2" horizontal_alignment = 1 + +[node name="control_result" type="Label" parent="."] +layout_mode = 0 +offset_left = 9.0 +offset_top = 960.0 +offset_right = 649.0 +offset_bottom = 1003.0 +theme_override_font_sizes/font_size = 28 +horizontal_alignment = 1 +metadata/_edit_lock_ = true diff --git a/scenes/pribor-prd-v/pribor_prd_v.gd b/scenes/pribor-prd-v/pribor_prd_v.gd index cb78caa1..c677bcea 100644 --- a/scenes/pribor-prd-v/pribor_prd_v.gd +++ b/scenes/pribor-prd-v/pribor_prd_v.gd @@ -29,6 +29,13 @@ enum STATE_VAL { var control_timer: Timer = Timer.new() var flag_control: bool = false +var _control_results: Dictionary = { + "block_ip": false, # Проверка касет П1 и ИП МА2000 + "temperature": true, # Проверка температур УМ + "dkm": false, # Проверка ДКМ + "power_ukp": false, # Мощность от УКП + "fs_ems": false # Проверка ЭМС и ФС +} func _ready() -> void: @@ -48,6 +55,7 @@ func _ready() -> void: func _enter_tree() -> void: + $control_result.text = '' signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false)) on_ug_setting() @@ -58,7 +66,7 @@ func _exit_tree() -> void: var prd_module = prd.prd_dict[unit_prd.name] print('Было: %s, %s' % [unit_prd.isa_ports[ADDR_UG_LITERA_1], unit_prd.isa_ports[ADDR_UG_LITERA_2]]) print("Стало: %s, %s" % [ug_work_1, ug_work_2]) - + prd_module.cmd_array.append([unit_prd.CmdCode.WRITE_ISA, [ADDR_UG_LITERA_1, ug_work_1, ADDR_UG_LITERA_2, ug_work_2]]) @@ -115,6 +123,14 @@ func check_block_ip(status_prd: PackedByteArray) -> void: $kasseta_P_1/ref_A19.state = STATE_VAL.ERROR if ip9_50_1 else STATE_VAL.GOOD $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"] = ( + $maa2000_A23.state == STATE_VAL.GOOD and + $maa2000_A22.state == STATE_VAL.GOOD and + $kasseta_P_1/ref_A19.state == STATE_VAL.GOOD and + $kasseta_P_1/ref_A20.state == STATE_VAL.GOOD and + $kasseta_P_1/ref_A21.state == STATE_VAL.GOOD + ) else: $maa2000_A23.state = STATE_VAL.NONE $maa2000_A22.state = STATE_VAL.NONE @@ -123,6 +139,7 @@ func check_block_ip(status_prd: PackedByteArray) -> void: $kasseta_P_1/ref_A21.state = STATE_VAL.NONE + ## Проверка температур УМ от УКП func check_temperature_um(status_prd: PackedByteArray) -> void: const TEMP_CONSTANTS = { @@ -136,12 +153,17 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: const TEMPERATURE_UKP_2: int = 79 var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + # Сбрас флагов перед проверкой + _control_results["temperature"] = true + var ukp1_online: int = (status_prd[0] >> 2) & 1 if ukp1_online: for i_temp in range(6): var temperature_ukp_1: int = status_prd.decode_u16(TEMPERATURE_UKP_1 + 2 * i_temp) 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 > 70: + _control_results["temperature"] = false var ukp2_online = (status_prd[0] >> 3) & 1 if ukp2_online: @@ -149,6 +171,8 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: var temperature_ukp_2: int = status_prd.decode_u16(TEMPERATURE_UKP_2 + 2 * i_temp) 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 > 70: + _control_results["temperature"] = false ## Проверка ДКМ @@ -158,9 +182,11 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: if bit_dkm == bit_dkm_3: $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"] = status_dkm elif bit_dkm == bit_dkm_4: $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"] = status_dkm # Обрабатывает данные ЭМС и обновляет UI панели @@ -179,7 +205,6 @@ func _process_ems_data(status: PackedByteArray) -> void: func _process_ukp_power(status: PackedByteArray) -> void: - #var in_blank: int = status.decode_u16(IN_BLANK_PRD) ## Мощность УМ от УКП 1 if flag_control: check_dkm(status, bit_dkm_3) @@ -232,6 +257,12 @@ func _process_ukp_power(status: PackedByteArray) -> void: count_packet_2 += 1 + _control_results["power_ukp"] = true + for amp in power_amplifier: + if amp.state != STATE_VAL.GOOD: + _control_results["power_ukp"] = false + break + func _on_control_fs(mode: bool) -> void: var interfer_name: String @@ -250,6 +281,7 @@ func _on_control_fs(mode: bool) -> void: func on_stop_control() -> void: _on_control_fs(false) + on_control_result() func on_fs_update_state(packet_type_7: Dictionary) -> void: @@ -258,21 +290,29 @@ func on_fs_update_state(packet_type_7: Dictionary) -> void: for fs in packet_type_7: if fs == 12 and last_part == '1в': $kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 13 and last_part == '4в': $kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 14 and last_part == '3в': $kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 15 and last_part == '2в': $kasseta_FS_VD/ref_A3.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 16 and last_part == '1в': $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 17 and last_part == '4в': $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 18 and last_part == '3в': $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false if fs == 19 and last_part == '2в': $kasseta_FS_VD/ref_A4.state = STATE_VAL.GOOD if packet_type_7[fs].isg == 1 else STATE_VAL.ERROR if packet_type_7[fs].isg == 0 else STATE_VAL.NONE + _control_results["fs_ems"] = true if packet_type_7[fs].isg == 1 else false func on_ug_setting() -> void: @@ -295,3 +335,21 @@ func on_ug_setting() -> void: func on_mode_changed(in_tree: bool) -> void: if not in_tree: queue_free() + + +func on_control_result() -> void: + var result: bool = true + + for key in _control_results: + if not _control_results[key]: + result = false + break + + var parts = currecnt_unit.split('-') + var last_part = parts[-1] # Прибор + 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) diff --git a/scripts/prd.gd b/scripts/prd.gd index 5438bb1f..73ea56a2 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -332,7 +332,7 @@ func update_fs_state(ecms): if um_data_array.size(): prd_module.set_ug_state = false prd_module.set_um(um_data_array) - + ## Проверяет ниличие директории, если их нет, создаёт