Работа в процессе. Отображение на связи в журнале, приём сообщений json и яу-07
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
extends Node
|
||||
|
||||
# Протокол ячейки ЯУ-07
|
||||
|
||||
const ONLINE_TIMEOUT = 5.0 # Время ожидания пакета от ячейки, секунды
|
||||
const RESEND_TIMEOUT = 0.3 # Задержка для повторной отправки команды, секунды
|
||||
const RETRY_COUNT = 5 # Количество повторных отправок
|
||||
const DEFAULT_ADDR = ['localhost', 50000]
|
||||
const BUFFER_SIZE = 2048
|
||||
|
||||
|
||||
|
||||
# Ячейка ЯУ-07
|
||||
class YaU07:
|
||||
|
||||
@@ -20,12 +23,11 @@ class YaU07:
|
||||
DONE, # Команда выполнена
|
||||
FAIL } # Команда не выполнена
|
||||
|
||||
signal online_changed(yau07: YaU07)
|
||||
signal command_done(yau07: YaU07)
|
||||
signal command_fail(yau07: YaU07)
|
||||
signal net_error(message: String)
|
||||
signal line_changed(unit: YaU07)
|
||||
signal command_done(unit: YaU07)
|
||||
signal command_fail(unit: YaU07)
|
||||
|
||||
var src_addr: = DEFAULT_ADDR # Адрес источника
|
||||
var name: = String()
|
||||
var cmd_num_rx: = 0 # Номер команды принятый
|
||||
var cmd_num_tx: = 0 # Номер команды переданный
|
||||
var cmd_state = CmdState.UNCK # Состояние выполнения команды
|
||||
@@ -41,39 +43,39 @@ class YaU07:
|
||||
var isa_ports = {} # Результат выполнения команды "читать порт"
|
||||
var online = false
|
||||
|
||||
func _to_string() -> String:
|
||||
return '%s %s:%d cmd_num:%d' % [['отключен', 'на связи'][int(online)], src_addr[0], src_addr[1], cmd_num_rx]
|
||||
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
|
||||
func _init(addr: Array):
|
||||
src_addr = addr
|
||||
func _init(nm):
|
||||
self.name = nm
|
||||
tx_data.resize(BUFFER_SIZE)
|
||||
tx_data.fill(0)
|
||||
tick = 0.0
|
||||
|
||||
|
||||
func process(delta: float, sock: PacketPeerUDP):
|
||||
func process(delta: float):
|
||||
tick += delta
|
||||
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rc = Error.ERR_BUSY
|
||||
if cmd_state == CmdState.SEND:
|
||||
sock.set_dest_address(src_addr[0], src_addr[1])
|
||||
if sock.put_packet(tx_data.slice(0, tx_len)) == OK:
|
||||
cmd_tick_tx = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
cmd_retry = RETRY_COUNT
|
||||
rc = rc.OK
|
||||
cmd_tick_tx = tick
|
||||
cmd_state = CmdState.WAIT
|
||||
cmd_retry = RETRY_COUNT
|
||||
elif cmd_state == CmdState.WAIT:
|
||||
if cmd_retry:
|
||||
if (tick - cmd_tick_tx) > RESEND_TIMEOUT:
|
||||
sock.set_dest_address(src_addr[0], src_addr[1])
|
||||
if sock.put_packet(tx_data.slice(0, tx_len)) == OK:
|
||||
cmd_tick_tx = tick
|
||||
else:
|
||||
emit_signal('socket_error', 'ошибка: пакет не отправлен на: %s' % src_addr)
|
||||
rc = Error.OK
|
||||
cmd_tick_tx = tick
|
||||
cmd_retry -= 1
|
||||
else:
|
||||
cmd_state = CmdState.FAIL
|
||||
emit_signal('command_fail', self)
|
||||
if online and ((tick - cmd_tick_rx) > ONLINE_TIMEOUT):
|
||||
online = false
|
||||
emit_signal('online_changed', self)
|
||||
rc = Error.FAILED
|
||||
return rc
|
||||
|
||||
|
||||
func send_isa(cmd_code: int, ports_data: Array) -> bool:
|
||||
@@ -151,7 +153,7 @@ class YaU07:
|
||||
|
||||
if not online:
|
||||
online = true
|
||||
emit_signal('online_changed', self)
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
if rx_data_len < 11:
|
||||
@@ -187,7 +189,7 @@ class YaU07:
|
||||
if cmd_result != 1: # Команда не выполнена
|
||||
return false
|
||||
|
||||
var cmd_code: CmdCode = rx_data[cmd_code_pos] # "код команды"
|
||||
var cmd_code: CmdCode = rx_data[cmd_code_pos] as CmdCode # "код команды"
|
||||
if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA):
|
||||
parse_isa(rx_data, status_len)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user