Доработка. ЭМС, работа с файлами и flash.
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.0 KiB |
@@ -1,34 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://coqg6wsftvtxr"
|
|
||||||
path="res://.godot/imported/document-save-0.png-beb8a5dba6cf2046205d50b7f2a0303a.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://data/document-save-0.png"
|
|
||||||
dest_files=["res://.godot/imported/document-save-0.png-beb8a5dba6cf2046205d50b7f2a0303a.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=false
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
process/fix_alpha_border=true
|
|
||||||
process/premult_alpha=false
|
|
||||||
process/normal_map_invert_y=false
|
|
||||||
process/hdr_as_srgb=false
|
|
||||||
process/hdr_clamp_exposure=false
|
|
||||||
process/size_limit=0
|
|
||||||
detect_3d/compress_to=1
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB |
BIN
data/load.png
Normal file
BIN
data/load.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://cywuevvpkxl7v"
|
uid="uid://t51eyh4hmc6p"
|
||||||
path="res://.godot/imported/edit-copy-0.png-669a30c517f56dcd05ee05650e14794f.ctex"
|
path="res://.godot/imported/load.png-d59058e2af05e1fb46f2802cfb03f428.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://data/edit-copy-0.png"
|
source_file="res://data/load.png"
|
||||||
dest_files=["res://.godot/imported/edit-copy-0.png-669a30c517f56dcd05ee05650e14794f.ctex"]
|
dest_files=["res://.godot/imported/load.png-d59058e2af05e1fb46f2802cfb03f428.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
BIN
data/save.png
Normal file
BIN
data/save.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
@@ -2,16 +2,16 @@
|
|||||||
|
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://nm7cpjw6rs51"
|
uid="uid://biyjygfnhhf7i"
|
||||||
path="res://.godot/imported/document-new-0.png-4076926ba4469926b76b7d685aad96aa.ctex"
|
path="res://.godot/imported/save.png-ff5f3648379e88ca48662f125f3e98a0.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://data/document-new-0.png"
|
source_file="res://data/save.png"
|
||||||
dest_files=["res://.godot/imported/document-new-0.png-4076926ba4469926b76b7d685aad96aa.ctex"]
|
dest_files=["res://.godot/imported/save.png-ff5f3648379e88ca48662f125f3e98a0.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
@@ -37,6 +37,7 @@ config/external_cu=false
|
|||||||
config/unit_rr_left_bort="http://127.0.0.1:8080/reports/left_SelfTestReport.json"
|
config/unit_rr_left_bort="http://127.0.0.1:8080/reports/left_SelfTestReport.json"
|
||||||
config/unit_rr_right_bort="http://127.0.0.1:8080/reports/right_SelfTestReport.json"
|
config/unit_rr_right_bort="http://127.0.0.1:8080/reports/right_SelfTestReport.json"
|
||||||
config/unit_rr_request_period=1.0
|
config/unit_rr_request_period=1.0
|
||||||
|
config/kems_files_path="user://kems/"
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ class_name ems extends Panel
|
|||||||
|
|
||||||
## Предзагрузка ячеек таблиц.
|
## Предзагрузка ячеек таблиц.
|
||||||
const TableHeader = preload('res://table/header.tscn')
|
const TableHeader = preload('res://table/header.tscn')
|
||||||
|
const TableLabel = preload('res://table/lable.tscn')
|
||||||
const CellYemsButton = preload('res://scenes/эмс/кнопка-эмс.tscn')
|
const CellYemsButton = preload('res://scenes/эмс/кнопка-эмс.tscn')
|
||||||
const CellLineEdit = preload('res://table/ячейка-2.tscn')
|
const CellLineEdit = preload('res://table/ячейка-2.tscn')
|
||||||
const CellState = preload('res://scenes/эмс/состояния-эмс.tscn')
|
const CellState = preload('res://scenes/эмс/состояния-эмс.tscn')
|
||||||
@@ -17,6 +18,7 @@ const TABLE_ENTRY_COLUMNS: Array = [2,3]
|
|||||||
const OUT_SET_ROW: Array = [CellLineEdit, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty]
|
const OUT_SET_ROW: Array = [CellLineEdit, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty]
|
||||||
const IN_SET_ROW: Array = [CellLineEdit, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty]
|
const IN_SET_ROW: Array = [CellLineEdit, CellLEEmpty, CellLEEmpty, CellLEEmpty, CellLEEmpty]
|
||||||
|
|
||||||
|
var FILES_ROWS_TYPES = [CellLineEdit, CellLineEdit, CellLineEdit ]
|
||||||
|
|
||||||
var g_boards: Dictionary ## Словарь плат ЭМС.
|
var g_boards: Dictionary ## Словарь плат ЭМС.
|
||||||
var active_board = null ## Активная плата ЭМС
|
var active_board = null ## Активная плата ЭМС
|
||||||
@@ -121,13 +123,22 @@ func on_btn_flash_read(btn):
|
|||||||
func on_btn_flash_write(btn):
|
func on_btn_flash_write(btn):
|
||||||
await get_tree().create_timer(0.1).timeout
|
await get_tree().create_timer(0.1).timeout
|
||||||
btn.pressed = false
|
btn.pressed = false
|
||||||
|
for board in g_boards.values():
|
||||||
|
board.need_flash_wr = true
|
||||||
|
|
||||||
|
|
||||||
## Инициализация таблицы с файлами настроек ЭМС.
|
## Инициализация таблицы с файлами настроек ЭМС.
|
||||||
func init_tbl_files():
|
func init_tbl_files():
|
||||||
|
check_dir()
|
||||||
$scrl_files/tbl_files.set_header([TableHeader, TableHeader, TableHeader])
|
$scrl_files/tbl_files.set_header([TableHeader, TableHeader, TableHeader])
|
||||||
$scrl_files/tbl_files.set_header_text(['Имя файла', 'Дата изменения', 'Размер'])
|
$scrl_files/tbl_files.set_header_text(['Имя файла', 'Дата изменения', 'Размер'])
|
||||||
$scrl_files/tbl_files.set_columns_min_size([200, 120, 70])
|
$scrl_files/tbl_files.set_columns_min_size([200, 120, 70])
|
||||||
|
tools.fill_files_table($scrl_files/tbl_files, yemsconsts.files_folder, FILES_ROWS_TYPES)
|
||||||
|
$scrl_files/tbl_files.set_columns_alignments(yemsconsts.FILES_ROWS_ALIGNMENT)
|
||||||
|
$scrl_files/tbl_files.set_columns_min_size(yemsconsts.FILES_COLUMN_WIDTHS)
|
||||||
|
$scrl_files/tbl_files.connect('row_pressed', Callable(self, 'on_pressed_file'))
|
||||||
|
for i_row in $scrl_files/tbl_files.get_rows_count():
|
||||||
|
disable_edit($scrl_files/tbl_files, len(FILES_ROWS_TYPES), i_row)
|
||||||
|
|
||||||
|
|
||||||
## Инициализация таблиц входов.
|
## Инициализация таблиц входов.
|
||||||
@@ -148,7 +159,7 @@ func init_tbl_in():
|
|||||||
var in_dev: yemsdevs.InDev = yemsdevs.InDev.new(item[0], params, row_index, g_boards[board].base_addr_isa)
|
var in_dev: yemsdevs.InDev = yemsdevs.InDev.new(item[0], params, row_index, g_boards[board].base_addr_isa)
|
||||||
g_boards[board].in_devs[in_dev.id] = in_dev
|
g_boards[board].in_devs[in_dev.id] = in_dev
|
||||||
in_dev.board = board
|
in_dev.board = board
|
||||||
for i in range(len(row_type)):
|
for i in len(row_type):
|
||||||
if i < len(params):
|
if i < len(params):
|
||||||
var node = $scrollin/tbl_in.get_node2(i, row_index)
|
var node = $scrollin/tbl_in.get_node2(i, row_index)
|
||||||
if i == 0:
|
if i == 0:
|
||||||
@@ -238,7 +249,7 @@ func on_selected_changed_si(i_row: int):
|
|||||||
var out_user_data = $scrl_in_set/tbl_in_set.get_node_user_data(0, i_row)
|
var out_user_data = $scrl_in_set/tbl_in_set.get_node_user_data(0, i_row)
|
||||||
var dev = out_user_data
|
var dev = out_user_data
|
||||||
var connector = dev.connector
|
var connector = dev.connector
|
||||||
for i in range($scrollout/tbl_out.get_rows_count()):
|
for i in $scrollout/tbl_out.get_rows_count():
|
||||||
var node = $scrollout/tbl_out.get_node2(1, i)
|
var node = $scrollout/tbl_out.get_node2(1, i)
|
||||||
if connector == node.text:
|
if connector == node.text:
|
||||||
on_row_pressed_out(i)
|
on_row_pressed_out(i)
|
||||||
@@ -268,7 +279,7 @@ func init_tbl_out():
|
|||||||
g_boards[board].out_devs[out_dev.id] = out_dev
|
g_boards[board].out_devs[out_dev.id] = out_dev
|
||||||
out_dev.set_default_mode()
|
out_dev.set_default_mode()
|
||||||
out_dev.board = board
|
out_dev.board = board
|
||||||
for i in range(len(header_text)):
|
for i in len(header_text):
|
||||||
var cell = $scrollout/tbl_out.get_node2(i, row_index)
|
var cell = $scrollout/tbl_out.get_node2(i, row_index)
|
||||||
if i < len(params):
|
if i < len(params):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
@@ -306,7 +317,7 @@ func on_selected_changed_so(i_row: int):
|
|||||||
var in_user_data = $scrl_out_set/tbl_out_set.get_node_user_data(0, i_row)
|
var in_user_data = $scrl_out_set/tbl_out_set.get_node_user_data(0, i_row)
|
||||||
var dev = in_user_data
|
var dev = in_user_data
|
||||||
var connector = dev.connector
|
var connector = dev.connector
|
||||||
for i in range($scrollin/tbl_in.get_rows_count()):
|
for i in $scrollin/tbl_in.get_rows_count():
|
||||||
var node = $scrollin/tbl_in.get_node2(1, i)
|
var node = $scrollin/tbl_in.get_node2(1, i)
|
||||||
if connector == node.text:
|
if connector == node.text:
|
||||||
on_row_pressed_in(i)
|
on_row_pressed_in(i)
|
||||||
@@ -425,7 +436,7 @@ func add_connection_dev(tbl, dev1, dev2, set_row, user_data):
|
|||||||
var le_name: LineEdit = tbl.get_node2(node_index[0], node_index[1])
|
var le_name: LineEdit = tbl.get_node2(node_index[0], node_index[1])
|
||||||
le_name.text = dev1.dev_name
|
le_name.text = dev1.dev_name
|
||||||
disable_edit(tbl, len(set_row), node_index[1])
|
disable_edit(tbl, len(set_row), node_index[1])
|
||||||
tbl.set_node_user_data(node_index[0], node_index[1], user_data)
|
tbl.set_node_user_data(node_index[0], node_index[1], user_data[0])
|
||||||
dev2.connect_devs[dev1.dev_name] = dev1
|
dev2.connect_devs[dev1.dev_name] = dev1
|
||||||
if dev1 is yemsdevs.OutDev:
|
if dev1 is yemsdevs.OutDev:
|
||||||
active_board = g_boards[user_data[1]]
|
active_board = g_boards[user_data[1]]
|
||||||
@@ -437,7 +448,7 @@ func add_connection_dev(tbl, dev1, dev2, set_row, user_data):
|
|||||||
## [param num_col] - номер колонки,[br]
|
## [param num_col] - номер колонки,[br]
|
||||||
## [param i_row] - номер столбца.[br]
|
## [param i_row] - номер столбца.[br]
|
||||||
func disable_edit(tbl, num_col: int, i_row: int):
|
func disable_edit(tbl, num_col: int, i_row: int):
|
||||||
for col in range(num_col):
|
for col in num_col:
|
||||||
var node: LineEdit = tbl.get_node2(col, i_row)
|
var node: LineEdit = tbl.get_node2(col, i_row)
|
||||||
node.editable = false
|
node.editable = false
|
||||||
|
|
||||||
@@ -462,19 +473,33 @@ func on_data_ems_received(unit_ems):
|
|||||||
active_board.state_board = active_board.READ
|
active_board.state_board = active_board.READ
|
||||||
active_board.start_rw_kems(true)
|
active_board.start_rw_kems(true)
|
||||||
elif board.online and board.read_done and board.need_flash_rd:
|
elif board.online and board.read_done and board.need_flash_rd:
|
||||||
print_debug()
|
|
||||||
active_board = board
|
active_board = board
|
||||||
active_board.state_board = active_board.READ_FLASH
|
active_board.state_board = active_board.READ_FLASH
|
||||||
active_board.read_flash()
|
active_board.read_flash()
|
||||||
for i_row in range($scrollin/tbl_in.get_rows_count()):
|
elif board.online and board.read_done and board.need_flash_wr:
|
||||||
|
active_board = board
|
||||||
|
active_board.state_board = active_board.WRITE_FLASH
|
||||||
|
active_board.write_flash()
|
||||||
|
elif board.online and board.read_done and board.need_write:
|
||||||
|
active_board = board
|
||||||
|
active_board.state_board = active_board.WRITE
|
||||||
|
active_board.start_rw_kems(false)
|
||||||
|
for i_row in $scrollin/tbl_in.get_rows_count():
|
||||||
var state_pic = ($scrollin/tbl_in.get_node2(4, i_row))
|
var state_pic = ($scrollin/tbl_in.get_node2(4, i_row))
|
||||||
var dev = $scrollin/tbl_in.get_node_user_data(4, i_row)[0]
|
var dev = $scrollin/tbl_in.get_node_user_data(4, i_row)[0]
|
||||||
state_pic.set_frame(dev.state)
|
state_pic.set_frame(dev.state)
|
||||||
for i_row in range($scrollout/tbl_out.get_rows_count()):
|
for i_row in $scrollout/tbl_out.get_rows_count():
|
||||||
var state_pic = ($scrollout/tbl_out.get_node2(4, i_row))
|
var state_pic = ($scrollout/tbl_out.get_node2(4, i_row))
|
||||||
var dev = $scrollout/tbl_out.get_node_user_data(4, i_row)[0]
|
var dev = $scrollout/tbl_out.get_node_user_data(4, i_row)[0]
|
||||||
state_pic.set_frame(dev.state)
|
state_pic.set_frame(dev.state)
|
||||||
|
if $scrl_in_set/tbl_in_set.get_rows_count():
|
||||||
|
var dev = $scrl_in_set/tbl_in_set.get_node_user_data(0, 0)
|
||||||
|
var state_pic = $scrl_in_set/tbl_in_set.get_node2(4, 0)
|
||||||
|
state_pic.set_frame(dev.state)
|
||||||
|
if $scrl_out_set/tbl_out_set.get_rows_count():
|
||||||
|
var dev = $scrl_out_set/tbl_out_set.get_node_user_data(0, 0)
|
||||||
|
var state_pic = $scrl_out_set/tbl_out_set.get_node2(4, 0)
|
||||||
|
state_pic.set_frame(dev.state)
|
||||||
|
|
||||||
## Обработчик выполнения команды
|
## Обработчик выполнения команды
|
||||||
func on_command_done(unit_ems):
|
func on_command_done(unit_ems):
|
||||||
@@ -505,6 +530,18 @@ func on_upd_delay_offset(_board, dev):
|
|||||||
var le_offset = tbl.get_node2(TABLE_ENTRY_COLUMNS[1], 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_delay.set_text(str('%3.1f' % dev.delay))
|
||||||
le_offset.set_text(str('%3.1f' % dev.offset))
|
le_offset.set_text(str('%3.1f' % dev.offset))
|
||||||
|
if $scrl_in_set/tbl_in_set.get_rows_count():
|
||||||
|
var sel_dev = $scrl_in_set/tbl_in_set.get_node_user_data(0, 0)
|
||||||
|
var l_delay = $scrl_in_set/tbl_in_set.get_node2(2, 0)
|
||||||
|
var l_offset = $scrl_in_set/tbl_in_set.get_node2(3, 0)
|
||||||
|
l_delay.set_text(str('%3.1f' % sel_dev.delay))
|
||||||
|
l_offset.set_text(str('%3.1f' % sel_dev.offset))
|
||||||
|
if $scrl_out_set/tbl_out_set.get_rows_count():
|
||||||
|
var sel_dev = $scrl_out_set/tbl_out_set.get_node_user_data(0, 0)
|
||||||
|
var l_delay = $scrl_out_set/tbl_out_set.get_node2(2, 0)
|
||||||
|
var l_offset = $scrl_out_set/tbl_out_set.get_node2(3, 0)
|
||||||
|
l_delay.set_text(str('%3.1f' % sel_dev.delay))
|
||||||
|
l_offset.set_text(str('%3.1f' % sel_dev.offset))
|
||||||
|
|
||||||
|
|
||||||
## Вызывается по обновлению информации о режиме выходов
|
## Вызывается по обновлению информации о режиме выходов
|
||||||
@@ -520,6 +557,11 @@ func on_upd_o_state(board, dev):
|
|||||||
var in_dev = board.in_devs[in_id]
|
var in_dev = board.in_devs[in_id]
|
||||||
in_dev.connect_devs[dev.dev_name] = dev
|
in_dev.connect_devs[dev.dev_name] = dev
|
||||||
dev.connect_devs[in_dev.dev_name] = in_dev
|
dev.connect_devs[in_dev.dev_name] = in_dev
|
||||||
|
if $scrl_out_set/tbl_out_set.get_rows_count():
|
||||||
|
var sel_dev = $scrl_out_set/tbl_out_set.get_node_user_data(0, 0)
|
||||||
|
var mode = $scrl_out_set/tbl_out_set.get_node2(5, 0)
|
||||||
|
mode.set_text(OUT_MODE[sel_dev.mode])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Вызывается при выборе режима работы выхода
|
## Вызывается при выборе режима работы выхода
|
||||||
@@ -528,3 +570,83 @@ func on_switch_done(mode, dev):
|
|||||||
if active_board.state_board == active_board.WAIT and board.online:
|
if active_board.state_board == active_board.WAIT and board.online:
|
||||||
active_board = board
|
active_board = board
|
||||||
active_board.change_mode(dev.id, mode)
|
active_board.change_mode(dev.id, mode)
|
||||||
|
|
||||||
|
|
||||||
|
## Проверяет ниличие директории, если нет, создаёт
|
||||||
|
func check_dir():
|
||||||
|
var dir = DirAccess.open(yemsconsts.files_folder)
|
||||||
|
if dir:
|
||||||
|
check_files()
|
||||||
|
else:
|
||||||
|
DirAccess.make_dir_absolute(yemsconsts.files_folder)
|
||||||
|
check_files()
|
||||||
|
|
||||||
|
|
||||||
|
func check_files():
|
||||||
|
for file in yemsconsts.FILES_NAME:
|
||||||
|
var fd = FileAccess.open(yemsconsts.files_folder + file, FileAccess.READ)
|
||||||
|
if fd:
|
||||||
|
fd.close()
|
||||||
|
else:
|
||||||
|
fd = FileAccess.open(yemsconsts.files_folder + file, FileAccess.WRITE)
|
||||||
|
fd.close()
|
||||||
|
|
||||||
|
|
||||||
|
## Обработчик выбора строки с таблице
|
||||||
|
func on_pressed_file(i_row: int):
|
||||||
|
$scrl_files/tbl_files.clear_rows_selected()
|
||||||
|
var is_row_selected = $scrl_files/tbl_files.is_row_selected(i_row)
|
||||||
|
$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)
|
||||||
|
if sel_row:
|
||||||
|
var fl_node = $scrl_files/tbl_files.get_node2(0, sel_row[0])
|
||||||
|
var fl_name = fl_node.text
|
||||||
|
var file = FileAccess.open(yemsconsts.files_folder + fl_name, FileAccess.WRITE)
|
||||||
|
var json_data: Dictionary = {}
|
||||||
|
fill_json_data(json_data)
|
||||||
|
var json = JSON.stringify(json_data)
|
||||||
|
file.store_string(json)
|
||||||
|
file.close()
|
||||||
|
for i_row in $scrl_files/tbl_files.get_rows_count():
|
||||||
|
$scrl_files/tbl_files.remove_row(0)
|
||||||
|
tools.fill_files_table($scrl_files/tbl_files, yemsconsts.files_folder, FILES_ROWS_TYPES)
|
||||||
|
$scrl_files/tbl_files.set_columns_alignments(yemsconsts.FILES_ROWS_ALIGNMENT)
|
||||||
|
$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)
|
||||||
|
|
||||||
|
|
||||||
|
func fill_json_data(json_data: Dictionary):
|
||||||
|
for board in g_boards.values():
|
||||||
|
var devs: Dictionary = {}
|
||||||
|
json_data[board.id_board] = devs
|
||||||
|
for in_dev in board.in_devs.values():
|
||||||
|
json_data[board.id_board][in_dev.id] = in_dev.ports_data
|
||||||
|
for out_dev in board.out_devs.values():
|
||||||
|
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)
|
||||||
|
if sel_row:
|
||||||
|
var fl_node = $scrl_files/tbl_files.get_node2(0, sel_row[0])
|
||||||
|
var fl_name = fl_node.text
|
||||||
|
var file = FileAccess.open(yemsconsts.files_folder + fl_name, FileAccess.READ)
|
||||||
|
if file == null:
|
||||||
|
return
|
||||||
|
var read = file.get_as_text()
|
||||||
|
file.close()
|
||||||
|
var json_conv: = JSON.new()
|
||||||
|
if Error.OK == json_conv.parse(read):
|
||||||
|
var json_data = json_conv.get_data()
|
||||||
|
for board in g_boards.values():
|
||||||
|
if not json_data.has(str(board.id_board)):
|
||||||
|
return
|
||||||
|
var data = json_data[str(board.id_board)]
|
||||||
|
board.btn_load(data)
|
||||||
|
board.need_write = true
|
||||||
|
|||||||
@@ -1,14 +1,35 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://dab6loryocc73"]
|
[gd_scene load_steps=19 format=3 uid="uid://dab6loryocc73"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scenes/эмс/эмс.gd" id="1_mk57x"]
|
[ext_resource type="Script" path="res://scenes/эмс/эмс.gd" id="1_mk57x"]
|
||||||
[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat/button-flat.tscn" id="2_eju8r"]
|
[ext_resource type="PackedScene" uid="uid://da7w3vkhadfwe" path="res://scenes/button-flat/button-flat.tscn" id="2_eju8r"]
|
||||||
[ext_resource type="Texture2D" uid="uid://nm7cpjw6rs51" path="res://data/document-new-0.png" id="3_w7rqa"]
|
[ext_resource type="Texture2D" uid="uid://biyjygfnhhf7i" path="res://data/save.png" id="3_sc4po"]
|
||||||
[ext_resource type="Texture2D" uid="uid://coqg6wsftvtxr" path="res://data/document-save-0.png" id="4_gyaoq"]
|
[ext_resource type="Texture2D" uid="uid://t51eyh4hmc6p" path="res://data/load.png" id="4_mit0h"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cywuevvpkxl7v" path="res://data/edit-copy-0.png" id="5_dxpqo"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://7h55yvh84cve" path="res://data/connect.png" id="6_axj2m"]
|
[ext_resource type="Texture2D" uid="uid://7h55yvh84cve" path="res://data/connect.png" id="6_axj2m"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cjsr544qccftu" path="res://data/disconnect.png" id="7_yscbq"]
|
[ext_resource type="Texture2D" uid="uid://cjsr544qccftu" path="res://data/disconnect.png" id="7_yscbq"]
|
||||||
[ext_resource type="Script" path="res://table/table.gd" id="8_qcl30"]
|
[ext_resource type="Script" path="res://table/table.gd" id="8_qcl30"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sy7ny"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_udlbp"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4amgo"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fi0eb"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5kkhp"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ot108"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_63bsy"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_yuj6c"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_2q0t0"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_n2m1l"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_x5pts"]
|
||||||
|
|
||||||
[node name="ЭМС" type="Panel"]
|
[node name="ЭМС" type="Panel"]
|
||||||
offset_right = 1598.0
|
offset_right = 1598.0
|
||||||
offset_bottom = 1201.0
|
offset_bottom = 1201.0
|
||||||
@@ -40,34 +61,31 @@ offset_bottom = 129.0
|
|||||||
strips_rotation = 10.0
|
strips_rotation = 10.0
|
||||||
text = "Записать"
|
text = "Записать"
|
||||||
|
|
||||||
[node name="btn_new" type="Button" parent="."]
|
|
||||||
layout_mode = 0
|
|
||||||
offset_left = 1453.0
|
|
||||||
offset_top = 960.0
|
|
||||||
offset_right = 1509.0
|
|
||||||
offset_bottom = 1016.0
|
|
||||||
focus_mode = 0
|
|
||||||
shortcut_feedback = false
|
|
||||||
shortcut_in_tooltip = false
|
|
||||||
icon = ExtResource("3_w7rqa")
|
|
||||||
|
|
||||||
[node name="btn_save" type="Button" parent="."]
|
[node name="btn_save" type="Button" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1453.0
|
offset_left = 1453.0
|
||||||
offset_top = 1017.0
|
offset_top = 960.0
|
||||||
offset_right = 1509.0
|
offset_right = 1973.0
|
||||||
offset_bottom = 1073.0
|
offset_bottom = 1480.0
|
||||||
|
scale = Vector2(0.1, 0.1)
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
icon = ExtResource("4_gyaoq")
|
theme_override_styles/focus = SubResource("StyleBoxEmpty_sy7ny")
|
||||||
|
theme_override_styles/pressed = SubResource("StyleBoxEmpty_udlbp")
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_4amgo")
|
||||||
|
icon = ExtResource("3_sc4po")
|
||||||
|
|
||||||
[node name="btn_copy" type="Button" parent="."]
|
[node name="btn_load" type="Button" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1454.0
|
offset_left = 1453.0
|
||||||
offset_top = 1074.0
|
offset_top = 1015.0
|
||||||
offset_right = 1510.0
|
offset_right = 1973.0
|
||||||
offset_bottom = 1130.0
|
offset_bottom = 1535.0
|
||||||
|
scale = Vector2(0.1, 0.1)
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
icon = ExtResource("5_dxpqo")
|
theme_override_styles/focus = SubResource("StyleBoxEmpty_fi0eb")
|
||||||
|
theme_override_styles/pressed = SubResource("StyleBoxEmpty_5kkhp")
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_4amgo")
|
||||||
|
icon = ExtResource("4_mit0h")
|
||||||
|
|
||||||
[node name="btn_connect" type="Button" parent="."]
|
[node name="btn_connect" type="Button" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
@@ -77,6 +95,9 @@ offset_right = 683.0
|
|||||||
offset_bottom = 111.0
|
offset_bottom = 111.0
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
|
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
|
||||||
|
theme_override_styles/focus = SubResource("StyleBoxEmpty_ot108")
|
||||||
|
theme_override_styles/pressed = SubResource("StyleBoxEmpty_63bsy")
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_yuj6c")
|
||||||
icon = ExtResource("6_axj2m")
|
icon = ExtResource("6_axj2m")
|
||||||
|
|
||||||
[node name="btn_disconnect" type="Button" parent="."]
|
[node name="btn_disconnect" type="Button" parent="."]
|
||||||
@@ -87,6 +108,9 @@ offset_right = 770.0
|
|||||||
offset_bottom = 815.0
|
offset_bottom = 815.0
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
|
theme_override_colors/icon_normal_color = Color(1, 1, 1, 1)
|
||||||
|
theme_override_styles/focus = SubResource("StyleBoxEmpty_2q0t0")
|
||||||
|
theme_override_styles/pressed = SubResource("StyleBoxEmpty_n2m1l")
|
||||||
|
theme_override_styles/normal = SubResource("StyleBoxEmpty_x5pts")
|
||||||
icon = ExtResource("7_yscbq")
|
icon = ExtResource("7_yscbq")
|
||||||
|
|
||||||
[node name="scrollin" type="ScrollContainer" parent="."]
|
[node name="scrollin" type="ScrollContainer" parent="."]
|
||||||
@@ -143,3 +167,6 @@ offset_bottom = 924.0
|
|||||||
[node name="tbl_out_set" type="GridContainer" parent="scrl_out_set"]
|
[node name="tbl_out_set" type="GridContainer" parent="scrl_out_set"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
script = ExtResource("8_qcl30")
|
script = ExtResource("8_qcl30")
|
||||||
|
|
||||||
|
[connection signal="pressed" from="btn_save" to="." method="_on_btn_save_pressed"]
|
||||||
|
[connection signal="pressed" from="btn_load" to="." method="_on_btn_load_pressed"]
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ class Serial extends SerialPort:
|
|||||||
|
|
||||||
class Socket extends PacketPeerUDP:
|
class Socket extends PacketPeerUDP:
|
||||||
func send_to(addr, data):
|
func send_to(addr, data):
|
||||||
self.set_dest_address(addr[0], addr[1])
|
set_dest_address(addr[0], addr[1])
|
||||||
self.put_packet(data)
|
put_packet(data)
|
||||||
|
|
||||||
|
|
||||||
class SocketTCP extends TCPServer:
|
class SocketTCP extends TCPServer:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class_name rep_settings extends Node
|
|||||||
|
|
||||||
@export var UnitProfiles: = { \
|
@export var UnitProfiles: = { \
|
||||||
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
|
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
|
||||||
'уарэп-яу07-частный': ['yau07rx', '10.1.1.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
|
'уарэп-яу07-частный': ['yau07rx', '10.1.1.5', [50005], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
|
||||||
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
|
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
|
||||||
'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
|
'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
|
||||||
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||||
|
|||||||
@@ -154,3 +154,32 @@ func set_bit(bits, index, val, mask = 0xfffffffffffffff):
|
|||||||
## [param m] - Маска изменяемых бит
|
## [param m] - Маска изменяемых бит
|
||||||
func set_bits(v, a, m):
|
func set_bits(v, a, m):
|
||||||
return (~m) & v | a & m
|
return (~m) & v | a & m
|
||||||
|
|
||||||
|
|
||||||
|
func fill_files_table(tbl: table, folder: String, rows_types: Array):
|
||||||
|
var dir: = DirAccess.open(folder)
|
||||||
|
if dir == null:
|
||||||
|
return
|
||||||
|
var exclude_names: = ['.', '..']
|
||||||
|
dir.list_dir_begin() # TODOGODOT4 fill missing arguments https://github.com/godotengine/godot/pull/40547
|
||||||
|
while true:
|
||||||
|
var file: = dir.get_next()
|
||||||
|
if file == '':
|
||||||
|
break
|
||||||
|
if file in exclude_names:
|
||||||
|
continue
|
||||||
|
var file_name = folder + file
|
||||||
|
var fd = FileAccess.open(file_name, FileAccess.READ)
|
||||||
|
if not fd:
|
||||||
|
continue
|
||||||
|
var glob_path = ProjectSettings.globalize_path(file_name)
|
||||||
|
var sz = fd.get_length()
|
||||||
|
var ut = FileAccess.get_modified_time(file_name)
|
||||||
|
fd.close()
|
||||||
|
var mt = Time.get_datetime_dict_from_unix_time(ut)
|
||||||
|
var file_row = [file, '%d' % sz, '%d-%02d-%02d %02d:%02d' % [mt.year, mt.month, mt.day, mt.hour, mt.minute]]
|
||||||
|
tbl.add_row(rows_types)
|
||||||
|
var i_row: = tbl.get_rows_count() - 1
|
||||||
|
tbl.set_row_text(i_row, file_row)
|
||||||
|
tbl.set_node_meta(0, i_row, 'file_path', glob_path)
|
||||||
|
dir.list_dir_end()
|
||||||
|
|||||||
@@ -2,10 +2,11 @@ class_name yau_07 extends Node
|
|||||||
|
|
||||||
## Протокол ячейки ЯУ-07.
|
## Протокол ячейки ЯУ-07.
|
||||||
|
|
||||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
||||||
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, секунды
|
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, милисекунды
|
||||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
const RESEND_TIMEOUT_FLASH = 1500 ## Задержка для повторной отправки команды флеш, милисекунды
|
||||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||||
|
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||||
|
|
||||||
|
|
||||||
## Ячейка ЯУ-07.
|
## Ячейка ЯУ-07.
|
||||||
@@ -41,6 +42,7 @@ class YaU07 extends unit.Unit:
|
|||||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||||
var cmd_retry = RETRY_COUNT ## Счётчик оставшихся попыток выполнить команду
|
var cmd_retry = RETRY_COUNT ## Счётчик оставшихся попыток выполнить команду
|
||||||
var cmd_code_rx = 0 ## Код последней выполненой команды
|
var cmd_code_rx = 0 ## Код последней выполненой команды
|
||||||
|
var cmd_code_tx = 0 ## Код последней отправленной команды
|
||||||
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
||||||
var cmd_tick_rx = 0.0 ## Время последнего приёма команды
|
var cmd_tick_rx = 0.0 ## Время последнего приёма команды
|
||||||
var status: = PackedByteArray() ## Поле "состояние прибора"
|
var status: = PackedByteArray() ## Поле "состояние прибора"
|
||||||
@@ -72,7 +74,10 @@ class YaU07 extends unit.Unit:
|
|||||||
cmd_retry = RETRY_COUNT
|
cmd_retry = RETRY_COUNT
|
||||||
elif cmd_state == CmdState.WAIT:
|
elif cmd_state == CmdState.WAIT:
|
||||||
if cmd_retry:
|
if cmd_retry:
|
||||||
if (tick - cmd_tick_tx) > RESEND_TIMEOUT:
|
var res_timeout = RESEND_TIMEOUT
|
||||||
|
if cmd_code_tx == CmdCode.WRITE_FLASH_MP550:
|
||||||
|
res_timeout = RESEND_TIMEOUT_FLASH
|
||||||
|
if (tick - cmd_tick_tx) > res_timeout:
|
||||||
rc = Error.OK
|
rc = Error.OK
|
||||||
cmd_tick_tx = tick
|
cmd_tick_tx = tick
|
||||||
cmd_retry -= 1
|
cmd_retry -= 1
|
||||||
@@ -88,7 +93,8 @@ class YaU07 extends unit.Unit:
|
|||||||
or (cmd_state == CmdState.UNCK):
|
or (cmd_state == CmdState.UNCK):
|
||||||
return false
|
return false
|
||||||
if not ((cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \
|
if not ((cmd_code == CmdCode.ERASE_FLASH) or (cmd_code == CmdCode.WRITE_FLASH) \
|
||||||
or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH)):
|
or (cmd_code == CmdCode.READ_FLASH) or (cmd_code == CmdCode.LOAD_FLASH)
|
||||||
|
or (cmd_code == CmdCode.READ_FLASH_MP550) or (cmd_code == CmdCode.WRITE_FLASH_MP550)):
|
||||||
return false
|
return false
|
||||||
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
||||||
tx_data.encode_u16(0, cmd_retry)
|
tx_data.encode_u16(0, cmd_retry)
|
||||||
@@ -103,6 +109,13 @@ class YaU07 extends unit.Unit:
|
|||||||
tx_len = 11 + len(fl_data) * 2
|
tx_len = 11 + len(fl_data) * 2
|
||||||
for i in range(len(fl_data)):
|
for i in range(len(fl_data)):
|
||||||
tx_data.encode_u16(12 + i * 2, fl_data[i])
|
tx_data.encode_u16(12 + i * 2, fl_data[i])
|
||||||
|
elif cmd_code == CmdCode.WRITE_FLASH_MP550:
|
||||||
|
tx_data.encode_u8(7, id_sector)
|
||||||
|
tx_data.encode_u16(8, 0)
|
||||||
|
tx_data.encode_u16(10, len(fl_data) * 2)
|
||||||
|
tx_len = 12 + len(fl_data) * 2
|
||||||
|
for i in range(len(fl_data)):
|
||||||
|
tx_data.encode_u16(12 + i * 2, fl_data[i])
|
||||||
elif cmd_code == CmdCode.READ_FLASH:
|
elif cmd_code == CmdCode.READ_FLASH:
|
||||||
tx_len = 11
|
tx_len = 11
|
||||||
tx_data.encode_u16(7, 0)
|
tx_data.encode_u16(7, 0)
|
||||||
@@ -113,6 +126,7 @@ class YaU07 extends unit.Unit:
|
|||||||
tx_data.encode_u16(8, 0)
|
tx_data.encode_u16(8, 0)
|
||||||
tx_data.encode_u16(10, num_byte_rd)
|
tx_data.encode_u16(10, num_byte_rd)
|
||||||
cmd_state = CmdState.SEND
|
cmd_state = CmdState.SEND
|
||||||
|
cmd_code_tx = cmd_code
|
||||||
return true
|
return true
|
||||||
|
|
||||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||||
@@ -140,6 +154,7 @@ class YaU07 extends unit.Unit:
|
|||||||
tx_data.encode_u16(8 + i, word)
|
tx_data.encode_u16(8 + i, word)
|
||||||
i += 2
|
i += 2
|
||||||
cmd_state = CmdState.SEND
|
cmd_state = CmdState.SEND
|
||||||
|
cmd_code_tx = cmd_code
|
||||||
return true
|
return true
|
||||||
|
|
||||||
func send_block(cmd_code: int, block_len: int, port: Array) -> bool:
|
func send_block(cmd_code: int, block_len: int, port: Array) -> bool:
|
||||||
@@ -163,6 +178,7 @@ class YaU07 extends unit.Unit:
|
|||||||
|
|
||||||
tx_data.encode_u16(9, int(port[0]))
|
tx_data.encode_u16(9, int(port[0]))
|
||||||
cmd_state = CmdState.SEND
|
cmd_state = CmdState.SEND
|
||||||
|
cmd_code_tx = cmd_code
|
||||||
return true
|
return true
|
||||||
## Возвращает код команды ЯУ-07.
|
## Возвращает код команды ЯУ-07.
|
||||||
## rx_data - Принятые данные.
|
## rx_data - Принятые данные.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
class_name yems_boards extends Node
|
class_name yems_boards extends Node
|
||||||
|
|
||||||
class EmsBoard:
|
class EmsBoard:
|
||||||
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH_BEGIN, \
|
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
|
||||||
LOAD_KEMS, WRITE_FLASH_END}
|
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END}
|
||||||
|
|
||||||
var id_board: int ## id платы
|
var id_board: int ## id платы
|
||||||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||||||
@@ -13,7 +13,7 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
var out_tbl: Array
|
var out_tbl: Array
|
||||||
var online: bool ## статус платы
|
var online: bool ## статус платы
|
||||||
var ems_load: bool ## флаг загрузки платы
|
var ems_load: bool ## флаг загрузки платы
|
||||||
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
||||||
var state_board = WAIT ## текущее состояние платы ЭМС
|
var state_board = WAIT ## текущее состояние платы ЭМС
|
||||||
var cur_dev ## Текущее устройство
|
var cur_dev ## Текущее устройство
|
||||||
var cur_dev_num: = 0 ## Номер текущего устройства
|
var cur_dev_num: = 0 ## Номер текущего устройства
|
||||||
@@ -23,6 +23,8 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
var unit_ems ## Юнит эмс
|
var unit_ems ## Юнит эмс
|
||||||
var read_done: bool = false ## Флаг, что данные из ячейки прочитанны
|
var read_done: bool = false ## Флаг, что данные из ячейки прочитанны
|
||||||
var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш
|
var need_flash_rd: bool = false ## Флаг, что надо прочитать флеш
|
||||||
|
var need_flash_wr: bool = false ## Флаг, что надо записать данные в флеш
|
||||||
|
var need_write: bool = false ## Флаг, что надо записать данные в ячейку ЭМС
|
||||||
|
|
||||||
signal upd_delay_offset(board, cur_dev)
|
signal upd_delay_offset(board, cur_dev)
|
||||||
signal upd_o_state(board, cur_dev)
|
signal upd_o_state(board, cur_dev)
|
||||||
@@ -37,7 +39,6 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
ports_to_wr.append(base_addr_isa + 4 + i * 2) # Заполнение списка портами для записи
|
ports_to_wr.append(base_addr_isa + 4 + i * 2) # Заполнение списка портами для записи
|
||||||
dev_num_list = in_tbl + out_tbl
|
dev_num_list = in_tbl + out_tbl
|
||||||
|
|
||||||
|
|
||||||
func set_status(status):
|
func set_status(status):
|
||||||
var offset = yemsconsts.STATUS_OFFSET[id_board]
|
var offset = yemsconsts.STATUS_OFFSET[id_board]
|
||||||
var bit_online = 0 + id_board
|
var bit_online = 0 + id_board
|
||||||
@@ -143,15 +144,9 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
|
|
||||||
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.READ_FLASH_MP550):
|
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.READ_FLASH_MP550):
|
||||||
on_read_flash()
|
on_read_flash()
|
||||||
elif (state_cmd == WRITE_FLASH_BEGIN) and (unit_ems.cmd_code_rx == 49):
|
elif (state_cmd == WRITE_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.WRITE_FLASH_MP550):
|
||||||
pass
|
state_board = WAIT
|
||||||
#write_flash()
|
state_cmd = WAIT
|
||||||
#emit_signal('write_msg', 'Произведено чтение из ПЗУ ячейки ЯУ-07')
|
|
||||||
elif (state_cmd == LOAD_KEMS) and (unit_ems.cmd_code_rx == 52):
|
|
||||||
pass
|
|
||||||
#start_rw_kems(true)
|
|
||||||
elif (state_cmd == WRITE_FLASH_END) and (unit_ems.cmd_code_rx == 50):
|
|
||||||
pass
|
|
||||||
#load_flash()
|
#load_flash()
|
||||||
#emit_signal('write_msg', 'Произведена запись в ПЗУ ячейки ЯУ-07')
|
#emit_signal('write_msg', 'Произведена запись в ПЗУ ячейки ЯУ-07')
|
||||||
|
|
||||||
@@ -181,6 +176,7 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
state_cmd = WR_DEV_NUM_R
|
state_cmd = WR_DEV_NUM_R
|
||||||
else:
|
else:
|
||||||
state_cmd = WR_DEV_NUM_W
|
state_cmd = WR_DEV_NUM_W
|
||||||
|
need_write = false
|
||||||
on_wr_device(cur_dev_num)
|
on_wr_device(cur_dev_num)
|
||||||
|
|
||||||
func set_connection(o_dev, i_dev, val):
|
func set_connection(o_dev, i_dev, val):
|
||||||
@@ -216,5 +212,56 @@ LOAD_KEMS, WRITE_FLASH_END}
|
|||||||
|
|
||||||
func on_read_flash():
|
func on_read_flash():
|
||||||
need_flash_rd = false
|
need_flash_rd = false
|
||||||
state_board = WAIT
|
var amount_dev = unit_ems.flash_len / 10
|
||||||
print_debug(id_board)
|
for i in amount_dev:
|
||||||
|
var cur_i = i * 10
|
||||||
|
cur_dev_num = unit_ems.flash_data.decode_u16(cur_i)
|
||||||
|
if not check_dev_number(): continue
|
||||||
|
cur_dev.ports_data[base_addr_isa + 4] = unit_ems.flash_data.decode_u16(cur_i + 2)
|
||||||
|
cur_dev.ports_data[base_addr_isa + 6] = unit_ems.flash_data.decode_u16(cur_i + 4)
|
||||||
|
cur_dev.ports_data[base_addr_isa + 8] = unit_ems.flash_data.decode_u16(cur_i + 6)
|
||||||
|
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 = []
|
||||||
|
var cur_dev_temp = cur_dev_num
|
||||||
|
for i in yemsconsts.NUM_INPUT:
|
||||||
|
cur_dev_num = i + 1
|
||||||
|
append_data_to_flash(fl_data)
|
||||||
|
for i in yemsconsts.NUM_OUTPUT:
|
||||||
|
cur_dev_num = i + yemsconsts.STATUS_OUT_OFFSET
|
||||||
|
append_data_to_flash(fl_data)
|
||||||
|
unit_ems.send_flash(unit_ems.CmdCode.WRITE_FLASH_MP550, fl_data, 0, id_board)
|
||||||
|
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():
|
||||||
|
fl_data.append(cur_dev.ports_data[base_addr_isa + 4])
|
||||||
|
fl_data.append(cur_dev.ports_data[base_addr_isa + 6])
|
||||||
|
fl_data.append(cur_dev.ports_data[base_addr_isa + 8])
|
||||||
|
fl_data.append(cur_dev.ports_data[base_addr_isa + 10])
|
||||||
|
else:
|
||||||
|
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]
|
||||||
|
cur_dev_num = int(item)
|
||||||
|
if not check_dev_number(): continue
|
||||||
|
if ports.has('%d'%(base_addr_isa + 4)):
|
||||||
|
cur_dev.ports_data[base_addr_isa + 4] = int(ports['%d'%(base_addr_isa + 4)])
|
||||||
|
else: continue
|
||||||
|
if ports.has('%d'%(base_addr_isa + 6)):
|
||||||
|
cur_dev.ports_data[base_addr_isa + 6] = int(ports['%d'%(base_addr_isa + 6)])
|
||||||
|
else: continue
|
||||||
|
if ports.has('%d'%(base_addr_isa + 8)):
|
||||||
|
cur_dev.ports_data[base_addr_isa + 8] = int(ports['%d'%(base_addr_isa + 8)])
|
||||||
|
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
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
class_name yerms_consts extends Node
|
class_name yerms_consts extends Node
|
||||||
|
|
||||||
|
var files_folder = ProjectSettings.get_setting('application/config/kems_files_path', 'user://kems/') # Папка с файлами вариантами настроек ЭМС
|
||||||
|
|
||||||
|
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_INPUT = 38
|
||||||
const NUM_OUTPUT = 38
|
const NUM_OUTPUT = 38
|
||||||
const NUM_BYTE_FROM_FLASH = 760
|
const NUM_BYTE_FROM_FLASH = 760
|
||||||
@@ -19,6 +24,13 @@ const MAX_VAL_OFFSET = 51.1
|
|||||||
const I_COL_OFFSET = 3
|
const I_COL_OFFSET = 3
|
||||||
const I_COL_DELAY = 2
|
const I_COL_DELAY = 2
|
||||||
|
|
||||||
|
const FILES_NAME = ['Вариант 1',
|
||||||
|
'Вариант 2',
|
||||||
|
'Вариант 3',
|
||||||
|
'Вариант 4',
|
||||||
|
'Вариант 5',
|
||||||
|
]
|
||||||
|
|
||||||
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
||||||
const INPUT_KEMS = [
|
const INPUT_KEMS = [
|
||||||
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
||||||
|
|||||||
Reference in New Issue
Block a user