Актуальная версия PRD_TU_MP550, что на полигоне
This commit is contained in:
176
monitoring.gd
Normal file
176
monitoring.gd
Normal file
@@ -0,0 +1,176 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user