209 lines
8.9 KiB
GDScript
209 lines
8.9 KiB
GDScript
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:
|
||
$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:
|
||
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])
|