From 36a502c0fd48044347d16626acb0db9a71d90d07 Mon Sep 17 00:00:00 2001 From: Maxim Date: Thu, 3 Jul 2025 11:04:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BB=D0=B0=D0=B4=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8F=20=D0=9F=D0=A0?= =?UTF-8?q?=D0=94.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=BB=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=BC=20=D1=84=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/pribor-prd-v/pribor_prd_v.gd | 169 ++++++++++++++++------------ 1 file changed, 100 insertions(+), 69 deletions(-) diff --git a/scenes/pribor-prd-v/pribor_prd_v.gd b/scenes/pribor-prd-v/pribor_prd_v.gd index 22753d57..5a87062e 100644 --- a/scenes/pribor-prd-v/pribor_prd_v.gd +++ b/scenes/pribor-prd-v/pribor_prd_v.gd @@ -22,6 +22,8 @@ enum STATE_VAL { GOOD = 1, ERROR = 2 } +var timer_03: Timer = Timer.new() + func _ready() -> void: var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) @@ -29,7 +31,12 @@ func _ready() -> void: unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) set_default_state() + self.add_child(timer_03) + timer_03.connect('timeout', Callable(self, 'on_timer_03')) + timer_03.one_shot = true + timer_03.wait_time = 4.0 _on_control_fs(true) + timer_03.start() func set_default_state() -> void: @@ -49,72 +56,15 @@ func on_data_received(unit_prd: Object) -> void: check_block_ip(unit_prd.status) check_temperature_um(unit_prd.status) - ## Контроль ЭМС - var in_blank: int = unit_prd.status.decode_u16(IN_BLANK_PRD) - var out_blank: int = unit_prd.status.decode_u16(OUT_BLANK_PRD) + # Обработка данных ЭМС + _process_ems_data(unit_prd.status) - $Monitoring_panel/in_fs_1.frame = (in_blank >> CI_4_OT_FS) & 1 - $Monitoring_panel/in_fs_2.frame = (in_blank >> CI_5_OT_FS) & 1 - - $Monitoring_panel/out_ems_1.frame = (out_blank >> CI_4_B_UF) & 1 - $Monitoring_panel/out_ems_2.frame = (out_blank >> CI_5_B_UF) & 1 - - ## Мощность УМ от УКП 1 - if (in_blank >> CI_4_OT_FS) & 1: - check_dkm(unit_prd.status, bit_dkm_3) - - ## Мощность УМ от УКП 1 - var arr_power_ukp_1: Array = [] - - if (unit_prd.status[0] >> 2) & 1: - for i_power in range(6): - var power_ukp_1 = unit_prd.status.decode_u16(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] - count_packet_1 += 1 - - ## Мощность УМ от УКП 2 - if (in_blank >> CI_5_OT_FS) & 1: - check_dkm(unit_prd.status, bit_dkm_4) - - ## Мощность УМ от УКП 2 - const bit_dkm_2: int = 2 - check_dkm(unit_prd.status, bit_dkm_2) - - var arr_power_ukp_2: Array = [] - - if (unit_prd.status[0] >> 2) & 1: - for i_power in range(6): - var power_ukp_2 = unit_prd.status.decode_u16(POWER_UKP_2 + 2 * i_power) - arr_power_ukp_2.append(power_ukp_2) - - 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] - - var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') - for i in 6: - power_amplifier[i+6].value1 = '%d' % power_array_2[i] - - count_packet_2 += 1 - #_on_control_fs(false) + # Обработка мощности от УКП + _process_ukp_power(unit_prd.status) ## Проверка касет П1 и ИП МА2000 -func check_block_ip(status_prd: PackedByteArray) -> void : +func check_block_ip(status_prd: PackedByteArray) -> void: var ug_online: bool = (status_prd[0] >> 1) & 1 if ug_online: const BYTE_DRY_CONTACT: int = 27 @@ -145,10 +95,13 @@ func check_block_ip(status_prd: PackedByteArray) -> void : ## Проверка температур УМ от УКП func check_temperature_um(status_prd: PackedByteArray) -> void: - const CONST_MIN_TEMP: int = -25 - const MAXIMUM_CODE_ADC: int = 3796 - const MINIMUM_CODE_AD: int = 2660 - const TEMP: float = 115.0 / (MAXIMUM_CODE_ADC - MINIMUM_CODE_AD) + const TEMP_CONSTANTS = { + "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') @@ -157,14 +110,14 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: 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(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_1) * TEMP + 3) + 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 var ukp2_online = (status_prd[0] >> 3) & 1 if ukp2_online: for i_temp in range(6): var temperature_ukp_2: int = status_prd.decode_u16(TEMPERATURE_UKP_2 + 2 * i_temp) - var tmp_2: int = round(CONST_MIN_TEMP + (MAXIMUM_CODE_ADC - temperature_ukp_2) * TEMP + 3) + 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 @@ -180,7 +133,79 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: $kasseta_FS_VD/ref_A2.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR -func _on_control_fs(mode: bool): +# Обрабатывает данные ЭМС и обновляет UI панели +func _process_ems_data(status: PackedByteArray) -> void: + ## Контроль ЭМС + var in_blank: int = status.decode_u16(IN_BLANK_PRD) + var out_blank: int = status.decode_u16(OUT_BLANK_PRD) + + # Обновление фреймов для входных сигналов + $Monitoring_panel/in_fs_1.frame = (in_blank >> CI_4_OT_FS) & 1 + $Monitoring_panel/in_fs_2.frame = (in_blank >> CI_5_OT_FS) & 1 + + # Обновление фреймов для выходных сигналов ЭМС + $Monitoring_panel/out_ems_1.frame = (out_blank >> CI_4_B_UF) & 1 + $Monitoring_panel/out_ems_2.frame = (out_blank >> CI_5_B_UF) & 1 + + +func _process_ukp_power(status: PackedByteArray) -> void: + var in_blank: int = status.decode_u16(IN_BLANK_PRD) + ## Мощность УМ от УКП 1 + if (in_blank >> CI_4_OT_FS) & 1: + check_dkm(status, bit_dkm_3) + + ## Мощность УМ от УКП 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(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] > 40 else STATE_VAL.ERROR + count_packet_1 += 1 + + ## Мощность УМ от УКП 2 + if (in_blank >> CI_5_OT_FS) & 1: + check_dkm(status, bit_dkm_4) + + ## Мощность УМ от УКП 2 + const bit_dkm_2: int = 2 + check_dkm(status, bit_dkm_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(POWER_UKP_2 + 2 * i_power) + arr_power_ukp_2.append(power_ukp_2) + + 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] + + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') + 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] > 40 else STATE_VAL.ERROR + + count_packet_2 += 1 + + +func _on_control_fs(mode: bool) -> void: var interfer_name: String var fs_arr: Array if mode: @@ -191,3 +216,9 @@ func _on_control_fs(mode: bool): fs_arr = [[90.0, 2450.0, 1500.0, 23]] print('interfer_init: ', interfer_name, fs_arr) signaller.emit_signal('interfer_init', interfer_name, fs_arr) + + +func on_timer_03() -> void: + _on_control_fs(false) + print('stop timer') + pass