Доработка. ЭМС, работа с файлами и flash.
This commit is contained in:
@@ -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 - Принятые данные.
|
||||
|
||||
Reference in New Issue
Block a user