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/table_ukp_1 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/table_ukp_2 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 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,7)) 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]) ## Заполненение списка направления луча for key in Constants.RAY_DICT: $TabContainer/PRD/Grid/Ray_set.add_item(key) $TabContainer/PRD/Grid/Ray_set2.add_item(key) draw_panel_prd(Constants.ADDRESSES[0][3]) $TabContainer/PRD/Grid/Zapret.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Grid/Zapret)) $TabContainer/PRD/Grid/Zapret2.connect('toggled', Callable(self, '_on_zapret').bind($TabContainer/PRD/Grid/Zapret2)) $TabContainer/PRD/Grid/Ray_set.connect('item_selected', Callable(self, '_on_btn_ray')) $TabContainer/PRD/Grid/Ray_set2.connect('item_selected', Callable(self, '_on_btn_ray2')) 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')) func draw_panel_prd(mode) -> void: for node_path in Constants.NODE_MAP: var index = Constants.NODE_MAP[node_path] var node = get_node(node_path) if node: var value = node.get("text") if value != null: node.text = Constants.SIGNS_PRD[mode][index] else: node.fname = Constants.SIGNS_PRD[mode][index] ## From Network status about yau-07 func _on_yau_status(yau_status: bool) -> void: 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: Dictionary) -> void: var isa_data: Dictionary = {} for key in unit_isa_ports.keys(): isa_data[key] = unit_isa_ports[key] if isa_data.has(0x122): var tmp = isa_data[0x122] isa_data.erase(0x122) 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)) if isa_data.has(0x106): $TabContainer/PRD/PSK/ray_1.material.set('shader_parameter/turn', 0.735 + 0.025 * isa_data[0x106]) if isa_data.has(0x108): $TabContainer/PRD/PSK2/ray_2.material.set('shader_parameter/turn', 0.735 + 0.025 * isa_data[0x108]) ## Рисует таблицу func draw_tabl(tbl: Node, 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) #node_select1.set_node_text(3, 0, '%d' % DKM) ## 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 node_power_ind[i].disabled = false else: node_power_ind[i].button_pressed = false node_power_ind[i].disabled = true ## УКП 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 _on_mfs_select() -> void: set_tab_and_buttons(3, 'select_fs') 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: int) -> void: var node_select_device = $TabContainer/PRD/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.on_command_change_device(meta) flag_mode = meta[2] draw_panel_prd(flag_mode) func fill_item(node: Node, i_column: int, i_row: int, arr: Dictionary, select: int = 0) -> void: 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]) ## Регулировка положением луча func _on_btn_ray(item_from_ray: int) -> void: Network.write_port_isa(0x106, item_from_ray) Network.read_port_isa([0x106]) func _on_btn_ray2(item_from_ray: int) -> void: Network.write_port_isa(0x108, item_from_ray) Network.read_port_isa([0x108])