Merge remote-tracking branch 'MaD_CaT/master'
This commit is contained in:
@@ -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