Files
PRD_TU_MP550/scripts/PRD.gd
2024-12-13 04:17:40 +03:00

270 lines
13 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 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
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])
# Контроль
var node_control_device = $TabContainer/ControlPanel/control_dev/control_tbl
for i in Constants.CONTROL_DEVICE.size():
CONTROL_TABLE.append([Constants.TableNode])
draw_tabl(node_control_device, CONTROL_TABLE, 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])
$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/control_dev/control_tbl.get_node2(0, 0).text = 'ЯУ-07Б НА СВЯЗИ'
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).modulate = Color.GREEN
flag_yau_control = true
else:
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).text = 'НЕТ СВЯЗИ С ЯУ-07Б'
$TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, 0).modulate = Color.RED
for dev in (Constants.CONTROL_DEVICE.size() - 1):
var node_board = $TabContainer/ControlPanel/control_dev/control_tbl.get_node2(0, dev+1)
node_board.modulate = Color.RED
flag_yau_control = false
func _on_read_isa(unit_isa_ports):
$ISA.text = 'ISA: ' + str(unit_isa_ports)
## Рисует таблицу
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 in_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_BLANK_PRD)
var in_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.IN_IMPULS_PRD)
var out_blank: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_BLANK_PRD)
var out_imp: int = data_from_yau_07.decode_u16(Constants.DataIndices.OUT_IMPULS_PRD)
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)
var node_control_device = $TabContainer/ControlPanel/control_dev/control_tbl
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 = [Color.GREEN, Color.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 = [Color.GREEN, Color.RED][j]
## EMS G
var CONTROL_FRAME = [$TabContainer/ControlPanel/control_dev/SZI_x, $TabContainer/ControlPanel/control_dev/SZI_x2, $TabContainer/ControlPanel/control_dev/SZI_x3, $TabContainer/ControlPanel/control_dev/SZI_x4, $TabContainer/ControlPanel/control_dev/SZI_x5]
for i in 5:
var node_ems_g = node_control_device.get_node2(0, i + 14)
var j: int = 0
var frame = Constants.Frame.WORK
var in_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
var in_bit_blank_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
var in_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 3 if Constants.MODE.PRD_K == flag_mode else 6
var in_bit_impuls_FS = 9 if Constants.MODE.PRD_H == flag_mode else 11 if Constants.MODE.PRD_K == flag_mode else 13
###
var out_bit_blank_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
var out_bit_blank_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
var out_bit_blank_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
var out_bit_impuls_UF = 1 if Constants.MODE.PRD_H == flag_mode else 1 if Constants.MODE.PRD_K == flag_mode else 0
var out_bit_impuls_MODUL = 4 if Constants.MODE.PRD_H == flag_mode else 4 if Constants.MODE.PRD_K == flag_mode else 4
var out_bit_impuls_FGOZ = 9 if Constants.MODE.PRD_H == flag_mode else 8 if Constants.MODE.PRD_K == flag_mode else 8
if (in_blank & (1 << in_bit_blank_UF) != 0) and flag_yau_control:
j = 1 if i == 0 else 0
frame = Constants.Frame.CONSTANT if i == 0 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (in_imp & (1 << in_bit_impuls_UF) != 0) and flag_yau_control:
j = 1 if i == 0 else 0
frame = Constants.Frame.VARIABLE if i == 0 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (in_blank & (1 << in_bit_blank_FS) != 0) and flag_yau_control:
j = 1 if i == 1 else 0
frame = Constants.Frame.CONSTANT if i == 1 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (in_imp & (1 << in_bit_impuls_FS) != 0) and flag_yau_control:
j = 1 if i == 1 else 0
frame = Constants.Frame.VARIABLE if i == 1 else Constants.Frame.WORK
elif (out_blank & (1 << out_bit_blank_UF) != 0) and flag_yau_control:
j = 1 if i == 2 else 0
frame = Constants.Frame.CONSTANT if i == 2 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (out_imp & (1 << out_bit_impuls_UF) != 0) and flag_yau_control:
j = 1 if i == 2 else 0
frame = Constants.Frame.VARIABLE if i == 2 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (out_blank & (1 << out_bit_blank_MODUL) != 0) and flag_yau_control:
j = 1 if i == 3 else 0
frame = Constants.Frame.CONSTANT if i == 3 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (out_imp & (1 << out_bit_impuls_MODUL) != 0) and flag_yau_control:
j = 1 if i == 3 else 0
frame = Constants.Frame.VARIABLE if i == 3 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (out_blank & (1 << out_bit_blank_FGOZ) != 0) and flag_yau_control:
j = 1 if i == 4 else 0
frame = Constants.Frame.CONSTANT if i == 4 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
elif (out_imp & (1 << out_bit_impuls_FGOZ) != 0) and flag_yau_control:
j = 1 if i == 4 else 0
frame = Constants.Frame.VARIABLE if i == 4 else Constants.Frame.WORK
set_frame(CONTROL_FRAME[i], frame)
node_ems_g.text = Constants.EMS_G[i][j]
node_ems_g.modulate = [Color.RED, Color.GREEN][j]
#set_frame(CONTROL_FRAME[i], frame)
#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 dec2bin(decimal_value, number_bit):
#var binary_string = ''
#var count = number_bit
#while(count >= 0):
#var temp: int = decimal_value >> count
#binary_string += '%d' % (temp & 1)
#count -= 1
#return binary_string
func _on_prd_select() -> void:
$TabContainer.current_tab = 1
$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 = 0
$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
#$TabContainer/ControlPanel/control_dev.visible = toggled_on
#$TabContainer/ControlPanel/Controlpanel.visible = toggled_on
func _on_emsg_select() -> void:
$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 send_array: Array = []
var address_port_wr = 0x122
var ports_wr: Dictionary = {address_port_wr : meta.get_meta('litera')} ## СИ2, СИ4, СИ6 = 0x30, СИ3, СИ5, СИ7 = 0x31, СИ1 = 0x2F
Network.send_array.append(ports_wr)
ports_wr = {}
address_port_wr = 0x128
ports_wr[address_port_wr] = 0x4000 if toggled_on else 0x0
Network.send_array.append(ports_wr)
func _on_read_isa_pressed() -> void:
Network.flag_read_isa = true