Актуальная версия PRD_TU_MP550, что на полигоне

This commit is contained in:
TotMaxim
2025-11-09 16:49:16 +03:00
parent e202a21162
commit 8a87cc70f6
13 changed files with 5138 additions and 56 deletions

176
monitoring.gd Normal file
View 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)