diff --git a/scenes/frame-ecm-params/scroll-ecm-params.gd b/scenes/frame-ecm-params/scroll-ecm-params.gd index 859c5858..7aa48873 100644 --- a/scenes/frame-ecm-params/scroll-ecm-params.gd +++ b/scenes/frame-ecm-params/scroll-ecm-params.gd @@ -20,6 +20,7 @@ const TABLE_PARAMS = { 'dur': [4, 'Длительность импульса, мкс', true, 0.0, 1000000.0], 'period': [5, 'Период повтора, мкс', true, 0.0, 1000000.0] } +const MOD_ROW_INDEX = 6 ## Индекс строки с модуляцией func init_table(): for i in TABLE_PARAMS.size(): $table.add_row(TABLE_ROW) @@ -33,30 +34,32 @@ func init_table(): var node = $table.get_node2(1, p[0]) node.connect('text_submitted', Callable(self, 'on_edit_entry').bind(node)) $table.add_row(TABLE_TAGGLE_BTN) - $table.set_node_text(0, 6, 'Модуляция') - $table.set_node_alligment(0, 6, HORIZONTAL_ALIGNMENT_LEFT) - $table.set_node_editable(0, 6, false) - var taggle_btn = $table.get_node2(1, 6) - for item in taggle_btn.get_children(): + $table.set_node_text(0, MOD_ROW_INDEX, 'Модуляция') + $table.set_node_alligment(0, MOD_ROW_INDEX, HORIZONTAL_ALIGNMENT_LEFT) + $table.set_node_editable(0, MOD_ROW_INDEX, false) + var taggle_node = $table.get_node2(1, MOD_ROW_INDEX) + for item in taggle_node.get_children(): item.size.x = 85 item.size.y = 25 item.position.x = 0 item.position.y = 0 - taggle_btn.size.x = 85 - taggle_btn.size.y = 25 + taggle_node.size.x = 85 + taggle_node.size.y = 25 + var taggle_btn = taggle_node.get_children()[1] + taggle_btn.connect('pressed', on_taggle_btn.bind(taggle_btn)) + taggle_btn.disabled = true $table.set_columns_min_size(TABLE_COLUMN_SIZE) $table.set_meta('id', 0) + signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected').bind(taggle_btn)) + signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) ## Called when the node enters the scene tree for the first time. func _ready(): - signaller.connect('interfer_selected', Callable(self, 'on_interfer_selected')) - signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) call_deferred('init_table') func on_edit_entry(text : String, entry): - print_debug() var ecm = $table.get_meta('ecm') if $table.has_meta('ecm') == false: return var indexis = $table.get_key_indexes(entry.name) @@ -77,19 +80,22 @@ func check_value(val, min_val, max_val, old_val): else: return old_val -func on_interfer_selected(ecm): +func on_interfer_selected(ecm, taggle_btn): if ecm != null: $table.set_meta('ecm', ecm) + taggle_btn.disabled = false else: $table.set_meta('ecm', null) - on_ecm_update() + taggle_btn.disabled = true + taggle_btn.button_pressed = false + on_ecm_update(taggle_btn) -func on_ecm_update(): +func on_ecm_update(taggle_btn): for item in len(TABLE_PARAMS): $table.set_node_text(1, item, '') $table.set_node_editable(1, item, false) - if $table.has_meta('ecm') == false: return + if not $table.has_meta('ecm'): return var ecm: interfer.Interfer = $table.get_meta('ecm') var mnms = tools.get_members_names(ecm) for item in ecm['params'].keys(): @@ -100,9 +106,17 @@ func on_ecm_update(): var val = ecm.get_value(member_name) $table.set_node_text(1, p[0], '%s' % val) $table.set_node_editable(1, p[0], p[2]) + taggle_btn.button_pressed = ecm.modulation + func on_rto_threat_unsel(_th_id): for item in range(len(TABLE_PARAMS)): $table.set_node_text(1, item, '') $table.set_node_editable(1, item, false) + + +func on_taggle_btn(taggle_btn): + if not $table.has_meta('ecm'): return + var ecm: interfer.Interfer = $table.get_meta('ecm') + ecm.modulation = taggle_btn.button_pressed diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 4b9fc53b..89e2ca0e 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -19,6 +19,7 @@ func _ready() -> void: func on_external_cu_btn_pressed(btn) -> void: var state = btn.button_pressed + ProjectSettings.set_setting('application/config/external_cu', state) if state: signaller.emit_signal('interfer_off_all') @@ -31,7 +32,7 @@ func on_vk_pressed(btn) -> void: func on_ems2_pressed(btn) -> void: var state = btn.button_pressed signaller.emit_signal('ems2_hide_pressed', state) - + func setting_tab(): var yams: Array = [HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER] @@ -74,7 +75,7 @@ func setting_tab(): else: $table.add_row([TableLabel, TableEmpti]) $table.set_row_text(i, [row_texts[i]]) - + var extern_cu_node = $table.get_node2(1, 17).get_children()[1] extern_cu_node.connect('pressed', on_external_cu_btn_pressed.bind(extern_cu_node)) $table.set_row_text(18,(['Кнопка «Подавление»'])) @@ -86,6 +87,6 @@ func setting_tab(): ems2_hide_node.connect('pressed', on_ems2_pressed.bind(ems2_hide_node)) ems2_hide_node.set_pressed(true) on_ems2_pressed(ems2_hide_node) - + $table.set_columns_min_size([365, 365]) $table.set_columns_alignments(yams) diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 7b0432e8..02e35568 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -393,7 +393,7 @@ func sel_fs_sector(event): func set_fs_color(ecm): var fs_index_arr: Array = [] - get_fs_index(ecm, fs_index_arr) + prd.get_fs_index(ecm, fs_index_arr) if ecm.krp != interfer.INTERFER_OFF: for item in fs_index_arr: fs_active[item] = null @@ -439,30 +439,13 @@ func get_fs_param(index: int) -> Array: func on_fs_selected(ecm): var fs_index_arr: Array = [] - get_fs_index(ecm, fs_index_arr) + prd.get_fs_index(ecm, fs_index_arr) fs_selected.clear() for item in fs_index_arr: fs_selected[item] = null update_fs_colors() -func get_fs_index(ecm, fs_index_arr): - var sector: int - var band: Array - var angle: float = ecm.kni + 45.0 - if angle > 360.0: - angle -= 360.0 - for sec in prd.fs_sectors.values(): - if float(angle) >= sec[0] and float(angle) <= sec[1]: - sector = prd.fs_sectors.find_key(sec) - for diap in prd.fs_freq.values(): - if ecm.params.has('freq'): - if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]: - band.append(prd.fs_freq.find_key(diap)) - for item in band: - fs_index_arr.append(item * 4 + sector) - - func set_btns_disabled(value: bool, btn): var external_cu = ProjectSettings.get_setting('application/config/external_cu', false) if external_cu: diff --git a/scripts/interfer.gd b/scripts/interfer.gd index 99964027..c3a1a136 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -50,6 +50,7 @@ class Interfer: var retss: int ## Значение счётчика сообщения в котором был произведён запрос массива параметров. var tick_tx: int ## Тик время обновления цели, мс. var source_interfer: String = '' ## Тип объекта по которой поставлена помеха. + var modulation: bool ## Модуляция для включения усилителей func _to_string() -> String: return 'номер: %d название: %s частота: %0.1f МГц пеленг: %0.1f гр.' % [ispp, ITERFER_MODE[krp][0], params['freq'], kni] @@ -148,6 +149,7 @@ func on_th_aoa_update(threats: Dictionary, ecms: Dictionary, unit): ecm.kni = thr.aoa send_ecm(ecm, unit) signaller.emit_signal('fs_update_color', ecms) + prd.update_fs_state(ecms) if auto_status == 0: return diff --git a/scripts/network.gd b/scripts/network.gd index fd7fbdac..0b3e022a 100644 --- a/scripts/network.gd +++ b/scripts/network.gd @@ -30,6 +30,7 @@ class Socket extends PacketPeerUDP: put_packet(data) + class SocketTCP extends TCPServer: const RX_TIMEOUT: int = 1000 ## Время сброса счётчика принятия части пакета. var peerstream: = PacketPeerStream.new() diff --git a/scripts/prd.gd b/scripts/prd.gd index 30e2b398..c6a503fe 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -29,10 +29,10 @@ const fs_sectors: Dictionary = { 1: [270.0, 360.0] } const fs_freq: Dictionary = { - 0: [390.0, 510.0, 200.0, 250.0, 433.0], + 0: [390.0, 800.0, 200.0, 250.0, 433.0], 1: [800.0, 1065.0, 250.0, 300.0, 860.0], 2: [1065.0, 1210.0, 300.0, 350.0, 1137.0], - 3: [1150.0, 1280.0, 350.0, 400.0, 1227.0], + 3: [1150.0, 1490.0, 350.0, 400.0, 1227.0], 4: [1490.0, 2000.0, 400.0, 450.0, 1575.0], 5: [2000.0, 3500.0, 450.0, 500.0, 2450.0], 6: [3500.0, 6000.0, 500.0, 550.0, 5800.0] } @@ -123,3 +123,28 @@ func _ready() -> void: fs_dict[key] = fs_ampl if prd_dict.has(fs_ampl.prd_name): prd_dict[fs_ampl.prd_name].fs_dic[key] = fs_ampl + + +func get_fs_index(ecm, fs_index_arr): + var sector: int + var band: Array + var angle: float = ecm.kni + 45.0 + if angle > 360.0: + angle -= 360.0 + for sec in fs_sectors.values(): + if float(angle) >= sec[0] and float(angle) <= sec[1]: + sector = fs_sectors.find_key(sec) + for diap in fs_freq.values(): + if ecm.params.has('freq'): + if ecm.params['freq'] >= diap[0] and ecm.params['freq'] <= diap[1]: + band.append(fs_freq.find_key(diap)) + for item in band: + fs_index_arr.append(item * 4 + sector) + + +func update_fs_state(ecms): + for ecm in ecms.values(): + var fs_ids: Array + get_fs_index(ecm, fs_ids) + + pass diff --git a/scripts/settings.gd b/scripts/settings.gd index b53439f2..1ce31659 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -27,7 +27,7 @@ var settings_program: Dictionary 'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], # Название: [ Протокол, Адрес, Порт получения, Комментарий ] - 'уарэп-5п28': [ '5p28', '192.168.3.109', [50000], 'IP-адрес комплекса 5П-28'], + 'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'], # Название: [ Протокол, Адрес, Скорость, ??, ??, Комментарий 'уарэп-щ3': ['mbcs', '/home/sasha/dev/tty1', [19200, 7, 'N', 8, 1], 'Параметры клиента Modbus Serial'], @@ -45,21 +45,25 @@ var settings_program: Dictionary func _ready() -> void: var file = FileAccess.open(settings_file, FileAccess.READ) - if file != null: - var read = file.get_as_text() - file.close() - var json_conv: = JSON.new() - if Error.OK == json_conv.parse(read): - var json_data = json_conv.get_data() - settings_program.merge(json_data) - for key in UnitProfiles.keys(): - if json_data.has(key): - UnitProfiles[key][1] = json_data[key][0] - for i in len(json_data[key]) - 1: - if json_data[key][1][i+1].is_valid_int(): - UnitProfiles[key][2][i] = int(json_data[key][i+1]) - else: - UnitProfiles[key][2][i] = json_data[key][i+1] + if not file: + log.info('Не удалось открыть файл настроек %s, использованы настройики по умолчанию' % settings_file) + return + var read = file.get_as_text() + file.close() + var json_conv: = JSON.new() + if Error.OK != json_conv.parse(read): + log.info('Не удалось прочитать файл настроек %s, использованы настройики по умолчанию' % settings_file) + return + var json_data = json_conv.get_data() + settings_program.merge(json_data) + for key in UnitProfiles.keys(): + if not json_data.has(key): continue + UnitProfiles[key][1] = json_data[key][0] + for i in len(json_data[key]) - 1: + if json_data[key][1][i+1].is_valid_int(): + UnitProfiles[key][2][i] = int(json_data[key][i+1]) + else: + UnitProfiles[key][2][i] = json_data[key][i+1] log.info('Модуль настроек готов') diff --git a/table/table.gd b/table/table.gd index 9d9363d1..ccb7cc99 100644 --- a/table/table.gd +++ b/table/table.gd @@ -10,8 +10,8 @@ class_name GDTable extends GridContainer @export_file var selector_type_file: = 'res://table/selector.tscn': set = load_selector_scene ## Сцена селектора для выбранного ряда const HEAD_PREFIX = 'HEAD_' ## Префикс ключа заголовка таблицы -const INDEX_FORMAT = '%02d_%02d' ## Формат индекса ключа -const MAX_INDEX = 99 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа +const INDEX_FORMAT = '%03d_%03d' ## Формат индекса ключа +const MAX_INDEX = 199 ## Максимальное значение индекса для колонки и строки. Связано с форматом индекса ключа const NODE_PREFIX = 'NODE_' ## Префикс ключа ячейки таблицы const SLCT_PREFIX = 'SLCT_' ## Префикс ключа индикатора выбранного ряда таблицы