Доработка. Добавлены записи в лог о управлении ЭМС. Добавлены комментарии к функциям и переменным по работе с ЭМС.
This commit is contained in:
@@ -117,6 +117,7 @@ func on_btn_flash_read(btn):
|
||||
btn.pressed = false
|
||||
for board in g_boards.values():
|
||||
board.need_flash_rd = true
|
||||
log.message(log.INFO, 'Произведено чтение настроек ЭМС из flash памяти')
|
||||
|
||||
|
||||
## Обработчик нажатия кнопки "Записать".
|
||||
@@ -125,6 +126,7 @@ func on_btn_flash_write(btn):
|
||||
btn.pressed = false
|
||||
for board in g_boards.values():
|
||||
board.need_flash_wr = true
|
||||
log.message(log.INFO, 'Произведена запись настроек ЭМС в flash память')
|
||||
|
||||
|
||||
## Инициализация таблицы с файлами настроек ЭМС.
|
||||
@@ -572,7 +574,7 @@ func on_switch_done(mode, dev):
|
||||
active_board.change_mode(dev.id, mode)
|
||||
|
||||
|
||||
## Проверяет ниличие директории, если нет, создаёт
|
||||
## Проверяет ниличие директории, если их нет, создаёт
|
||||
func check_dir():
|
||||
var dir = DirAccess.open(yemsconsts.files_folder)
|
||||
if dir:
|
||||
@@ -582,6 +584,7 @@ func check_dir():
|
||||
check_files()
|
||||
|
||||
|
||||
## Проверяет наличие файлов, если их нет, создаёт
|
||||
func check_files():
|
||||
for file in yemsconsts.FILES_NAME:
|
||||
var fd = FileAccess.open(yemsconsts.files_folder + file, FileAccess.READ)
|
||||
@@ -599,6 +602,7 @@ func on_pressed_file(i_row: int):
|
||||
$scrl_files/tbl_files.set_row_selected(i_row, not is_row_selected)
|
||||
|
||||
|
||||
## Вызываеттся по нажатию кнопки сохранить настройки в файл
|
||||
func _on_btn_save_pressed() -> void:
|
||||
var sel_row: Array = []
|
||||
$scrl_files/tbl_files.get_selected_rows(sel_row)
|
||||
@@ -618,8 +622,10 @@ func _on_btn_save_pressed() -> void:
|
||||
$scrl_files/tbl_files.set_columns_min_size(yemsconsts.FILES_COLUMN_WIDTHS)
|
||||
for i_row in $scrl_files/tbl_files.get_rows_count():
|
||||
disable_edit($scrl_files/tbl_files, len(FILES_ROWS_TYPES), i_row)
|
||||
log.message(log.INFO, 'Произведено сохранение настроек ЭМС в файл: %s' %fl_name)
|
||||
|
||||
|
||||
## Заполняет данными словарь устройств для упаковки в JSON
|
||||
func fill_json_data(json_data: Dictionary):
|
||||
for board in g_boards.values():
|
||||
var devs: Dictionary = {}
|
||||
@@ -630,6 +636,7 @@ func fill_json_data(json_data: Dictionary):
|
||||
json_data[board.id_board][out_dev.id] = out_dev.ports_data
|
||||
|
||||
|
||||
## Вызываеттся по нажатию кнопки загрузить настройки из файла
|
||||
func _on_btn_load_pressed() -> void:
|
||||
var sel_row: Array = []
|
||||
$scrl_files/tbl_files.get_selected_rows(sel_row)
|
||||
@@ -650,3 +657,4 @@ func _on_btn_load_pressed() -> void:
|
||||
var data = json_data[str(board.id_board)]
|
||||
board.btn_load(data)
|
||||
board.need_write = true
|
||||
log.message(log.INFO, 'Произведено чтение настроек ЭМС из файла: %s' %fl_name)
|
||||
|
||||
@@ -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} ## Состояния платы
|
||||
|
||||
var id_board: int ## id платы
|
||||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||||
@@ -26,8 +26,8 @@ class EmsBoard:
|
||||
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
|
||||
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
|
||||
|
||||
signal upd_delay_offset(board, cur_dev)
|
||||
signal upd_o_state(board, cur_dev)
|
||||
signal upd_delay_offset(board, cur_dev) ## Согнал о обновлении данных задержек
|
||||
signal upd_o_state(board, cur_dev) ## Сигнал о обновлении данных режима выходов
|
||||
|
||||
func _init(id, base_addr, in_table, out_table, u):
|
||||
id_board = id
|
||||
@@ -39,6 +39,7 @@ class EmsBoard:
|
||||
ports_to_wr.append(base_addr_isa + 4 + i * 2) # Заполнение списка портами для записи
|
||||
dev_num_list = in_tbl + out_tbl
|
||||
|
||||
## Устанавливает состояние входов и выходов платы
|
||||
func set_status(status):
|
||||
var offset = yemsconsts.STATUS_OFFSET[id_board]
|
||||
var bit_online = 0 + id_board
|
||||
@@ -75,7 +76,7 @@ class EmsBoard:
|
||||
else:
|
||||
out_dev.state = 0
|
||||
|
||||
# Отправка команды на запись или чтение порта
|
||||
## Отправка команды на запись или чтение порта
|
||||
func on_wr_device(dev_number):
|
||||
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])
|
||||
@@ -96,7 +97,7 @@ class EmsBoard:
|
||||
ports.append(port)
|
||||
unit_ems.send_isa(unit_ems.CmdCode.READ_ISA, ports)
|
||||
|
||||
# Обработчик сообщения, о том, что команда выполнена (машина состояний)
|
||||
## Обработчик сообщения, о том, что команда выполнена (машина состояний)
|
||||
func on_command_done(_yau_07):
|
||||
if not check_dev_number():
|
||||
return
|
||||
@@ -148,7 +149,7 @@ class EmsBoard:
|
||||
state_board = WAIT
|
||||
state_cmd = WAIT
|
||||
|
||||
# Выбор текущего устройства и проверка правильности его номера
|
||||
## Выбор текущего устройства и проверка правильности его номера
|
||||
func check_dev_number():
|
||||
cur_dev = get_dev()
|
||||
if not cur_dev:
|
||||
@@ -156,7 +157,7 @@ class EmsBoard:
|
||||
return false
|
||||
return true
|
||||
|
||||
# Возвращает устройство по текущему номеру, если он есть в словарях
|
||||
## Возвращает устройство по текущему номеру, если он есть в словарях
|
||||
func get_dev():
|
||||
if in_devs.has(cur_dev_num):
|
||||
return in_devs[cur_dev_num]
|
||||
@@ -165,7 +166,7 @@ class EmsBoard:
|
||||
else:
|
||||
return null
|
||||
|
||||
# Запуск чтения/записи данных из/в ячейки КЭМС
|
||||
## Запуск чтения/записи данных из/в ячейки КЭМС
|
||||
func start_rw_kems(read: bool):
|
||||
cur_dev_index = 0
|
||||
cur_dev_num = dev_num_list[cur_dev_index][0]
|
||||
@@ -177,6 +178,7 @@ class EmsBoard:
|
||||
need_write = false
|
||||
on_wr_device(cur_dev_num)
|
||||
|
||||
## Устанавливает связь между входом и выходом
|
||||
func set_connection(o_dev, i_dev, val):
|
||||
cur_dev_num = o_dev
|
||||
if check_dev_number():
|
||||
@@ -184,6 +186,7 @@ class EmsBoard:
|
||||
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():
|
||||
@@ -191,6 +194,7 @@ class EmsBoard:
|
||||
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():
|
||||
@@ -204,10 +208,12 @@ class EmsBoard:
|
||||
state_cmd = WR_DEV_NUM_R
|
||||
on_wr_device(cur_dev_num)
|
||||
|
||||
## Отправка команды чтения флеш
|
||||
func read_flash():
|
||||
unit_ems.send_flash(unit_ems.CmdCode.READ_FLASH_MP550, [], yemsconsts.NUM_BYTE_FROM_FLASH, id_board)
|
||||
state_cmd = READ_FLASH
|
||||
|
||||
## Обработчик выполнения команды чтения флеш, заполняет прочитанными данными устройства
|
||||
func on_read_flash():
|
||||
need_flash_rd = false
|
||||
var amount_dev = unit_ems.flash_len / 10
|
||||
@@ -221,6 +227,7 @@ class EmsBoard:
|
||||
cur_dev.ports_data[base_addr_isa + 10] = unit_ems.flash_data.decode_u16(cur_i + 8)
|
||||
start_rw_kems(false)
|
||||
|
||||
## Команда записи в флеш текущих данных из программы
|
||||
func write_flash():
|
||||
need_flash_wr = false
|
||||
var fl_data: Array = []
|
||||
@@ -235,6 +242,7 @@ class EmsBoard:
|
||||
cur_dev_num = cur_dev_temp
|
||||
state_cmd = WRITE_FLASH
|
||||
|
||||
## Заполнение данными с устройств массива для записи флеш
|
||||
func append_data_to_flash(fl_data):
|
||||
fl_data.append(cur_dev_num)
|
||||
if check_dev_number():
|
||||
@@ -246,6 +254,7 @@ class EmsBoard:
|
||||
for j in range(4):
|
||||
fl_data.append(0)
|
||||
|
||||
## Выстевление в устройства данных прочитанных из файла
|
||||
func btn_load(json_data):
|
||||
for item in json_data.keys():
|
||||
var ports: Dictionary = json_data[item]
|
||||
|
||||
@@ -5,25 +5,26 @@ var files_folder = ProjectSettings.get_setting('application/config/kems_files_pa
|
||||
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_BYTE_FROM_FLASH = 760
|
||||
const STATUS_OFFSET = { # Смещение статуса, ключ id платы
|
||||
const NUM_INPUT = 38 ## Количество входных устройств
|
||||
const NUM_OUTPUT = 38 ## Количество выходных устройств
|
||||
const NUM_BYTE_FROM_FLASH = 760 ## Количество байт для запись в flash
|
||||
const STATUS_OFFSET = { ## Смещение статуса, ключ id платы
|
||||
0: 0,
|
||||
1: 26,
|
||||
2: 52 }
|
||||
|
||||
const STATUS_OUT_OFFSET = 47
|
||||
const STATUS_OUT_OFFSET = 47 ## Смещение индекса выходных устройств относитель входных
|
||||
|
||||
const KEMS_BOARD_NAME = 'КЭМС-Б'
|
||||
const EMS1_BOARD_NAME = 'ЭМС-Б1'
|
||||
const EMS2_BOARD_NAME = 'ЭМС-Б2'
|
||||
const KEMS_BOARD_NAME = 'КЭМС-Б1' ## Название платы КЭМС
|
||||
const EMS1_BOARD_NAME = 'ЭМС-Б1' ## Название платы ЭМС 1
|
||||
const EMS2_BOARD_NAME = 'ЭМС-Б2' ## Название платы ЭМС 2
|
||||
|
||||
const MAX_VAL_DELAY = 6.3
|
||||
const MAX_VAL_OFFSET = 51.1
|
||||
const I_COL_OFFSET = 3
|
||||
const I_COL_DELAY = 2
|
||||
const MAX_VAL_DELAY = 6.3 ## Максимальная задержка переднего фронта сигнала
|
||||
const MAX_VAL_OFFSET = 51.1 ## Максимальная задержка заднего фронта сигнала
|
||||
const I_COL_OFFSET = 3 ## Индекс колонки с задержкой заднего фронта
|
||||
const I_COL_DELAY = 2 ## Индекс колонки с задержкой переднего фронта
|
||||
|
||||
## Названия файлов для записи настроек ЭМС
|
||||
const FILES_NAME = ['Вариант 1',
|
||||
'Вариант 2',
|
||||
'Вариант 3',
|
||||
|
||||
@@ -29,15 +29,18 @@ class InDev:
|
||||
ports_data[isa_addr + 8] = 0xFFFF
|
||||
ports_data[isa_addr + 10] = 0xFFFF
|
||||
|
||||
## Устанавливает задержки переднего и заднего фронта из данных портов
|
||||
func set_delay_offset():
|
||||
delay = float(ports_data[isa_addr + 10] & 0x003F)/10
|
||||
offset = float((ports_data[isa_addr + 10] >> 6) & 0x01FF)/10
|
||||
|
||||
## Устанавливает задержку переднего фронта в порт
|
||||
func set_delay(val):
|
||||
delay = val
|
||||
var bin_val = int(val * 10)
|
||||
ports_data[isa_addr + 10] = tools.set_bits(ports_data[isa_addr + 10], bin_val, 0x003F)
|
||||
|
||||
## Устанавливает задержку заднего фронта в порт
|
||||
func set_offset(val):
|
||||
offset = val
|
||||
var bin_val = int(val * 10)
|
||||
@@ -49,6 +52,7 @@ class OutDev extends InDev:
|
||||
|
||||
func set_default_mode(): mode = 0
|
||||
|
||||
## Устанавливает режим работы выхода из порта
|
||||
func set_mode():
|
||||
if (ports_data[isa_addr + 8] >> 13) & 1:
|
||||
mode = 1
|
||||
@@ -59,11 +63,13 @@ class OutDev extends InDev:
|
||||
else:
|
||||
mode = 0
|
||||
|
||||
## Устанавливает список соединений из портов
|
||||
func set_btns_state():
|
||||
var data = ports_data[isa_addr + 4] | (ports_data[isa_addr + 6] << 16) | ((ports_data[isa_addr + 8] & 0x3f) << 32)
|
||||
for i in range(yemsconsts.NUM_INPUT):
|
||||
btns_state[i+1] = bool((data >> i) & 1)
|
||||
|
||||
## Устанавливает соединение и записывает в порт
|
||||
func set_dot(i_dev, val):
|
||||
if btns_state.has(i_dev):
|
||||
btns_state[i_dev] = val
|
||||
@@ -74,6 +80,7 @@ class OutDev extends InDev:
|
||||
ports_data[isa_addr + 6] = (data >> 16) & 0xffff
|
||||
ports_data[isa_addr + 8] = tools.set_bits(ports_data[isa_addr + 8], ((data >> 32) & 0x3f), 0x003F)
|
||||
|
||||
## Записывает в порт режим работы выхода
|
||||
func set_sw_mode(o_state):
|
||||
mode = o_state
|
||||
if mode == 0:
|
||||
|
||||
Reference in New Issue
Block a user