Files
PRD_TU_MP550/scripts/PRD.gd
2024-12-18 20:47:40 +03:00

214 lines
9.2 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 unit = Yau07.YaU07.new('ЯУ07')
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):
var node_board = $TabContainer/ControlPanel/control_tbl.get_node2(0, dev+1)
node_board.modulate = Color.RED
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:
$TabContainer.current_tab = 0
$Background/side_panel/select_prd.button_pressed = true
$Background/side_panel/select_control.button_pressed = false
$Background/side_panel/select_ems_g.button_pressed = false
func _on_control_button() -> void:
$TabContainer.current_tab = 1
$Background/side_panel/select_control.button_pressed = true
$Background/side_panel/select_prd.button_pressed = false
$Background/side_panel/select_ems_g.button_pressed = false
func _on_emsg_select() -> void:
emit_signal('read_ems_g_start')
$TabContainer.current_tab = 2
$Background/side_panel/select_ems_g.button_pressed = true
$Background/side_panel/select_control.button_pressed = false
$Background/side_panel/select_prd.button_pressed = false
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:
var ports_wr: Dictionary = {0x122 : meta.get_meta('litera')} ## СИ2, СИ4, СИ6 = 0x30, СИ3, СИ5, СИ7 = 0x31, СИ1 = 0x2F
Network.send_array.append(ports_wr)
ports_wr = {}
ports_wr[0x128] = 0x4000 if toggled_on else 0x0
Network.send_array.append(ports_wr)
func _on_read_isa_pressed() -> void:
Network.send_array.append(['rd', [0x122, 0x124, 0x128]])