Merge remote-tracking branch 'MaD_CaT/master'
# Conflicts: # project.godot # scripts/settings.gd
This commit is contained in:
@@ -25,8 +25,8 @@ class Serial extends SerialPort:
|
||||
|
||||
class Socket extends PacketPeerUDP:
|
||||
func send_to(addr, data):
|
||||
self.set_dest_address(addr[0], addr[1])
|
||||
self.put_packet(data)
|
||||
set_dest_address(addr[0], addr[1])
|
||||
put_packet(data)
|
||||
|
||||
|
||||
class SocketTCP extends TCPServer:
|
||||
|
||||
@@ -4,23 +4,23 @@ class_name rep_settings extends Node
|
||||
## Параметры.
|
||||
|
||||
@export var UnitProfiles: = { \
|
||||
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
|
||||
'уарэп-яу07-частный': ['yau07rx', '127.0.0.2', [50002], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
|
||||
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
|
||||
'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
|
||||
'уарэп-эмс': ['yau07tx', '127.0.0.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||
'уарэп-яу07-2в': ['yau07tx', '127.0.0.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-2н': ['yau07tx', '127.0.0.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-2к': ['yau07tx', '127.0.0.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-4в': ['yau07tx', '127.0.0.66', [50066], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-4н': ['yau07tx', '127.0.0.65', [50065], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-4к': ['yau07tx', '127.0.0.67', [50067], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-1в': ['yau07tx', '127.0.0.18', [50018], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-1н': ['yau07tx', '127.0.0.17', [50017], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-1к': ['yau07tx', '127.0.0.19', [50019], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-3в': ['yau07tx', '127.0.0.50', [50050], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-3н': ['yau07tx', '127.0.0.49', [50049], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07tx', '127.0.0.51', [50051], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
# Название | Протокол | Адрес | Порт | Широковещательное | Привязывать к адресу | Комментарий
|
||||
'уарэп-яу07-частный': ['yau07rx', '10.1.1.5', [50005], false, true, 'IP-адрес на котором принимают частные сообщения от ЯУ-07'],
|
||||
'уарэп-яу07-общий': ['yau07rx', '*', [50000], true, true, 'IP-адрес на котором принимают широковещательные сообщения от ЯУ-07'],
|
||||
'уарэп-капсрпб': ['json-capsrpb', '127.0.0.1', [42023, 42022], false, true, 'IP-адрес на котором принимают сообщения от КАПС РПБ'],
|
||||
'уарэп-эмс': ['yau07tx', '10.1.1.52', [50052], false, false, 'IP-адрес ЯУ-07 прибора УФ'],
|
||||
'уарэп-яу07-2в': ['yau07tx', '10.1.1.34', [50034], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-2н': ['yau07tx', '10.1.1.33', [50033], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-2к': ['yau07tx', '10.1.1.35', [50035], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-4в': ['yau07tx', '10.1.1.66', [50066], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-4н': ['yau07tx', '10.1.1.65', [50065], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-4к': ['yau07tx', '10.1.1.67', [50067], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-1в': ['yau07tx', '10.1.1.18', [50018], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-1н': ['yau07tx', '10.1.1.17', [50017], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-1к': ['yau07tx', '10.1.1.19', [50019], false, false, 'IP-адрес ЯУ-07 прибора ПРД-К'],
|
||||
'уарэп-яу07-3в': ['yau07tx', '10.1.1.50', [50050], false, false, 'IP-адрес ЯУ-07 прибора ПРД-В'],
|
||||
'уарэп-яу07-3н': ['yau07tx', '10.1.1.49', [50049], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
'уарэп-яу07-3к': ['yau07tx', '10.1.1.51', [50051], false, false, 'IP-адрес ЯУ-07 прибора ПРД-Н'],
|
||||
|
||||
# Название: [ Протокол, Адрес, Порт получения, Комментарий ]
|
||||
'уарэп-5п28': [ '5p28', '127.0.0.1', [50000], 'IP-адрес комплекса 5П-28'],
|
||||
|
||||
@@ -154,3 +154,32 @@ func set_bit(bits, index, val, mask = 0xfffffffffffffff):
|
||||
## [param m] - Маска изменяемых бит
|
||||
func set_bits(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.
|
||||
|
||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
||||
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, секунды
|
||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
||||
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, милисекунды
|
||||
const RESEND_TIMEOUT_FLASH = 1500 ## Задержка для повторной отправки команды флеш, милисекунды
|
||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||
|
||||
|
||||
## Ячейка ЯУ-07.
|
||||
@@ -32,6 +33,7 @@ class YaU07 extends unit.Unit:
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_retry = RETRY_COUNT ## Счётчик оставшихся попыток выполнить команду
|
||||
var cmd_code_rx = 0 ## Код последней выполненой команды
|
||||
var cmd_code_tx = 0 ## Код последней отправленной команды
|
||||
var cmd_tick_tx = 0.0 ## Время последней отправки команды
|
||||
var cmd_tick_rx = 0.0 ## Время последнего приёма команды
|
||||
var status: = PackedByteArray() ## Поле "состояние прибора"
|
||||
@@ -63,7 +65,10 @@ class YaU07 extends unit.Unit:
|
||||
cmd_retry = RETRY_COUNT
|
||||
elif cmd_state == CmdState.WAIT:
|
||||
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
|
||||
cmd_tick_tx = tick
|
||||
cmd_retry -= 1
|
||||
@@ -79,7 +84,8 @@ class YaU07 extends unit.Unit:
|
||||
or (cmd_state == CmdState.UNCK):
|
||||
return false
|
||||
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
|
||||
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
||||
tx_data.encode_u16(0, cmd_retry)
|
||||
@@ -94,6 +100,13 @@ class YaU07 extends unit.Unit:
|
||||
tx_len = 11 + 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.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:
|
||||
tx_len = 11
|
||||
tx_data.encode_u16(7, 0)
|
||||
@@ -104,6 +117,7 @@ class YaU07 extends unit.Unit:
|
||||
tx_data.encode_u16(8, 0)
|
||||
tx_data.encode_u16(10, num_byte_rd)
|
||||
cmd_state = CmdState.SEND
|
||||
cmd_code_tx = cmd_code
|
||||
return true
|
||||
|
||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||
@@ -131,6 +145,7 @@ class YaU07 extends unit.Unit:
|
||||
tx_data.encode_u16(8 + i, word)
|
||||
i += 2
|
||||
cmd_state = CmdState.SEND
|
||||
cmd_code_tx = cmd_code
|
||||
return true
|
||||
|
||||
func send_block(cmd_code: int, block_len: int, port: Array) -> bool:
|
||||
@@ -154,6 +169,7 @@ class YaU07 extends unit.Unit:
|
||||
|
||||
tx_data.encode_u16(9, int(port[0]))
|
||||
cmd_state = CmdState.SEND
|
||||
cmd_code_tx = cmd_code
|
||||
return true
|
||||
## Возвращает код команды ЯУ-07.
|
||||
## rx_data - Принятые данные.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class_name yems_boards extends Node
|
||||
|
||||
class EmsBoard:
|
||||
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH_BEGIN, \
|
||||
LOAD_KEMS, WRITE_FLASH_END}
|
||||
enum {WAIT, WR_DEV_NUM_W, WRITE, WR_DEV_NUM_R, READ, READ_FLASH, WRITE_FLASH,
|
||||
WRITE_FLASH_BEGIN, LOAD_KEMS, WRITE_FLASH_END}
|
||||
|
||||
var id_board: int ## id платы
|
||||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||||
@@ -13,7 +13,7 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
var out_tbl: Array
|
||||
var online: bool ## статус платы
|
||||
var ems_load: bool ## флаг загрузки платы
|
||||
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
||||
var state_cmd = WAIT ## текущее состояние платы ЭМС
|
||||
var state_board = WAIT ## текущее состояние платы ЭМС
|
||||
var cur_dev ## Текущее устройство
|
||||
var cur_dev_num: = 0 ## Номер текущего устройства
|
||||
@@ -23,6 +23,8 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
var unit_ems ## Юнит эмс
|
||||
var read_done: 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_o_state(board, cur_dev)
|
||||
@@ -37,7 +39,6 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
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
|
||||
@@ -141,18 +142,11 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
else:
|
||||
state_cmd = WAIT
|
||||
|
||||
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == 51):
|
||||
pass
|
||||
#read_flash()
|
||||
elif (state_cmd == WRITE_FLASH_BEGIN) and (unit_ems.cmd_code_rx == 49):
|
||||
pass
|
||||
#write_flash()
|
||||
#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
|
||||
elif (state_cmd == READ_FLASH) and (unit_ems.cmd_code_rx == unit_ems.CmdCode.READ_FLASH_MP550):
|
||||
on_read_flash()
|
||||
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')
|
||||
|
||||
@@ -182,6 +176,7 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
state_cmd = WR_DEV_NUM_R
|
||||
else:
|
||||
state_cmd = WR_DEV_NUM_W
|
||||
need_write = false
|
||||
on_wr_device(cur_dev_num)
|
||||
|
||||
func set_connection(o_dev, i_dev, val):
|
||||
@@ -211,6 +206,62 @@ LOAD_KEMS, WRITE_FLASH_END}
|
||||
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)
|
||||
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
|
||||
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
|
||||
|
||||
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_OUTPUT = 38
|
||||
const NUM_BYTE_FROM_FLASH = 760
|
||||
@@ -19,6 +24,13 @@ const MAX_VAL_OFFSET = 51.1
|
||||
const I_COL_OFFSET = 3
|
||||
const I_COL_DELAY = 2
|
||||
|
||||
const FILES_NAME = ['Вариант 1',
|
||||
'Вариант 2',
|
||||
'Вариант 3',
|
||||
'Вариант 4',
|
||||
'Вариант 5',
|
||||
]
|
||||
|
||||
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
|
||||
const INPUT_KEMS = [
|
||||
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],
|
||||
|
||||
Reference in New Issue
Block a user