Доработка отладки контроля подключения

This commit is contained in:
2024-10-11 09:58:03 +03:00
parent 5aacc4f2dc
commit 566e21aad9

48
Main.gd
View File

@@ -7,20 +7,22 @@ class Socket extends PacketPeerUDP:
self.put_packet(data)
var node_select: Node
var timer = Timer.new()
var soc_unicast: Socket
var soc_brodcast: Socket
var unit = yau07.YaU07.new('ЯУ07')
var state = Constants.STATE.WAIT # Флаг для машины состояния
var flag_online: bool = false # Флаг для подключения
var flag_interval: bool = false # Флаг для включения непрерывной передачи с интервалом
var flag_wr_on_timer = false # Флаг для записи непрерывной
var flag_continuous = true # Флаг для режима ожидания машины состояния
var flag_write_isa: bool = false # Флаг для записи в ИСА
var flag_read_isa: bool = true # Флаг для чтения из ИСА
var ports_wr: Dictionary # Словарь с портами для записи
var port_select: int = Constants.BASE_ADDR # Выбранный порд для чтения/записи
var port: int
var address: String
var dt: float # Дельта
var timer: Timer = Timer.new()
var timeout: float = yau07.ONLINE_TIMEOUT
var last_update_time: float = 0.0
func _ready():
@@ -90,15 +92,21 @@ func draw_tabl(tbl, row: Array, count_row: int):
func poll_receive(sock: Socket) -> bool: ## Приёмник
if timeout - last_update_time > 0:
while sock.get_available_packet_count() > 0:
var rx_data = sock.get_packet()
var addr_receive = sock.get_packet_ip()
var port_receive = sock.get_packet_port()
if rx_data:
$BROADCAST.text = 'BROADCAST: ' + str(rx_data)
$BROADCAST.modulate = Color(1, 1, 1, 1)
var line_yau07_control = node_select.get_node2(0, 0)
line_yau07_control.text = ' ЯУ-07Б НА СВЯЗИ'
line_yau07_control.modulate = Constants.GREEN
last_update_time = 0.0
if (address == addr_receive) and (port == port_receive) and flag_online:
unit.parse(rx_data)
var line_board_control = node_select.get_node2(0, 1)
@@ -106,13 +114,21 @@ func poll_receive(sock: Socket) -> bool: ## Приёмник
else:
var line_board_control = node_select.get_node2(0, 1)
line_board_control.modulate = Constants.RED
else:
if sock.get_available_packet_count():
last_update_time = 0.0
else:
$BROADCAST.modulate = Color(0.5, 0.5, 0.5, 1)
var line_yau07_control = node_select.get_node2(0, 0)
line_yau07_control.text = ' НЕТ СВЯЗИ С ЯУ-07Б'
line_yau07_control.modulate = Constants.RED
return false
func _process(delta) -> void:
if flag_interval == false:
last_update_time += delta
poll_receive(soc_brodcast)
if flag_online:
if flag_online and not flag_interval:
poll_receive(soc_unicast)
state_machine()
@@ -125,8 +141,7 @@ func _process(delta) -> void:
func on_timer() -> void:
if flag_interval == true:
if flag_online:
flag_continuous = true
poll_receive(soc_brodcast)
flag_read_isa = true
state_machine()
var rc = unit.process(dt)
@@ -177,14 +192,19 @@ func state_machine() -> void:
node_select.set_node_text(4, 1, nubre_from_port)
$read_ISA.disabled = false
$write_ISA.disabled = false
state = Constants.STATE.WRITE if flag_continuous else Constants.STATE.WAIT
if flag_read_isa:
state = Constants.STATE.READ
elif flag_write_isa:
state = Constants.STATE.WRITE
else:
state = Constants.STATE.WAIT
elif state == Constants.STATE.READ and fl_done: ## Чтение из ИСА
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
flag_continuous = false
state = Constants.STATE.WRITE if flag_wr_on_timer else Constants.STATE.WAIT
flag_read_isa = false
state = Constants.STATE.WRITE if flag_write_isa else Constants.STATE.WAIT
elif state == Constants.STATE.WRITE and fl_done: ## Запись в ИСА
unit.send_isa(unit.CmdCode.WRITE_ISA, [port_select, ports_wr[port_select]])
flag_wr_on_timer = false
flag_write_isa = false
state = Constants.STATE.READ
@@ -204,8 +224,8 @@ func _on_written_text_submitted(write_addres_data) -> void:
is_hex = false
break
ports_wr[port_select] = write_addres_data.hex_to_int() if is_hex else 0xffff
flag_continuous = true
flag_wr_on_timer = true # Запись
flag_read_isa = true
flag_write_isa = true # Запись
func _on_written_interval(write_interval) -> void:
@@ -220,7 +240,7 @@ func _on_button_pressed(turn_on) -> void:
if turn_on:
address = node_select.get_node2(2,0).text
port = int(node_select.get_node2(4,0).text)
flag_continuous = false # Чтение
flag_read_isa = false # Чтение
flag_online = true
save_settings()
else: