diff --git a/scenes/pribor-prd-n/pribor-prd-n.tscn b/scenes/pribor-prd-n/pribor-prd-n.tscn index f97936e..1e23a7e 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.tscn +++ b/scenes/pribor-prd-n/pribor-prd-n.tscn @@ -376,7 +376,6 @@ fname = "УМ1535А" rname = "A18" [node name="Monitoring_panel" type="Panel" parent="."] -visible = false layout_mode = 0 theme_override_styles/panel = SubResource("StyleBoxTexture_bnnv3") diff --git a/scenes/pribor-prd-v/pribor_prd_v.gd b/scenes/pribor-prd-v/pribor_prd_v.gd index 7a94735..01f9134 100644 --- a/scenes/pribor-prd-v/pribor_prd_v.gd +++ b/scenes/pribor-prd-v/pribor_prd_v.gd @@ -16,22 +16,40 @@ var count_packet_1:int = 0 var power_array_1: Array = [] var count_packet_2:int = 0 var power_array_2: Array = [] +var currecnt_unit: String enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } +var control_timer: Timer = Timer.new() +var flag_control: bool = false + func _ready() -> void: + signaller.conn(signaller.fs_update_state, Callable(self, 'on_fs_update_state')) var unit_key = settings.get_unit_key(get_meta('unit_name')[0]) var unit_prd = network.units[unit_key] + currecnt_unit = unit_prd.name 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(control_timer) + control_timer.connect('timeout', Callable(self, 'on_stop_control')) + _on_control_fs(true) + control_timer.one_shot = true + control_timer.wait_time = 2.0 + control_timer.start() func set_default_state() -> void: + $kasseta_P_1/ref_A19.state = STATE_VAL.NONE + $kasseta_P_1/ref_A20.state = STATE_VAL.NONE + $kasseta_P_1/ref_A21.state = STATE_VAL.NONE + $maa2000_A23.state = STATE_VAL.NONE + $maa2000_A22.state = STATE_VAL.NONE + for group in get_tree().get_nodes_in_group('power_amplifier'): group.state = STATE_VAL.NONE @@ -41,6 +59,7 @@ func on_line_changed(unit_prd: Object) -> void: set_default_state() +# Основной процесс по принятию и обработки пакетов func on_data_received(unit_prd: Object) -> void: if not is_inside_tree(): return @@ -48,27 +67,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) - - ## Мощность УМ от УКП 2 - if (in_blank >> CI_5_OT_FS) & 1: - check_dkm(unit_prd.status, bit_dkm_4) + # Обработка мощности от УКП + _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 @@ -99,10 +106,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') @@ -111,14 +121,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 @@ -132,3 +142,117 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: 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 + + +# Обрабатывает данные ЭМС и обновляет 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 flag_control: + 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 + 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] + + 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: + flag_control = true + interfer_name = 'k1' + fs_arr = [[90.0, 2450.0, 1500.0, 23]] + else: + flag_control = false + interfer_name = 'off' + 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_stop_control() -> void: + _on_control_fs(false) + print('stop timer') + + +func on_fs_update_state(packet_type_7: Dictionary): + var parts = currecnt_unit.split('-') + var last_part = parts[-1] # Прибор + 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 + 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 + 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 + 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 + + 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 + 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 + 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 + 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 + diff --git a/scenes/pribor-uyep/sch3.tscn b/scenes/pribor-uyep/sch3.tscn index a175a03..2905b58 100644 --- a/scenes/pribor-uyep/sch3.tscn +++ b/scenes/pribor-uyep/sch3.tscn @@ -136,17 +136,6 @@ theme_override_font_sizes/font_size = 17 text = "УФ" vertical_alignment = 1 -[node name="switch0" type="CheckButton" parent="margin/vbox/table" groups=["bits_items_switch", "c111"]] -editor_description = "Питание УФ" -material = SubResource("ShaderMaterial_c1mqk") -layout_mode = 2 -size_flags_horizontal = 2 -tooltip_text = "Выключатель питания УФ" -button_pressed = true -action_mode = 0 -script = ExtResource("7_l6esm") -metadata/bits = [0, 0, 2, 0] - [node name="state1" type="TextureRect" parent="margin/vbox/table" groups=["bits_items_good"]] custom_minimum_size = Vector2(24, 24) layout_mode = 2 diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 5366e90..f69836d 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -56,13 +56,11 @@ class Interfer: data_to_json['ss'] = msg_num data_to_json['ispp'] = ispp data_to_json['krp'] = krp - if get_params.size() < 1: - get_params.append('soc_temp') - data_to_json['get'] = get_params if krp != INTERFER_OFF: data_to_json['kni'] = kni data_to_json['powp'] = powp # TODO: Необходимо добавить управление мощностью data_to_json['params'] = params + data_to_json['get'] = get_params var pac = JSON.stringify(data_to_json).to_utf8_buffer() return pac diff --git a/scripts/prd.gd b/scripts/prd.gd index 733fee0..2141471 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -347,8 +347,8 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb): if not unit0.json_dic.has('ts'): return if unit0.json_dic['ts'] != 7: return if not unit0.json_dic.has('msfs'): return - - var msfs = unit.json_dic['msfs'] + + var msfs = unit0.json_dic['msfs'] for fs in msfs: if fs is Dictionary: if not fs.has('nmfs'):