Доработка
This commit is contained in:
95
Main.gd
95
Main.gd
@@ -16,13 +16,14 @@ var unit = yau07.YaU07.new('ЯУ07')
|
||||
var state: int = 0 # Флаг для машины состояния
|
||||
var flag_online: bool = false # Флаг для подключения
|
||||
var flag_interval: bool = false # Флаг для включения непрерывной передачи с интервалом
|
||||
var flag_wr_on_timer = true
|
||||
var ports_wr: Dictionary # Словарь с портами для записи
|
||||
var port_select: int = Constants.BASE_ADDR # Выбранный порд для чтения/записи
|
||||
var port: int
|
||||
var dt: float # Дельта
|
||||
var address: String
|
||||
var rx_data: PackedByteArray # Буфер принятый
|
||||
var addr_receive: String # Адрес обращения к ПРД
|
||||
var addr_receive: String # Адрес обращения к ПРД
|
||||
var port_receive: int # Порт обращения к ПРД
|
||||
var ROWS_REGS_DATA: Array = [
|
||||
[TableNode, TableNode, TableNode, TableNode, TableNode],
|
||||
@@ -52,33 +53,33 @@ func _ready():
|
||||
var edit_port = node_select.get_node2(4, 0)
|
||||
edit_port.editable = true
|
||||
edit_port.placeholder_text = 'Ввод значения'
|
||||
|
||||
|
||||
# Поле для ввода (запись в порт)
|
||||
var edit_node = node_select.get_node2(2, 1)
|
||||
edit_node.editable = true
|
||||
edit_node.placeholder_text = 'Ввод значения'
|
||||
edit_node.connect('text_submitted', Callable(self, '_on_written_text_submitted'))
|
||||
|
||||
|
||||
# Кнопка для включения
|
||||
$Turn_on.connect('toggled', Callable(self, '_on_button_pressed'))
|
||||
|
||||
|
||||
# Поле для ввода (базовый порт)
|
||||
var edit_addr = node_select.get_node2(0, 2)
|
||||
edit_addr.editable = true
|
||||
edit_addr.placeholder_text = ' 0x%x' % port_select
|
||||
edit_addr.connect('text_submitted', Callable(self, '_on_written_addres'))
|
||||
|
||||
|
||||
# Поле для ввода (интервал непрерывной записи)
|
||||
var edit_interval = node_select.get_node2(2, 2)
|
||||
edit_interval.editable = true
|
||||
edit_interval.placeholder_text = 'Ввод значения'
|
||||
edit_interval.connect('text_submitted', Callable(self, '_on_written_interval'))
|
||||
|
||||
|
||||
# Привязка для принятия широковещательного канала
|
||||
var rc = soc_brodcast.bind(Constants.BROADCAST_PORT, '*')
|
||||
if rc != OK:
|
||||
print('Ошибка: Неудачная привязка широковещательного адреса')
|
||||
|
||||
|
||||
ports_wr[port_select] = 0
|
||||
unit.connect('line_changed', Callable(self, 'on_line_changed'))
|
||||
unit.connect('command_fail', Callable(self, 'on_command_fail'))
|
||||
@@ -101,65 +102,35 @@ func poll_receive(sock: Socket, _unit, addr: String, _port: int) -> bool: ## П
|
||||
return false
|
||||
|
||||
|
||||
func _process(delta):
|
||||
func _process(delta) -> void:
|
||||
if flag_online:
|
||||
if flag_interval == false:
|
||||
poll_receive(soc_brodcast, unit, address, port)
|
||||
var fl_done = unit.cmd_state == unit.CmdState.DONE
|
||||
if state == 1 and fl_done: ## Чтение из ИСА
|
||||
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
|
||||
node_select.set_node_text(3, 1, ' ПРОЧИТАНО ИЗ %x' % port_select)
|
||||
state = 2
|
||||
elif state == 2 and fl_done: ## Запись в ИСА
|
||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [port_select, ports_wr[port_select]])
|
||||
|
||||
if unit.isa_ports.has(port_select):
|
||||
node_select.set_node_text(4, 1, ' %x' % unit.isa_ports[port_select])
|
||||
var isa: Array = []
|
||||
for i in unit.isa_ports:
|
||||
isa.append('%x: %x' % [i, unit.isa_ports[i]])
|
||||
node_select.set_node_text(1, 1, ' ЗАПИСАТЬ В %x' % port_select)
|
||||
$ISA.text = 'ISA: ' + str(isa)
|
||||
state = 1
|
||||
state_machine()
|
||||
|
||||
var rc = unit.process(delta)
|
||||
if rc == Error.OK:
|
||||
soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
||||
dt = delta
|
||||
dt = delta
|
||||
|
||||
|
||||
func on_timer():
|
||||
func on_timer() -> void:
|
||||
if flag_online:
|
||||
if flag_interval == true:
|
||||
poll_receive(soc_brodcast, unit, address, port)
|
||||
var fl_done = unit.cmd_state == unit.CmdState.DONE
|
||||
if state == 1 and fl_done: ## Чтение из ИСА
|
||||
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
|
||||
node_select.set_node_text(3, 1, ' ПРОЧИТАНО ИЗ %x' % port_select)
|
||||
state = 2
|
||||
elif state == 2 and fl_done: ## Запись в ИСА
|
||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [port_select, ports_wr[port_select]])
|
||||
|
||||
if unit.isa_ports.has(port_select):
|
||||
node_select.set_node_text(4, 1, '%x' % unit.isa_ports[port_select])
|
||||
var isa: Array = []
|
||||
for i in unit.isa_ports:
|
||||
isa.append('%x: %x' % [i, unit.isa_ports[i]])
|
||||
node_select.set_node_text(1, 1, ' ЗАПИСАТЬ В %x' % port_select)
|
||||
$ISA.text = 'ISA: ' + str(isa)
|
||||
state = 1
|
||||
|
||||
state_machine()
|
||||
|
||||
var rc = unit.process(dt)
|
||||
if rc == Error.OK:
|
||||
soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
|
||||
|
||||
|
||||
func on_line_changed(_unit):
|
||||
func on_line_changed(_unit) -> void:
|
||||
print_debug()
|
||||
|
||||
|
||||
## Ессли отсутствует подключение к ячейке ЯУ-07
|
||||
func on_command_fail(_unit):
|
||||
func on_command_fail(_unit) -> void:
|
||||
var line_yau07_control = node_select.get_node2(0, 0)
|
||||
line_yau07_control.text = ' НЕТ СВЯЗИ С ЯУ-07'
|
||||
line_yau07_control.modulate = Color(1, 0, 0, 1)
|
||||
@@ -168,32 +139,52 @@ func on_command_fail(_unit):
|
||||
|
||||
|
||||
## Индикация чтения портов
|
||||
func on_command_done(_unit):
|
||||
func on_command_done(_unit) -> void:
|
||||
if flag_online:
|
||||
var line_yau07_control = node_select.get_node2(0, 0)
|
||||
line_yau07_control.text = ' ЯУ-07 НА СВЯЗИ'
|
||||
line_yau07_control.modulate = Color(0, 1, 0, 1)
|
||||
|
||||
|
||||
func state_machine() -> void:
|
||||
var fl_done = unit.cmd_state == unit.CmdState.DONE
|
||||
if state == 1 and fl_done: ## Чтение из ИСА
|
||||
unit.send_isa(unit.CmdCode.READ_ISA, [port_select])
|
||||
node_select.set_node_text(3, 1, ' ПРОЧИТАНО ИЗ %x' % port_select)
|
||||
state = 2 if flag_wr_on_timer else 1
|
||||
elif state == 2 and fl_done: ## Запись в ИСА
|
||||
unit.send_isa(unit.CmdCode.WRITE_ISA, [port_select, ports_wr[port_select]])
|
||||
|
||||
if unit.isa_ports.has(port_select):
|
||||
node_select.set_node_text(4, 1, '%x' % unit.isa_ports[port_select])
|
||||
var isa: Array = []
|
||||
for i in unit.isa_ports:
|
||||
isa.append('%x: %x' % [i, unit.isa_ports[i]])
|
||||
node_select.set_node_text(1, 1, ' ЗАПИСАТЬ В %x' % port_select)
|
||||
$ISA.text = 'ISA: ' + str(isa)
|
||||
state = 1
|
||||
|
||||
|
||||
## Выставить адресс для записи
|
||||
func _on_written_addres(write_addres):
|
||||
func _on_written_addres(write_addres) -> void:
|
||||
port_select = write_addres.hex_to_int()
|
||||
ports_wr[port_select] = 0
|
||||
if ports_wr.has(port_select) != true:
|
||||
ports_wr[port_select] = 0
|
||||
node_select.set_node_text(0, 2, '%x' % port_select)
|
||||
|
||||
|
||||
## Запись числа порт
|
||||
func _on_written_text_submitted(write_addres_data):
|
||||
func _on_written_text_submitted(write_addres_data) -> void:
|
||||
var is_hex = true
|
||||
for chr in write_addres_data:
|
||||
if chr.to_upper() < '0' or chr.to_upper() > 'F':
|
||||
is_hex = false
|
||||
break
|
||||
break
|
||||
ports_wr[port_select] = write_addres_data.hex_to_int() if is_hex else 0xffff
|
||||
state = 2 # Запись
|
||||
|
||||
|
||||
func _on_written_interval(write_interval):
|
||||
func _on_written_interval(write_interval) -> void:
|
||||
timer.start(float(write_interval))
|
||||
flag_interval = true
|
||||
var light_interval = node_select.get_node2(1, 2)
|
||||
@@ -201,7 +192,7 @@ func _on_written_interval(write_interval):
|
||||
|
||||
|
||||
## Подключение
|
||||
func _on_button_pressed(turn_on):
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user