Доработка. ЭМС, команды чтения/записи флеш добавлены в модуль ЯУ-07. Исправленно состояние выходов и задержки.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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']],
|
||||
|
||||
Reference in New Issue
Block a user