Files
PRD_TU_MP550/monitoring.gd

177 lines
8.5 KiB
GDScript
Raw Permalink 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 Panel
const yau_devices: Array[Dictionary] = [
{'name': 'ПРД-Н1', 'addr': '10.1.1.11', 'port': 50011},
{'name': 'ПРД-Н2', 'addr': '10.1.1.21', 'port': 50021},
{'name': 'ПРД-Н3', 'addr': '10.1.1.31', 'port': 50031},
{'name': 'ПРД-Н4', 'addr': '10.1.1.41', 'port': 50041},
{'name': 'ПРД-В1', 'addr': '10.1.1.12', 'port': 50012},
{'name': 'ПРД-В2', 'addr': '10.1.1.22', 'port': 50022},
{'name': 'ПРД-В3', 'addr': '10.1.1.32', 'port': 50032},
{'name': 'ПРД-В4', 'addr': '10.1.1.42', 'port': 50042},
{'name': 'ПРД-К1', 'addr': '10.1.1.13', 'port': 50013},
{'name': 'ПРД-К2', 'addr': '10.1.1.23', 'port': 50023},
{'name': 'ПРД-К3', 'addr': '10.1.1.33', 'port': 50033},
{'name': 'ПРД-К4', 'addr': '10.1.1.43', 'port': 50043}
]
func _ready() -> void:
for device in yau_devices:
$select_device.add_item(device['name'])
## Включаем обработку событий мыши
$select_device.mouse_filter = Control.MOUSE_FILTER_PASS
$select_device.gui_input.connect(_on_select_device_gui_input)
Network.connect('yau_receive', Callable(self, '_on_parse_packet_yau_07'))
Network.connect('yau_status_line', Callable(self, '_on_yau_status'))
func _on_select_device_item_selected(index: int) -> void:
if index == 0:
# Обработка выбора "NONE"
$addr.text = "Устройство не выбрано (NONE)"
Network.send_array = []
Network.ip_address_yau = ''
Network.ip_port_yau = 0
elif index > 0 and index - 1 < yau_devices.size():
var device: Dictionary = yau_devices[index - 1]
var changed_addr_yau: String = device['addr']
var changed_port_yau: int = device['port']
$addr.text = "Адрес: %s" % changed_addr_yau
Network.send_array = []
Network.ip_address_yau = changed_addr_yau
Network.ip_port_yau = changed_port_yau
else:
print("Неверный индекс: ", index)
func _on_select_device_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton:
var mouse_event: InputEventMouseButton = event
if mouse_event.pressed:
if mouse_event.button_index == MOUSE_BUTTON_WHEEL_UP:
# Прокрутка вверх
var current_index = $select_device.selected
if current_index > 0:
$select_device.select(current_index - 1)
$select_device.item_selected.emit(current_index - 1)
elif mouse_event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
# Прокрутка вниз
var current_index = $select_device.selected
if current_index < $select_device.item_count - 1:
$select_device.select(current_index + 1)
$select_device.item_selected.emit(current_index + 1)
func _on_parse_packet_yau_07(packet_form_yau_07: PackedByteArray) -> void:
#print_debug('in _on_parse_packet_yau_07')
socket_status_ems_g(packet_form_yau_07)
parser_power_um(packet_form_yau_07)
parser_temperature_um(packet_form_yau_07)
dkm(packet_form_yau_07)
var receive_yau_counter: Array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
func _on_yau_status(addr: String):
var count_packets_await: int = 20
var status_yau_list = $status_yau_list.get_children()
var status_label = $status_yau
if addr.is_empty():
# Сброс состояния, если адрес пуст (нет связи)
for label in status_yau_list:
label.text = ''
status_label.modulate = Color.CRIMSON
status_label.text = 'ЯУ-07Б: нет связи'
return
status_label.text = '' # Убираем статус, если есть сигнал от ЯУ-07Б
# Обновляем счетчики
for i in Constants.ADDRESSES.size():
var address_match = (Constants.ADDRESSES[i][1] == addr)
receive_yau_counter[i] = 0 if address_match else (receive_yau_counter[i] + 1) & 0xFFF
# Обновляем статусы элементов
for i in status_yau_list.size():
var label = status_yau_list[i]
var address_info = Constants.ADDRESSES[i]
label.text = address_info[0]
label.modulate = Color.AQUAMARINE if receive_yau_counter[i] < count_packets_await else Color.DARK_GRAY # Если счетчик >= count_packets_await, помечаем серым, иначе — аквамарином
## Отображение статуса входа/выхода от ЭМС-Г
func socket_status_ems_g(packet_form_yau_07: PackedByteArray) -> void:
var count_sockets: int = 16
var in_blank: int = packet_form_yau_07.decode_u16(Constants.DataIndices.IN_BLANK_PRD)
var in_impulse: int = packet_form_yau_07.decode_u16(Constants.DataIndices.IN_IMPULS_PRD)
var out_blank: int = packet_form_yau_07.decode_u16(Constants.DataIndices.OUT_BLANK_PRD)
var out_impulse: int = packet_form_yau_07.decode_u16(Constants.DataIndices.OUT_IMPULS_PRD)
process_sockets_input(in_blank, in_impulse, count_sockets)
process_sockets_output(out_blank, out_impulse, count_sockets)
func process_sockets_input(in_blank: int, in_impulse: int, count: int):
var group_socket_status: Array = get_tree().get_nodes_in_group("input_socket_status")
for i in count:
var frame_type = Constants.Frame.WORK
if (in_blank & (1 << i)) != 0:
frame_type = Constants.Frame.CONSTANT
elif (in_impulse & (1 << i)) != 0:
frame_type = Constants.Frame.VARIABLE
set_frame(group_socket_status[i], frame_type)
func process_sockets_output(out_blank: int, out_impulse: int, count: int):
for i in count:
var group_socket_status: Array = get_tree().get_nodes_in_group("output_socket_status")
var frame_type = Constants.Frame.WORK
if (out_blank & (1 << i)) != 0:
frame_type = Constants.Frame.CONSTANT
elif (out_impulse & (1 << i)) != 0:
frame_type = Constants.Frame.VARIABLE
set_frame(group_socket_status[i], frame_type)
func set_frame(node: Node, val: int): node.set_frame(val)
## Значения температуры и мощнсти от УКП
func parser_power_um(data_from_yau_07: PackedByteArray) -> void:
var array_power_1 = get_tree().get_nodes_in_group("power")
for i_pow in range(6): ## Мощность от УКП_1
var power_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * i_pow)
array_power_1[i_pow].text = '%d' % power_ukp_1
var array_power_2 = get_tree().get_nodes_in_group("power")
for i_pow in range(6): ## Мощность от УКП_2
if len(data_from_yau_07) > Constants.DataIndices.POWER_UKP_2 + 2 * i_pow:
var power_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_2 + 2 * i_pow)
array_power_2[i_pow+6].text = '%d' % power_ukp_2
#if len(data_from_yau_07) > Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * 7:
#var power_ukp_3 = data_from_yau_07.decode_u16(Constants.DataIndices.POWER_UKP_1 + 2 * 7)
#var temperature_ukp_3 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * 7)
#var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_3) * Constants.TEMP + 3
#node_select3.set_node_text(0, 1, '%d' % power_ukp_3)
#node_select3.set_node_text(1,1, '%d °С' % TMP)
func parser_temperature_um(data_from_yau_07: PackedByteArray) -> void:
var array_temperature = get_tree().get_nodes_in_group("temperature")
for i_tmp in range(6): ## Температура от УКП_1
var temperature_ukp_1 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_1 + 2 * i_tmp)
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_1) * Constants.TEMP + 3
array_temperature[i_tmp].text = '%d °С' % TMP
for i_tmp in range(6): ## Температура от УКП_2
if len(data_from_yau_07) > Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * i_tmp:
var temperature_ukp_2 = data_from_yau_07.decode_u16(Constants.DataIndices.TEMPERATURE_UKP_2 + 2 * i_tmp)
var TMP = Constants.CONST_MIN_TEMP + (Constants.MAXIMUM_CODE_ADC - temperature_ukp_2) * Constants.TEMP + 3
array_temperature[i_tmp+6].text = '%d °С' % TMP
func dkm(data_from_yau_07: PackedByteArray)-> void:
var local_dkm = data_from_yau_07.decode_u8(Constants.DataIndices.DKM)
$DKM_grid/DKM.text = 'DKM: ' + str(local_dkm)