temp debug

This commit is contained in:
2024-12-13 03:26:25 +03:00
parent 3d43b6bccf
commit f5fc70fbd3
8 changed files with 584 additions and 568 deletions

107
scripts/network.gd Normal file
View File

@@ -0,0 +1,107 @@
extends Node
var unit = Yau07.YaU07.new('ЯУ07')
var soc_unicast: Socket
var soc_brodcast: Socket
var address: String = Constants.ADDRESSES[0][1]
var port: int = Constants.ADDRESSES[0][2]
var timeout: float = Yau07.ONLINE_TIMEOUT
var last_update_time: float = 0.0
var broadcast_packet: PackedByteArray
var state = Constants.STATE.WAIT
var send_array: Array = []
var flag_read_isa: bool = false
signal _yau_status_line(_status) ## Вызывается когда меняется состояние связи с ячейкой
signal _yau_receive(_data_from_yau) ##
signal _yau_read_isa(_unit_isa_ports)
## Класс для отправки данных в сокет
class Socket extends PacketPeerUDP:
func send_to(addr: String, port: int, data: PackedByteArray):
self.set_dest_address(addr, port)
self.put_packet(data)
func poll_receive(sock: Socket) -> bool: ## Приёмник
if timeout - last_update_time > 0:
while sock.get_available_packet_count() > 0:
broadcast_packet = sock.get_packet()
var addr_receive = sock.get_packet_ip()
var port_receive = sock.get_packet_port()
if (address == addr_receive) and (port == port_receive):
last_update_time = 0.0
unit.parse(broadcast_packet)
var data_from_yau_07 = unit.status
emit_signal('_yau_receive', data_from_yau_07)
else:
if sock.get_available_packet_count():
last_update_time = 0.0
return false
func _ready() -> void:
# Привязка для принятия широковещательного канала
soc_brodcast = Socket.new()
var rc = soc_brodcast.bind(Constants.BROADCAST_PORT, '*')
if rc != OK:
print('Ошибка: Неудачная привязка широковещательного адреса')
soc_unicast = Socket.new()
rc = soc_unicast.bind(Constants.UNICAST_PORT, Constants.UNICAST_ADDRESS)
if rc != OK:
print('Ошибка: неудачная привязка адреса: ', address)
unit.connect('line_changed', Callable(self, 'on_line_changed'))
unit.connect('command_fail', Callable(self, 'on_command_fail'))
unit.connect('command_done', Callable(self, 'on_command_done'))
func _process(delta: float) -> void:
last_update_time += delta
poll_receive(soc_brodcast)
state_machine()
match unit.process(delta):
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
Error.FAILED: print('Ошибка отправки данных')
func state_machine():
var fl_done = (unit.cmd_state == unit.CmdState.DONE)
## Режим ожидания
if state == Constants.STATE.WAIT and fl_done:
if flag_read_isa:
flag_read_isa = false
state = Constants.STATE.READ_ISA
elif send_array.size():
state = Constants.STATE.WRITE_ISA
## Режим чтения из ИСА
elif state == Constants.STATE.READ_ISA and fl_done:
unit.send_isa(unit.CmdCode.READ_ISA, [0x122, 0x128])
state = Constants.STATE.WAIT
var unit_isa_ports = unit.isa_ports
emit_signal('_yau_read_isa', unit_isa_ports)
## Режим записи в ИСА
elif state == Constants.STATE.WRITE_ISA and fl_done:
var ports_dict = send_array.pop_front()
var key = ports_dict.keys()
unit.send_isa(unit.CmdCode.WRITE_ISA, [key[0], ports_dict[key[0]]])
state = Constants.STATE.WAIT
func on_line_changed(_unit) -> void:
emit_signal('_yau_status_line', unit.online)
## Ессли отсутствует подключение к ячейке ЯУ-07
func on_command_fail(_unit) -> void:
print_debug('Command send fail')
## Индикация чтения портов
func on_command_done(_unit) -> void:
pass