From 5b88f903e06411b397db73bdbb0b25ed9491852b Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Tue, 12 Nov 2024 08:52:43 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=AD=D0=9C=D0=A1,=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D1=8B=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F/?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20=D1=84=D0=BB=D0=B5=D1=88?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=AF=D0=A3-07?= =?UTF-8?q?.=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=D0=BE=D0=B2=20=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/эмс/эмс.gd | 137 ++++++++++++++++++++++++++++++----------- scripts/yau07.gd | 31 +++++++--- scripts/yems-boards.gd | 79 ++++++++++++++++-------- scripts/yems-consts.gd | 8 +++ 4 files changed, 181 insertions(+), 74 deletions(-) diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index 99e64d31..fce9b630 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -11,7 +11,7 @@ const CellFront = preload('res://scenes/cell/cell-front.tscn') const CellFrontRear = preload('res://scenes/cell/cell-front-rear.tscn') ## Режимы работы выходов. -const OUT_MODE: Array = ['Работа', 'Контроль', '1', '0'] # +const OUT_MODE: Array = ['Работа', 'Контроль', '0', '1'] # const COLUMN_OPTS_BTN: Array = [5] const TABLE_ENTRY_COLUMNS: Array = [2,3] const OUT_SET_ROW: Array = [CellLineEdit, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty] @@ -66,39 +66,47 @@ func init_boards(): board.connect('upd_delay_offset', Callable(self, 'on_upd_delay_offset')) board.connect('upd_o_state', Callable(self, 'on_upd_o_state')) $btn_connect.connect('pressed', Callable(self, 'on_btn_connect')) - $btn_disconnect.connect('pressed', Callable(self, 'on_btn_disconnect')) + $btn_disconnect.connect('pressed', Callable(self, 'on_btn_disconnect').bind(unit_ems)) $btn_flash_read.button_connect('pressed', Callable(self, 'on_btn_flash_read').bind($btn_flash_read)) $btn_flash_write.button_connect('pressed', Callable(self, 'on_btn_flash_write').bind($btn_flash_write)) ## Обработчик нажатия кнопки disconnect. -func on_btn_disconnect(): +func on_btn_disconnect(unit_ems): var selected_rows_in: Array = [] var selected_rows_out: Array = [] $scrl_in_set/tbl_in_set.get_selected_rows(selected_rows_in) $scrl_out_set/tbl_out_set.get_selected_rows(selected_rows_out) + if not active_board.read_done: + return if len(selected_rows_in): - on_disconnect($scrl_in_set/tbl_in_set, selected_rows_in, 'вход') + on_disconnect($scrl_in_set/tbl_in_set, selected_rows_in, unit_ems) elif len(selected_rows_out): - on_disconnect($scrl_out_set/tbl_out_set, selected_rows_out, 'выход') + on_disconnect($scrl_out_set/tbl_out_set, selected_rows_out, unit_ems) ## Разрывает связь входа и выхода, [param tbl] - таблица, [param selected_rows] - выбранные строки. ## [param type_dev] - тип, 'вход' или 'выход'. -func on_disconnect(tbl, selected_rows, type_dev: String): - var dev = tbl.get_node_user_data(0, 0) - var user_data: Array = tbl.get_node_user_data(0, selected_rows[0]) - var con_dev = user_data[0] - var connector: String = con_dev.connector - dev.connect_devs.erase(con_dev.connector) - con_dev.connect_devs.erase(dev.connector) - if type_dev == 'вход': - set_in_dev(dev) - set_out_dev(con_dev) - elif type_dev == 'выход': - set_in_dev(con_dev) - set_out_dev(dev) +func on_disconnect(tbl, selected_rows, unit_ems): + var o_dev: yemsdevs.OutDev + var i_dev: yemsdevs.InDev + var dev = tbl.get_node_user_data(0, 0) + if dev is yemsdevs.OutDev: + o_dev = dev + i_dev = tbl.get_node_user_data(0, selected_rows[0])[0] + else: + i_dev = dev + o_dev = tbl.get_node_user_data(0, selected_rows[0])[0] + if not unit_ems.online or not g_boards[tbl.get_node_user_data(0, selected_rows[0])[1]].online: + return + i_dev.connect_devs.erase(o_dev.dev_name) + o_dev.connect_devs.erase(i_dev.dev_name) + active_board = g_boards[tbl.get_node_user_data(0, selected_rows[0])[1]] + active_board.set_connection(o_dev.id, i_dev.id, false) + set_in_dev(i_dev) + set_out_dev(o_dev) + ## Обработчик нажатия кнопки "Прочитать". @@ -168,8 +176,36 @@ func init_tbl_in(): ## Обработчик редактирования Entry в таблице параметров входов/выходов. -func on_edit_entry(text : String, entry): - print_debug(text, entry) +func on_edit_entry(text : String, args): + var entry = args[0] + var tbl = args[1] + var dev = args[2] + var indexis = tbl.get_key_indexes(args[0].name) + var col_i = indexis[0] + var read = true + var is_delay = true + var val = float(text) + if text.is_valid_float(): + var max_val = 0 + if col_i == yemsconsts.I_COL_DELAY: + max_val = yemsconsts.MAX_VAL_DELAY + else: + max_val = yemsconsts.MAX_VAL_OFFSET + is_delay = false + if val > max_val: + val = max_val + elif val < 0: + val = 0.0 + entry.set_text(str('%3.1f' % val)) + read = false + else: + if col_i == yemsconsts.I_COL_DELAY: + entry.set_text(str('%3.1f' % dev.delay)) + else: + entry.set_text(str('%3.1f' % dev.offset)) + if active_board.read_done and g_boards[dev.board].online: + active_board = g_boards[dev.board] + active_board.set_delay(dev.id, val, is_delay, read) ## Обработчик выбора строки в таблице входов. @@ -183,7 +219,7 @@ func on_selected_changed_in(i_row: int): ## Обработчик нажатия на таблицу входов. func on_row_pressed_in(i_row: int): - on_row_pressed(i_row, $scrollin/tbl_in) + on_row_pressed(i_row, $scrollin/tbl_in, true) on_selected_changed_in(i_row) @@ -198,7 +234,7 @@ func on_selected_changed_si(i_row: int): if i_row < 2: return var out_user_data = $scrl_in_set/tbl_in_set.get_node_user_data(0, i_row) - var dev = out_user_data[0] + var dev = out_user_data var connector = dev.connector for i in range($scrollout/tbl_out.get_rows_count()): var node = $scrollout/tbl_out.get_node2(1, i) @@ -210,7 +246,7 @@ func on_selected_changed_si(i_row: int): func on_row_pressed_si(i_row: int): if i_row < 2: return - on_row_pressed(i_row, $scrl_in_set/tbl_in_set) + on_row_pressed(i_row, $scrl_in_set/tbl_in_set, true) on_selected_changed_si(i_row) @@ -246,6 +282,7 @@ func init_tbl_out(): $scrollout/tbl_out.set_node_user_data(i, row_index, [out_dev, board]) if i in COLUMN_OPTS_BTN: cell.text = OUT_MODE[out_dev.mode] + cell.editable = false $scrollout/tbl_out.set_columns_min_size([250, 100, 70, 70, 70, 100]) $scrollout/tbl_out.set_columns_alignments(yams_alligment_out) $scrollout/tbl_out.connect('row_pressed', Callable(self, 'on_row_pressed_out')) @@ -265,7 +302,7 @@ func on_selected_changed_so(i_row: int): if i_row < 2: return var in_user_data = $scrl_out_set/tbl_out_set.get_node_user_data(0, i_row) - var dev = in_user_data[0] + var dev = in_user_data var connector = dev.connector for i in range($scrollin/tbl_in.get_rows_count()): var node = $scrollin/tbl_in.get_node2(1, i) @@ -277,7 +314,7 @@ func on_selected_changed_so(i_row: int): func on_row_pressed_so(i_row: int): if i_row < 2: return - on_row_pressed(i_row, $scrl_out_set/tbl_out_set) + on_row_pressed(i_row, $scrl_out_set/tbl_out_set, true) on_selected_changed_so(i_row) @@ -292,7 +329,7 @@ func on_selected_changed_out(i_row: int): ## Обработчик выбора строки в таблице выходов. func on_row_pressed_out(i_row: int): - on_row_pressed(i_row, $scrollout/tbl_out) + on_row_pressed(i_row, $scrollout/tbl_out, true) on_selected_changed_out(i_row) @@ -303,6 +340,7 @@ func set_out_dev(dev): var mode = $scrl_out_set/tbl_out_set.get_node2(5, 0) for opt in OUT_MODE: mode.add_item(opt) + mode.connect('item_selected', Callable(self, 'on_switch_done').bind(dev)) mode.select(dev.mode) @@ -345,14 +383,14 @@ func set_dev(tbl, dev, row_type, row_type_conn, lbl_text, row_size): le.editable = false for i in dev.connect_devs: - var dev_con = dev.connect_devs[i][0] + var dev_con = dev.connect_devs[i] tbl.add_row(row_type_conn) var node_index: Array = [0, tbl.get_rows_count() -1] var le_name_out: LineEdit = tbl.get_node2(node_index[0], node_index[1]) disable_edit(tbl, len(row_type_conn), node_index[1]) le_name_out.text = dev_con.dev_name tbl.set_node_user_data(node_index[0], node_index[1], dev.connect_devs[i]) - tbl.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, []) + tbl.connect_columns(self, 'text_submitted', 'on_edit_entry', TABLE_ENTRY_COLUMNS, [tbl, dev]) ## Обработчик нажатия кнопки connect. @@ -386,7 +424,7 @@ func add_connection_dev(tbl, dev1, dev2, set_row, user_data): le_name.text = dev1.dev_name disable_edit(tbl, len(set_row), node_index[1]) tbl.set_node_user_data(node_index[0], node_index[1], user_data) - dev2.connect_devs[dev1.dev_name] = user_data + dev2.connect_devs[dev1.dev_name] = dev1 if dev1 is yemsdevs.OutDev: active_board = g_boards[user_data[1]] active_board.set_connection(dev1.id, dev2.id, true) @@ -403,21 +441,28 @@ func disable_edit(tbl, num_col: int, i_row: int): ## Обработчик выбора строки с таблице. -func on_row_pressed(i_row: int, tbl): +func on_row_pressed(i_row: int, tbl, set_selected: bool): tbl.clear_rows_selected() var is_row_selected = tbl.is_row_selected(i_row) - tbl.set_row_selected(i_row, not is_row_selected) + if set_selected: + tbl.set_row_selected(i_row, true) + else: + tbl.set_row_selected(i_row, not is_row_selected) ## Обработчик получения пакета от ячейки ЯУ-07Б func on_data_ems_received(unit_ems): for board in g_boards.values(): board.set_status(unit_ems.status) - if active_board.state_read == active_board.WAIT: + if active_board.state_board == active_board.WAIT and active_board.state_cmd == active_board.WAIT: if board.online and not board.read_done and board.ems_load: active_board = board - active_board.state_read = active_board.READ + active_board.state_board = active_board.READ active_board.start_rw_kems(true) + elif board.online and board.read_done and board.ems_load and board.need_flash_rd: + active_board = board + active_board.state_board = active_board.READ_FLASH + #active_board.start_rw_kems(true) for i_row in range($scrollin/tbl_in.get_rows_count()): var state_pic = ($scrollin/tbl_in.get_node2(4, i_row)) var dev = $scrollin/tbl_in.get_node_user_data(4, i_row)[0] @@ -442,7 +487,7 @@ func on_line_changed(unit_ems): $lbl_online.text = 'Ячейка ЯУ-07 не на связи' $lbl_online.modulate = Color.RED for board in g_boards.values(): - board.state_read = board.WAIT + board.state_board = board.WAIT board.read_done = false @@ -453,12 +498,30 @@ func on_upd_delay_offset(_board, dev): var tbl = $scrollin/tbl_in if dev is yemsdevs.OutDev: tbl = $scrollout/tbl_out - var le_delay = tbl.get_node2(2, dev.tbl_row_id) - var le_offset = tbl.get_node2(3, dev.tbl_row_id) + var le_delay = tbl.get_node2(TABLE_ENTRY_COLUMNS[0], dev.tbl_row_id) + var le_offset = tbl.get_node2(TABLE_ENTRY_COLUMNS[1], dev.tbl_row_id) le_delay.set_text(str('%3.1f' % dev.delay)) le_offset.set_text(str('%3.1f' % dev.offset)) ## Вызывается по обновлению информации о режиме выходов func on_upd_o_state(board, dev): - pass + var le_mode = $scrollout/tbl_out.get_node2(COLUMN_OPTS_BTN[0], dev.tbl_row_id) + le_mode.set_text(OUT_MODE[dev.mode]) + dev.connect_devs.clear() + for in_d in board.in_devs.values(): + if in_d.connect_devs.has(dev.dev_name): + in_d.connect_devs.erase(dev.dev_name) + for in_id in dev.btns_state: + if dev.btns_state[in_id] and board.in_devs.has(in_id): + var in_dev = board.in_devs[in_id] + in_dev.connect_devs[dev.dev_name] = dev + dev.connect_devs[in_dev.dev_name] = in_dev + + +## Вызывается при выборе режима работы выхода +func on_switch_done(mode, dev): + var board = g_boards[dev.board] + if active_board.state_board == active_board.WAIT and board.online: + active_board = board + active_board.change_mode(dev.id, mode) diff --git a/scripts/yau07.gd b/scripts/yau07.gd index 8801789c..b64cc949 100644 --- a/scripts/yau07.gd +++ b/scripts/yau07.gd @@ -13,14 +13,16 @@ class YaU07 extends unit.Unit: ## Коды выполняемых команд. enum CmdCode { - READ_ISA = 0, ## Код команды "читать порт ISA" ячейки ЯУ-07 - WRITE_ISA = 1, ## Код команды "записать порт ISA" ячейки ЯУ-07 - ERASE_FLASH = 49, ## Код команды "стереть данные из FLASH" ячейки ЯУ-07 - WRITE_FLASH = 50, ## Код команды "записать данные в FLASH" ячейки ЯУ-07 - READ_FLASH = 51, ## Код команды "прочитать данные из FLASH" ячейки ЯУ-07 - LOAD_FLASH = 52, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07 - WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07 - READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 + READ_ISA = 0, ## Код команды "читать порт ISA" ячейки ЯУ-07 + WRITE_ISA = 1, ## Код команды "записать порт ISA" ячейки ЯУ-07 + ERASE_FLASH = 49, ## Код команды "стереть данные из FLASH" ячейки ЯУ-07 + WRITE_FLASH = 50, ## Код команды "записать данные в FLASH" ячейки ЯУ-07 + READ_FLASH = 51, ## Код команды "прочитать данные из FLASH" ячейки ЯУ-07 + LOAD_FLASH = 52, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07 + READ_FLASH_MP550 = 56, ## Код команды "прочитать данные из FLASH" ячейки ЯУ-07 + WRITE_FLASH_MP550 = 55, ## Код команды "записать данные из FLASH в КЭМС" ячейки ЯУ-07 + WRITE_BLOCK = 60, ## Код команды "записать блок данных ISA" внешней шины ячейки ЯУ-07 + READ_BLOCK = 61, ## Код команды "читать блок данных ISA" внешней шины ячейки ЯУ-07 } ## Состояние автомата выполнения команды. @@ -37,7 +39,7 @@ class YaU07 extends unit.Unit: var cmd_state = CmdState.UNCK ## Состояние выполнения команды var cmd_result: = 1 ## Результат выполнения команды. Устанавливается в ЯУ-07 var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07 - var cmd_retry = 0 ## Счётчик оставшихся попыток выполнить команду + var cmd_retry = RETRY_COUNT ## Счётчик оставшихся попыток выполнить команду var cmd_code_rx = 0 ## Код последней выполненой команды var cmd_tick_tx = 0.0 ## Время последней отправки команды var cmd_tick_rx = 0.0 ## Время последнего приёма команды @@ -80,7 +82,7 @@ class YaU07 extends unit.Unit: rc = Error.FAILED return rc - func send_flash(cmd_code: int, fl_data: Array, num_byte_rd: int) -> bool: + func send_flash(cmd_code: int, fl_data: Array, num_byte_rd: int, id_sector: int = 0) -> bool: if (cmd_state == CmdState.WAIT) \ or (cmd_state == CmdState.SEND) \ or (cmd_state == CmdState.UNCK): @@ -105,6 +107,11 @@ class YaU07 extends unit.Unit: tx_len = 11 tx_data.encode_u16(7, 0) tx_data.encode_u16(9, num_byte_rd) + elif cmd_code == CmdCode.READ_FLASH_MP550: + tx_len = 12 + tx_data.encode_u8(7, id_sector) + tx_data.encode_u16(8, 0) + tx_data.encode_u16(10, num_byte_rd) cmd_state = CmdState.SEND return true @@ -211,6 +218,9 @@ class YaU07 extends unit.Unit: if cmd_code == CmdCode.READ_FLASH: flash_len = rx_data.decode_u16(status_len + 12) flash_data = rx_data.slice(status_len + 14) + if cmd_code == CmdCode.READ_FLASH_MP550: + flash_len = rx_data.decode_u16(status_len + 13) + flash_data = rx_data.slice(status_len + 15) return true ## Заполняет состояние прибора данными прочитанными из портов ЯУ-07. @@ -270,6 +280,7 @@ class YaU07 extends unit.Unit: rc = parse_block(rx_data, status_len) elif (cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \ + or (cmd_code == CmdCode.READ_FLASH_MP550) or (cmd_code == CmdCode.WRITE_FLASH_MP550) \ or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH): rc = parse_flash(rx_data, status_len, cmd_code) diff --git a/scripts/yems-boards.gd b/scripts/yems-boards.gd index 30568051..9f32d6e7 100644 --- a/scripts/yems-boards.gd +++ b/scripts/yems-boards.gd @@ -13,8 +13,8 @@ LOAD_KEMS, WRITE_FLASH_END} var out_tbl: Array var online: bool ## статус платы var ems_load: bool ## флаг загрузки платы - var state = WAIT ## текущее состояние платы ЭМС - var state_read = WAIT ## текущее состояние платы ЭМС + var state_cmd = WAIT ## текущее состояние платы ЭМС + var state_board = WAIT ## текущее состояние платы ЭМС var cur_dev ## Текущее устройство var cur_dev_num: = 0 ## Номер текущего устройства var cur_dev_index: = 0 ## Индекс текущего устройства в списке @@ -22,6 +22,7 @@ LOAD_KEMS, WRITE_FLASH_END} var need_next_dev: bool = false ## Нужно ли переходить к следующему устройству var unit_ems ## Юнит эмс var read_done: bool = false ## Флаг, что данные из ячейки прочитанны + var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш signal upd_delay_offset(board, cur_dev) signal upd_o_state(board, cur_dev) @@ -64,20 +65,20 @@ LOAD_KEMS, WRITE_FLASH_END} in_dev.state = 0 for out_dev in out_devs.values(): - if (out_kz >> (out_dev.id - 1)) & 1: + if (out_kz >> (out_dev.id - yemsconsts.STATUS_OUT_OFFSET)) & 1: out_dev.state = 3 - elif (out_blank >> (out_dev.id - 1)) & 1: + elif (out_blank >> (out_dev.id - yemsconsts.STATUS_OUT_OFFSET)) & 1: out_dev.state = 1 - elif (out_imp >> (out_dev.id - 1)) & 1: + elif (out_imp >> (out_dev.id - yemsconsts.STATUS_OUT_OFFSET)) & 1: out_dev.state = 2 else: out_dev.state = 0 # Отправка команды на запись или чтение порта func on_wr_device(dev_number): - if (state == WR_DEV_NUM_W) or (state == WR_DEV_NUM_R): + if (state_cmd == WR_DEV_NUM_W) or (state_cmd == WR_DEV_NUM_R): unit_ems.send_isa(unit_ems.CmdCode.WRITE_ISA, [base_addr_isa + 2, dev_number]) - elif state == WRITE: + elif state_cmd == WRITE: var ports: Array = [] if not check_dev_number(): return @@ -87,7 +88,7 @@ LOAD_KEMS, WRITE_FLASH_END} ports.append(port) ports.append(data) unit_ems.send_isa(unit_ems.CmdCode.WRITE_ISA, ports) - elif state == READ: + elif state_cmd == READ: var ports: Array = [] for port in cur_dev.ports_data: if port in ports_to_wr: @@ -98,19 +99,19 @@ LOAD_KEMS, WRITE_FLASH_END} func on_command_done(_yau_07): if not check_dev_number(): return - if (unit_ems.cmd_code_rx == 1) and state == WR_DEV_NUM_W: - state = WRITE + 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) - elif (unit_ems.cmd_code_rx == 1) and state == WR_DEV_NUM_R: - state = READ + 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) - elif (state == READ) or (state == WRITE) \ + 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(): if cur_dev.ports_data.has(key): @@ -125,32 +126,32 @@ LOAD_KEMS, WRITE_FLASH_END} cur_dev_index += 1 if cur_dev_index < len(dev_num_list): cur_dev_num = dev_num_list[cur_dev_index][0] - if state == READ: - state = WR_DEV_NUM_R + if state_cmd == READ: + state_cmd = WR_DEV_NUM_R on_wr_device(cur_dev_num) else: - state = WR_DEV_NUM_W + state_cmd = WR_DEV_NUM_W on_wr_device(cur_dev_num) else: # Пробег закончен, выбираем последнее устройство - state = WAIT - state_read = WAIT + state_cmd = WAIT + state_board = WAIT read_done = true cur_dev_index -= 1 need_next_dev = false else: - state = WAIT + state_cmd = WAIT - elif (state == READ_FLASH) and (unit_ems.cmd_code_rx == 51): + elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == 51): pass #read_flash() - elif (state == WRITE_FLASH_BEGIN) and (unit_ems.cmd_code_rx == 49): + elif (state_cmd == WRITE_FLASH_BEGIN) and (unit_ems.cmd_code_rx == 49): pass #write_flash() #emit_signal('write_msg', 'Произведено чтение из ПЗУ ячейки ЯУ-07') - elif (state == LOAD_KEMS) and (unit_ems.cmd_code_rx == 52): + elif (state_cmd == LOAD_KEMS) and (unit_ems.cmd_code_rx == 52): pass #start_rw_kems(true) - elif (state == WRITE_FLASH_END) and (unit_ems.cmd_code_rx == 50): + elif (state_cmd == WRITE_FLASH_END) and (unit_ems.cmd_code_rx == 50): pass #load_flash() #emit_signal('write_msg', 'Произведена запись в ПЗУ ячейки ЯУ-07') @@ -159,7 +160,7 @@ LOAD_KEMS, WRITE_FLASH_END} func check_dev_number(): cur_dev = get_dev() if not cur_dev: - state = WAIT + state_cmd = WAIT return false return true @@ -178,14 +179,38 @@ LOAD_KEMS, WRITE_FLASH_END} cur_dev_num = dev_num_list[cur_dev_index][0] need_next_dev = true if read: - state = WR_DEV_NUM_R + state_cmd = WR_DEV_NUM_R else: - state = WR_DEV_NUM_W + state_cmd = WR_DEV_NUM_W on_wr_device(cur_dev_num) func set_connection(o_dev, i_dev, val): cur_dev_num = o_dev if check_dev_number(): cur_dev.set_dot(i_dev, val) - state = WR_DEV_NUM_W + state_cmd = WR_DEV_NUM_W on_wr_device(cur_dev_num) + + func change_mode(o_dev, mode): + cur_dev_num = o_dev + if check_dev_number(): + cur_dev.set_sw_mode(mode) + state_cmd = WR_DEV_NUM_W + on_wr_device(cur_dev_num) + + func set_delay(dev_index, val, is_delay, read): + cur_dev_num = dev_index + if check_dev_number(): + if not read: + if is_delay: + cur_dev.set_delay(val) + else: + cur_dev.set_offset(val) + state_cmd = WR_DEV_NUM_W + else: + state_cmd = WR_DEV_NUM_R + on_wr_device(cur_dev_num) + + func on_btn_flash_read(): + unit_ems.send_flash(unit_ems.CmdCode.READ_FLASH,[], yemsconsts.NUM_BYTE_FROM_FLASH, id_board) + state_cmd = READ_FLASH diff --git a/scripts/yems-consts.gd b/scripts/yems-consts.gd index 23b3c6ed..3d201366 100644 --- a/scripts/yems-consts.gd +++ b/scripts/yems-consts.gd @@ -2,15 +2,23 @@ class_name yerms_consts extends Node const NUM_INPUT = 38 const NUM_OUTPUT = 38 +const NUM_BYTE_FROM_FLASH = 760 const STATUS_OFFSET = { # Смещение статуса, ключ id платы 0: 0, 1: 26, 2: 52 } +const STATUS_OUT_OFFSET = 47 + const KEMS_BOARD_NAME = 'КЭМС-Б' const EMS1_BOARD_NAME = 'ЭМС-Б1' const EMS2_BOARD_NAME = 'ЭМС-Б2' +const MAX_VAL_DELAY = 6.3 +const MAX_VAL_OFFSET = 51.1 +const I_COL_OFFSET = 3 +const I_COL_DELAY = 2 + ## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС. const INPUT_KEMS = [ [1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],