Доработка. ЭМС, работа с файлами и flash.

This commit is contained in:
MaD_CaT
2024-11-19 16:17:31 +03:00
parent f1c2433b91
commit 37f39a50e0
17 changed files with 321 additions and 101 deletions

View File

@@ -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.
@@ -41,6 +42,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() ## Поле "состояние прибора"
@@ -72,7 +74,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
@@ -88,7 +93,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)
@@ -103,6 +109,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)
@@ -113,6 +126,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:
@@ -140,6 +154,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:
@@ -163,6 +178,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 - Принятые данные.