Files
PRD_TU_MP550/scripts/PRD.gd
2024-12-20 10:46:42 +03:00

209 lines
8.7 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
signal read_ems_g_start()
signal read_ems_g_finish()
var flag_mode = Constants.ADDRESSES[0][3]
var broadcast_packet: PackedByteArray
var node_select1: Node
var node_select2: Node
var flag_yau_control: bool
var CONTROL_TABLE: Array
var isa: Array = []
func _ready() -> void:
# Таблица УКП_1
node_select1 = $TabContainer/PRD/scroll1/table1
draw_tabl(node_select1, Constants.ROWS_REGS_DATA, Constants.ROWS_REGS_DATA.size())
node_select1.set_columns_min_size([120, 120])
node_select1.set_node_text(0, 0, 'Мощность')
node_select1.set_node_text(1, 0, 'Температура')
# Таблица УКП_2
node_select2 = $TabContainer/PRD/scroll2/table2
draw_tabl(node_select2, Constants.ROWS_UKP2_DATA, Constants.ROWS_UKP2_DATA.size())
node_select2.set_columns_min_size([120, 120])
node_select2.set_node_text(0, 0, 'Мощность')
node_select2.set_node_text(1, 0, 'Температура')
# Выбор прибора для подключения
var node_select_device = $TabContainer/PRD/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,4))
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([100, 100])
$TabContainer/PRD/Zapret.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Zapret))
$TabContainer/PRD/Zapret2.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Zapret2))
Network.connect('yau_status_line', Callable(self, '_on_yau_status'))
Network.connect('yau_receive', Callable(self, '_on_data_received'))
Network.connect('yau_read_isa', Callable(self, '_on_read_isa'))
## From Network status about yau-07
func _on_yau_status(yau_status):
if yau_status:
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.button_pressed = true
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.disabled = false
flag_yau_control = true
else:
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.button_pressed = false
$TabContainer/ControlPanel/sockets/ref_A26/light_ind.disabled = true
#for dev in (Constants.CONTROL_DEVICE.size() - 1):
flag_yau_control = false
func _on_read_isa(unit_isa_ports):
var isa_data: Dictionary = {}
for key in unit_isa_ports.keys():
isa_data[key] = unit_isa_ports[key]
if isa_data.has(290):
var tmp = isa_data[290]
isa_data.erase(290)
var found = false
for i in range(Constants.EMS_G_PORT_DATA_HOLDER.size()):
if Constants.EMS_G_PORT_DATA_HOLDER[i][0] == tmp:
Constants.EMS_G_PORT_DATA_HOLDER[i][1] = isa_data
found = true
break
if not found:
Constants.EMS_G_PORT_DATA_HOLDER.append([tmp, isa_data])
if len(Constants.EMS_G_PORT_DATA_HOLDER) == 32:
emit_signal('read_ems_g_finish')
$ISA.text = 'ISA: ' + str(len(Constants.EMS_G_PORT_DATA_HOLDER))
## Рисует таблицу
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:
pass
func _on_data_received(data_from_yau_07):
if flag_yau_control:
var status_board = data_from_yau_07.decode_u8(Constants.DataIndices.STATUS_BOARD)
var dry_contact: int = data_from_yau_07.decode_u16(Constants.DataIndices.DRY_CONTACT) # Контроль сухих контактов (УГ)
var _DKM: int = data_from_yau_07.decode_u16(Constants.DataIndices.DKM) # ДКМ от УГ
## УГ
#node_select1.set_node_text(2, 0, '%d' % dry_contact)
## SOCKETS BOARDS
for i in 4:
var sockets_ind = [$TabContainer/ControlPanel/sockets/ref_A23/light_ind,
$TabContainer/ControlPanel/sockets/ref_A24/light_ind,
$TabContainer/ControlPanel/sockets/ref_A25/light_ind,
$TabContainer/ControlPanel/sockets/ref_A27/light_ind]
var j = int(status_board & (1 << i) == 0 and flag_yau_control)
if j == 0:
sockets_ind[i].button_pressed = true
sockets_ind[i].disabled = false
else:
sockets_ind[i].button_pressed = false
sockets_ind[i].disabled = true
## Блок ИП
for i in 8:
var node_power_ind = [$TabContainer/ControlPanel/kasseta_p_1/ref_A23/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A24/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A25/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A26/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A27/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A28/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A29/light_ind,
$TabContainer/ControlPanel/kasseta_p_1/ref_A30/light_ind]
var j = int(not(dry_contact & (1 << i) == 0 and flag_yau_control))
if j == 0:
node_power_ind[i].button_pressed = true
else:
node_power_ind[i].button_pressed = false
#node_select1.set_node_text(3, 0, '%d' % DKM)
## УКП
for i in range(8): ## Мощность от УКП_1
var power_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i)
node_select1.set_node_text(0, i+1, '%d' % power_ukp_1)
for i in range(8): ## Температура от УКП_1
var temperature_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.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+1, '%d' % TMP)
for i in range(8): ## Мощность от УКП_2
var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i)
node_select2.set_node_text(0, i+1, '%d' % power_ukp_2)
for row in range(8): ## Температура от УКП_2
if len(data_from_yau_07) > 79 + 2 * row:
var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * row)
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP
node_select2.set_node_text(1, row+1, '%d' % TMP)
func set_frame(node: Node, val: int): node.set_frame(val)
func _on_prd_select() -> void:
set_tab_and_buttons(0, 'select_prd')
func _on_control_button() -> void:
set_tab_and_buttons(1, 'select_control')
func _on_emsg_select() -> void:
emit_signal('read_ems_g_start')
set_tab_and_buttons(2, 'select_ems_g')
func set_tab_and_buttons(tab_index: int, button_name: String) -> void:
$TabContainer.current_tab = tab_index
var side_panel = $Background/side_panel
for button in side_panel.get_children():
if button is Button:
button.button_pressed = (button.name == button_name)
func on_btn_select(intem_from_sector):
var node_select_device = $TabContainer/PRD/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)
Network.address = meta[0]
Network.port = meta[1]
flag_mode = meta[2]
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)
func _on_zapret(toggled_on: bool, meta) -> void:
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+2, meta.get_meta('litera'))
var zapret_mode = 0x4000 if toggled_on else 0x0
Network.write_port_isa(Constants.EMS_G_BASE_ADDR+8, zapret_mode)
func _on_read_isa_pressed() -> void:
Network.read_port_isa([0x122, 0x124, 0x128])