diff --git a/modbus/client-serial-modbus.py b/modbus/client-serial-modbus.py index 6fead1a1..8a077ead 100644 --- a/modbus/client-serial-modbus.py +++ b/modbus/client-serial-modbus.py @@ -15,7 +15,7 @@ from threading import Timer import logger from pymodbus.client.sync import ModbusSerialClient -DEF_SERIAL = 'COM1' if os.name == 'nt' else '/dev/tty0' +DEF_SERIAL = 'COM3' if os.name == 'nt' else '/dev/tty0' log_file_dir = os.path.join(os.path.expanduser('~')) log = logger.get_logger(__file__, log_file_dir) EXCEPT_MSGS = { diff --git a/scenes/button-flat/button-flat.tscn b/scenes/button-flat/button-flat.tscn index 955e3f4e..d1a610ae 100644 --- a/scenes/button-flat/button-flat.tscn +++ b/scenes/button-flat/button-flat.tscn @@ -41,15 +41,15 @@ extends Sprite2D get: return material.get('shader_parameter/rotation') " -[sub_resource type="StyleBoxEmpty" id="6"] +[sub_resource type="StyleBoxEmpty" id="4"] + +[sub_resource type="StyleBoxEmpty" id="5"] [sub_resource type="StyleBoxEmpty" id="2"] [sub_resource type="StyleBoxEmpty" id="3"] -[sub_resource type="StyleBoxEmpty" id="5"] - -[sub_resource type="StyleBoxEmpty" id="4"] +[sub_resource type="StyleBoxEmpty" id="6"] [node name="container" type="PanelContainer"] offset_right = 20.0 @@ -79,11 +79,11 @@ axis_stretch_vertical = 2 layout_mode = 2 theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_override_constants/outline_size = 4 -theme_override_styles/normal = SubResource("6") +theme_override_styles/focus = SubResource("4") +theme_override_styles/disabled = SubResource("5") theme_override_styles/hover = SubResource("2") theme_override_styles/pressed = SubResource("3") -theme_override_styles/disabled = SubResource("5") -theme_override_styles/focus = SubResource("4") +theme_override_styles/normal = SubResource("6") toggle_mode = true clip_text = true diff --git a/scenes/работа/работа.tscn b/scenes/работа/работа.tscn index c775be49..15faac20 100644 --- a/scenes/работа/работа.tscn +++ b/scenes/работа/работа.tscn @@ -52,7 +52,6 @@ offset_right = 1106.0 offset_bottom = 1170.0 tooltip_text = "Кнопки выбора типа помехи" mouse_filter = 0 -metadata/_edit_lock_ = true [node name="count_all_pad" parent="." instance=ExtResource("6_e3re7")] layout_mode = 0 diff --git a/scenes/эмс/эмс.gd b/scenes/эмс/эмс.gd index 32f33642..3f5a0c11 100644 --- a/scenes/эмс/эмс.gd +++ b/scenes/эмс/эмс.gd @@ -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) diff --git a/scripts/yems-boards.gd b/scripts/yems-boards.gd index 803a7e67..ff462681 100644 --- a/scripts/yems-boards.gd +++ b/scripts/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, 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 @@ -147,10 +148,8 @@ class EmsBoard: elif (state_cmd == WRITE_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.WRITE_FLASH_MP550): state_board = WAIT state_cmd = WAIT - #load_flash() - #emit_signal('write_msg', 'Произведена запись в ПЗУ ячейки ЯУ-07') - # Выбор текущего устройства и проверка правильности его номера +## Выбор текущего устройства и проверка правильности его номера func check_dev_number(): cur_dev = get_dev() if not cur_dev: @@ -158,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] @@ -167,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] @@ -179,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(): @@ -186,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(): @@ -193,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(): @@ -206,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 @@ -223,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 = [] @@ -237,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(): @@ -248,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] @@ -264,4 +271,3 @@ class EmsBoard: else: continue if ports.has('%d'%(base_addr_isa + 10)): cur_dev.ports_data[base_addr_isa + 10] = int(ports['%d'%(base_addr_isa + 10)]) - else: continue diff --git a/scripts/yems-consts.gd b/scripts/yems-consts.gd index 9ae9d520..8e00b601 100644 --- a/scripts/yems-consts.gd +++ b/scripts/yems-consts.gd @@ -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', diff --git a/scripts/yems-devs.gd b/scripts/yems-devs.gd index bf1db051..fb0e5a09 100644 --- a/scripts/yems-devs.gd +++ b/scripts/yems-devs.gd @@ -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: