diff --git a/scenes/pribor-prd-k/pribor-prd-k.gd b/scenes/pribor-prd-k/pribor-prd-k.gd index f67bde3..97359d9 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.gd +++ b/scenes/pribor-prd-k/pribor-prd-k.gd @@ -26,25 +26,42 @@ const Constants = { "ADDR_UG_LITERA_3": 0x10A, "TEMP_THRESHOLD": 70, "POWER_THRESHOLD": 40, - "TIMER_DELAY": 1.5, + "TIMER_DELAY": 4.0, "dou_ray_nuber": 0x3, "attenutor_um_1": 0x7, "attenutor_um_2": 0x7, "attenutor_um_3": 0x7, + "POWER_UM": 15, } 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 } # Основные переменные +var state: int = STATE_MASHINE.INIT var count_packet_1:int = 0 var count_packet_2:int = 0 var power_array_1: Array = [] var power_array_2: Array = [] -var currecnt_unit: String var ug_work_1: int var ug_work_2: int 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 pribor: String # Результаты контроля var _control_results: Dictionary = { "block_ip": false, # Проверка касет П1 и ИП МА2000 @@ -64,16 +81,72 @@ func _ready() -> void: set_default_state() +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') + _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('Должна идти жара') + 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') + 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 + _on_control_fs(false) + power_control_result() + on_control_result() + state = STATE_MASHINE.STOP_CONTROL + + STATE_MASHINE.STOP_CONTROL: + print('STOP_CONTROL') + + + + func initialize_connections() -> 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 + var currecnt_unit = unit_prd.name + var parts = currecnt_unit.split('-') + pribor = parts[-1] unit_prd.connect('data_received', Callable(self, 'on_data_received')) unit_prd.connect('line_changed', Callable(self, 'on_line_changed')) func setup_timer() -> void: + add_child(mashine_timer) + 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 @@ -92,7 +165,6 @@ func set_default_state() -> void: func _enter_tree() -> void: $control_result.text = '' signaller.connect('режим_работа', Callable(self, 'on_mode_changed').bind(false)) - _on_control_fs(true) func _exit_tree() -> void: @@ -117,13 +189,17 @@ func on_data_received(unit_prd: Object) -> void: check_temperature_um(status) # Обработка данных ЭМС _process_ems_data(status) - - if flag_timer_started: - check_dkm(status, Constants.DKM_BIT_1) - check_dkm(status, Constants.DKM_BIT_6) + + if flag_check_dkm_3: check_dkm(status, Constants.DKM_BIT_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 панели @@ -233,53 +309,59 @@ func check_dkm(status_prd: PackedByteArray, bit_dkm: int) -> void: $kasseta_fs_kd/ref_A7.state = STATE_VAL.GOOD if status_dkm else STATE_VAL.ERROR _control_results["dkm_3"] = status_dkm - + func _process_ukp_power(status: PackedByteArray) -> void: - ## Мощность УМ от УКП 1 - var arr_power_ukp_1: Array = [] - - if (status[0] >> 2) & 1: - var power_ukp_1: int - 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: - 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 7: - 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 + if state == STATE_MASHINE.FS_1_WORK: + pass + elif state == STATE_MASHINE.FS_2_WORK: + ## Мощность УМ от УКП 1 + var arr_power_ukp_1: Array = [] + if (status[0] >> 2) & 1: + var power_ukp_1: int + 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) - ## Мощность УМ от УКП 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(Constants.POWER_UKP_2 + 2 * i_power) - arr_power_ukp_2.append(power_ukp_2) + 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] - 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 7: + 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: + ## Мощность УМ от УКП 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(Constants.POWER_UKP_2 + 2 * i_power) + arr_power_ukp_2.append(power_ukp_2) - for i in 6: - power_amplifier[i+7].value1 = '%d' % power_array_2[i] - power_amplifier[i+7].state = STATE_VAL.GOOD if power_array_2[i] > 40 else STATE_VAL.ERROR + 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] - count_packet_2 += 1 + for i in 6: + 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 + + +func power_control_result() -> void: + var power_amplifier: Array = get_tree().get_nodes_in_group('power_amplifier') _control_results["power_ukp"] = true for amp in power_amplifier: if amp.state != STATE_VAL.GOOD: @@ -288,58 +370,91 @@ func _process_ukp_power(status: PackedByteArray) -> void: func _on_control_fs(mode: bool) -> void: - var interfer_name: String - var fs_arr: Array - if mode: - interfer_name = 'k1' - fs_arr = [[90.0, 2450.0, 1500.0, 23]] - else: - interfer_name = 'off' - fs_arr = [[90.0, 2450.0, 1500.0, 23]] - signaller.emit_signal('interfer_init', interfer_name, fs_arr, 50.0) + var angle: float = 0.0 + var sector_1: float = 0 + var sector_2: float = 20 + var sector_3: float = 24 + if pribor == '2к': + angle = 90.0 + sector_1 = 3 + sector_2 = 23 + sector_3 = 27 + elif pribor == '3к': + angle = 180.0 + sector_1 = 2 + sector_2 = 22 + sector_3 = 26 + elif pribor == '4к': + angle = 270.0 + sector_1 = 1 + sector_2 = 21 + sector_3 = 25 + + var interfer_name: String = 'k1' if mode else 'off' + var freq_1: float = 490.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_2: float = 110.0 # ФС_2 + var width_3: float = 110.0 # ФС_3 + + var fs_arr: Array = [] + if state == STATE_MASHINE.FS_1_WORK: + fs_arr.append([angle, freq_1, width_1, sector_1]) + elif state == STATE_MASHINE.FS_2_WORK: + fs_arr.append([angle, freq_2, width_2, sector_2]) + elif STATE_MASHINE.FS_3_WORK: + 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('Отсановка контроля ПРД') - _on_control_fs(false) - on_control_result() + 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() func on_fs_update_state(packet_type_7: Dictionary) -> void: - var parts = currecnt_unit.split('-') - var last_part = parts[-1] # Прибор - # Словарь для маппинга: ключ - номер FS, значение - целевая нода и условие прибора var fs_mapping = { - 0: { "node": $kasseta_fs_kd/ref_A3, "condition": last_part == '1к' }, - 1: { "node": $kasseta_fs_kd/ref_A3, "condition": last_part == '4к' }, - 2: { "node": $kasseta_fs_kd/ref_A3, "condition": last_part == '3к' }, - 3: { "node": $kasseta_fs_kd/ref_A3, "condition": last_part == '2к' }, - 20: { "node": $kasseta_fs_kd/ref_A6, "condition": last_part == '1к' }, - 21: { "node": $kasseta_fs_kd/ref_A6, "condition": last_part == '4к' }, - 22: { "node": $kasseta_fs_kd/ref_A6, "condition": last_part == '3к' }, - 23: { "node": $kasseta_fs_kd/ref_A6, "condition": last_part == '2к' }, - 24: { "node": $kasseta_fs_kd/ref_A5, "condition": last_part == '1к' }, - 25: { "node": $kasseta_fs_kd/ref_A5, "condition": last_part == '4к' }, - 26: { "node": $kasseta_fs_kd/ref_A5, "condition": last_part == '3к' }, - 27: { "node": $kasseta_fs_kd/ref_A5, "condition": last_part == '2к' }, + 0: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '1к' }, + 1: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '4к' }, + 2: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '3к' }, + 3: { "node": $kasseta_fs_kd/ref_A3, "condition": pribor == '2к' }, + 20: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '1к' }, + 21: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '4к' }, + 22: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '3к' }, + 23: { "node": $kasseta_fs_kd/ref_A6, "condition": pribor == '2к' }, + 24: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '1к' }, + 25: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '4к' }, + 26: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '3к' }, + 27: { "node": $kasseta_fs_kd/ref_A5, "condition": pribor == '2к' }, } for fs in packet_type_7: if fs in fs_mapping and fs_mapping[fs]["condition"]: var data = packet_type_7[fs] - var state = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE - fs_mapping[fs]["node"].state = state + var state_fs = STATE_VAL.GOOD if data.isg == 1 else STATE_VAL.ERROR if data.isg == 0 else STATE_VAL.NONE + fs_mapping[fs]["node"].state = state_fs if fs < 4: _control_results["fs_1"] = (data.isg == 1) elif fs <24: _control_results["fs_2"] = (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 + #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 func on_ug_setting() -> void: @@ -382,13 +497,11 @@ func on_control_result() -> void: result = false print_debug('%s false' % key) - var parts = currecnt_unit.split('-') - var last_part = parts[-1] # Прибор if result: - $control_result.text = 'Прибор ПРД-%s исправен' % last_part + $control_result.text = 'Прибор ПРД-%s исправен' % pribor $control_result.add_theme_color_override("font_color", Color.AQUAMARINE) else: - $control_result.text = 'Прибор ПРД-%s неисправен' % last_part + $control_result.text = 'Прибор ПРД-%s неисправен' % pribor $control_result.add_theme_color_override("font_color", Color.CRIMSON) await get_tree().create_timer(Constants.TIMER_DELAY).timeout flag_timer_started = false diff --git a/scenes/pribor-prd-k/pribor-prd-k.tscn b/scenes/pribor-prd-k/pribor-prd-k.tscn index 53d3fdf..b2d8941 100644 --- a/scenes/pribor-prd-k/pribor-prd-k.tscn +++ b/scenes/pribor-prd-k/pribor-prd-k.tscn @@ -356,7 +356,6 @@ offset_right = 649.0 offset_bottom = 1003.0 theme_override_colors/font_color = Color(0.862745, 0.0784314, 0.235294, 1) theme_override_font_sizes/font_size = 28 -text = "Прибор ПРД- неисправен" horizontal_alignment = 1 metadata/_edit_lock_ = true diff --git a/scenes/pribor-prd-n/pribor-prd-n.gd b/scenes/pribor-prd-n/pribor-prd-n.gd index fda5410..0a006f5 100644 --- a/scenes/pribor-prd-n/pribor-prd-n.gd +++ b/scenes/pribor-prd-n/pribor-prd-n.gd @@ -16,7 +16,8 @@ const Constants = { "ADDR_UG_LITERA_2": 0x108, "TEMP_THRESHOLD": 70, "POWER_THRESHOLD": 40, - "TIMER_DELAY": 1.0 + "TIMER_DELAY": 1.4, + "POWER_UM": 70, } enum STATE_VAL { NONE = 0, GOOD = 1, ERROR = 2 } # Основные переменные @@ -71,7 +72,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 = '' @@ -178,13 +179,17 @@ func check_temperature_um(status_prd: PackedByteArray) -> void: 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) power_amplifier[i_temp].value0 = tmp_1 - + if tmp_1 > Constants.TEMP_THRESHOLD: + _control_results["temperature"] = false 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) power_amplifier[i_temp+6].value0 = tmp_2 + if tmp_2 > Constants.TEMP_THRESHOLD: + _control_results["temperature"] = false + ## Проверка ДКМ @@ -221,7 +226,7 @@ func _process_ukp_power(status: PackedByteArray) -> void: 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 + power_amplifier[i].state = STATE_VAL.GOOD if power_array_1[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR count_packet_1 += 1 ## Мощность УМ от УКП 2 @@ -241,7 +246,7 @@ func _process_ukp_power(status: PackedByteArray) -> void: 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 + power_amplifier[i+6].state = STATE_VAL.GOOD if power_array_2[i] > Constants.POWER_THRESHOLD else STATE_VAL.ERROR count_packet_2 += 1 @@ -253,16 +258,33 @@ func _process_ukp_power(status: PackedByteArray) -> void: func _on_control_fs(mode: bool) -> void: - var interfer_name: String - var fs_arr: Array - if mode: - interfer_name = 'k1' - fs_arr = [[90.0, 2450.0, 1500.0, 23]] - else: - interfer_name = 'off' - fs_arr = [[90.0, 2450.0, 1500.0, 23]] - signaller.emit_signal('interfer_init', interfer_name, fs_arr, 100.0) + var parts = currecnt_unit.split('-') + var last_part = parts[-1] + var angle: float = 0.0 # -> ПРД-Н1; 90.0 -> ПРД-Н2; 180.0 -> ПРД-Н3; 270.0 -> ПРД-Н4 + var sector_1: float = 4 # -> ПРД-Н1; 7 -> ПРД-Н2; 6 -> ПРД-Н3; 5 -> ПРД-Н4; + var sector_2: float = 8 # -> ПРД-Н1; 11 -> ПРД-Н2; 10 -> ПРД-Н3; 9 -> ПРД-Н4; + if last_part == '2н': + angle = 90.0 + sector_1 = 7 + sector_2 = 11 + elif last_part == '3н': + angle = 180.0 + sector_1 = 6 + sector_2 = 10 + elif last_part == '4н': + angle = 270.0 + sector_1 = 5 + sector_2 = 9 + var interfer_name: String = 'k1' if mode else 'off' + var freq_1: float = 860.0 # ФС_1 + var freq_2: float = 1137.0 # ФС_2 + var width_1: float = 110.0 # ФС_1 + var width_2: float = 110.0 # ФС_2 + + 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/pribor-prd-v/pribor-prd-v.gd b/scenes/pribor-prd-v/pribor-prd-v.gd index 09ba887..5a82a13 100644 --- a/scenes/pribor-prd-v/pribor-prd-v.gd +++ b/scenes/pribor-prd-v/pribor-prd-v.gd @@ -285,10 +285,10 @@ func _on_control_fs(mode: bool) -> void: var interfer_name: String = 'k1' if mode else 'off' var freq_1: float = 1227.0 # ФС_1 var freq_2: float = 1575.0 # ФС_2 - var hz_1: float = 340.0 # ФС_1 - var hz_2: float = 510.0 # ФС_2 + var width_1: float = 110.0 # ФС_1 + var width_2: float = 110.0 # ФС_2 - var fs_arr: Array = [[angle, freq_1, hz_1, sector_1], [angle, freq_2, hz_2, sector_2]] + 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)