diff --git a/scenes/bip/bip.gd b/scenes/bip/bip.gd index d8ea82f..b4594e0 100644 --- a/scenes/bip/bip.gd +++ b/scenes/bip/bip.gd @@ -10,7 +10,7 @@ func set_track_visible(value: bool): $track.visible = value func set_ecm_visible(value: bool): $ecm_done.visible = value -func update(tick_ms: int = 0): pass +func update(_tick_ms: int = 0): pass ## Задаёт цвет diff --git a/scenes/tilemap/Control.gd b/scenes/tilemap/Control.gd index 4b5c358..ccba361 100644 --- a/scenes/tilemap/Control.gd +++ b/scenes/tilemap/Control.gd @@ -4,7 +4,7 @@ var scene_list=[] func node_list(node): scene_list.append(node) - + func _enter_tree(): get_tree().node_added.connect(self.node_list) func _ready(): diff --git a/scenes/настройки/настройки.gd b/scenes/настройки/настройки.gd index 6d64921..482c1a3 100644 --- a/scenes/настройки/настройки.gd +++ b/scenes/настройки/настройки.gd @@ -193,8 +193,7 @@ func _on_btn_save_settings_pressed(): json_data[parameter].append(child.is_pressed()) var file = FileAccess.open(settings.settings_file, FileAccess.WRITE) if file: - var json_conv = JSON.new() - var json_string = json_conv.stringify(json_data) + var json_string = JSON.stringify(json_data) file.store_string(json_string) file.close() log.info('Настройки сохранены в файл %s' % settings.settings_file) diff --git a/scenes/эмс/yems-boards.gd b/scenes/эмс/yems-boards.gd index 78962ff..9c184cf 100644 --- a/scenes/эмс/yems-boards.gd +++ b/scenes/эмс/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, WRITE_FLASH_END} ## Состояния платы + WRITE_FLASH_BEGIN, WRITE_FLASH_END, LOADING} ## Состояния платы enum LoadState {NOT_LOAD, DONE, IN_PROCESS, FAIL, NOT_DEFINED} @@ -65,7 +65,7 @@ class EmsBoard: online = status[0] & 1 var bit_load = 4 if online: - if ems_load == LoadState.NOT_DEFINED: + if (ems_load != LoadState.IN_PROCESS) and (ems_load != LoadState.FAIL): ems_load = LoadState.DONE if ((status[0] >> bit_load) & 1) else LoadState.NOT_LOAD elif ((status[0] >> bit_load) & 1): ems_load = LoadState.DONE @@ -123,22 +123,23 @@ class EmsBoard: ports.append(port) unit_ems.send_isa(unit_ems.CmdCode.READ_ISA, ports) + ## Проверяет правильность выполнения команды записи номера устройства + func check_set_dev(cmd_s): + if unit_ems.isa_ports.has(base_addr_isa + 2): + cur_dev_num = unit_ems.isa_ports[base_addr_isa + 2] + state_cmd = cmd_s + if not check_dev_number(): + return + on_wr_device(cur_dev_num) + ## Обработчик сообщения, о том, что команда выполнена (машина состояний) func on_command_done(_yau_07): if not check_dev_number(): return if (unit_ems.cmd_code_rx == 1) and state_cmd == WR_DEV_NUM_W: - state_cmd = WRITE - cur_dev_num = unit_ems.isa_ports[base_addr_isa + 2] - if not check_dev_number(): - return - on_wr_device(cur_dev_num) + check_set_dev(WRITE) elif (unit_ems.cmd_code_rx == 1) and state_cmd == WR_DEV_NUM_R: - state_cmd = READ - cur_dev_num = unit_ems.isa_ports[base_addr_isa + 2] - if not check_dev_number(): - return - on_wr_device(cur_dev_num) + check_set_dev(READ) elif (state_cmd == READ) or (state_cmd == WRITE) \ and ((unit_ems.cmd_code_rx == 1) or (unit_ems.cmd_code_rx == 0)): for key in unit_ems.isa_ports.keys(): @@ -175,6 +176,8 @@ class EmsBoard: on_read_flash() elif (state_cmd == WRITE_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.WRITE_FLASH_MP550): set_wait() + elif state_board == LOADING: + set_wait() ## Выбор текущего устройства и проверка правильности его номера func check_dev_number(): @@ -300,6 +303,7 @@ class EmsBoard: cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)]) func set_load_done(): + state_board = LOADING unit_ems.send_load_ems_done(unit_ems.CmdCode.LOAD_EMS_DONE) func execute_cmd(): diff --git a/scripts/prd.gd b/scripts/prd.gd index 610bf30..4ad59d2 100644 --- a/scripts/prd.gd +++ b/scripts/prd.gd @@ -29,16 +29,6 @@ const FS_SECTORS: Dictionary = { 2: [180.0, 270.0], 1: [270.0, 360.0] } -const CODE_UM: Array = [ - [-5, 0], - [0 , 10], - [10, 20], - [20, 30], - [30, 40], - [40, 50], - [50, 55] -] - const FS_FREQ: Dictionary = { 0: [390.0, 800.0, 200.0, 250.0, 433.0], 1: [800.0, 1065.0, 250.0, 300.0, 860.0], @@ -99,18 +89,28 @@ var prd_dict: Dictionary ## Словарь с приборами ПРД class Fs: const UM_PORTS: Dictionary = { - 1 : 0x6, - 2 : 0xA, - 3 : 0x6, - 4 : 0xA, - 5 : 0x6, - 6 : 0xA } + 1 : 0x106, + 2 : 0x10A, + 3 : 0x106, + 4 : 0x10A, + 5 : 0x106, + 6 : 0x10A } + + const CODE_UM: Array = [ + [-5, 0], + [0 , 10], + [10, 20], + [20, 30], + [30, 40], + [40, 50], + [50, 55]] var index ## Индекс блока усилителей var modulation: bool ## Состояние модуляции var prd_name: String ## Ипя прибора ПРД в котором стоит модуль var um_port: int = 0 ## Порт для угла места - var um_code: int = 0 ## Код угла места + var um_code_tx: int = 0 ## Код угла места для отправки в прибор + var um_code_rx: int = 0 ## Текущий код угла места signal update_modulation(index) @@ -123,16 +123,34 @@ class Fs: func set_modulation(val): modulation = val + func set_um_code(um: float): + if um < CODE_UM[0][0]: + um_code_tx = 0 + elif um > CODE_UM[len(CODE_UM) - 1][1]: + um_code_tx = len(CODE_UM) - 1 + else: + for i in CODE_UM.size(): + if (um >= CODE_UM[i][0]) and (um < CODE_UM[i][1]): + um_code_tx = i + + func set_um_data(data_arr, u): + if UM_PORTS.has(index/4): + var val = um_code_tx + if u.isa_ports.has(um_port): + val = tools.set_bits(u.isa_ports[um_port], um_code_tx, 0x0003) + data_arr.append(um_port) + data_arr.append(val) + class PRD: - const UG_BASE_ADDR: int = 0x100 ## адрес ячейки УГ - var prd_name: String ## Имя прибора var unit_yau07 ## Юнит эмс var fs_dic: Dictionary ## Массив блоков ФС var yemsg_board: yemsboards.EmsBoard ## Плата ЭМС-Г var state = PrdState.WORK var cmd_array: Array ## Очередь команд + var ug_online: bool = false ## Состояние ячейки УГ + var set_ug_state: bool = true ## Необходимо ли записать в УГ настройки func _init(u_name ,u): prd_name = u_name @@ -159,18 +177,25 @@ class PRD: unit_yau07.connect('command_done', Callable(self, 'on_command_done').bind()) unit_yau07.connect('line_changed', Callable(self, 'on_line_changed').bind()) - func on_command_done(unit_ems): + func on_command_done(u): if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT: - yemsg_board.on_command_done(unit_ems) + yemsg_board.on_command_done(u) return + for fs in fs_dic.values(): + for port in u.isa_ports.keys(): + if port == fs.um_port: + fs.um_code_rx = u.isa_ports[port] & 0x7 + + func on_line_changed(unit_ems): if not unit_ems.online: yemsg_board.ems_load = yemsg_board.LoadState.NOT_DEFINED yemsg_board.set_wait() + set_ug_state = true - func on_data_received(unit_ems): - yemsg_board.set_status(unit_ems.status) + func on_data_received(_u): + set_prd_status() if state != PrdState.WORK: return if yemsg_board.state_board != yemsg_board.WAIT or yemsg_board.state_cmd != yemsg_board.WAIT: @@ -187,6 +212,12 @@ class PRD: return execute_cmd() + func set_prd_status(): + yemsg_board.set_status(unit_yau07.status) + ug_online = (unit_yau07.status[0] >> 1) & 1 + if not ug_online: + set_ug_state = true + func execute_cmd(): if not len(cmd_array): return var cmd: Array = cmd_array.pop_front() @@ -219,6 +250,9 @@ class PRD: func on_update_modulation(index): yemsg_board.add_cmd(index/4, fs_dic[index].modulation) + func set_um(data_arr): + cmd_array.append([unit_yau07.CmdCode.WRITE_ISA, data_arr]) + func _ready() -> void: check_dir() @@ -263,9 +297,11 @@ func update_fs_state(ecms): for fs_index in fs_ids: var fs = fs_dict[fs_index] fs.set_modulation(ecm.modulation) + fs.set_um_code(ecm.um) for prd_module in prd_dict.values(): ## Отправка команды на исполнение в ПРД if prd_module.state != PrdState.WORK: return if not prd_module.unit_yau07.online: continue + var um_data_array: Array = [] for fs in prd_module.fs_dic.values(): var dev_mode = prd_module.yemsg_board.get_dev_mode(fs.index) var fs_state = 2 @@ -273,7 +309,15 @@ func update_fs_state(ecms): fs_state = 3 if (dev_mode != fs_state) or (fs_state == 3): fs.emit_signal('update_modulation') - + if not prd_module.ug_online: continue + if prd_module.set_ug_state: + fs.set_um_data(um_data_array, prd_module.unit_yau07) + else: + if fs.um_code_tx != fs.um_code_rx: + fs.set_um_data(um_data_array, prd_module.unit_yau07) + if um_data_array.size(): + prd_module.set_ug_state = false + prd_module.set_um(um_data_array) ## Проверяет ниличие директории, если их нет, создаёт