diff --git a/project.godot b/project.godot index 48801b2f..1cd41bc7 100644 --- a/project.godot +++ b/project.godot @@ -38,6 +38,7 @@ config/unit_rr_left_bort="http://127.0.0.1:8080/reports/left_SelfTestReport.json config/unit_rr_right_bort="http://127.0.0.1:8080/reports/right_SelfTestReport.json" config/unit_rr_request_period=5.0 config/kems_files_path="user://kems/" +config/emsg_files_path="user://emsg/" [autoload] @@ -55,6 +56,7 @@ threats="*res://scripts/threats.gd" yemsdevs="*res://scripts/yems-devs.gd" yemsboards="*res://scripts/yems-boards.gd" yemsconsts="*res://scripts/yems-consts.gd" +yemsg="*res://scripts/yems-g.gd" interfer="*res://scripts/interfer.gd" hotkeys="*res://scripts/hotkeys.gd" mercator="*res://scripts/mercator.gd" diff --git a/scenes/frame-ecm-list/frm-ecm-list.gd b/scenes/frame-ecm-list/frm-ecm-list.gd index ee1ba690..e77ccff9 100644 --- a/scenes/frame-ecm-list/frm-ecm-list.gd +++ b/scenes/frame-ecm-list/frm-ecm-list.gd @@ -26,7 +26,7 @@ func on_btn_cancel_pressed(btn, nodes): signaller.emit_signal('interfer_off_all') await get_tree().create_timer(0.1).timeout btn.pressed = false - nodes.any(func(btn): btn.pressed = false) + nodes.any(func(btn_node): btn_node.pressed = false) func on_btn_pressed(btn_this, btn_others): diff --git a/scenes/работа/работа.gd b/scenes/работа/работа.gd index 9c417b95..751c4305 100644 --- a/scenes/работа/работа.gd +++ b/scenes/работа/работа.gd @@ -175,7 +175,7 @@ func map_threat_to_bip(th: threats.Threat, bip: Control): var sector_width = 50.0 for key in fs_freq: var freq_range = fs_freq[key] - var num_values = (freq_range[1]- freq_range[0]) / sector_width + var _num_values = (freq_range[1]- freq_range[0]) / sector_width if freq_range[0] <= freq and freq <= freq_range[1]: sector_key = key break @@ -502,6 +502,7 @@ func set_btns_disabled(value: bool, btn): else: btn.set_disabled(value) + func on_fs_update_color(ecms): fs_active.clear() for ecm in ecms.values(): diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index 97259ada..5878e921 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -133,7 +133,7 @@ func on_btn_flash_write(btn): func init_tbl_files(): check_dir() $scrl_files/tbl_files.set_header([TableHeader, TableHeader, TableHeader]) - $scrl_files/tbl_files.set_header_text(['Имя файла', 'Дата изменения', 'Размер']) + $scrl_files/tbl_files.set_header_text(['Имя файла', 'Размер', 'Дата изменения']) $scrl_files/tbl_files.set_columns_min_size([200, 120, 70]) tools.fill_files_table($scrl_files/tbl_files, yemsconsts.files_folder, FILES_ROWS_TYPES) $scrl_files/tbl_files.set_columns_alignments(yemsconsts.FILES_ROWS_ALIGNMENT) diff --git a/scripts/settings.gd b/scripts/settings.gd index 08525b8f..6fbfdb96 100644 --- a/scripts/settings.gd +++ b/scripts/settings.gd @@ -5,22 +5,22 @@ class_name rep_settings extends Node @export var UnitProfiles: = { \ # Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий - 'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], + 'уарэп-яу07-частный': ['yau07rx', '10.1.1.5', [50005], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'], 'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'], 'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'], 'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'], - 'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', [50066], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', [50065], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', [50067], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', [50018], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', [50017], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', [50019], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], - 'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', [50050], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], - 'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', [50049], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], - 'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', [50051], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-2в': ['yau07tx', '10.1.1.22', [50022], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-2н': ['yau07tx', '10.1.1.21', [50021], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-2к': ['yau07tx', '10.1.1.23', [50023], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-4в': ['yau07tx', '10.1.1.42', [50042], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-4н': ['yau07tx', '10.1.1.41', [50041], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-4к': ['yau07tx', '10.1.1.43', [50043], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-1в': ['yau07tx', '10.1.1.12', [50012], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-1н': ['yau07tx', '10.1.1.11', [50011], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-1к': ['yau07tx', '10.1.1.13', [50013], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'], + 'уарэп-яу07-3в': ['yau07tx', '10.1.1.32', [50032], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'], + 'уарэп-яу07-3н': ['yau07tx', '10.1.1.31', [50031], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], + 'уарэп-яу07-3к': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'], # Название: [ Протокол, Адрес, Порт получения, Комментарий ] 'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'], diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 45b7a31b..a4175ae8 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -24,6 +24,7 @@ class YaU07 extends unit.Unit: WRITE_FLASH_MP550 = 55, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07 WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07 READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 + LOAD_EMG_DONE = 70, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 } var cmd_num_rx: = 0 ## Номер команды принятый @@ -171,6 +172,22 @@ class YaU07 extends unit.Unit: cmd_state = CmdState.SEND cmd_code_tx = cmd_code return true + + func send_other(cmd_code: int): + if (cmd_state == CmdState.WAIT) \ + or (cmd_state == CmdState.SEND) \ + or (cmd_state == CmdState.UNCK): + return false + if not (cmd_code == CmdCode.LOAD_EMG_DONE): + return false + cmd_num_tx = (cmd_num_rx + 1) % 0xffff + tx_data.encode_u16(0, cmd_retry) + tx_data.encode_u16(2, cmd_num_tx) + tx_data.encode_u8(6, cmd_code) + tx_len = 7 + cmd_state = CmdState.SEND + cmd_code_tx = cmd_code + ## Возвращает код команды ЯУ-07. ## rx_data - Принятые данные. ## Возвращает - Код команды не найден, 0...255 - код команды. diff --git a/scripts/yems-boards.gd b/scripts/yems-boards.gd index 958b939e..b72794a2 100644 --- a/scripts/yems-boards.gd +++ b/scripts/yems-boards.gd @@ -2,7 +2,7 @@ class_name yems_boards extends Node class EmsBoard: enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH, - WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END} ## Состояния платы + WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END, LOAD_FAIL} ## Состояния платы var id_board: int ## id платы var in_devs: Dictionary ## Словарь с входными устройствами. @@ -25,9 +25,11 @@ class EmsBoard: var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС + var ems_g_fn: String = '' ## Имя файла настроек ЭМС-Г - signal upd_delay_offset(board, cur_dev) ## Согнал о обновлении данных задержек + signal upd_delay_offset(board, cur_dev) ## Сигнал о обновлении данных задержек signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов + signal load_done(board) ## Сигнал о окончании загрузки данных в ячейку func _init(id, base_addr, in_table, out_table, u): id_board = id @@ -41,11 +43,19 @@ class EmsBoard: ## Устанавливает состояние входов и выходов платы func set_status(status): - var offset = yemsconsts.STATUS_OFFSET[id_board] - var bit_online = 0 + id_board - var bit_load = 3 + id_board - online = (status[0] >> bit_online) & 1 - ems_load = (status[0] >> bit_load) & 1 + var offset = 0 + if id_board < 3: + offset = yemsconsts.STATUS_OFFSET[id_board] + var bit_online = 0 + id_board + var bit_load = 3 + id_board + online = (status[0] >> bit_online) & 1 + ems_load = (status[0] >> bit_load) & 1 + else: + online = status[0] & 1 + var bit_load = 4 + ems_load = (status[0] >> bit_load) & 1 + if not online: + need_write = true var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \ (status[4 + offset] << 24) | (status[5 + offset] << 32)) var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \ @@ -271,3 +281,6 @@ class EmsBoard: else: continue if ports.has('%d'%(base_addr_isa + 10)): cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)]) + + func set_load_done(): + unit_ems.send_other(unit_ems.CmdCode.LOAD_EMG_DONE) diff --git a/scripts/yems-consts.gd b/scripts/yems-consts.gd index 2f2014b2..e37934bb 100644 --- a/scripts/yems-consts.gd +++ b/scripts/yems-consts.gd @@ -1,12 +1,15 @@ class_name yerms_consts extends Node var files_folder = ProjectSettings.get_setting('application/config/kems_files_path', 'user://kems/') # Папка с файлами вариантами настроек ЭМС +var emsg_files_folder = ProjectSettings.get_setting('application/config/emsg_files_path', 'user://emsg/') # Папка с файлами вариантами настроек ЭМС var FILES_ROWS_ALIGNMENT = [ HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER, HORIZONTAL_ALIGNMENT_CENTER ] var FILES_COLUMN_WIDTHS = [ 90, 150, 150 ] const NUM_INPUT = 38 ## Количество входных устройств const NUM_OUTPUT = 38 ## Количество выходных устройств +const NUM_INPUT_G = 16 ## Количество входных устройств для ЭМС-Г +const NUM_OUTPUT_G = 16 ## Количество выходных устройств для ЭМС-Г const NUM_BYTE_FROM_FLASH = 760 ## Количество байт для запись в flash const STATUS_OFFSET = { ## Смещение статуса, ключ id платы 0: 0, @@ -32,6 +35,22 @@ const FILES_NAME = ['Вариант 1', 'Вариант 5', ] +## Первый элемент - имя юнита, второй - имя файла настроек +const EMS_G_BOARDS = [ + ['уарэп-яу07-2в','ЭМС-Г-В2'], + ['уарэп-яу07-2н','ЭМС-Г-Н2'], + ['уарэп-яу07-2к','ЭМС-Г-К2'], + ['уарэп-яу07-4в','ЭМС-Г-В4'], + ['уарэп-яу07-4н','ЭМС-Г-Н4'], + ['уарэп-яу07-4к','ЭМС-Г-К4'], + ['уарэп-яу07-1в','ЭМС-Г-В1'], + ['уарэп-яу07-1н','ЭМС-Г-Н1'], + ['уарэп-яу07-1к','ЭМС-Г-К1'], + ['уарэп-яу07-3в','ЭМС-Г-В3'], + ['уарэп-яу07-3н','ЭМС-Г-Н3'], + ['уарэп-яу07-3к','ЭМС-Г-К4'],] + + ## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС. const INPUT_KEMS = [ [1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],