Доработка отладки контроля подключения
This commit is contained in:
106
Main.gd
106
Main.gd
@@ -7,20 +7,22 @@ class Socket extends PacketPeerUDP:
|
|||||||
self.put_packet(data)
|
self.put_packet(data)
|
||||||
|
|
||||||
var node_select: Node
|
var node_select: Node
|
||||||
var timer = Timer.new()
|
|
||||||
var soc_unicast: Socket
|
var soc_unicast: Socket
|
||||||
var soc_brodcast: Socket
|
var soc_brodcast: Socket
|
||||||
var unit = yau07.YaU07.new('ЯУ07')
|
var unit = yau07.YaU07.new('ЯУ07')
|
||||||
var state = Constants.STATE.WAIT # Флаг для машины состояния
|
var state = Constants.STATE.WAIT # Флаг для машины состояния
|
||||||
var flag_online: bool = false # Флаг для подключения
|
var flag_online: bool = false # Флаг для подключения
|
||||||
var flag_interval: bool = false # Флаг для включения непрерывной передачи с интервалом
|
var flag_interval: bool = false # Флаг для включения непрерывной передачи с интервалом
|
||||||
var flag_wr_on_timer = false # Флаг для записи непрерывной
|
var flag_write_isa: bool = false # Флаг для записи в ИСА
|
||||||
var flag_continuous = true # Флаг для режима ожидания машины состояния
|
var flag_read_isa: bool = true # Флаг для чтения из ИСА
|
||||||
var ports_wr: Dictionary # Словарь с портами для записи
|
var ports_wr: Dictionary # Словарь с портами для записи
|
||||||
var port_select: int = Constants.BASE_ADDR # Выбранный порд для чтения/записи
|
var port_select: int = Constants.BASE_ADDR # Выбранный порд для чтения/записи
|
||||||
var port: int
|
var port: int
|
||||||
var address: String
|
var address: String
|
||||||
var dt: float # Дельта
|
var dt: float # Дельта
|
||||||
|
var timer: Timer = Timer.new()
|
||||||
|
var timeout: float = yau07.ONLINE_TIMEOUT
|
||||||
|
var last_update_time: float = 0.0
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
@@ -30,13 +32,13 @@ func _ready():
|
|||||||
node_select = $scroll1/table1
|
node_select = $scroll1/table1
|
||||||
draw_tabl(node_select, Constants.ROWS_REGS_DATA, Constants.ROWS_REGS_DATA.size())
|
draw_tabl(node_select, Constants.ROWS_REGS_DATA, Constants.ROWS_REGS_DATA.size())
|
||||||
node_select.set_columns_min_size([250, 160, 150, 190, 150])
|
node_select.set_columns_min_size([250, 160, 150, 190, 150])
|
||||||
node_select.set_node_text(0, 0, ' НЕТ СВЯЗИ С ЯУ-07')
|
node_select.set_node_text(0, 0, ' НЕТ СВЯЗИ С ЯУ-07')
|
||||||
node_select.set_node_text(1, 0, ' IP-АДРЕС')
|
node_select.set_node_text(1, 0, ' IP-АДРЕС')
|
||||||
node_select.set_node_text(2, 0, Constants.DEFAULT_ADDRESS)
|
node_select.set_node_text(2, 0, Constants.DEFAULT_ADDRESS)
|
||||||
node_select.set_node_text(3, 0, ' IP-ПОРТ')
|
node_select.set_node_text(3, 0, ' IP-ПОРТ')
|
||||||
node_select.set_node_text(4, 0, Constants.DEFAULT_PORT)
|
node_select.set_node_text(4, 0, Constants.DEFAULT_PORT)
|
||||||
node_select.set_node_text(0, 1, ' ПОРТ ЯЧЕЙКИ (hex)')
|
node_select.set_node_text(0, 1, ' ПОРТ ЯЧЕЙКИ (hex)')
|
||||||
node_select.set_node_text(1, 2, ' ИНТЕРВАЛ')
|
node_select.set_node_text(1, 2, ' ИНТЕРВАЛ')
|
||||||
|
|
||||||
# Поле для ввода (запись IP-адреса)
|
# Поле для ввода (запись IP-адреса)
|
||||||
var edit_ip = node_select.get_node2(2, 0)
|
var edit_ip = node_select.get_node2(2, 0)
|
||||||
@@ -90,43 +92,56 @@ func draw_tabl(tbl, row: Array, count_row: int):
|
|||||||
|
|
||||||
|
|
||||||
func poll_receive(sock: Socket) -> bool: ## Приёмник
|
func poll_receive(sock: Socket) -> bool: ## Приёмник
|
||||||
while sock.get_available_packet_count() > 0:
|
|
||||||
var rx_data = sock.get_packet()
|
if timeout - last_update_time > 0:
|
||||||
var addr_receive = sock.get_packet_ip()
|
while sock.get_available_packet_count() > 0:
|
||||||
var port_receive = sock.get_packet_port()
|
var rx_data = sock.get_packet()
|
||||||
if rx_data:
|
var addr_receive = sock.get_packet_ip()
|
||||||
$BROADCAST.text = 'BROADCAST: ' + str(rx_data)
|
var port_receive = sock.get_packet_port()
|
||||||
var line_yau07_control = node_select.get_node2(0, 0)
|
|
||||||
line_yau07_control.text = ' ЯУ-07Б НА СВЯЗИ'
|
if rx_data:
|
||||||
line_yau07_control.modulate = Constants.GREEN
|
$BROADCAST.text = 'BROADCAST: ' + str(rx_data)
|
||||||
if (address == addr_receive) and (port == port_receive) and flag_online:
|
$BROADCAST.modulate = Color(1, 1, 1, 1)
|
||||||
unit.parse(rx_data)
|
var line_yau07_control = node_select.get_node2(0, 0)
|
||||||
var line_board_control = node_select.get_node2(0, 1)
|
line_yau07_control.text = ' ЯУ-07Б НА СВЯЗИ'
|
||||||
line_board_control.modulate = Constants.GREEN
|
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)
|
||||||
|
line_board_control.modulate = Constants.GREEN
|
||||||
|
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:
|
else:
|
||||||
var line_board_control = node_select.get_node2(0, 1)
|
$BROADCAST.modulate = Color(0.5, 0.5, 0.5, 1)
|
||||||
line_board_control.modulate = Constants.RED
|
var line_yau07_control = node_select.get_node2(0, 0)
|
||||||
|
line_yau07_control.text = ' НЕТ СВЯЗИ С ЯУ-07Б'
|
||||||
|
line_yau07_control.modulate = Constants.RED
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
func _process(delta) -> void:
|
func _process(delta) -> void:
|
||||||
if flag_interval == false:
|
last_update_time += delta
|
||||||
poll_receive(soc_brodcast)
|
poll_receive(soc_brodcast)
|
||||||
if flag_online:
|
if flag_online and not flag_interval:
|
||||||
poll_receive(soc_unicast)
|
poll_receive(soc_unicast)
|
||||||
state_machine()
|
state_machine()
|
||||||
|
|
||||||
match unit.process(delta):
|
match unit.process(delta):
|
||||||
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
||||||
Error.FAILED: print('Ошибка отправки данных')
|
Error.FAILED: print('Ошибка отправки данных')
|
||||||
dt = delta
|
dt = delta
|
||||||
|
|
||||||
|
|
||||||
func on_timer() -> void:
|
func on_timer() -> void:
|
||||||
if flag_interval == true:
|
if flag_interval == true:
|
||||||
if flag_online:
|
if flag_online:
|
||||||
flag_continuous = true
|
flag_read_isa = true
|
||||||
poll_receive(soc_brodcast)
|
|
||||||
state_machine()
|
state_machine()
|
||||||
|
|
||||||
var rc = unit.process(dt)
|
var rc = unit.process(dt)
|
||||||
@@ -171,20 +186,25 @@ func on_command_done(_unit) -> void:
|
|||||||
func state_machine() -> void:
|
func state_machine() -> void:
|
||||||
var fl_done = (unit.cmd_state == unit.CmdState.DONE) or (unit.cmd_state == unit.CmdState.FAIL)
|
var fl_done = (unit.cmd_state == unit.CmdState.DONE) or (unit.cmd_state == unit.CmdState.FAIL)
|
||||||
if state == Constants.STATE.WAIT and fl_done:
|
if state == Constants.STATE.WAIT and fl_done:
|
||||||
node_select.set_node_text(3, 1, ' ПРОЧИТАНО ИЗ %x' % port_select)
|
node_select.set_node_text(3, 1, ' ПРОЧИТАНО ИЗ %x' % port_select)
|
||||||
node_select.set_node_text(1, 1, ' ЗАПИСАТЬ В %x' % port_select)
|
node_select.set_node_text(1, 1, ' ЗАПИСАТЬ В %x' % port_select)
|
||||||
var nubre_from_port = '%x' % unit.isa_ports[port_select] if unit.isa_ports.has(port_select) else 'ffff'
|
var nubre_from_port = '%x' % unit.isa_ports[port_select] if unit.isa_ports.has(port_select) else 'ffff'
|
||||||
node_select.set_node_text(4, 1, nubre_from_port)
|
node_select.set_node_text(4, 1, nubre_from_port)
|
||||||
$read_ISA.disabled = false
|
$read_ISA.disabled = false
|
||||||
$write_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: ## Чтение из ИСА
|
elif state == Constants.STATE.READ and fl_done: ## Чтение из ИСА
|
||||||
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
|
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
|
||||||
flag_continuous = false
|
flag_read_isa = false
|
||||||
state = Constants.STATE.WRITE if flag_wr_on_timer else Constants.STATE.WAIT
|
state = Constants.STATE.WRITE if flag_write_isa else Constants.STATE.WAIT
|
||||||
elif state == Constants.STATE.WRITE and fl_done: ## Запись в ИСА
|
elif state == Constants.STATE.WRITE and fl_done: ## Запись в ИСА
|
||||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [port_select, ports_wr[port_select]])
|
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
|
state = Constants.STATE.READ
|
||||||
|
|
||||||
|
|
||||||
@@ -204,8 +224,8 @@ func _on_written_text_submitted(write_addres_data) -> void:
|
|||||||
is_hex = false
|
is_hex = false
|
||||||
break
|
break
|
||||||
ports_wr[port_select] = write_addres_data.hex_to_int() if is_hex else 0xffff
|
ports_wr[port_select] = write_addres_data.hex_to_int() if is_hex else 0xffff
|
||||||
flag_continuous = true
|
flag_read_isa = true
|
||||||
flag_wr_on_timer = true # Запись
|
flag_write_isa = true # Запись
|
||||||
|
|
||||||
|
|
||||||
func _on_written_interval(write_interval) -> void:
|
func _on_written_interval(write_interval) -> void:
|
||||||
@@ -220,7 +240,7 @@ func _on_button_pressed(turn_on) -> void:
|
|||||||
if turn_on:
|
if turn_on:
|
||||||
address = node_select.get_node2(2,0).text
|
address = node_select.get_node2(2,0).text
|
||||||
port = int(node_select.get_node2(4,0).text)
|
port = int(node_select.get_node2(4,0).text)
|
||||||
flag_continuous = false # Чтение
|
flag_read_isa = false # Чтение
|
||||||
flag_online = true
|
flag_online = true
|
||||||
save_settings()
|
save_settings()
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user