Files
PRD_TU_MP550/PRD.gd

208 lines
8.1 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Node2D
var unit = Yau07.YaU07.new('ЯУ07')
var soc_unicast: Socket
var soc_brodcast: Socket
var address: String = '10.1.1.11'
var ports_wr: Dictionary # Словарь с портами для записи
var port: int
var broadcast_packet: PackedByteArray
var node_select1: Node
var timeout: float = Yau07.ONLINE_TIMEOUT
var last_update_time: float = 0.0
var flag_yau_control: bool
## Класс для отправки данных в сокет
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):
$control_dev/control_dev.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
$control_dev/control_dev.get_node2(0, 0).modulate = Constants.GREEN
last_update_time = 0.0
unit.parse(broadcast_packet)
else:
if sock.get_available_packet_count():
last_update_time = 0.0
else:
$control_dev/control_dev.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
$control_dev/control_dev.get_node2(0, 0).modulate = Constants.RED
return false
func _ready() -> void:
# Таблица 1 (temp)
node_select1 = $scroll1/table1
draw_tabl(node_select1, Constants.ROWS_REGS_DATA, Constants.ROWS_REGS_DATA.size())
# Выбор прибора для подключения
var node_select_device = $select_dev/select_dev
draw_tabl(node_select_device, Constants.SELECT_DEVICE, Constants.SELECT_DEVICE.size())
var get_select_device = node_select_device.get_node2(1, 0)
# Заполнение адресов
for i_addr in Constants.ADDRESSES.size():
get_select_device.add_item(Constants.ADDRESSES[i_addr][0])
get_select_device.set_item_metadata(i_addr, Constants.ADDRESSES[i_addr].slice(1,3))
get_select_device.connect('item_selected', Callable(self, 'on_btn_select'))
node_select_device.get_node2(0,0).text = 'НАЗВАНИЕ ПРИБОРА'
node_select_device.set_columns_min_size([200, 100])
# Контроль
var node_control_device = $control_dev/control_dev
draw_tabl(node_control_device, Constants.CONTROL_TABLE, Constants.CONTROL_TABLE.size())
for i in Constants.CONTROL_DEVICE.size():
node_control_device.get_node2(0, i).text = Constants.CONTROL_DEVICE[i]
node_control_device.set_columns_min_size([300])
# Привязка для принятия широковещательного канала
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'))
unit.connect('data_received', Callable(self, 'data_received'))
## Рисует таблицу
func draw_tabl(tbl, row: Array, count_row: int):
for i_row in count_row:
tbl.add_row(row[i_row])
func _process(delta: float) -> void:
last_update_time += delta
poll_receive(soc_brodcast)
match unit.process(delta):
Error.OK: soc_unicast.send_to(address, port, unit.tx_data.slice(0, unit.tx_len))
Error.FAILED: print('Ошибка отправки данных')
func data_received(_unit):
var data_from_yau_07 = unit.status
var status_board = data_from_yau_07.decode_u8(0)
var EMS_G: int = data_from_yau_07.decode_u16(1) # Данные СИ от ЭМС-Г на выходе
var dry_contact: int = data_from_yau_07.decode_u16(27) # Контроль сухих контактов (УГ)
var DKM: int = data_from_yau_07.decode_u16(29) # ДКМ от УГ
var power_ukp_1: int = data_from_yau_07.decode_u16(31) # Мощность с широковещания от УКП №1
var temperature_ukp_1: int = data_from_yau_07.decode_u16(47) # Температура с широковещания от УКП №1
var power_ukp_2: int = data_from_yau_07.decode_u16(63)
var temperature_ukp_2: int = data_from_yau_07.decode_u16(79)
node_select1.set_node_text(2, 0, '%d' % dry_contact)
var node_control_device = $control_dev/control_dev
for i in 4:
var node_board = node_control_device.get_node2(0, i+2)
var j = int(status_board & (1 << i) == 0 and flag_yau_control)
node_board.text = Constants.CONTROL_BOARD[i][j]
node_board.modulate = [Constants.GREEN, Constants.RED][j]
for i in 8:
var node_power_supply = node_control_device.get_node2(0, i+6)
var j = int(not(dry_contact & (1 << i) == 0 and flag_yau_control))
node_power_supply.text = Constants.CONTROL_POWER_SUPPLY[i][j]
node_power_supply.modulate = [Constants.GREEN, Constants.RED][j]
# EMS G
var in_blank: int = data_from_yau_07.decode_u32(1)
var in_imp: int = data_from_yau_07.decode_u32(5)
var EMSG = [['Вход Х3:23', 'Вход Х3:23'],['Вход Х3:24', 'Вход Х3:24']]
for i in 2:
var node_ems_g = node_control_device.get_node2(0, i+ 14)
#var ems = data_from_yau_07.decode_u64()
var j = int(EMS_G & (1 << i) == 0 and flag_yau_control)
node_ems_g.text = EMSG[i][j]
node_ems_g.modulate = [Constants.GREEN, Constants.RED][j]
set_frame(Constants.Frame.VARIABLE)
node_select1.set_node_text(3, 0, '%d' % DKM)
for i in range(8):
power_ukp_1 += 2 * i
node_select1.set_node_text(0, i, '%d' % power_ukp_1)
for i in range(8):
temperature_ukp_1 += 2 * i
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP
node_select1.set_node_text(1, i, '%d' % TMP)
for i in range(8):
power_ukp_2 += 2 * i
node_select1.set_node_text(0, i+8, '%d' % power_ukp_2)
for i in range(8):
if len(data_from_yau_07) > 79 + 2 * i:
temperature_ukp_2 += 2 * i
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP
node_select1.set_node_text(1, i+8, '%d' % TMP)
for i in range(15):
EMS_G += 2 * i
node_select1.set_node_text(3, i+1, '%d' % EMS_G)
###
func set_frame(val: int): $control_dev/sprite.set_frame(val)
###
func on_line_changed(_unit) -> void:
if unit.online:
flag_yau_control = true
else:
flag_yau_control = false
## Ессли отсутствует подключение к ячейке ЯУ-07
func on_command_fail(_unit) -> void:
print_debug('Command send fail')
## Индикация чтения портов
func on_command_done(_unit) -> void:
pass
func _on_control_button(toggled_on: bool) -> void:
$control_dev.visible = toggled_on
$Controlpanel.visible = toggled_on
func on_btn_select(intem_from_sector):
var node_select_device = $select_dev/select_dev
var get_select_device = node_select_device.get_node2(1, 0)
var meta = get_select_device.get_item_metadata(intem_from_sector)
address = meta[0]
port = meta[1]
func fill_item(node, i_column: int, i_row: int, arr: Dictionary, select: int = 0):
var optionbutton = node.get_node2(i_column, i_row) as OptionButton
for key in arr.keys():
var item_text = key + " - " + str(arr[key])
optionbutton.add_item(item_text)
if select < arr.size():
optionbutton.select(select)